草庐IT

asp.net - NoSQL DB for .NET 基于文档的数据库 (ECM)

coder 2023-11-05 原文

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




我正在编写一个基本的 Multi-Tenancy SaaS ECM 解决方案。每个客户端都有自己的数据库/数据存储实例,但 .Net 应用程序是单个实例。这些文档几乎是只读的(即 tiff 或 PDF 的图像存档)

到目前为止,我一直在使用 MSSQL,但后来开始认为这在 NoSQL DB(例如 MongoDB、CouchDB)中可能是可行的。基本前提是它存储文档,每个文档都有自己的特定索引。每个租户可以有多种文档类型。

例如一个租户可能有一个发票类型,其中包含客户 ID、发票编号和发票日期。另一个租户可能有一份申请表,其中包含成员编号、申请编号、成员姓名和申请日期。

到目前为止,我已经使用了 Sharepoint(使用?)使用的旧方法,并创建了一个包含 int_field_1、int_field_2、date_field_1、date_field_2 等的文档表。然后,我有了一个存储客户的“映射”表特定的索引名称,以及将映射到的数据库字段。由于文档量的原因,我避免了数据库中的键值对模型。

这样,我们可以在一个表中支持多种文档类型,并从中获得相当高的性能,并允许自定义文档类型搜索(即用户选择一种文档类型,然后他们会看到一个搜索字段列表) .

但是,NoSQL DB 可能会使这变得更简单,因为我不需要担心对文档进行非规范化。但是,我只是担心文档周围的其余数据。我们针对文档存储“ Action 历史”。这会跟踪 View 、是否有人从系统内通过电子邮件发送文档,以及其他“ future ”功能(例如传真)。

我们可以控制文档加载过程,因此我们可以操作数据,但需要将其放入文档存储中(例如分配唯一 ID)。用户不会添加自己的文档,因此我们不必担心 ACID 合规性,因为文档是相对静态的。

所以,我想我的问题是:

  • 是否适合 NoSQL DB
  • MongoDB 是 Asp.Net 的最佳选择吗(我看到了 Raven 和 Velocity,但它们仍然是测试版)
  • 我可以为每个文档存储一个键,然后使用这个键将操作历史记录存储在 MSSQL DB 中吗?我不需要加入,如果一个人点击文档的“查看历史记录”。
  • 两者之间的性能比较(NoSQL DB 与非规范化的“文档”表)

  • 单个租户每月最多可处理 200,000 个新文档。我当前的 SQL DB 扩展计划涉及在达到特定阈值时将 SQL DB 移动到集群中,然后查看分区和索引结构。

    最佳答案

    回答:

  • 对于面向文档的部分,可能对于整个事情,nosql 解决方案应该可以正常工作。
  • 我玩过并听说过关于 mongodb 的好消息,并且可能会首先推荐它用于 .net 项目。
  • 对于面向文档的部分,性能应该比sql数据库优秀。对于较小的规模,它应该是等价的,但是以后横向扩展的能力将是一个巨大的好处。
  • 关于asp.net - NoSQL DB for .NET 基于文档的数据库 (ECM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671423/

    有关asp.net - NoSQL DB for .NET 基于文档的数据库 (ECM)的更多相关文章

    1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

      作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

    2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

      我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

    3. ruby - 如何模拟 Net::HTTP::Post? - 2

      是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

    4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

      有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

    5. ruby - Net::HTTP 获取源代码和状态 - 2

      我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

    6. ruby - 我如何添加二进制数据来遏制 POST - 2

      我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

    7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

      无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

    8. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

      导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

    9. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

      matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

    10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

      本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

    随机推荐