Моя база данных Redis в настоящее время имеет большую таблицу ha sh - ок. 130 м пар ключ / значение, где каждый ключ и значение являются целыми числами (очевидно, хранятся в виде строки). Ха sh отлично работает в базе данных и потребляет <10 ГБ памяти общей системной памяти 64 ГБ, согласно `Redis.info (): </p>
'used_memory_human': '9.05G'
Это ха вычислительно дорого для создания этого ха sh, займет ~ 5,5 часов, чтобы завершить через 16 ядер. По этой причине я хочу иметь возможность выгрузить таблицу ha sh на диск и восстановить ее при запуске приложения. Я смог сделать дамп таблицы ha sh на диск успешно используя:
rdb = redis.Redis()
def dump_lookup_table():
with open('redis_dumps/full_hash.rdb', 'wb') as full_hash_file:
full_hash_file.write(rdb.dump("my_redis_hash"))
В результате файл 2,4 ГБ был сохранен в соответствующей папке. Проблема в том, что я пытаюсь восстановить файл ha sh из файла:
def restore_lookup_table():
with open('redis_dumps/full_hash.rdb', 'rb') as full_hash_file:
rdb.restore("my_redis_hash", 0, full_hash_file.read())
ConnectionError: Error 104 while writing to socket. Connection reset by peer.
Я протестировал с подразделом ha sh (около 25 м записей), который является файлом ~ 900 МБ на диске. Это успешно восстанавливается, поэтому проблема заключается в том, что Redis ограничивает принятие этого очень большого файла для восстановления.
При просмотре документов кажется, что я установил жесткий предел Query Buffer, описанный здесь , который ограничивает максимальный размер буфера клиента до 1 ГБ. Если я неправильно читаю docs и / или файл redis.conf, это, похоже, не настраивается, поэтому я не могу увеличить его, чтобы разрешить восстановление дампа 2,4 ГБ rdb.
Один потенциал Обходной путь, который я нашел, заключается в создании промежуточного временного файла, в который я копирую подмножество ключей, затем выкидываю этот ха sh в rdb и удаляю его. Затем я могу восстановить временные хеши по отдельности и скопировать ключи в мой единственный нужный ха sh. Это работает, но это очень, очень медленно по сравнению с простым дампом / восстановлением единственного ха sh.
Есть ли общепринятый способ для сброса / восстановления относительно больших хешей, подобных этому? Или есть ли способ переопределить или обойти жесткий предел в 1 ГБ в клиентском буфере?