2009-08-20 3 views
60

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

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

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

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

ответ

25

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

Pros:

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

Минусы:

  • вам необходимо создать представления для каждого запроса, т.е. одноранговой как запросы (например, конкатенация динамический Где и СНП это в SQL) запросы не доступны.
  • вы либо имеют избыточные данные, или вы будете в конечном итоге реализации присоединиться и сортирует логику самостоятельно на «стороне клиента» (например, сортировка многие-ко-многим по нескольким полям)

Pros или Cons :

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

Спрашивая вопрос, я проверял другие источники, и мне кажется, что основным преимуществом использования CouchDB является его «реальное» представление данных по сравнению с нормированной структурой данных, требуемой более традиционными СУБД. См. Http://books.couchdb.org/relax/intro/why-couchdb для объяснения причин. Я думаю, что ответы на другие вопросы, которые я задал, пока недоступны. –

0

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

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

14

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

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

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

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

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

+6

Вы обсуждали вопрос, но вы не пытались ответить на него. –

+1

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

7

Это трудный вопрос для ответа. Поэтому я попытаюсь выделить области, где CouchDB может работать против вас.

Два величайшие источники трудностей на кушетке пользователей и списков рассылки Dev, что у людей есть являются:

  • комплекс присоединяется данных.
  • Multi-Step Map/Reduce.

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

Замечания других людей по этому вопросу демонстрируют некоторые из разных типов данных, которые хорошо подходят для CouchDB.

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

Короткий ответ: Думаю, в конце концов CouchDB сможет справиться с любой проблемой, которую вы хотите бросить на нее. Но уровень комфорта, который у вас есть, может отличаться от разработчика к разработчику. Думаю, это несколько субъективно. Мне нравится использовать полный язык turing для запроса моих данных и сохранения большей логики в прикладном уровне. Ваш пробег может отличаться.

2

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

+0

У CouchDB есть способы обеспечения уникальности. Все это на ключевом уровне. Если вам нужно, чтобы как логин, так и электронная почта были уникальными, просто выведите идентификатор документов из них, и вы никогда не сможете вставить дубликат логина и электронной почты в db. Это другое, но столь же эффективное. –

+10

Рассмотрим 2 ключа: «[email protected]» и «[email protected]». Оба пользователя имеют одинаковый адрес электронной почты [email protected] – Sam

+0

Выберите один из уникальных ключей «master» и используйте его для основного документа. Затем создайте вторичный документ с другим в качестве ключа. Его единственными другими данными являются главный ключ. Например, выбирая email как master, поэтому имя пользователя является вторичным. Создайте документ с ключом «[email protected]» и любыми другими данными, но пока нет имени пользователя. Если это удастся, создайте еще один документ с ключом «john» и сохраните в нем «dude @ example».net ".Если это будет успешным, они оба уникальны, и вы можете обновить документ с ключом« [email protected] », чтобы установить имя пользователя« john ». Если это не удается, попросите пользователя ввести другое имя пользователя. –

3

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

43

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

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

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

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

+0

Спасибо также за хорошую публикацию блога. – High6

Смежные вопросы