如何在python中保存一个非常大的字典加载到内存中?

时间:2016-11-24 09:41:31

标签: python dictionary memory large-data

我有一个非常大的字典大小~200 GB,我需要经常查询我的算法。为了获得快速的结果,我想把它放在内存中,这是可能的,因为幸运的是我有一个500GB的RAM。

但是,我的主要问题是我只想在内存中加载一次,然后让其他进程查询同一个字典,而不是每次创建新进程或迭代我的代码时都要再次加载它。

所以,我想要这样的事情:

脚本1:

 # Load dictionary in memory
 def load(data_dir):
     dictionary = load_from_dir(data_dir) ... 

脚本2:

 # Connect to loaded dictionary (already put in memory by script 1)
 def use_dictionary(my_query):
     query_loaded_dictionary(my_query) 

实现这一目标的最佳方法是什么?我考虑过一个休息API,但是我想知道如果通过REST请求将首先将字典放入内存中,从而削弱了我获得的所有速度。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

运行您使用REST API访问的单独服务,或者使用内存数据库。

我个人对Redis有很好的体验,但还有很多其他人(Memcached也很受欢迎)。 Redis易于使用Python和Django。

在两种解决方案中都可以进行数据序列化,因此会降低某些性能。有一种方法可以用简单的结构填充Redis,例如列表,但我还没试过。我打包了我的数字数组并将它们序列化(带有numpy),最后它足够快。如果你仍然使用简单的字符串键值对,那么性能将是最佳的,并且使用memcached可能会更好。