【发布时间】:2017-04-08 12:59:27
【问题描述】:
我有一个非常大的字典,大小约为 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)
实现这一目标的最佳方法是什么?我曾考虑过使用 REST API,但我想知道通过 REST 请求是否会降低我首先将字典放入内存所获得的所有速度。
有什么建议吗?
【问题讨论】:
-
也许使用类似 redis 的东西会有所帮助。
-
是的,redis 也是个好主意。我想知道是否有办法在 python 中做到这一点。我之前尝试过 mongodb,但是最新的wiredtiger 版本的mongodb,没有预加载内存中所有数据的选项。问题是我没有root密码,所以我不想安装太多软件。不过让我试试 redis。
-
您是否正在尝试重新发明 NOSQL 数据库?为什么不依赖现有的?
-
另一种可能性是使用
shelve:docs.python.org/3/library/shelve.html -
这主要是因为我已经编写了一个线程安全的代码来快速加载和提供内存中的数据,这比 mongodb 快得多。我只是想知道是否有一种严格的“python”方式来重用我所做的事情,而无需重写代码以移植到新数据库。
标签: python dictionary memory large-data