有没有像SQLite那样简单的NoSQL数据库?

有没有像SQLite那样简单的NoSQL数据库? 我正在寻找一个轻量级的数据库来保存一个简单的桌面应用程序的一小组数据。 我仍然可以使用SQLite,但更喜欢更多的面向对象的方法,因为我的应用程序不处理太多的数据。

UnQLite是一个进程内软件库,它实现了一个独立的,无服务器的,零configuration的事务性NoSQL数据库引擎。

我认为Berkeley DB是这里的经典select。

Berkeley DB(BDB)是一个软件库,为键/值数据提供高性能的embedded式数据库。 Berkeley DB是用C语言编写的,C ++,C#,PHP,Java,Perl,Python,Ruby,Tcl,Smalltalk和许多其他编程语言的API绑定。 BDB将任意键/数据对存储为字节数组,并支持单个键的多个数据项。 Berkeley DB不是一个关系数据库。

您可能还想关注CouchDB和SQLite开发人员的UnQL 。

东京内阁和它的继任者京都内阁是最好的。

京都内阁是pipe理数据库的例程库。 数据库是一个包含logging的简单数据文件,每个数据文件都是一对关键字和一个值。 每个密钥和值都是可变长度的串行字节。 二进制数据和string都可以用作键和值。 每个密钥在数据库中必须是唯一的。 没有数据表和数据types的概念。 logging按散列表或B +树组织。

我想build议CouchbaseLite 。 这是一个非常轻量级的NoSQL数据库,可以在移动设备上以embedded式方式使用,甚至可以提供事件处理,视图,修订,同步,冲突解决,过滤,订阅等等。

前几天我发现了UnQLite ,但似乎并不支持索引,也没有适配器。

听起来像y_serial的工作;-)

下面是描述:“在几行代码中使用Serialization + persistance ::,将Python对象压缩并注释到SQLite中,然后稍后按关键字按顺序检索它们,而不用任何SQL。”数据库最有用的“标准”模块,用于存储无模式数据。”

有关更多详细信息,请参见http://yserial.sourceforge.net/

RavenDB在这里是一个有趣的select(公平的披露 – 我只是玩了一下 – 没有用在一个真正的项目呢)。

我觉得最有趣的function是它自动将你的对象模型映射到持久存储。 在RDMS世界里,唯一能做到这一点的工具(就我所知)就是Fluent NHibernate。

在开发过程中自动映射可以是一个巨大的节省时间,特别是如果你有一个复杂的对象模型,或快速变化的需求。

我个人正在寻找一些适用于Python 3的东西。我看到接受的答案是UnQLite , Python绑定目前不适用于Python 3。

但是, TinyDB看起来是一个很好的select。

从技术上讲,如果你不需要像function一样的SQL来select特定的项目,你可以使用简单的序列化,并保存每个对象作为单独的文件。

例如使用C#lang + psuedo来缩短

List<Customer> customers = ...//some data here JsonSerlializer.Save(customers, "c:\...\customers.json"); //you can use .db extension if you will //load back List<Customer> customers = JsonSerlializer.Load("c:\...\customers.json"); 

一个对象在文件系统上的一个文档,或者你可以使一个大的有效载荷对象来保存所有的数据并保存到一个文件,只要考虑应用程序的工作量,如果你使用大量的数据。

现在,回答“是否有任何NoSQL数据库像SQLite一样简单”我不知道因此我在这里问同样的问题:)但真正的简单的configuration文件,或一些对象或列表,本地json文件应该是刚够。

编辑:这可能是promissing http://unqlite.org/

“UnQLite是一个进程内软件库,它实现了一个自包含的,无服务器的,零configuration的事务性NoSQL数据库引擎。UnQLite是一个类似于MongoDB,Redis,CouchDB等的文档存储数据库,也是一个标准的Key / Value存储类似于BerkeleyDB,LevelDB等“

你可以检查一些oodb(面向对象的数据库)

  • gem很好
  • Versant的

另一个解决scheme是LevelDB 。 主页说:

LevelDB是一个在Google上编写的快速键值存储库,提供从string键到string值的有序映射。

特征

  • 键和值是任意的字节数组。
  • 数据按键存储。
  • 调用者可以提供自定义比较函数来覆盖sorting顺序。
  • 基本操作是Put(键,值),Get(键),Delete(键)。
  • 可以在一个primefaces批次中进行多项更改。
  • 用户可以创build一个瞬态快照来获得一致的数据视图。
  • 数据支持向前和向后的迭代。
  • 数据是使用Snappy压缩库自动压缩的。
  • 外部活动(文件系统操作等)通过虚拟接口进行中继,以便用户可以自定义操作系统交互。
  • 源代码包含有关如何使用该库的详细文档。

限制

  • 这不是一个SQL数据库。 它没有关系数据模型,不支持SQL查询,也不支持索引。
  • 一次只有一个进程(可能是multithreading的)可以访问特定的数据库。
  • 图书馆没有内置的客户端 – 服务器支持。 需要这种支持的应用程序将不得不围绕库自己的服务器。

stsdb是一个易于使用的。 所有你需要使用的是它可以创build的客户端库和一个数据库文件。

我在ac#/ wpf应用程序中使用它。 但是这不适合开发阶段。 因为你不能修改已经存储的模型。

但是它很容易,快速和小巧。 许多职业选手都值得

在某些情况下(如果你不需要/有一些必要条件作为索引),你可以使用文件系统本身作为DB:文件名/path作为键值和文件内容。 JSON是有效的内存,所以你可以使用parsing器来序列化/反序列化数据。

确保不要在同一个文件夹下存储太多的文件(数千个)(使用散列将文件分割成不同的文件夹)。

这个解决scheme的真正问题(除了缺less某些function外)是文件logging将被存储到4KB的块中,所以10个字节的文件将使用4KB,4097个字节的文件将使用8KB等等(在至less在大多数文件系统上),所以对于大量的小logging来说磁盘效率并不是很高。

好处是:快速,轻量级,因为使用更less的ram,并且没有添加进程间连接器瓶颈,经过ram r / w高速cachingcertificate并透明地进行了操作系统优化。 你可以使用锁,你甚至可以通过远程安装分发。

最后,如果您的生产平台是Windows机器,我将避免使用此解决scheme,但是也可以。

你可以试试rabaDB 。 这是一个python的NoSQL无模式ORM的SQLite与非常轻的接口。

Friendly是一种使用Ruby + SQLite作为后端的NOSQL数据库。 这是一种黑客,但它也很好。 我写了一个示例Sinatra应用程序, 在这里演示它。