如何在不将其加载到内存的情况下更新已保存的映射?

How to update a saved mapping without loading it into memory?

我正在维护一些需要不断更新的映射。

这些映射现在作为 pickle 序列化 dict 实现。

更新过程是这样的:

  1. pickle 文件加载到内存中,这样我就可以访问 dict
  2. dict 进行任何更新并再次序列化。

此解决方案的问题是它可能会消耗大量内存用于大 dicts。

我研究过其他解决方案,如 shelveleveldb,但它们都可以生成许多文件而不是一个文件,这在保存到键值存储等系统时更加复杂。

要在不将整个映射读入内存的情况下读取和修改映射,您需要将其作为索引结构存储在某种数据库中。有许多具有良好 Python 绑定的数据库将数据作为文件存储在磁盘上,因此您不必担心数据库服务器或单独的索引文件。 Sqlite 几乎肯定是最常见的选择。但是,正如您在评论中指出的那样,SQL 数据库的全部功能对于您的目的可能是不必要的,因为您实际上只需要存储键值对。

那么,根据您的具体要求,我可能会推荐 vedis。它是一个单文件、键值数据库,可以支持非常大的数据库大小(文档声称它可以处理 TB 级),它是事务性的并且线程安全的。