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