如何存储一个大的,稀疏的,多维的表,其中单元格包含不同数量的元素?

时间:2015-07-23 18:47:37

标签: python database numpy multidimensional-array data-structures

我有一个大的,稀疏的多维查找表,其中单元格包含大小从34 kB到大约10 MB(基本上存储在此bin / bucket / cell中的一个或多个元素)的数组。我的原型尺寸为30 ** 5 = 24,300,000,其中只有4,568个单元非空(因此它很稀疏)。原型非空单元格包含大小介于34 kB和7.5 MB之间的结构化数组。在556 MB,原型很小,足以适应内存,但生产版本将更大;也许100-1000次(很难估计)。这种增长主要是由于尺寸增加,而不是由于单个细胞中包含的数据。我的典型用例是写一次(或很少),经常阅读。

  • 我目前正在使用Python字典,其中键是元组,即db[(29,27,29,29,16)]是一个大约1 MB的结构化numpy.ndarray。但是,随着它的增长,这将不适合记忆。
  • 一个自然且易于实现的扩展将是Python shelve模块。
  • 我认为tables速度很快,特别是对于一次写入,经常阅读用例,但我认为它不适合我的数据结构。
  • 考虑到我将始终只需要通过元组索引进行访问,一种非常简单的存储方法就是拥有一个包含数千个名为entry-29-27-29-29-16的文件的目录,然后存储{{1}某种格式的对象(NetCDF,HDF5,npy ......)。
  • 考虑到条目的大小差别很大,我不确定经典数据库是否有效。

如上所述存储数据结构的方法是什么,它具有高效的存储和快速的数据检索?

1 个答案:

答案 0 :(得分:0)

根据我的理解,您可能希望查看令人惊叹的pandas包,因为它具有您所描述的sparse data structure的特定工具。

此外,尽管此stackoverflow post并未专门针对稀疏数据,但对于使用pandas进行BIG数据这是一个很好的描述,这可能很有用。

祝你好运!