好吧,这是一个开放式的问题。
迁移到现有软件的 NoSQL 数据存储
现有的关系技术通常有很多经验和知识。当您的应用程序运行良好时,它可能不值得付出努力。但是,当您对当前解决方案有无法解决的问题时,这是一种选择。
将严重依赖关系的数据存储迁移到 NoSQL 是否有意义?
好吧,您必须考虑这三种技术(文档数据库、关系数据库管理系统、对象数据库)彼此之间非常不同。
- 在关系世界中,您可以规范化数据并在运行时将它们连接在一起。只要数据量不大,这很好用。问题通常从这里开始:当您拥有大量规范化数据时,您需要进行大量连接,这会消耗大量性能。当然,对象和表之间的映射可能非常棘手。
- 在对象数据库中,每个对象都是单独存储的,“关系”以指针的形式存储。因此,当对象 A 具有对对象 B 的引用时,对象数据库将存储此引用。因此,要检索“关系”,不需要连接操作。因此,“关系”是廉价的。总之,对象数据库非常擅长处理关系。
- 在像 MongoDB 这样的文档数据库中,完整的对象图存储为文档。文档数据库与文档级别一起工作。所以这里没有真正的“关系”。您通常只存储/加载文档。因此,当您可以对场景进行建模以使您的大部分操作仅在单个文档上工作时,它会非常高效且简单。
这是一篇很好的博客文章,它比较了 MongoDB(文档数据库)和 db4o(对象数据库)的设计差异
最后,您的模型应该适合您的数据库。例如,不要尝试将模型用于关系数据库并将其 1:1 存储在文档数据库中。另请参阅Ayende 关于对象数据库建模的博客。
.NET (4.0) 对 MongoDB 或 MongoDB 对 .NET 4.0 的支持是什么样的?
盖茨副总裁已经为 MongoDB 回答了这个问题。.NET 4.0 版本的 db4o 正在开发中。同时 3.5 版本在 4.0 框架上也能正常工作。
我可以指望 MongoDB 的丰富代码生成工具,例如 EF 向导、L2SQL 向导等吗?
对于 MongoDB 和 db4o,您都不需要生成代码。你的类是模式。您只需存储对象,其余的由数据库处理。另请参阅盖茨副总裁的回答
因为到目前为止我所读到的,NoSQL 最适合文档存储,更简单的对象模型。
那么范围是相当大的。从真正简单的键值存储到更高级的文档数据库、面向列的数据库、图形数据库和对象数据库。
当然,当您存储类似文档的数据(例如博客软件)时,文档数据库的工作非常出色。而图形和对象数据库擅长处理极其复杂的数据结构。