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


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

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


8807
2018-06-05 11:22


起源



答案:


你想要sqlite3,那么如果你使用ORM就好了 SQLAlchemy的 然后,您可以轻松扩展并使用其他后端数据库。

Shelve更像是一个“玩具”,而不是生产代码中实际有用的东西。

你要谈的另一点叫做规范化,我个人从来都不是很擅长 这个 应该为你解释一下。

就像一个额外的说明 这个 显示shelve vs sqlite3中的性能故障


10
2018-06-05 11:32



嗨,我在你建议的链接之前看过,问题是它只测试写作 - 而不是阅读哪个是我最关心的问题。至于规范化,我上面建议的两种形式都已经处于正常状态,我只是想知道哪两种形式的读取效率最高 - 我想我可以对此进行一些测试。无论如何,谢谢你的答案:) - dkar


答案:


你想要sqlite3,那么如果你使用ORM就好了 SQLAlchemy的 然后,您可以轻松扩展并使用其他后端数据库。

Shelve更像是一个“玩具”,而不是生产代码中实际有用的东西。

你要谈的另一点叫做规范化,我个人从来都不是很擅长 这个 应该为你解释一下。

就像一个额外的说明 这个 显示shelve vs sqlite3中的性能故障


10
2018-06-05 11:32



嗨,我在你建议的链接之前看过,问题是它只测试写作 - 而不是阅读哪个是我最关心的问题。至于规范化,我上面建议的两种形式都已经处于正常状态,我只是想知道哪两种形式的读取效率最高 - 我想我可以对此进行一些测试。无论如何,谢谢你的答案:) - dkar


在处理数字向量时,您可能会发现 PyTables 一个有趣的选择。


3
2018-06-05 11:36



嗨,这似乎确实是一个有趣的选择,我会更好地看一下。感谢您的建议 :) - dkar