首先,我对数据库几乎一无所知,所以如果我的问题的答案是“读一本关于数据库的书”,请不要犹豫告诉我。
我在世界各地的许多不同地点收集了大量的 1 环境时间序列数据。所有时间序列都有不同的长度(例如,一个站点可能有一年的数据,另一个站点可能有两年的数据等),但它们通常采用相同的格式(相同的列标题;未在特定时间测量的变量列网站填写N / A)。此外,每个数据集都可以使用包括站点描述,使用的仪器等元数据。
我想要做的是将这些测量值存储在我可以使用Python轻松访问的数据库中。我想用Pandas来分析它们,所以如果有一种方法可以使用数据帧而不是每列的数组,那将会很棒。将每列作为单独的数组存储并在之后构造数据帧可能不会有太大问题,但是,如果这更有意义(例如,删除N / A列)和/或更容易实现。此外,访问速度优先于文件大小。
最好有一个可以处理查询的数据库,例如“从所有temperature
网站提供grassland
时间序列”,“plot wind speed
对time of day
所有European
次测量以及类似请求{{1}}。
当然我并没有要求你提供一个完整的解决方案,但我会非常感谢你指出正确的方向。我在找什么类型的DB? Python可以使用吗?我正在研究PyTables,但我不确定它是否适合我的任务的层次数据库(或者无论如何还是其他的)?提前谢谢。
1 确切地说,我还没有,但这就是我将在不久的将来合作的内容。这可能不是你们有些人称之为“大集合”的东西。整个数据库需要保存少于1000个表,每个表少于100列,少于100k行。
答案 0 :(得分:1)
我建议使用HDF5。它是一种磁盘文件格式,支持层次结构,数组,注释等元数据。它通过h5py和Pandas通过PyTables很好地集成了Python / NumPy。见这里:http://pandas.pydata.org/pandas-docs/stable/io.html#io-tools-text-csv-hdf5
现在,您可能会说“那不是数据库!”当然不是。但是您提供的示例查询以及我自己对时间序列数据的体验表明您不需要传统的数据库系统,因为您将对客户端的数据进行大量处理,并且数量很多您要存储的数据可以加载到商用机器上的内存中。
HDF5支持压缩(如果您只关心访问速度,可能不需要这样)。它易于从多种语言中读取,包括C ++,Python,R等。它也非常成熟,经过了久经考验。
我会考虑将每个网站的数据存储在一个文件中;这可以使基本管理任务更容易。但是如果您希望将所有内容都放在一个文件中,HDF5也有内部层次结构。根据您的访问模式,您可能也会做出不同的决定,例如每月将所有内容存储在一个文件中。一旦你尝试了一段时间,你可能会很好地理解什么布局最有意义。如果您稍后添加行或列(根据您存储数据的方式,其中一个或另一个将是最佳效率),还可以通过“分块”进行权衡。