我正在编写基本的多租户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移入群集,然后查看分区和索引结构。
几乎所有人都告诉我,一旦你开始在数据库中动态生成字段,你应该转移到NoSQL数据库。另外,请注意,你不必为任何事情使用NoSQL,你总是可以做一个混合解决方案。 – Earlz 2010-04-19 22:56:31
他们的混合解决方案是我的计划。 我只是对人们对性能,维护以及如何将混合解决方案连接在一起感兴趣(例如,在文档加载时分配一个任意文档ID字段,然后在SQL表中使用此ID字段?或者如果我应该依赖一个NOSQL生成的密钥 – Dane 2010-04-19 23:55:22
我不明白这个要求你是说“基本前提是它存储文件,每个文件都有自己的特定索引”是什么意思?我们在谈论自由文本索引或索引元数据?或者当你说“索引”时,你的意思是“元数据”? – Theo 2010-04-20 11:01:49