2010-01-21 7 views
2

http://www.infoq.com/presentations/newport-evolving-key-value-programming-model - это видео о магазинах KV, и вся эта посылка заключается в том, что redis поддерживает стиль на основе столбцов для хранения атрибутов объекта под отдельными ключами, а не сериализации объекта и хранения его под один ключ.хранилища ключевых значений для расширяемых объектов

(Этот вопрос не Redis-специфичен, но более общий стиль и лучшая практика для КВ магазинов в целом.)

Вместо сгустка, скажем, «лицо», Redis поощряет основанный на столбцах, где атрибуты в объекте хранятся как отдельный ключ, например

R.set("U:123:firstname","Billy") 
R.set("U:123:surname","Newport") 
... 

Мне любопытно, если это лучшая практика, и если люди принимают разные подходы.

  • E.g. вы можете «расчешите» объект под одним ключом. Это имеет преимущество быть неправдоподобным или установить в одном запросе

  • Или человек может стать список с первым пунктом является индексом имя поля или такой?

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

R.set(["U:123","firstname"],"Billy") 
R.set(["U:123","surname"],"Newport") 
R.get(["U:123"]) returns [("firstname","Billy"),("surname","Newport")] 

А потом добавить в транзакциях:

with(R.get(["U:132"]) as user): 
    user.set("firstname","Paul") 
    user.set("lastname","Simon") 

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

Существуют ли ключевые магазины, которые имеют поддержку для этого или имеют другие применимые подходы?

ответ

1

Вы можете получить подобное поведение в Redis, используя дополнительный Set для отслеживания отдельных членов вашего объекта.

SET U:123:firstname Billy 
SADD U:123:members firstname 
SET U:123:surname Cobin 
SADD U:123:members surname 

GET U:123:firstname => Billy 
GET U:123:firstname => Cobin 
SORT U:123:members GET U:123:* -> [Billy, Cobin] 
or 
SMEMBERS U:123:members -> [firstname, surname] 
MGET U:123:firstname U:123:firstname 

Не идеальное совпадение, но достаточно хорошее во многих ситуациях. Есть interesting article о том, как hurl использует этот рисунок с Redis