从实体框架到MongoDB的端口

mar*_*ker 5 poco relational-database mongodb nosql entity-framework-4.1

我正计划从实体框架4.0移植到MongoDb.有哪些最佳实践可以最大限度地减少影响,因为项目具有社交网络功能,因此维护一个复杂的关系数据库.因此,如果我们使用关系数据库,性能应该是一个问题.

我们在项目中使用了域层(使用POCO),存储库模式和DTO映射.此外,决策的优缺点是什么?同时,它如何影响我的域层实现?

Ian*_*cer 2

如果您想“最小化影响”,您需要在 MongoDB 中创建一个与 SQL 相同的数据库。由于数据库中没有联接,您需要进行多次读取才能完成查询。这本身并不算太糟糕,因为 MongoDB 确实很快,但显然它还有其他问题(并发性等)。

但是,如果您想完全转向 NOSQL 方式做事,您可能无法“最小化影响”,那么您需要对存储内容的方式、访问方式进行重大更改它以及您更新它的方式。

存储:您可能会在数据库中创建非规范化的文档,并且更接近“ViewModels”而不是“Models”。例如,您可以将子记录的计数存储在父记录中,以便您可以显示它而无需加载它们或对它们进行计数。

Access:您最终可能会使用 Map-Reduce 对数据库进行某些查询,这与传统查询的思维方式非常不同。

更新:很可能您的更新方法会有所不同,以便利用许多细粒度的 MongoDB 更新功能,例如$inc. 您可以提供一个更细粒度的 Ajax 回调来更新单个值,而不是回发一些大型视图模型,然后将其应用到您的模型,然后更新数据库。查看 CQRS,了解有关如何考虑更新模型与查询模型的更多想法。