Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 键值数据库选项_Python_C_Database_Redis_Key Value - Fatal编程技术网

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)

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

    $myBinary--filter=filterOptions db.dat

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

  • C和Python与数据和存储指令的接口

  • 哈希支持,我的意思是一个键维护一个哈希表作为一个值


  • 有这样的软件吗?

    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”)。您必须自己进行文件锁定和争用处理。但是,除此之外,这是一个非常简单的选择。