我有一个需要加载到内存中的人员记录数据库,因为它们会以各种顺序被多次访问。到目前为止,我只是为每条记录实例化了一个 Python 对象。但是现在我有 8,000,000 条记录可以使用,我没有足够的内存来使用这种简单的方法。
在一个平面文件中,每条记录最多只占用 500 字节,没有压缩(压缩时更少)。所以整个数据集在磁盘上小于 4 GB。但是,一旦 Python 将每条记录作为对象加载,我估计将使用 40 GB 的 RAM。我的机器只有 12 GB 的 RAM。
我正在考虑将 C 与我的 Python 程序集成,并将每个记录存储为 C 中的结构。这听起来像是一个好的解决方案吗?或者有没有更好的方法在 Python 中紧凑地存储记录,不需要与 C 接口?
更新:我使用的数据库是 Hbase (http://hbase.apache.org/),在 Hadoop 上运行。通过 Thrift (http://thrift.apache.org/) 连接到 Python。
更新 2:我需要以许多不同的顺序访问数据库中的所有记录,这些顺序是在运行时确定的。我想,在每次迭代中,我可以对数据库进行 8,000,000 次查询,但我认为这可能会很慢。
更新 3:我认为没有一种存储行的好方法,以便可以按顺序访问它们。我在下一次迭代中需要记录的顺序(我的程序是一个迭代机器学习算法),由上一次迭代期间线性代数投影到数据矩阵的特定特征向量上确定。