2010-04-19 36 views
2

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

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

例如一个承租人可能有一个发票类型,其中包含客户ID,发票号码和发票日期。另一个租户可能有一个申请表,其中有会员编号,申请编号,会员名称和申请日期。

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

通过这种方式,我们可以在一个表中支持多种文档类型,并获得相当高的性能,并允许自定义文档类型搜索(即用户选择文档类型,然后将其呈现为列表搜索字段)。

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

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

所以,我的问题,我想:

  • 是一个的NoSQL数据库般配
  • 是MongoDB的最好的Asp.Net(我看见乌鸦和速度,但他们仍然有点试用版)
  • 我可以为每个文档存储一个密钥,然后使用此密钥将操作历史存储在MSSQL DB中?我不需要进行连接,如果一个人点击文档上的“查看历史记录”就会出现这种情况。
  • 将如何表现两者之间的比较(NoSQL的DB VS非规范化的“文档”表)

卷将月产量可达20万页新的文件单个租户。我目前使用SQL DB的扩展计划涉及在达到某些阈值时将SQL DB移入群集,然后查看分区和索引结构。

+0

几乎所有人都告诉我,一旦你开始在数据库中动态生成字段,你应该转移到NoSQL数据库。另外,请注意,你不必为任何事情使用NoSQL,你总是可以做一个混合解决方案。 – Earlz 2010-04-19 22:56:31

+0

他们的混合解决方案是我的计划。 我只是对人们对性能,维护以及如何将混合解决方案连接在一起感兴趣(例如,在文档加载时分配一个任意文档ID字段,然后在SQL表中使用此ID字段?或者如果我应该依赖一个NOSQL生成的密钥 – Dane 2010-04-19 23:55:22

+0

我不明白这个要求你是说“基本前提是它存储文件,每个文件都有自己的特定索引”是什么意思?我们在谈论自由文本索引或索引元数据?或者当你说“索引”时,你的意思是“元数据”? – Theo 2010-04-20 11:01:49

回答

1

答:

  1. 对于面向文档的部分,并有可能对整个事情,一个NoSQL的解决方案应该很好地工作。
  2. 我玩过并且听说过关于mongodb的好东西,并且可能会首先推荐它用于.net项目。
  3. 对于面向文档的部分,与sql数据库相比,性能应该很好。对于规模较小的企业来说,它应该是等价的,但是稍后向外扩展的能力将会是一个巨大的收益。