Хороший вопрос.Сначала уточнение.В то время как поле реляционных хранилищ объединено довольно прочной основой принципов, при этом каждый поставщик выбирает добавленную стоимость в функциях или ценах, нереляционное поле (nosql) является гораздо более разнородным.
Естьхранилища документов (MongoDB, CouchDB), которые отлично подходят для управления контентом и аналогичных ситуациях, когда у вас есть плоский набор переменных атрибутов, которые вы хотите построить вокруг темы.Возьмите сайт-настройку.Использование хранилища документов для управления пользовательскими атрибутами, которые определяют способ, которым пользователь хочет видеть свою страницу, хорошо подходит для платформы.Несмотря на свою рекламную шумиху, эти магазины не всегда хорошо масштабируются в терабайты.Это можно сделать, но это не идеально.MongoDB имеет много функций, обнаруженных в реляционных базах данных, таких как динамические индексы (до 40 на коллекцию / таблицу).CouchDB создан, чтобы быть абсолютно восстанавливаемым в случае сбоя.
Существуют хранилища ключей / значений (Cassandra, HBase ...), которые отлично подходят для высокораспределенных хранилищ.Кассандра для низких задержек, HBase для высоких задержек.Хитрость заключается в том, что вы должны определить потребности вашего запроса, прежде чем начинать вводить данные. Они не эффективны для динамических запросов к любому атрибуту.Например, если вы создаете службу регистрации событий клиента, вы хотите установить свой ключ на уникальный атрибут клиента.Оттуда вы можете вставить различные структуры журналов в свой магазин и получить все журналы по ключу клиента по запросу.Однако было бы гораздо дороже попытаться просмотреть журналы в поисках событий журнала, в которых тип был «сбой», если только вы не решили сделать этот ключ второстепенным.Еще одна вещь: в последний раз, когда я смотрел на Cassandra, вы не могли запустить regexp внутри запроса M / R.Это означает, что, если вы хотите искать шаблоны в поле, вам придется извлечь все экземпляры этого поля и затем запустить его через регулярное выражение, чтобы найти нужные вам кортежи.
Базы данных графиков сильно отличаютсяиз двух выше.Отношения между предметами (объектами, кортежами, элементами) изменчивы.Они не масштабируются в терабайты, но это не то, для чего они предназначены.Они отлично подходят для того, чтобы задавать вопросы типа «эй, сколько из моих пользователей любят зеленый цвет? Из них сколько живет в Калифорнии?»С реляционной базой данных у вас будет статическая структура.С базой данных графов (я упрощаю, конечно), у вас есть атрибуты и объекты.Вы соединяете их, как это имеет смысл, без применения схемы.
Я бы не стал помещать что-либо критическое в нереляционный магазин.Коммерция, например, где вы хотите гарантировать, что транзакция завершена до доставки продукта.Вы хотите гарантированную целостность (или, по крайней мере, лучший шанс гарантированной целостности).Если пользователь теряет свои настройки сайта, ничего страшного.Если вы потеряете коммерческий переход, большое дело.Там могут быть некоторые, кто не согласен.
Я также не стал бы помещать сложные структуры в любой из вышеупомянутых нереляционных хранилищ.Они плохо соединяются в масштабе.И это нормально, потому что это не тот способ, которым они должны работать.Там, где вы можете поместить идентификатор для address_type в таблицу customer_address в реляционной системе, вы захотите внедрить информацию address_type в кортеж клиента, хранящийся в документе или ключе / значении.Эффективность данных - это не область документа или хранилище ключей / значений.Дело в распределении и чистой скорости.Жертва - это след.
Существуют и другие подтипы семейства магазинов, помеченных как «nosql», которые я здесь не освещал.Существует множество (по последним подсчетам, 122) различных проектов, ориентированных на нереляционные решения проблем данных различных типов.Riak - еще один, о котором я продолжаю слышать и не могу ждать, чтобы попробовать.
А вот и хитрость. Поставщики реляционных продуктов с большим долларом наблюдают, и есть вероятность, что они все строят или планируют создавать свои собственные нереляционные решения, которые будут связаны с их продуктами. В ближайшие пару лет, если не раньше, мы увидим, что движение станет зрелым, крупные компании скупают лучших в своем классе, а поставщики реляционных услуг начинают предлагать интегрированные решения для тех, которые еще не сделали этого.
Это чрезвычайно захватывающее время для работы в области управления данными. Вы должны попробовать несколько из них. Вы можете скачать Couch или Mongo и запустить их в считанные минуты. HBase немного сложнее.
В любом случае, я надеюсь, что я сообщил, не путая, что я достиг просветления без существенной предвзятости или ошибки.