键值数据库选项

3
我看过键值数据库Redis,但对以下替代方案很感兴趣:
  1. 不需要启动一个外部数据库引擎作为单独的进程,再通过 C 接口 进行连接:

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

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

    $ myBinary --filter=filterOptions db.dat

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

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

  3. 哈希支持,即键维护一个哈希表作为值。

有类似的软件吗?


您可以使用标准库中的任何*dbm模块(包括"anydbm")。您需要自己进行文件锁定和争用处理。但是,除此之外,这是一个非常简单的选项。 - Jim Dennis
4个回答

4
不,Redis是作为进程而非库来运行的。目前没有这样做的方法。您可以使用类似Kyoto Cabinet的替代方案(更像Redis)。
Kyoto支持C和Python的哈希表。
或者您可以使用SQLite,但它与您所要求的有很大不同。

SQLite确实具有相当可观的内置和隐式锁管理。因此,即使在NFS上,您也可以拥有多个进程共享单个SQLite数据存储(文件),而无需明确编写自己的锁管理和争用处理,仍然可以获得合理的ACID保证。(请注意,并发支持将非常弱,仅限于您平台的fnctl / flock性能;但对于低流量情况仍然是健全的,并且您可以向PostgreSQL或MySQL等数据库发展)。 - Jim Dennis

0

SQLite 是一种内嵌式数据库。它是关系型数据库,但你也可以在其中构建简单的键值存储。它还包含在 Python 标准库中。


0
你可以试一下 littletable。 它是一个无模式的内存“数据库”,模糊了表和列表之间的界限。 littletable 不使用架构,它从添加到给定 Table 的对象的属性中推断查询和连接列。所有查询和连接都将结果作为新的Table返回(而不是引入人工ResultSet或QuerySet集合),使得轻松链接各种查询、联合、连接和过滤成为可能。字段可以轻松地进行索引,并通过索引键进行检索 - 如果索引是唯一索引,则返回单个匹配对象或引发 KeyError;如果索引不是唯一的,则返回具有给定键的对象的新Table(可能为空)。 表还支持许多类似于列表的属性,例如iter和len,并且可以在for循环和生成器表达式中用作标准Python集合。 littletable 包括一个通用的 DataObject 类,它非常类似于namedtuple。但是任何类型的对象都可以插入到 littletable 表格中。
这里是一个演示/示例: 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

0
我建议使用pickleDB。
你可以这样使用:
$ pip install pickledb

>>> import pickledb

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

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

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

>>> db.dump()
True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接