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

时间:2010-04-19 22:48:16

标签: asp.net mongodb database-design couchdb nosql

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

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

e.g。一个租户可能有发票类型,其中包含客户ID,发票编号和发票日期。另一个租户可能有一个申请表,其中包含会员编号,申请编号,会员姓名和申请日期。

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

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

但是,NoSQL DB可能会使这更简单,因为我不需要担心文档的非规范化。但是,我刚刚关注文档的其他数据。我们存储针对该文档的“行动历史”。这可以跟踪视图,无论是否有人通过电子邮件从系统内部发送文档,以及其他“未来”功能(例如传真)。

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

所以,我猜我的问题:

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

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

1 个答案:

答案 0 :(得分:2)

答案:

  1. 对于面向文档的部分,可能对整个事物而言,nosql解决方案应该可以正常工作。
  2. 我和mongodb一起玩过,并且听过很好的事情,并且可能会首先推荐一个.net项目。
  3. 对于面向文档的部分,与sql数据库相比,性能应该非常出色。对于较小规模,它应该是等效的,但是稍后扩展的能力将是一个巨大的好处。