键值数据库选项
我查看了一个叫做Redis的键值数据库,想了解有没有其他类似的选择,能提供以下功能:
我不想像现在这样,先启动一个外部数据库引擎作为一个单独的进程,然后再连接上去,比如通过C接口:
redisContext *c = redisConnect("127.0.0.1", 6379);
有没有什么替代方案,可以把数据库代码作为一个库包含进来,并且可以把数据作为文件加载到程序里?比如,假设有一个二进制文件叫做
myDbBinary
,然后用这个命令:$ myBinary --filter=filterOptions db.dat
这个
myBinary
就不会启动一个单独的数据库进程并连接到它的端口,而是直接从文件db.dat
中加载键(和哈希)到内存中(或者类似的虚拟机安排),然后可以根据filterOptions
(无论是什么)进行过滤和查找键/哈希。需要有C和Python接口来处理数据和存储指令。
支持哈希,也就是说一个键可以把一个哈希表作为它的值。
有没有这样的软件存在呢?
4 个回答
SQLite是一种内嵌式数据库。它是关系型的,但你也可以用它来构建简单的键值存储。它还包含在Python的标准库中。
你可以试试 littletable。它是一个不需要固定结构的内存“数据库”,模糊了表格和列表之间的界限。littletable 不使用固定的结构,它会根据添加到某个表中的对象的属性来推断查询和连接的列。所有的查询和连接都会返回一个新的表(而不是引入一个人工的结果集或查询集),这样就可以轻松地将各种查询、合并、连接和过滤操作串联起来。字段可以很容易地被索引和通过索引键检索——如果索引是唯一的,那么会返回单个匹配的对象,或者抛出 KeyError;如果索引不是唯一的,则会返回一个包含给定键的对象的新表(可能是空的)。表还支持许多类似列表的属性,比如迭代和长度,并且可以在 for 循环和生成器表达式中作为标准的 Python 集合使用。
littletable 包含一个通用的 DataObject 类,这个类和 namedtuple 非常相似。但任何类型的对象都可以插入到 littletable 的表中。
从 SVN 获取最新版本: https://littletable.svn.sourceforge.net/svnroot/littletable
不,Redis是作为一个进程运行的,而不是作为一个库。目前没有办法做到这一点。你可以考虑使用其他的选择,比如Kyoto Cabinet(它更像Redis)。
Kyoto支持C和Python的哈希表。
另外,你也可以使用SQLite,但它和你问的东西差别挺大的。