Когда использовать CouchDB поверх MongoDB и наоборот

581

Я застрял между этими двумя базами данных NoSQL.

В моем проекте я буду создавать базу данных в базе данных. Например, мне нужно решение для создания динамических таблиц.

Таким образом, пользователи могут создавать таблицы со столбцами и строками. Я думаю, что либо MongoDB, либо CouchDB будут хороши для этого, но я не уверен, какой из них. Мне также понадобится эффективный пейджинг.

  • 19
    Хотелось бы, чтобы они модифицировали систему, чтобы облегчить создание интересующего их вопроса по теме и лучше направлять пользователей на этот вопрос. Я понятия не имею, был ли когда-либо затронут этот вопрос, и нет удобного способа отыскать его.
  • 42
    Я хотел бы, чтобы они добавили функциональность на этом веб-сайте, где мы могли бы «повысить или понизить» саму причину, приведенную к этому вопросу как «не по теме», что могло бы помочь переключить вопросы такого типа обратно на «по теме».
Показать ещё 5 комментариев
Теги:
performance
nosql
couchdb
comparison

7 ответов

491
Лучший ответ

Of C, A и P (согласованность, доступность и допустимость разделов), которые важны для вас? Краткая справка, Визуальное руководство к системам NoSQL

  • MongodB: согласованность и допустимость разделов
  • CouchDB: Доступность и допустимость разделов

Сообщение в блоге Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j сравнивает сценарии "Лучше всего использовать" для каждой базы данных NoSQL. Цитируя ссылку,

  • MongoDB: Если вам нужны динамические запросы. Если вы предпочитаете определять индексы, а не отображать/уменьшать функции. Если вам нужна хорошая производительность на большой БД. Если вы хотите CouchDB, но ваши данные слишком сильно меняются, заполняя диски.
  • CouchDB: для накапливания, иногда изменяющихся данных, по которым должны быть запущены предопределенные запросы. Места, где важно управление версиями.

Недавнее (февраль 2012 г.) и более всестороннее сравнение Рияда Каллы,

  • MongoDB: только для репликации Master-Slave
  • CouchDB: репликация Master-Master

Сообщение в блоге (октябрь 2011 г.) тем, кто попробовал оба, MongoDB Guy Learns CouchDB прокомментировал, что подкачка CouchDB не так полезна.

A (июнь 2009 г.) benchmark Кристина Чодорову (часть команды, стоящая за MongoDB),

Я бы пошел на MongoDB.

Надеюсь, что это поможет.

  • 7
    Насколько я понимаю, MongoDB никак не согласуется: ivoras.sharanet.org/blog/tree/…
  • 2
    Хорошая информация для времени, но это действительно старая ... многое изменилось (включая интерфейсы REST для Mongo).
Показать ещё 13 комментариев
153

Ответы выше всего осложняют историю.

  • Если вы планируете иметь мобильный компонент или пользователям настольных компьютеров работать в автономном режиме, а затем синхронизировать их работу с сервером, вам нужен CouchDB.
  • Если ваш код будет запущен только на сервере, перейдите к MongoDB

Что это. Если вам не нужна CouchDB (удивительная) возможность репликации на мобильные и настольные устройства, MongoDB имеет преимущество производительности, сообщества и инструментов в настоящее время.

  • 15
    Сжато, им так нравится.
  • 0
    Мне нравятся простые не слишком технические ответы, подобные этому. Спасибо!
Показать ещё 5 комментариев
31

Очень старый вопрос, но он сверху Google, и мне не очень нравятся ответы, которые я вижу здесь, и мои собственные.

В Couchdb гораздо больше возможностей для разработки CouchApps. Большинство людей используют CouchDb в классической 3-уровневой веб-архитектуре.

На практике решающим фактором для большинства людей будет тот факт, что MongoDb позволяет ad-hoc-запросы с синтаксисом SQL, подобным синтаксису, в то время как CouchDb не делает (вам нужно создавать карты/уменьшать представления, которые отключают некоторых людей, хотя создание этих представлений - это дружественный Rapid Application Development - они не имеют ничего общего с хранимыми процедурами).

Чтобы ответить на вопросы, поднятые в принятом ответе: CouchDb имеет отличную систему версий, но это не значит, что он подходит только (или более подходит) для мест, где важна версия. Кроме того, couchdb удобен для записи в дружественном виде, благодаря своей функции append-only (операции записи возвращаются в мгновение ока, гарантируя, что данные никогда не будут потеряны).

Одна очень важная вещь, о которой никто не упоминает, - это тот факт, что CouchDb полагается на индексы b-tree. Это означает, что если у вас есть 1 "строка" или 20 миллиардов, время запроса всегда будет оставаться ниже 10 мс. Это игровой чейнджер, который делает CouchDb доступной с низкой задержкой и удобной для чтения базой данных, и это действительно не следует упускать из виду.

Чтобы быть справедливым и исчерпывающим, преимущество MongoDb над CouchDb - это инструменты и маркетинг. У них есть первоклассные гражданские инструменты для всех основных языков и платформ, которые упрощают сборку, и это добавление к их adhoc-запросам облегчает переход с SQL.

CouchDb не имеет такого уровня инструментальных средств, хотя сегодня доступно много доступных библиотек, но CouchDb отображается как HTTP API, поэтому довольно легко создать обертку на вашем любимом языке, чтобы поговорить с ней. Мне лично нравится такой подход, так как он позволяет избежать раздувания и позволяет брать только то, что вы хотите (принцип разделения сегрегации).

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

Я бы не поощрял использование CouchDb, если вы просто хотите использовать "правильный инструмент для правильной работы". потому что вы узнаете, что вы не можете просто использовать его таким образом, и вы в конечном итоге разозлитесь и напишите сообщения в блоге, такие как "Где соединяются в CouchDb?" и "Где управление транзакциями?". Действительно, Couchdb - парадоксально - очень прозрачен, но в то же время требует сдвига парадигмы и изменения в том, как вы приближаетесь к проблемам, чтобы действительно сиять (и действительно работать).

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

  • 9
    Обновление 2016: Начиная с версии 2.0, выпущенной в сентябре 2016 года, CouchDb поддерживает специальные запросы "из коробки" :)
  • 0
    верно ли это и в отношении docs.couchdb.org/en/2.0.0/query-server ?
21

Я обобщаю ответы, найденные в этой статье:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each

MongoDB: лучший запрос, хранение данных в BSON (более быстрый доступ), улучшенная согласованность данных, несколько коллекций

CouchDB: улучшенная репликация, с мастером для репликации и разрешения конфликтов, хранение данных в JSON (доступный для человека, лучший доступ через службы REST), запрос через уменьшение карты.

Итак, в заключение, MongoDB работает быстрее, CouchDB безопаснее.

Также: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb

  • 5
    Полезный ответ, но заключение трудно любить.
  • 0
    Что вы подразумеваете под "трудно любить"?
Показать ещё 1 комментарий
17

Задайте этот вопрос самостоятельно? И вы решите выбор своей БД.

  • Вам нужен мастер-мастер? Затем CouchDB. В основном CouchDB поддерживает репликацию master-master, которая ожидает, что узлы будут отключены в течение длительных периодов времени. MongoDB не преуспел в этой среде.
  • Вам нужна MAXIMUM R/W пропускная способность? Затем MongoDB
  • Вам нужна максимальная прочность на один сервер, потому что у вас будет только один сервер БД? Затем CouchDB.
  • Вы сохраняете набор МАССИВНЫХ данных, который требует осколки при сохранении безумной пропускной способности? Затем MongoDB.
  • Вам нужна сильная последовательность данных? Затем MongoDB.
  • Вам нужна высокая доступность базы данных? Затем CouchDB.
  • Ожидаете ли вы несколько баз данных и несколько таблиц/коллекций? Затем MongoDB
  • У вас есть автономные пользователи мобильных приложений и хотите синхронизировать данные своей активности с сервером? Тогда вам понадобится CouchDB.
  • Вам нужно большое количество запросов? Затем MongoDB
  • Вам нужно большое сообщество для использования БД? Затем MongoDB
17

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

Проблема заключается в том, что у вас есть поле, которое является уникальным, если оно присутствует, и вы хотите найти все объекты, где это поле отсутствует. Способ использования редких уникальных индексов в Монго заключается в том, что объекты, в которых это поле отсутствует, отсутствуют в индексе вообще - они не могут быть получены запросом в этом поле - {$exists: false} просто не работает.

Единственным обходным решением, которое я придумал, является наличие специального нулевого семейства значений, где пустое значение переводится в специальный префикс (например, null:), объединенный с uuid. Это настоящая головная боль, потому что нужно позаботиться о преобразовании в/из пустых значений при записи/запросе/чтении. Основная неприятность.

Я никогда не использовал выполнение javascript на стороне сервера в MongoDB (в любом случае это не рекомендуется), а их карта/сокращение имеет ужасную производительность, когда есть только один Mongo node. Из-за всех этих причин, которые я сейчас рассматриваю, чтобы проверить CouchDB, возможно, он больше подходит для моего конкретного сценария.

Кстати, если кто-то знает ссылку на соответствующий монгонский вопрос, описывающий редкую уникальную проблему с индексом, пожалуйста, поделитесь.

  • 5
    Вы должны даже использовать редкие уникальные индексы?
  • 0
    На самом деле вы должны. Рассмотрим сущность, описывающую корпорацию. Он должен иметь уникальный служебный номер и может иметь фирменное наименование, которое, если оно присутствует, должно быть уникальным. Пример несколько упрощен, но он не надуман.
Показать ещё 12 комментариев
3

Я уверен, что вы можете с Монго (более знакомы с ним), и вполне уверенно, что с кушеткой тоже можете.

Оба документа документально ориентированы (основаны на JSON), поэтому не было бы "столбцов", а скорее полей в документах, но они могут быть полностью динамическими.

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

Вы могли бы просто попробовать, я думаю, вы должны иметь возможность работать с манго через 5 минут.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню