Python中的内存问题:字典与数据库(可以结合使用吗?)
我正在尝试从大量输入中找出单词的规律。我之前用字典来做这个,但用了几个小时后,程序崩溃了,出现了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的最小值来调整这些数值。