Мне нужно хранить около 150 миллионов пар ключ-значение, где ключ - это целое число, а значение - это набор целых чисел (неупорядоченный).
Я использую Redis в качестве отдельного экземпляра на своем персональном компьютере с 32 ГБ оперативной памяти и процессором с 8 ядрами.
Для этого я использую команду "SADD". Клиент, которым я пользуюсь, это hiredis, наряду с конвейерной обработкой.
Итак, команда будет выглядеть так:
redisAppendCommand(context,"SADD %d %d %d",integer_key, integer_value1, integer_value2 );
Время выполнения:
Используя команду "time" из linux, я получаю следующий результат:
реальный: 8 м 30 с
пользователь: 5м 18с
sys: 0 м 7 с
Использование памяти:
В Redis база данных занимает около 18 ГБ, а объем памяти Redis увеличивается до 28 ГБ.
Ключ выглядит так: «94190049249988».
"keys.bytes-per-key": (целое число) 1830.
Ниже приведены оптимизации, которые я пробовал, чтобы повысить скорость и уменьшить объем памяти: -
1) Конвейерная обработка для улучшения скорости.
2) Хранение набора целых чисел, чтобы уменьшить объем памяти. При этом используется кодировка int-set.
Существует ли эффективный способ памяти и скорости для хранения этих 150 миллионов значений ключей?
Должен ли я каким-то образом использовать какой-либо другой тип данных, такой как HSET? Это поможет?
Могу ли я попробовать другие оптимизации?
Также будет полезна рекомендация любого другого хранилища данных с моим вариантом использования.