Понимание магазинов Key-Value - PullRequest
9 голосов
/ 23 октября 2009

Я пытаюсь обернуть голову вокруг магазинов Key-Value, таких как CouchDB и Cassandra. Я понимаю, почему они полезны, но что касается того, как они заменяют СУБД, такую ​​как MySql, я не понимаю.

Допустим, это то, что мне нужно хранить:

{123456: {'model' : 'Ford'
          'color': 'blue'
          'MPG': 23}}

Тогда мне нужно найти все машины синего цвета.

Как хранилище Key-Value запрашивает ключи, используя значение? Я читал кое-что, где можно использовать это map-Reduce, но, глядя на источник нескольких проектов, я не могу найти пример.

Дайте мне знать, если я задаю правильный вопрос.

Ответы [ 2 ]

9 голосов
/ 23 октября 2009

По сути, когда вы используете хранилища значений ключей, вы строите базу данных из тех же компонентов, что и внутренняя реляционная база данных. Причина этого заключается в том, чтобы иметь больший контроль и гибкость в отношении масштабирования и производительности или просто для простоты.

В этом случае вам нужно хранить эквивалент строк таблицы и индекса как две отдельные вещи. Так что если вы хотите индексировать по цвету, то вам нужно хранить

{'blue': {123456}}

в эквиваленте индексной таблицы.

Конечно, некоторые хранилища значений ключей предоставляют вам механизмы индексации и поиска, поэтому не существует общего правила, которое подходило бы всем.

2 голосов
/ 23 октября 2009

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

Да, это дублирует функциональность индекса обычной rdbms.

Это хорошая статья о том, как команда FriendFeed подошла к этой проблеме и остановилась на этом решении вместе с их обоснованием (я знаю, немного странно, поскольку они использовали RDBMS в качестве хранилища ключей / значений, но обсуждаемые вопросы теория звука):
http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...