我有一个包含大约 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 中,那会是一个坏主意吗?
我研究了很多不同的解决方案,但它们都关注单个数据框的大小而不是单独数据框的数量。我的数据框相对较小,但它们很多,我需要多次阅读它们。