Я уже некоторое время использую Redis в качестве бэкэнда для Resque, и теперь, когда я ищу быстрый способ выполнения операций пересечения больших массивов данных, я решил попробовать Redis.
Я проводил следующий тест:
- x , y и z - наборы Redis, все они содержат ок.1 миллион членов (случайные целые числа, взятые из начального массива, содержащего 3M + членов).
- я хочу пересечь xy и z , поэтому я использую sintersectstore (чтобы избежать перегрева, вызванного извлечением данных с сервера на клиент)
sinterstore r x y z
- результирующий набор ( r ) содержит около полумиллиона членов, Redisвычисляет этот набор примерно за полсекунды.
Полсекунды неплохо, но мне нужно было бы выполнять такие вычисления для наборов, которые могли бы содержать более миллиарда членов каждый.
У меня естьЯ не проверял, как Redis будет реагировать на такие огромные наборы, но я предполагаю, что обработка данных займет гораздо больше времени.
Я правильно это делаю?Есть ли более быстрый способ сделать это?
Примечания:
- собственные массивы не вариант, так как я ищу распределенное хранилище данных, к которому могут обращаться несколько работников.
- Я получаю эти результаты на 8-ядерном компьютере Mac с тактовой частотой 3,4 ГГц и 16 ГБ ОЗУ, в конфигурации Redis отключено сохранение диска.