database - online - Когда использовать CouchDB vs RDBMS




sql online course (5)

CouchDB является одним из нескольких доступных «хранилищ ключей / значений», в числе которых такие старые, как BDB , веб-ориентированные, такие как Persevere , MongoDB и CouchDB, новые супер-быстрые, такие как memcached (только RAM) и Tokyo Cabinet , и огромные магазины, такие как Hadoop и BigTable от Google (MongoDB также утверждает, что находится на этом пространстве).

Конечно, есть место для хранилищ ключей и значений и реляционных БД. Традиционно большинство RDB считаются слоем выше ключа / значения. Например, MySQL использовал BDB как дополнительный бэкэнд для таблиц. Короче говоря, ключ / значения ничего не знают о полях и отношениях, которые являются основой SQL.

Магазины ключей / ценностей обычно легче масштабируются, что делает их привлекательным выбором, когда они растут взрывоопасно, например, Twitter. Конечно, это означает, что любые отношения между сохраненными значениями должны управляться вашим кодом, а не просто объявляться в SQL. Подход CouchDB заключается в том, чтобы хранить большие «документы» в части ценности, делая их (в основном) автономными, поэтому вы можете получить большую часть необходимых данных в одном запросе. Многие варианты использования подходят для этой идеи, другие - нет.

Текущая тема, которую я вижу, заключается в том, что после того, как «Rails не масштабируется!» пугают, теперь многие люди понимают, что речь идет не о вашей веб-инфраструктуре; но и о интеллектуальном кэшировании, чтобы избежать попадания в базу данных и даже веб-приложения, когда это возможно. Восходящая звезда там memcached.

Как всегда, все зависит от ваших потребностей.

Я рассматриваю CouchDB, который имеет ряд привлекательных функций над реляционными базами данных, включая:

  • интуитивно понятный интерфейс REST / HTTP
  • легкая репликация
  • данные, хранящиеся в виде документов, а не нормализованные таблицы

Я ценю, что это не зрелый продукт, поэтому его следует принимать с осторожностью, но я задаюсь вопросом, действительно ли это реальная замена для РСУБД (несмотря на вводную страницу, говорящую иначе - http://couchdb.apache.org/docs /intro.html ).

  1. При каких обстоятельствах CouchDB будет лучшим выбором базы данных, чем RDBMS (например, MySQL), например, с точки зрения масштабируемости, дизайна + времени разработки, надежности и обслуживания.
  2. Есть ли еще случаи, когда СУРБД по-прежнему остается правильным выбором?
  3. Является ли это либо или вариантом, либо гибридным решением, которое, скорее всего, станет лучшей практикой?

Если вы работаете с табличными данными, где есть только мелкая иерархия данных, то, вероятно, лучше всего будет использовать систему СУРБД. Это основное использование систем РСУБД, а документация и поддержка инструментов очень хороши.

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


Недавно я присутствовал на конференции NoSQL в Лондоне и думаю, что теперь мне лучше понять, как ответить на исходный вопрос. Я также написал сообщение в блоге , и есть еще несколько хороших .

Ключевые моменты:

  • Мы накопили, вероятно, 30-летний опыт администрирования реляционных баз данных, поэтому не должны заменять их без тщательного рассмотрения; нереляционные хранилища данных менее зрелые, чем реляционные, и поэтому по своей сути более рискованно принимать
  • Существуют разные типы нереляционных хранилищ данных; некоторые из них - хранилища с ключевыми значениями, некоторые из них - хранилища документов, некоторые - графические базы данных
  • Вы можете использовать гибридный подход, например комбинацию RDBMS и хранилища данных графов для сайта социального программного обеспечения
  • Хранилища данных документов (например, CouchDB и MongoDB), вероятно, наиболее близки к реляционным базам данных и предоставляют структуру данных JSON со всеми полями, представленными иерархически, что позволяет избежать необходимости объединения таблиц, и (некоторые могут утверждать) - это улучшение традиционного объекта- реляционное сопоставление, которое в настоящее время используют большинство приложений
  • Не реляционные базы данных поддерживают репликацию (включая master-master); реляционные базы данных также поддерживают репликацию, но она может быть не такой всеобъемлющей, как нереляционная опция
  • Очень крупные сайты, такие как Twitter, Digg и Facebook, используют Cassandra, которая построена с нуля для поддержки кластеризации
  • Реляционные базы данных, вероятно, подходят для 90% случаев

Таким образом, консенсус, как представляется, «следует проявлять осторожность».


Пока кто-то не даст более подробный ответ, вот некоторые плюсы и минусы для CouchDB

Плюсы:

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

Минусы:

  • вам нужно создавать представления для каждого запроса, т. е. запросы ad-hoc, подобные запросам (например, конкатенирование динамических запросов WHERE и SORT в SQL), недоступны.
  • вы либо будете иметь избыточные данные, либо в конечном итоге вы будете внедрять логику объединения и сортировки на стороне клиента (например, сортировка отношений «многие-ко-многим» на нескольких полях)

Плюсы или минусы:

  • создание ваших представлений не так прямолинейно, как в SQL, это больше похоже на решение головоломки. Зависит от вашего типа, если это pro или con :)

Сэм, вы должны принять другой подход с CouchDB и вообще с картой или базой данных на основе. Вы не можете определить ограничение, такое уникальное, но вы можете запросить данные, чтобы проверить, используется ли это письмо, и если этот логин используется. Это правильно, вы должны передумать.





rdbms