Python 以最快的方式远程存储和检索300个短时间序列作为数据帧
我有一个大约300个时间序列的数组,每个数组不超过6列,不超过10000行 我需要将它们存储在一个单独的持久性机器中,以便从其他机器访问。其他机器将非常频繁地读取这些数据,我需要尽快读取这些数据 最初,我将每一行存储为一个PostgreSQL行 然后我切换到,如果我使用线程,性能提升会非常令人印象深刻:Python 以最快的方式远程存储和检索300个短时间序列作为数据帧,python,pandas,parquet,feather,Python,Pandas,Parquet,Feather,我有一个大约300个时间序列的数组,每个数组不超过6列,不超过10000行 我需要将它们存储在一个单独的持久性机器中,以便从其他机器访问。其他机器将非常频繁地读取这些数据,我需要尽快读取这些数据 最初,我将每一行存储为一个PostgreSQL行 然后我切换到,如果我使用线程,性能提升会非常令人印象深刻: from multiprocessing.pool import ThreadPool p = ThreadPool(300) def read(i): return library.
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...])
我在这里发布了基准测试:
Arctic是基于MongoDB的,在MongoDB中数据帧被pickle,然后用一个唯一的密钥存储和检索
有了它,我可以在3秒钟内从一个Atlas免费层MongoDB实例加载我的数据帧
有什么方法可以更快地完成这项工作吗
像Feather和Parquet这样的解决方案是否意味着只存储在文件系统上?如果是,如何在不影响读取性能的情况下远程共享此文件系统?如果我将腌制的数据帧存储在Postgres中,那会是一个坏主意吗
我研究了很多不同的解决方案,但它们都关注单个数据帧的大小,而不是单独数据帧的数量。我的数据帧相对较小,但很多,我需要多次阅读所有数据帧