Python 键值数据库选项
我查看了键值数据库,并对提供以下内容的备选方案感到好奇:Python 键值数据库选项,python,c,database,redis,key-value,Python,C,Database,Redis,Key Value,我查看了键值数据库,并对提供以下内容的备选方案感到好奇: 而不是作为单独的进程启动外部数据库引擎,然后通过以下方式连接到该引擎: redisContext*c=redisConnect(“127.0.0.1”,6379) 是否有一种替代方案可以选择将数据库代码作为库包含,并将数据作为二进制文件加载?例如,给定binarymyDbBinary和命令: $myBinary--filter=filterOptions db.dat 二进制文件myBinary不会启动单独的数据库进程并连接到其端口,而是
redisContext*c=redisConnect(“127.0.0.1”,6379)代码>
是否有一种替代方案可以选择将数据库代码作为库包含,并将数据作为二进制文件加载?例如,给定binarymyDbBinary
和命令:
$myBinary--filter=filterOptions db.dat
二进制文件myBinary
不会启动单独的数据库进程并连接到其端口,而是myBinary
将密钥(和散列)从文件db.dat
加载到内存(或类似的VM排列),然后可以对其进行过滤(使用filterOptions
,无论它们是什么)并执行键/散列查找
有这样的软件吗?SQLite是一个进程内数据库。它是关系型的,但您可以在其中构建简单的键值存储。它还包含在Python标准库中。不,Redis作为一个进程而不是一个库工作。目前没有办法这样做。您可以使用类似(更像redis)的替代方案 Kyoto支持C和Python的哈希表 或者,您可以使用,但它与您要求的完全不同。您可以尝试一下。它是一个无模式内存“数据库”,模糊了表和列表之间的界限。littletable不使用模式,它从添加到给定表的对象的属性推断查询和联接列。所有查询和联接都以新表的形式返回结果(而不是引入人工的ResultSet或QuerySet集合),从而可以轻松地链接各种查询、联合、联接和筛选器。字段可以通过索引键轻松索引和检索-如果索引是唯一索引,则返回单个匹配对象或引发KeyError;如果索引不是唯一的,则返回具有给定键的对象的新表(可能为空)。表还支持许多list-ish属性,如iter和len,可以用作for循环和生成器表达式中的标准Python集合 littletable包含一个通用的DataObject类,它与namedtuple非常相似。但是任何类型的对象都可以插入到littletable中 下面是一个演示/示例:
从SVN获取最新版本:我建议使用pickleDB 您可以这样使用它:
$ pip install pickledb
>>> import pickledb
>>> db = pickledb.load('test.db', False)
>>> db.set('key', 'value')
>>> db.get('key')
'value'
>>> db.dump()
True
SQLite确实有相当多的内置和隐式锁管理。因此,您可以让多个进程共享一个SQLite数据存储(文件),并且仍然可以获得合理的ACID保证(甚至通过NFS),而无需显式地编写自己的锁管理和争用处理代码。(请注意,并发支持将非常弱,仅限于您平台的fnctl/flock性能;但对于低流量情况,它仍然是合理的,您可以在以后扩展到PostgreSQL或MySQL等)。您可以在标准库中使用任何*dbm模块(包括“anydbm”)。您必须自己进行文件锁定和争用处理。但是,除此之外,这是一个非常简单的选择。