跳转到主要内容

可追加的键值存储

项目描述

Build Status Version Status

键值字节存储,具有可追加的值

Partd存储键值对。值是原始字节。我们在旧值上追加。

Partd在洗牌操作方面表现卓越。

操作

PartD有两个主要操作,追加获取

示例

  1. 创建一个由目录支持的Partd

    >>> import partd
    >>> p = partd.File('/path/to/new/dataset/')
  2. 将键字节对追加到数据集

    >>> p.append({'x': b'Hello ', 'y': b'123'})
    >>> p.append({'x': b'world!', 'y': b'456'})
  3. 获取与键关联的字节

    >>> p.get('x')         # One key
    b'Hello world!'
    
    >>> p.get(['y', 'x'])  # List of keys
    [b'123456', b'Hello world!']
  4. 销毁partd数据集

    >>> p.drop()

就这些。

实现

我们可以通过内存字典来备份部分数据

>>> p = Dict()

对于大量数据或需要在进程间共享数据,我们通过文件目录来备份部分数据。这使用基于文件的锁来实现一致性。

>>> p = File('/path/to/dataset/')

然而,这可能在许多小写入操作中失败。在这些情况下,您可能希望用一个部分数据备份另一个,保持缓冲部分数据中固定最大量的数据。当空间不足时,这将把第一个部分数据中较大的元素写入第二个部分数据。

>>> p = Buffer(Dict(), File(), available_memory=2e9)  # 2GB memory buffer

您可能还想让许多分布式进程一致地写入单个部分数据。这可以通过服务器来实现。

  • 服务器进程

    >>> p = Buffer(Dict(), File(), available_memory=2e9)  # 2GB memory buffer
    >>> s = Server(p, address='ipc://server')
  • 工作进程

    >>> p = Client('ipc://server')  # Client machine talks to remote server

编码和压缩

一旦我们能够稳健且高效地向部分数据追加字节,我们就考虑压缩和编码。这通常可以通过Encode部分数据来实现,它接受三个函数,一个用于写入时应用,一个用于读取时应用,一个用于连接字节流。对于常见的数据和压缩格式,已经存在一些常见的配置。

我们希望在与部分数据交互时透明地压缩和解压缩数据。例如BZ2BloscZLibSnappy等对象存在,并将另一个部分数据作为参数。

>>> p = File(...)
>>> p = ZLib(p)

它们的工作方式与之前完全一样,压缩和解压缩是自动发生的。

Python列表、NumPy数组和Pandas数据框等常见数据格式也支持即用。

>>> p = File(...)
>>> p = NumPy(p)
>>> p.append({'x': np.array([...])})

这让我们可以忘记字节,而是以我们正常的数据类型进行思考。

组合

原则上,我们想要将这些选择组合在一起

  1. 写入策略:DictFileBufferClient

  2. 编码:PickleNumpyPandas、…

  3. 压缩:BloscSnappy、…

部分数据对象通过嵌套组合。在这里,我们创建一个部分数据,它将pickle编码的BZ2压缩字节直接写入磁盘

>>> p = Pickle(BZ2(File('foo')))

我们可以构建更复杂的系统,包括压缩、序列化、缓冲和远程访问。

>>> server = Server(Buffer(Dict(), File(), available_memory=2e0))

>>> client = Pickle(Snappy(Client(server.address)))
>>> client.append({'x': [1, 2, 3]})

项目详情


下载文件

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

源分布

partd-1.4.2.tar.gz (21.0 kB 查看哈希)

上传时间

构建分布

partd-1.4.2-py3-none-any.whl (18.9 kB 查看哈希)

上传时间 Python 3

支持者