跳转到主要内容

模仿Python原生容器的持久性数据结构

项目描述

Rack包含PersistentSetPersistentDict类,可以用于使用集合/字典语义存储数据,同时将内容持久化到海量存储。

当您想使用可能太大而无法适合RAM的集合或映射,或者希望它们持久化到磁盘时(无论是在线(在它们使用时)还是一次(用于加载数据)),可以使用此库。

它使用LMDB或SQLite3作为底层引擎

  • LMDB是一个小型进程内的“非关系型数据库”,速度非常快。

  • SQLite3是一个小型进程内的SQL数据库,数据存储在单个文件中,具有明确定义的磁盘布局,并且相当节省空间。

内容在访问时序列化/反序列化为Python原生对象,因此这些结构显然比内存中的对应结构慢。

用法

像使用set一样使用rack.set*.PersistentSet,像使用dict一样使用rack.dict*.PersistentDict,除了

  • 在构造时

    • 它们需要接受一个name参数,表示底层LMDB数据库的位置(前缀)。

    • 对于LMDB,如果需要指定非默认哈希器(默认为SHA256),则可以接受一个hash参数。

    • 它们可以接受一个 serdes 参数,您可以使用该参数指定非默认的序列化/反序列化器(默认为 Python 的 marshal)。

  • 使用方法

    • 它们必须与上下文管理器一起使用,这是因为由于 Python 的垃圾回收特性,__init__ / __del__ 不足以正确管理数据库的打开/关闭生命周期。

    • 创建新容器(例如,联合、复制)的操作可以接受一个可选的名称参数,允许指定新数据库的位置。

如果您知道您存储的元素大小有限(小于 LMDB 最大键大小),则可以使用 rack.set_small.PersistentSet,它比非小型化版本快约 2 倍,因为减少了一次间接。如果键太大,将发生 lmdb.BadValsizeError 异常。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

rack-0.1.4.tar.gz (9.9 kB 查看哈希值)

上传时间

构建分发

rack-0.1.4-py3-none-any.whl (10.1 kB 查看哈希值)

上传时间 Python 3

支持者: