Подходы к управлению версиями данных, хранящихся в Redis, по дате

В приложении, которое сохраняет fontSize и fontColor, которые устанавливает пользователь, какой подход следует использовать для моделирования временных рядов? Чтобы уточнить, пользователь устанавливает FontSize и FontColour при первом запуске. Затем в ходе использования приложения они могут изменять эти свойства. Я хочу сохранить временную метку, когда они изменятся, а также иметь возможность запрашивать эту временную метку. Я ищу разные подходы к моделированию этих данных в Redis? Если вы можете указать на любую литературу по моделированию данных, это тоже будет полезно.

Мои мысли заключались в том, чтобы использовать Hashset и RPUSH последнюю настройку для пользователя в список. Но я теряюсь в части запроса, когда единственными двумя параметрами являются userId и диапазон дат.


person aateeque    schedule 24.03.2015    source источник


Ответы (1)


Обычно, когда вы хотите хранить временные ряды в Redis, лучше всего использовать отсортированные наборы с оценками участников, установленными в качестве значения эпохи. Это даст вам тривиальные диапазоны дат с помощью Z[REV]RANGEBYSCORE.

Что касается вашего вопроса, то, хотя использование хэша для хранения этих настроек вполне выполнимо, вы должны компенсировать это стоимостью хранения другого ключа (как с точки зрения объема памяти, так и с точки зрения дополнительных операций чтения/записи, необходимых для его обслуживания). Если все, что вам нужно, это сохранить кортеж размера/цвета, я рекомендую встроить его в значение члена Sorted Set. В качестве примера рассмотрим следующее:

ZADD settings:9876 12345678 "12345678:12px:red"

В приведенном выше примере показано сохранение настроек для идентификатора пользователя 9876 для (придуманной) временной метки 12345678. Значение элемента состоит из объединения значений размера и цвета вместе с временной меткой для обеспечения уникальности (помните, что элементы [отсортированного] набора должны быть уникальный).

person Itamar Haber    schedule 24.03.2015