在我的工作场所,我们偶然发现了我们需要创建一种库存应用程序的问题,该应用程序为每个对象存储不同类型的属性,并具有动态处理属性/列的功能,即我们不希望必须在每次现有对象的新属性时修改应用程序(例如,现在我们需要考虑蓝牙硬件!)或者当一个新对象完全出现时(现在我们需要考虑游戏手柄!)。这些对象当然必须是可读的和可编辑的。
虽然我们是传统的以SQL为中心的(Oracle,MySQL,MSSQL),但我并不反对以任何其他方式(比如NoSQL)执行此操作的可能性,我们从未处理过这种方式,并且对此一无所知。但是,我们需要使用ASP.NET MVC进行开发。
非常感谢任何指导。 :)
答案 0 :(得分:3)
实际上,您描述的问题可通过关系型dbms完全解决,但您的团队需要更多时间。我认为文档数据库是更好的选择。 RavenDB是一个很棒的文档数据库,它结合了关系文档和文档数据库的优点。它完全符合ACID标准,它有一个很棒的Linq提供商,它非常快,特别是最新版本。
所以我的建议是,你永远不会知道,直到你尝试它。到目前为止,我对ravendb唯一的问题是掌握索引。文档缺少一些重要的注释,我希望Ayende很快就能解决这个问题,否则就去做吧。
顺便说一下,你也可以尝试一下MongoDB。它不符合ACID,它也没有Linq提供程序,并且编写查询比RavenDB更难,因为你已经猜到了,但它是用C ++编写的,具有原子I / O操作并且非常快。答案 1 :(得分:1)
如果您的要求是存储和处理结构化数据(或者声音文件,图像等)并且您习惯使用Oracle,我建议您查看LOB和XMLType。 Oracle内置了对XML技术的支持(模式验证,xslt转换,二进制存储,xpath索引可能是感兴趣的领域)。