键值数据库选项

时间:2011-12-27 13:30:54

标签: python c database redis key-value

我查看了键值数据库Redis,并对可提供以下内容的替代方案感到好奇:

  1. 而不是将外部数据库引擎作为单独的进程启动,然后连接到它,例如通过C interface

    redisContext *c = redisConnect("127.0.0.1", 6379);

    是否有替代方案可以选择将数据库代码包含为库,并将数据作为文件加载到二进制文件中?例如,给定二进制myDbBinary和命令:

    $ myBinary --filter=filterOptions db.dat

    二进制文件myBinary不会启动单独的数据库进程并连接到其端口,而是myBinary将文件db.dat中的密钥(和哈希)加载到内存中(或类似的虚拟机安排)然后它可以过滤(使用filterOptions,无论它们是什么)并执行密钥/散列查找。

  2. 数据和存储指令的C和Python接口。

  3. 哈希支持,我的意思是密钥将哈希表维护为值。

  4. 是否存在这样的软件?

4 个答案:

答案 0 :(得分:4)

不,Redis是一个进程,而不是一个库。目前无法这样做。您可以使用Kyoto Cabinet之类的替代品(更像redis)。

京都有对C和Python的哈希表支持。

或者你可以使用SQLite但它与你提出的要求完全不同。

答案 1 :(得分:0)

SQLite是一个进程内数据库。它是关系型的,但您可以在其中构建简单的键值存储。它也包含在Python标准库中。

答案 2 :(得分:0)

您可以尝试littletable。它是一个无模式的内存“数据库”,模糊了表和列表之间的界限。 littletable不使用模式,它从添加到给定表的对象的属性中推断查询和连接列。所有查询和连接都将结果作为新表返回(而不是引入人工ResultSet或QuerySet集合),从而可以轻松链接各种查询,联合,联接和过滤器。可以通过索引键轻松索引和检索字段 - 如果索引是唯一索引,则返回单个匹配对象或引发KeyError;如果索引不唯一,则返回具有给定键的对象的新表(可能为空)。表还支持许多list-ish属性,例如iter和len,并且可以用作for循环和生成器表达式中的标准Python集合。

littletable包含一个通用的DataObject类,它与namedtuple非常相似。但是任何类型的对象都可以插入到一个小表中。

以下是演示/示例:http://littletable.svn.sourceforge.net/viewvc/littletable/trunk/littletable_demo.py?revision=32&content-type=text%2Fplain

从SVN获取最新版本:https://littletable.svn.sourceforge.net/svnroot/littletable

答案 3 :(得分:0)

我建议pickleDB。

您可以这样使用它:

$ pip install pickledb

>>> import pickledb

>>> db = pickledb.load('test.db', False)

>>> db.set('key', 'value')

>>> db.get('key')
'value'

>>> db.dump()
True