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

为真正的大型字典(Python)在shelve和sqlite之间进行选择,python,sqlite,dictionary,persistence,shelve,Python,Sqlite,Dictionary,Persistence,Shelve,我有一个大型Python的浮点数向量字典(150k个向量,每个10k维),无法加载到内存中,因此我必须使用两种方法之一将其存储在磁盘上,并在适当的时候检索特定的向量。向量将被创建和存储一次,但可能会被读取多次(数千次)——因此有效读取非常重要。在使用shelve模块进行了一些测试之后,我倾向于相信sqlite对于这类任务将是一个更好的选择,但是在我开始编写代码之前,我想听听更多关于这方面的意见。。。例如,除了这两个我不知道的选项之外,还有其他选项吗 现在,假设我们同意最好的选择是sqlite,另

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


现在,假设我们同意最好的选择是sqlite,另一个问题与表的确切形式有关。我正在考虑使用一种细粒度结构,它的行的形式为
vector\u key,element\u no,value
,以帮助高效分页,而不是将向量的所有10k元素存储到同一个记录中。我非常感谢您对这个问题的任何建议。

如果您想要sqlite3,那么如果您使用类似的ORM,那么您可以轻松地扩展和使用其他后端数据库

Shelve更多的是一个“玩具”,而不是实际用于生产代码

你们谈论的另一点叫做规范化,我个人从来都不擅长规范化,应该为你们解释一下


正如在处理数字向量时,另外一个注释显示了shelve与sqlite3的性能故障一样,您可能会找到一个有趣的替代方法。

嗨,我在您建议的链接之前见过,问题是它只测试写,而不是我最关心的读。至于规范化,我上面建议的两种形式都已经是正常形式了,我只是想知道这两种形式中哪一种对阅读最有效——我想我可以对此进行一些测试。无论如何,谢谢你的回答:)嗨,这看起来确实是一个有趣的选择,我会仔细看看。谢谢你的建议:)