Эффективный способ хранить "неупорядоченный набор" целых чисел в качестве значения в Redis? - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно хранить около 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? Это поможет?
Могу ли я попробовать другие оптимизации?

Также будет полезна рекомендация любого другого хранилища данных с моим вариантом использования.

1 Ответ

0 голосов
/ 28 мая 2019

Быстрая и удобная реализация базы данных типа INTEGER=>UNORDERED/SET для обычных операций означает наличие двоичной диаграммы принятия решения для сохранения всех неупорядоченных наборов и использования сбалансированного двоичного файла дерево поиска для хранения целочисленных ключей с указателями в направлении узла BDD, представляющего value хеша.

Примечание: чтобы специально представлять наборы (они закодированы как характеристические функции ), были изобретены диаграммы двоичных решений с подавлением нуля , которые представляют собой оптимизированный / компактный способ представления наборов.

Существуют тысячи статей и учебных пособий о том, как реализовать BDD.

Если вы реализуете свою базу данных таким образом, она будет работать быстрее и компактнее, чем redis. Таким образом, вы можете реализовать базы данных с миллиардами установленных записей.

...