我有一个大型的、稀疏的多维查找表,其中单元格包含大小从34 kB到大约10 MB不等的数组(基本上是存储在此bin/bucket/单元格中的一个或多个元素)。我的原型的尺寸为30**5=24,300,000,其中只有4,568个单元格是非空的(所以它是稀疏的)。原型非空单元格包含大小在34 kB到7.5 MB之间的结构化数组。556 MB的原型很容易小到足以容纳内存,但生产版本将大得多;可能是100-1000次(很难估计)。这种增长主要是由于增加了维度,而不是由于单个单元中包含的数据。我的典型用例是写一次(或很少),经常读。
- 我目前正在使用Python字典,其中键是元组,即
db[(29,27,29,29,16)]
是一个结构化的numpy.ndarray
,大约1mb。然而,随着它的增长,这将不适合内存。 一个自然的和容易实现的扩展将是Python - 我认为
tables
是快速的,特别是写一次,读经常用例,但我不认为它适合我的数据结构。 - 考虑到我总是只需要通过元组索引访问,一种非常简单的存储它的方法是有一个包含数千个文件名的目录,如
entry-29-27-29-29-16
,然后以某种格式(NetCDF, HDF5, npy…)存储numpy.ndarray
对象。 - 我不确定经典数据库是否可以工作,考虑到条目的大小变化很大。
shelve
模块。据我所知,您可能想看看令人惊叹的pandas包,因为它为您所描述的稀疏数据结构提供了特定的功能。
另外,虽然这篇stackoverflow的文章没有特别提到稀疏数据,但它很好地描述了使用pandas
来处理大数据,这可能会让你感兴趣。