跳转到主要内容

磁盘上的简单字典

项目描述

Build Status Coverage Status Version Status Downloads

一个会写入磁盘的字典。

Chest像字典一样工作,但它可以将内容写入磁盘。这在以下两种情况下很有用

  1. Chest可以容纳比内存更大的数据集

  2. Chest是持久的,因此可以保存并用于以后使用

工作原理

Chest在两个位置存储数据

  1. 内存中的字典

  2. 在chest拥有的文件系统中一个目录内

当用户向箱子中添加内容时,内存中的字典会逐渐填满。当箱子在内存中存储的数据超过了期望的数量(参见 available_memory= 关键字参数)时,它会将箱子中更大的内容写入磁盘作为 pickle 文件(pickle 的选择是可以配置的)。当用户请求某个值时,箱子会先检查内存中的存储,然后检查磁盘上的存储,并在必要时将值加载到内存中,同时将其他值推送到磁盘。

Chest 是一个简单的项目。它的目的是提供一个简单的接口,以帮助存储和检索 numpy 数组。然而,它的设计和实现对此用例是无关的,因此可以在各种其他情况下使用。

通过最小的工作,Chest 可以扩展为作为多个进程之间的通信点。

已知缺陷

Chest 被设计用来存放一定数量的较大 numpy 数组。它不处理大量的小型键值对用例(尽管可以稍作努力)。特别是 Chest 存在以下不足:

  1. Chest 不是多进程安全的。我们应在 .keys 文件周围建立一个文件锁。

  2. Chest 不支持对磁盘上的变量进行修改。

许可协议

新 BSD 许可协议。请参阅 许可协议

安装

chest 通过 conda 提供。

conda install chest

chest 位于 Python 包索引(PyPI)上。

pip install chest

示例

>>> from chest import Chest
>>> c = Chest()

>>> # Acts like a normal dictionary
>>> c['x'] = [1, 2, 3]
>>> c['x']
[1, 2, 3]

>>> # Data persists to local files
>>> c.flush()
>>> import os
>>> os.listdir(c.path)
['.keys', 'x']

>>> # These files hold pickled results
>>> import pickle
>>> pickle.load(open(c.key_to_filename('x')))
[1, 2, 3]

>>> # Though one normally accesses these files with chest itself
>>> c2 = Chest(path=c.path)
>>> c2.keys()
['x']
>>> c2['x']
[1, 2, 3]

>>> # Chest is configurable, so one can use json, etc. instead of pickle
>>> import json
>>> c = Chest(path='my-chest', dump=json.dump, load=json.load)
>>> c['x'] = [1, 2, 3]
>>> c.flush()

>>> json.load(open(c.key_to_filename('x')))
[1, 2, 3]

依赖关系

Chest 支持 Python 2.6+ 和 Python 3.2+,拥有一个共同的代码库。

它目前依赖于 heapdict 库。

这是一个轻量级的依赖。

项目详情


下载文件

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

源分发

chest-0.2.3.tar.gz (9.6 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面