Mongodb NoSQL不可知持久层

Mongodb NoSQL不可知持久层,mongodb,database,nosql,Mongodb,Database,Nosql,在我看来,归根结底,大多数NoSQL数据库都位于其核心键/值存储区,这意味着人们应该能够构建一个与NoSQL数据库无关的层 该层将只使用CRUD操作(put、set、delete),但将公开更高级的功能,并且您将能够以最小的努力切换底层数据库,无论它是Mongo、Redis、Cassandra等 这样的建筑对很多人来说有价值吗?它已经存在了吗? 谢谢建造这样的东西几乎是不可能的 作为一个思想实验,我建议您以Redis、MongoDB和Cassandra为例,设计这样一个层的API 这些NoSQL

在我看来,归根结底,大多数NoSQL数据库都位于其核心键/值存储区,这意味着人们应该能够构建一个与NoSQL数据库无关的层

该层将只使用CRUD操作(put、set、delete),但将公开更高级的功能,并且您将能够以最小的努力切换底层数据库,无论它是Mongo、Redis、Cassandra等

这样的建筑对很多人来说有价值吗?它已经存在了吗?


谢谢

建造这样的东西几乎是不可能的

作为一个思想实验,我建议您以Redis、MongoDB和Cassandra为例,设计这样一个层的API

这些NoSQL解决方案有着截然不同的特点,它们有着不同的用途。尝试为他们构建一个公共API就像为SQL数据库、电子表格文档、纯文本文件和gmail构建一个公共API

虽然你肯定能想出一些东西,但它将毫无意义

不同的需求需要不同的工具。

有和

表示非结构化查询语言。它是一种针对JSON、半结构化和文档数据库的开放查询语言


NuoDB是一个弹性可伸缩的SQL/ACID数据库,它使用键/值模型进行存储。它现在运行在AmazonS3(以及标准文件系统)之上,原则上可以支持任何KV存储。目前,它的访问方法是SQL,但如果这是一个常见的需求,系统可以很容易地支持其他数据访问语言和方法


Barry Morris,NuoDB Inc.

PlayOrm是另一个基于cassandra的解决方案,但有一个用于hbase、mongodb等的可插拔接口。20/30年前,他们对RDBMS说了同样的话,但越来越多的特性集融合在一起。我想你会在nosql数据库中看到很多,因为它们采用了彼此的特性集

目前,它们的功能集大不相同,但其核心是一组非常相似的操作

PlayOrm实际上构建了它的查询语言,可以在任何noSQL提供程序上工作,因此它的s-SQL可伸缩SQL可以与cassandra、hadoop等一起工作

后来,,
Dean

我不认为OP想要在NoSQL数据库之上构建SQL层。他只是想在上面为CRUD操作构建某种API。我的意思是,如果你把自己限制在基本CRUD上,你就做错了。这将MongoDB转变为具有持久性的memcache。Redis也一样。您将无法使用这些解决方案的所有功能。重点是什么?@SergeiTulentsev我部分同意“你做错了”,但也有很多问题可以用CRUD式抽象解决,它不需要任何特定NoDB的特定功能,但仍然受益于NoSQL而不是关系数据库。最后,这些都是键值存储。每个NoDB的驱动程序都可以1)优化CRUD以适应其DB,2)提供一种方法来插入API,以便在NoDB之间切换比当前更容易。此外,这种抽象并没有限制对需要的NoDB驱动程序的直接访问。@nicerobot:等等,当你开始直接使用底层驱动程序时(比如,使用Redis的哈希命令),你的应用程序就不再是“可移植的”。现在你不能仅仅从应用程序下交换存储。我还没有找到一个这样的用例。基本上就是nicerobot所说的。在项目开始时,您可能只对CRUD感到满意,而不想承诺任何一个NoSQL k/v商店,因为它们都还很年轻。最后,如果您觉得任何一个都有最好的性能或最好的“特定”功能,您可能会决定坚持使用该功能,并偏离CRUD接口。有趣。似乎是一个灵活的SQL对应项,没有连接可以帮助采用基于文档的k/v存储,并将兼容性责任转移到DB开发人员自己身上。还有PlayOrm,它有一个可移植的S-SQL语言,可以在cassandra、hadoop、mongodb等上使用。因此,您不会被cassandra的CQL语言所束缚。(如果你想锁定卡桑德拉,CQL也将在稍后添加)。是我还是这甚至不试图回答他的问题?