键值数据库选项

3 投票
4 回答
2444 浏览
提问于 2025-04-17 09:04

我查看了一个叫做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. 支持哈希,也就是说一个键可以把一个哈希表作为它的值。

有没有这样的软件存在呢?

4 个回答

0

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

0

你可以试试 littletable。它是一个不需要固定结构的内存“数据库”,模糊了表格和列表之间的界限。littletable 不使用固定的结构,它会根据添加到某个表中的对象的属性来推断查询和连接的列。所有的查询和连接都会返回一个新的表(而不是引入一个人工的结果集或查询集),这样就可以轻松地将各种查询、合并、连接和过滤操作串联起来。字段可以很容易地被索引和通过索引键检索——如果索引是唯一的,那么会返回单个匹配的对象,或者抛出 KeyError;如果索引不是唯一的,则会返回一个包含给定键的对象的新表(可能是空的)。表还支持许多类似列表的属性,比如迭代和长度,并且可以在 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

4

不,Redis是作为一个进程运行的,而不是作为一个库。目前没有办法做到这一点。你可以考虑使用其他的选择,比如Kyoto Cabinet(它更像Redis)。

Kyoto支持C和Python的哈希表。

另外,你也可以使用SQLite,但它和你问的东西差别挺大的。

撰写回答