2016-05-18 4 views
2

У меня есть большой lmdb, около 800K изображений. Я хочу просто прочитать записи один за другим. Мой код очень прост и выглядит следующим образом:python LMDB большие DB (ошибка ограничения памяти)

with env.begin() as txn: 
cursor = txn.cursor() 
for key, value in cursor: 
    print(key) 

Но после прочтения около 70000 записей он выбегает из памяти (~ 10GB). Я понятия не имею, почему. Я попытался сделать, как показано ниже, но это не сработало.

for r in range(0,env.stat()['entries']): 
if r%10000==0: 
    if r!=0: 
     txn.commit() 
     cur.close() 
    txn=env.begin() 
    cur = txn.cursor() 
    print("Change Change Change "+ str(r)) 
    sys.stdout.flush() 
    if r==0: 
     cur.first() 
    else: 
     cur.set_range(key) 
     cur.next() 
key, value = cur.item() 

любое предложение?

ответ

0

Ошибка может помочь. Я бы проверил параметр map_size. От docs:

База данных максимального размера может вырасти до; используется для определения размера карты памяти. Если база данных будет больше, чем map_size, будет создано исключение, и пользователь должен закрыть и снова открыть среду. На 64-битном уровне нет штрафа за создание этого огромного (скажем, 1 ТБ). Должно быть < 2GB на 32-бит.

Это будет пример, когда пишет:

with lmdb.open(LMDB_DIR, map_size=LMDB_MAX_SIZE) as env: 
    with env.begin(write=True) as txn: 
     return txn.put(mykey, value) 
+0

Это журнал ошибок: slurmstepd: Работа 1008515 превысила лимит памяти (65537464> 65536000), была убита slurmstepd: *** РАБОТЫ 1008515 ON mmm269 ОТМЕНА НА 2016-05-18T15: 09: 41 *** slurmstepd: предел превышенного предела памяти в какой-то момент. slurmstepd: Превышен предел памяти задания этот тим я выделил 64 ГБ бара, но снова это случилось. Общий размер моей БД составляет 596 ГБ. – arash