在shelve和sqlite之间选择真正的大字典(Python)

时间:2012-06-05 11:22:08

标签: python sqlite dictionary persistence shelve

我有一个庞大的Python字典向量(150k向量,每个10k维度)的浮点数无法加载到内存中,因此我必须使用这两种方法之一将其存储在磁盘上并检索特定的向量在适当的时候。矢量将被创建并存储一次,但可能会被读取很多次(数千次) - 因此有效读取非常重要。在使用搁置模块进行一些测试之后,我倾向于认为sqlite对于这种任务来说是更好的选择,但在我开始编写代码之前,我想听到更多关于此的意见...例如,还有其他任何除了那两个我不知道的选项?

现在,假设我们同意最佳选项是sqlite,另一个问题与表的确切形式有关。我正在考虑使用具有vector_key, element_no, value形式的行的细粒度结构来帮助有效分页,而不是将向量的所有10k元素存储到同一记录中。我真的很感激有关这个问题的任何建议。

2 个答案:

答案 0 :(得分:10)

你想要sqlite3,那么如果你使用像sqlalchemy那样的ORM,你就可以轻松扩展并使用其他后端数据库。

Shelve更像是一种“玩具”,而不是生产代码中的实际用途。

你所说的另一点叫做规范化,我个人从未如此擅长this应该为你解释。

正如额外注释this显示搁置与sqlite3

中的性能失败一样

答案 1 :(得分:3)

在处理数字向量时,您可能会发现PyTables是一个有趣的替代方案。