关于使用 python 存储简单时间序列数据,我无法解决我的特定问题(可能是因为选项太多!)。
我想要做的就是存储和访问一个非常长的 16 位整数的一维列表。我什至不一定需要存储索引,因为它可以隐式地从样本的顺序中导出。但是我需要一个快速的追加操作。
问题是我希望大约 100GB 的数据需要以 100M 样本/秒的速度即时记录到磁盘(我已经测试过,我的 SSD 设置可以处理 400- 500MB/秒写入),并且只有约 14GB 的 RAM。我最初的想法基本上是将它以 100M 行的 block 的形式写入单个 CSV 文件,但这似乎会浪费大量空间(16 位整数作为字符串最多可以占用 5 个字节,而不是 2 个字节)。其他想法包括对 block 使用 msgpack/npz/raw 二进制文件,虽然我很乐意自己实现它,但我正在尝试找出是否已经存在解决方案。
由于我事先并不知道我需要的确切样本数量,我认为这意味着 numpy 的 memmap 不合适。
后来,我还需要在两个索引之间对数据进行切片处理,而不需要将整个数据集加载到内存中。这不会在录制过程中发生,只会在之后发生。
我认为 pandas HDFStore 是我所追求的,但我不确定一些最佳实践。
具体来说,
- 给定一个非常简单的数据格式,大量节点(每个 block 一个节点)与在 pandas 中使用 HDFStore 的单个节点相比有什么影响?如果前者更好,那么好的 block 大小是多少?
- HDFStores 是在 pandas 中进行磁盘支持的高性能顺序读写的最佳方式吗?随机访问并不重要。
- 我的问题出在 Pandas 领域吗?在这种情况下, Pandas 对我来说似乎有点过分了。
如有任何其他提示或建议,我们将不胜感激。真的,我需要的是 python 中的列表对象,但它也支持快速分块进出磁盘。
最佳答案
我公司的伦敦小组创建了北极。它使用 numpy 字节数组,用 lz4 压缩,并分成 block 发送到 mongodb。在波士顿,我们正在围绕此构建其他功能,但我们发现它效果很好。
它具有出色的性能,可以一次性将所有东西都吞掉。
https://github.com/manahl/arctic
看看它是否适合您。
关于python - 在 python 中简单(但大)读/写时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557709/