хранилища ключей для расширяемых объектов - PullRequest
2 голосов
/ 21 января 2010

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

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

Вместо BLOB-объекта для, скажем, «персона», 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")

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

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

1 Ответ

1 голос
/ 21 января 2010

Вы можете получить аналогичное поведение в 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

...