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")
С точки зрения масштабирования, пакетирование получений и наборов будет важным?
Существуют ли ключевые хранилища, которые поддерживают это или имеют другие применимые подходы?