如何更新已保存的映射而不将其加载到内存中?

时间:2018-07-13 02:40:13

标签: python serialization leveldb

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

这些映射现在以pickle序列化的dict的形式实现。

更新过程如下:

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

此解决方案的问题在于,大型dict可能会占用大量内存。

我已经研究了其他解决方案,例如shelveleveldb,但是它们都可以生成许多文件而不是一个文件,而保存到键值存储之类的系统则更为复杂。

1 个答案:

答案 0 :(得分:0)

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

那么,根据您的特定要求,我可能会推荐vedis。它是一个单文件,键值数据库,可以支持非常大的数据库大小(文档声称它可以按terrab的顺序处理),具有事务性和启动线程安全性。