首页 > 解决方案 > 将 300 个短时间序列作为 pandas 数据帧远程存储和检索的最快方法

问题描述

我有一个包含大约 300 个 Pandas 时间序列的数组,每个时间序列不超过 6 列,不超过 10.000 行。

我需要将它们存储在可以从其他机器访问的单独的持久性机器中。其他机器会非常频繁地读取这些数据,我需要尽可能快地读取这些数据。

最初,我将每一行存储为 PostgreSQL 行。

然后我切换到arctic,如果我使用线程,性能提升确实令人印象深刻:

from multiprocessing.pool import ThreadPool
p = ThreadPool(300)

def read(i):
    return library.read(str(i)).data


dataframes = p.starmap(read, [0,1,2,3...])

我在这里发布了基准:https ://github.com/manahl/arctic/issues/814

北极基于 MongoDB,其中数据帧被腌制,然后使用唯一键存储和检索。

有了这个,我可以在 3 秒内从 Atlas 免费层 MongoDB 实例加载我的数据帧。

有什么办法可以更快地完成吗?

像 Feather 和 Parquet 这样的解决方案是否意味着只存储在文件系统上?如果是,如何在不影响读取性能的情况下远程共享此文件系统?如果我将腌制的数据框存储在 Postgres 中,那会是一个坏主意吗?

我研究了很多不同的解决方案,但它们都关注单个数据框的大小而不是单独数据框的数量。我的数据框相对较小,但它们很多,我需要多次阅读它们。

标签: pythonpandasparquetfeather

解决方案


推荐阅读