Массовое проникновение в Redis
Я пытаюсь загрузить большую часть данных в Redis как можно быстрее.
Мои данные выглядят следующим образом:
771240491921 SOME;STRING;ABOUT;THIS;LENGTH
345928354912 SOME;STRING;ABOUT;THIS;LENGTH
В левой части находится число из 12 цифр, а справа - строка переменной длины. Ключ будет номером слева, а данные будут строкой справа.
В моем экземпляре Redis, который я только что установил из коробки, и с несжатым текстовым файлом с этими данными, я могу получить около миллиона записей в нем за минуту. Мне нужно сделать около 45 миллионов, что займет около 45 минут. 45 минут слишком длинны.
Существуют ли какие-то стандартные улучшения производительности, которые существуют для меня для этого типа оптимизации? Я получу лучшую производительность, перейдя через отдельные экземпляры?
Ответы
Ответ 1
Самый быстрый способ сделать это: генерировать Redis-протокол из этих данных. Документация для создания протокола Redis находится на сайте Redis.io, это тривиальный протокол. Как только вы это сделаете, просто назовите его appendonly.log и запустите redis в режиме добавления только.
Вы даже можете выполнить команду FLUSHALL и, наконец, вывести данные на ваш сервер с помощью netcat, перенаправляя вывод на /dev/null.
Это будет очень быстро, RTT ждать не будет, это просто массовая загрузка данных.
Менее хакерский, просто вставляйте вещи 1000 за раз, используя конвейерную обработку.
Это почти так же быстро, как генерация протокола, но гораздо более чистая:)
Ответ 2
Мне нравится то, что предложил Сальвадор, но здесь вы еще один очень понятный путь -
генерировать канал для cli, например
SET xxx yyy
SET xxx yyy
SET xxx yyy
запустите его в cli на сервере рядом с вами. Затем сохраните, завершите работу и переместите файл данных на целевой сервер.