使用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或其他“数据库抽象设备”?
答案 0 :(得分:21)
嗯,是的,Object- 关系映射器是MongoDB的冗余,因为MongoDB不是关系数据库,它是一个面向文档的数据库。
因此,您不是使用SQL,而是使用JSON编写查询。除非你真的,真的想要编写原始JSON,而不是Linq,那么你仍然想要使用映射器。如果你不想创建与MongoDB本身的耦合,那么你不想传递实际的Document
对象,你想将它们映射到真正的POCO。
使用像MongoDB这样的面向文档的数据库,映射非常容易,因为你有嵌套文档而不是关系,但这并不意味着它完全消失了。它只是意味着你已经用一种“阻抗不匹配”代替了一种不同的,略微不那么戏剧性的不匹配。
答案 1 :(得分:2)
我认为MongoDb上的“ORM”非常有用,不仅可以将对象“序列化”和“反序列化”到数据库中(Norm似乎做得很好),而且还可以使执行聚合查询更加容易。
如果“ORM”可以生成MapReduce作业以进行分组和检测重复项,那就太好了。有些人编写了代码来自动将sql语句转换为mapreduce作业:http://rickosborne.org/blog/index.php/2010/02/19/yes-virginia-thats-automated-sql-to-mongodb-mapreduce/
答案 2 :(得分:1)
看看昆德拉:https://github.com/impetus-opensource/Kundera, ORM over mongodb,cassandra,HBase。
答案 3 :(得分:1)
取决于NoSQL数据库提供的驱动程序的成熟程度。此链接讨论ORM工具与NoSQL数据库的相关性: http://xamry.wordpress.com/2012/08/10/sqlifying-nosql-are-orm-tools-relevant-to-nosql/
答案 4 :(得分:1)
另一个解决方案是PlayOrm,它可以在必要时使用它的Scalable-SQL语言进行连接(只需在普通SQL中添加前缀以添加分区信息)。
答案 5 :(得分:0)
你真正需要的是一个串行器/解串器来实现这个功能。
Norm做得很好。使用直接的poco对象更容易,只需用一行代码将它们保存到mongo。
他们称Norm为ORM,但它实际上只是字典mongo包装器的poco。
orm只是这些行动的额外仪式。如果您的数据操作被抽象到存储库中,那么它将成为一个非问题,因为转换到另一个后备存储是每个对象的对象,基础。