Redis — как хранить мои данные?

На сайте Redis в разделе «оптимизация памяти» говорится, что небольшие хэши используют гораздо меньше памяти, чем несколько ключей, поэтому лучше хранить небольшой хэш с несколькими полями вместо нескольких ключей, поэтому я подумал о том, чтобы сделать, например, хэш пользователей и хранение пользователей в полях в виде сериализованных данных json, но как насчет того, чтобы мой хэш ДЕЙСТВИТЕЛЬНО большой, то есть у меня много полей.

Лучше хранить пользователей в виде одного хэша с большим количеством полей или в виде нескольких небольших хэшей??

Я спрашиваю об этом, потому что на сайте Redis говорится, что «маленькие» хэши лучше, чем несколько ключей для хранения пары значений, но я не знаю, применимо ли это все еще для действительно больших хэшей.


person Ignacio Torres    schedule 27.04.2016    source источник


Ответы (2)


Я бы сказал, что вашим лучшим решением является создание ключа для каждого пользователя, возможно, названного пользователями id, и сохранение данных json.

Мы попытались сохранить каждого пользователя как 1 хэш для каждого пользователя, а затем поля для каждого из свойств пользователей, но мы обнаружили, что никогда не использовали поля по отдельности и в большинстве случаев нуждались в большей части данных (HGETALL), поэтому переключились на хранение json, что также помогает с сохранением типов данных.

Потребуется более подробная информация о том, что и как вы пытаетесь сохранить данные, чтобы действительно дать больше предложений.

person Salakar    schedule 28.04.2016
comment
Вы имеете в виду одно хеш-поле с json в качестве значения хэша пользователя?? - person Ignacio Torres; 28.04.2016
comment
Я имел в виду использование стандартного ключа через GET/SET - person Salakar; 28.04.2016
comment
Я согласен с этим. Другое ограничение хэшей заключается в том, что вы не можете поддерживать вложенные отношения без преобразования вложенного объекта в jsons (или другую сериализованную строку) для помещения в хэш-поля. Это становится грязным и бессмысленным, может также просто сериализовать всю партию в json и использовать строковый тип данных. - person Mike Miller; 28.04.2016
comment
Я знаю, что это довольно грязно, но дело в том, что хранение типичного ключа GET/SET потребляет больше ресурсов, верно? или, по крайней мере, это говорит что-то подобное в документации Redis - person Ignacio Torres; 28.04.2016

Допустим, у вас есть такой пользователь:

{"ID": "344", "Name": "Blah", "Occupation": "Engineer", "Telephone": [ "550-33...", ...] }

Вы бы сериализовали JSON и сохранили бы его как то, что Redis говорит String. т.е. вы должны использовать команды «GET» и «SET».

e.g.

SET "user:344" "<SERIALIZED> 

Поскольку «пользователи» — один из ваших основных объектов, это не маленький хэш.

Суть документации заключается в том, что хэши будут состоять из небольшого количества элементов. Например, предположим, что во всей вашей системе есть 10 цветов, и вы хотите связать некоторые данные с каждым из них. Вместо того, чтобы делать:

color:blue -> DATA, color:white -> DATA

Вам лучше хэш.

colors -> blue -> DATA
colors -> while -> DATA
person Community    schedule 06.05.2016