хранилища ключевых значений для расширяемых объектов

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

(Этот вопрос не специфичен для Redis, а скорее относится к общему стилю и рекомендациям для магазинов KV в целом.)

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

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

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

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

  • Или человек может быть списком с первым элементом, являющимся индексом имени поля или чем-то подобным?

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

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")

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

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


person Will    schedule 21.01.2010    source источник


Ответы (1)


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

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

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

person sris    schedule 21.01.2010