Python中的内存问题:字典与数据库(可以结合使用吗?)

5 投票
1 回答
713 浏览
提问于 2025-04-17 22:48

我正在尝试从大量输入中找出单词的规律。我之前用字典来做这个,但用了几个小时后,程序崩溃了,出现了MemoryError的错误。

于是我对程序进行了修改。我通过MySQLdb创建了一个数据库,并把pattern-index的值插入到数据库里。每次我检查一个单词是否在索引中,如果不在,我就把它和一个值写入索引。不过,使用数据库的方法太慢了。

我在想有没有办法把字典和数据库结合起来,比如:

if ram <90% usage:
    seek into dict
    append to dict
else:
    if not (seek into dict):
        seek into database
        append to database

用字典处理100KB的数据大约需要1.5秒。

而用数据库处理同样的数据则需要大约84秒。

原始输入数据有16GB。我还不知道处理这些数据需要多长时间。

1 个回答

0

简短回答(详细回答稍后提供):

你使用MySQL的方式不太好,实际上你并不想提交数据,因为你只是把数据库当作内存的延伸。只要去掉提交操作,你的性能就会有很大提升。

比起使用MySQL,建议你使用leveldb(可以通过命令pip install leveldb安装),并设置sync = false。

根据你想使用的内存,调整以下数值:

  • block_cache_size = 512*1024*1024 #512MB #这个是最重要的
  • write_buffer_size = 10*1024*1024 #10MB

你遇到的MemoryError错误说明你使用的是32位系统,这意味着一个进程的总内存不能超过4GB,所以要根据你的系统内存和4GB的最小值来调整这些数值。

撰写回答