使用NoSQL API的ORM是多余的吗?

使用MongoDB(我假设其他NoSQL数据库API值得他们的盐)查询数据库的方式比SQL简单得多。 没有繁琐的SQL查询可以生成等等。 例如,从mongodb-csharp获取:

using MongoDB.Driver; Mongo db = new Mongo(); db.Connect(); //Connect to localhost on the default port. Document query = new Document(); query["field1"] = 10; Document result = db["tests"]["reads"].FindOne(query); db.Disconnect(); 

ORM怎么能简化呢? 在一个体面的NoSQL API之上是否需要ORM或其他“数据库抽象设备”?

嗯,是的,对象关系映射器是MongoDB的冗余,因为MongoDB不是关系数据库,它是面向文档的数据库。

因此,您不是使用SQL,而是使用JSON编写查询。 除非你真的, 真的想写原始JSON,而不是Linq,那么你仍然想要使用mapper。 如果您不想为MongoDB本身创建耦合,那么您不希望传递实际的Document对象,而是希望将它们映射到真正的POCO。

面向文档的数据库(如MongoDB)的映射要容易得多,因为你有嵌套文档而不是关系,但这并不意味着它完全消失了。 它只是意味着你已经用一种类型的“阻抗不匹配”代替了一种不同的,略微不那么戏剧性的不匹配。

我认为MongoDb上的“ORM”非常有用,不仅可以将对象“序列化”和“反序列化”到db(Norm似乎做得很好),而且还可以使执行聚合查询更加容易。

如果“ORM”可以生成MapReduce作业以进行分组和检测重复项,那就太好了。 有些人编写了代码来自动将sql语句转换为mapreduce作业: http ://rickosborne.org/blog/index.php/2010/02/19/yes-virginia-thats-automated-sql-to-mongodb- MapReduce的/

看看昆德拉: https : //github.com/impetus-opensource/Kundera,ORM over mongodb,cassandra,HBase。

另一个解决方案是PlayOrm,它可以在必要时使用它的Scalable-SQL语言进行连接(只需在普通SQL中添加前缀以添加分区信息)。

取决于NoSQL数据库提供的驱动程序的成熟程度。 此链接讨论ORM工具与NoSQL数据库的相关性: http : //xamry.wordpress.com/2012/08/10/sqlifying-nosql-are-orm-tools-relevant-to-nosql/

所有你真正需要的是一个序列化器/解串器来使这项工作。

Norm做得很好。 使用直接poco对象更容易,只需用一行代码将它们保存到mongo即可。

他们称Norm为ORM,但它实际上只是字典mongo包装的poco。

一个orm只是这些行动的额外仪式。 如果您的数据操作被抽象到存储库中,那么它将成为一个非问题,因为转换到另一个后备存储是每个对象的对象,基础。