我查看了键值数据库Redis,并对可提供以下内容的替代方案感到好奇:
而不是将外部数据库引擎作为单独的进程启动,然后连接到它,例如通过C interface:
redisContext *c = redisConnect("127.0.0.1", 6379);
是否有替代方案可以选择将数据库代码包含为库,并将数据作为文件加载到二进制文件中?例如,给定二进制myDbBinary
和命令:
$ myBinary --filter=filterOptions db.dat
二进制文件myBinary
不会启动单独的数据库进程并连接到其端口,而是myBinary
将文件db.dat
中的密钥(和哈希)加载到内存中(或类似的虚拟机安排)然后它可以过滤(使用filterOptions
,无论它们是什么)并执行密钥/散列查找。
数据和存储指令的C和Python接口。
哈希支持,我的意思是密钥将哈希表维护为值。
是否存在这样的软件?
答案 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非常相似。但是任何类型的对象都可以插入到一个小表中。
从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