Как мне сохранить этот объект в Redis? - PullRequest
4 голосов
/ 15 сентября 2011
parent = {
    child0: {
        data1:'foo',
        data2: 'bar'
    },
    child1: {
        data1:'foo',
        data2: 'bar'
    },
    child2: {
        data1:'foo',
        data2: 'bar'   
    }
}

Сначала я думал, что установлю ключ parent:child, так как мне понадобятся эти данные отдельно от его родных братьев. В некоторых случаях, однако, мне нужно будет вернуть все данные в рамках родителя.

Должен ли я просто поместить весь объект в ключ parent?

Есть ли минусы в этом, если большая часть выигрышей и сетов может быть только для одного из его детей?

Есть ли способ вызвать все родительские данные с помощью схемы parent:child?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Попробуйте хеш - это дает вам HGET, чтобы получить только одного ребенка, и HGETALL, чтобы получить всех их.

Сохранение всего объекта в виде JSON в одном ключе также допустимо и сохраняет ваш код простым, если вы используете его хорошо. Если числа не слишком велики, может иметь смысл всегда извлекать весь объект, даже если вам нужно отобразить только один дочерний объект.

Основная причина, по которой следует избегать хранения сложных объектов в одном ключе, - это конфликты записи - если два соединения могут одновременно изменять разных потомков одного объекта, то хеш будет гораздо меньше проблем.

0 голосов
/ 15 сентября 2011

Возможно, вы захотите воспользоваться преимуществами типа хеш-данных.Использование родителя в качестве ключа для хэша и использование (поле ключа HGET) для конкретного дочернего элемента или (ключ HKEYS) для всех дочерних элементов.

Было бы интересно, если бы кто-нибудь разместил тесты для хеш-команд HSET и HGET.Контрольные показатели для операций со списком (LPUSH 88109,25 / сек) медленнее (~ 23%) (SET 114293,71 / сек).Предположительно, HSET еще медленнее, хотя и указан в списке O (1).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...