python - Python 中的内存问题。词典与数据库(或者你能把两者结合起来吗?)

标签 python database memory dictionary

我正在尝试为大量输入寻找单词模式。为此,我使用了字典,几个小时后,程序因 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

将字典用于输入 100 kb 数据的相同目的需要大约 1.5 秒

对相同的输入使用数据库需要大约 84 秒

原始输入为 16 GB。我还不知道需要多少时间来处理。

最佳答案

简答(详细答案待定):

您对 MySQL 的使用很差,您根本不想提交,因为您只是将数据库用作内存的扩展。仅删除提交应该会给您带来很大的改进

比使用 MySQL 使用更好 leveldb (pip install leveldb) with sync = false

根据您要使用的内存调整以下值

  • block_cache_size = 512*1024*1024 #512Mo #越重要
  • write_buffer_size = 10*1024*1024 #10Mo

因为你有一个 MemoryError,这意味着你有一个 32 位系统,这意味着为一个进程启用的总内存不能超过 4 Go,所以调整值以适应 min(你的系统内存,4Go)

关于python - Python 中的内存问题。词典与数据库(或者你能把两者结合起来吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479640/

相关文章:

python - 使用函数式 API 初始化后如何更改网络?

sql-server - 无法执行 COMPUTE 语句

ruby-on-rails - 如何在 Rails 的 ActiveRecord 中获取对象的所有值?

mysql - 如何更改/更改 mysql 数据库用户

java - 在 eclipse.ini 中定义 --launcher.XXMaxPermSize 后,Eclipse 无法创建 JVM

node.js - 一旦达到一定的内存大小(泄漏),如何重新启动 Node 进程?

python - 条件语句中多个 'or' 语句的有效方法

python - 不受信任的 pickle 来源

python - 使用 pdb 调试 python 时如何更改值?

c++ - ptrace PTRACE_ATTACH 失败 - 用户拥有的进程的 Linux 权限