【问题标题】:Key-value database options键值数据库选项
【发布时间】:2012-01-28 12:47:36
【问题描述】:

我查看了键值数据库 Redis 并对可以提供以下功能的替代方案感到好奇:

  1. 而不是将外部数据库引擎作为单独的进程启动,然后连接到它,例如通过C interface:

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

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

    $ myBinary --filter=filterOptions db.dat

    二进制文件myBinary 不会启动单独的数据库进程并连接到其端口,而是myBinary 将文件db.dat 中的密钥(和哈希)加载到内存(或类似的VM 排列)中然后它可以过滤(使用filterOptions,无论它们是什么)并执行键/哈希查找。

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

  3. 哈希支持,我的意思是一个键将一个哈希表作为一个值来维护。

有这样的软件吗?

【问题讨论】:

  • 您可以使用标准库中的任何 *dbm 模块(包括“anydbm”)。您必须自己进行文件锁定和争用处理。但是,除此之外,这是一个非常简单的选择。

标签: python c database redis key-value


【解决方案1】:

SQLite 是一个进程内数据库。它是关系型的,但您可以在其中构建简单的键值对存储。它也包含在 Python 标准库中。

【讨论】:

    【解决方案2】:

    不,Redis 作为进程而不是库工作。目前没有办法这样做。您可以使用 Kyoto Cabinet 之类的替代方法(更类似于 redis)。

    Kyoto 支持 C 和 Python 的哈希表。

    您也可以使用SQLite,但这与您所要求的完全不同。

    【讨论】:

    • SQLite 确实有相当多的内置和隐式锁管理。因此,您可以让多个进程共享一个 SQLite 数据存储(文件),并且仍然可以获得合理的 ACID 保证(甚至通过 NFS),而无需明确编写自己的锁管理和争用处理代码。 (请注意,并发支持会很弱,仅限于您平台的 fnctl/flock 性能;但在低流量情况下它仍然是理智的,您可以稍后将其扩展到 PostgreSQL 或 MySQL 等)。
    【解决方案3】:

    你可以试试littletable。它是一个无模式的内存“数据库”,模糊了表和列表之间的界限。 littletable 不使用模式,它从添加到给定表的对象的属性中推断查询和连接列。所有查询和连接都将结果作为新表返回(而不是引入人工的 ResultSet 或 QuerySet 集合),从而可以轻松地链接各种查询、联合、连接和过滤器。可以通过索引键轻松索引和检索字段 - 如果索引是唯一索引,则返回单个匹配对象或引发 KeyError;如果索引不是唯一的,则返回具有给定键的对象的新表(可能为空)。表还支持许多列表属性,例如 iter 和 len,并且可以用作 for 循环和生成器表达式中的标准 Python 集合。

    littletable 包含一个通用的DataObject 类,它与namedtuple 非常相似。但是任何类型的对象都可以插入到 littletable Table 中。

    这是一个演示/示例: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】:

      我建议pickleDB。

      你可以这样使用它:

      $ pip install pickledb
      
      >>> import pickledb
      
      >>> db = pickledb.load('test.db', False)
      
      >>> db.set('key', 'value')
      
      >>> db.get('key')
      'value'
      
      >>> db.dump()
      True
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-25
        • 2013-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多