Вопрос

Я пытаюсь разобраться в хранилищах значений ключей, таких как CouchDB и Cassandra.Я понимаю, почему они полезны, но что касается того, как они заменяют СУБД, такую как MySQL, я этого не понимаю.

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

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

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

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

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

Это было полезно?

Решение

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

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

{'blue': {123456}}

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top