Коли використовувати CouchDB над MongoDB і навпаки


638

Я застряг між цими двома базами даних NoSQL.

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

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


19
Я б хотів, щоб вони змінили систему, щоб полегшити створення тематичного питання, яке вони шукають, і краще спрямувати користувачів на це питання. Я не маю уявлення, чи було колись вирішене це питання і не було зручного способу його відстежити.
сумневу1ejack

45
Я б хотів, щоб вони додали функціональність на цьому веб-сайті, де ми могли б "внести зміни" або "зняти з себе" причину, що дається в цьому питанні як "поза темою", що може допомогти повернути такий тип питань на "тему".
Санджай

9
++ Мені незрозуміло, чому це поза темою. Питання дійсно має чіткі об'єктивні відповіді - ДР не прошу думку , але для об'єктивної інформації про ці дві системи. user799188 дав чудову об'єктивну відповідь.
user48956

3
Я думаю, адміністратори просто розглядають питання, чи містить він якийсь фрагмент коду, а не той тип інформації, яку шукають. До речі, ви завжди можете проголосувати за повторне відкриття питання.
Тарун

11
Питання просто знову відкрилося. Ласкаво просимо, всі ...
Алексіс Дуфреной

Відповіді:


523

З C, A & P (консистенція, доступність та толерантність до розподілу) які 2 для вас більш важливі? Короткий довідник, Візуальний посібник по системам NoSQL

  • MongodB: Толерантність послідовності та розділення
  • CouchDB: Доступність та допуск розділів

Повідомлення в блозі, « Кассандра» - «MongoDB» проти «CouchDB» проти «Редіс» проти «Riak» проти «HBase vs Membase vs Neo4j», має порівняно найкращі сценарії для кожної бази даних NoSQL. Цитуючи посилання,

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

Нещодавнє (лютий 2012 р.) Та більш всебічне порівняння Ріяда Калла,

  • MongoDB: ТОЛЬКО реплікація головного раба
  • CouchDB: Реплікація Master-Master

Повідомлення в блозі (жовтень 2011 р.), Хто спробував обидва, MongoDB Гай Лінс CouchDB прокоментував, що підказка CouchDB не є такою корисною.

А від (червень 2009) орієнтир по Кристина Чодороу ( частина команди за MongoDB ),

Я б пішов на MongoDB.

Сподіваюся, це допомагає.


8
З того, що я розумію, MongoDB жодним чином не відповідає: ivoras.sharanet.org/blog/tree/…
sheerun

2
Хороша інформація на той час, але ця справді стара ... багато змінилося (включаючи інтерфейси REST для Mongo).
rICh

4
Я думаю, що це може бути трохи оманливо, але версія в couchdb - це не аргумент. Схему версій, яку використовує couchdb, не слід використовувати як версію за умовою. Він використовується для обробки перегородок. Під час ущільнення бази даних, версії видаляються, як і в дійсно видалених. І в базі даних повинні залишатися лише ланцюги оборотів. Якщо ви хочете обробляти версії в couchdb, це слід зробити так само, як це можна зробити в mongodb.
Loïc Faure-Lacroix

2
Я додам до списку, що couchdb може мати самостійні веб-програми. Як у couchdb насправді є веб-сервер.
Loïc Faure-Lacroix

41
Мене дивує 332 голоси за неправильну відповідь. MongoDB є CP за замовчуванням і CouchDB є AP stackoverflow.com/questions/11292215 / ...
Аднан kamili

219

Відповіді понад усе ускладнюють історію.

  1. Якщо ви плануєте мати мобільний компонент або потрібні користувачі робочого столу для роботи в автономному режимі, а потім синхронізувати свою роботу з сервером, вам потрібен CouchDB.
  2. Якщо ваш код працюватиме лише на сервері, тоді перейдіть з MongoDB

Це воно. Якщо вам не потрібна (приголомшлива) здатність CouchDB для копіювання на мобільні та настільні пристрої, MongoDB в даний час має переваги в роботі, спільноті та інструментах.


18
Лаконічні, вони так мені подобаються.
Елі

Я люблю прості не надто технічні відповіді, як це. Дякую!

ця відповідь наближається до тих, хто шукає мобільний, офлайн-синхронізацію! спасибі
Ерік Каплун

Я сміявся, коли читав "копіювати на мобільний пристрій", хай як мало ваших даних?
Даніель В.

3
"хай як мало ваших даних?" - це справді річ? Я можу вибрати CDB, тому що мої дані великі - або я можу вибрати його, тому що він має кращу реплікацію, ніж альтернативи. У цьому випадку ми фільтруємо набори даних приблизно до 100 Мб-200 Мб на пристрій. Це погано?
Ewan Makepeace

62

Дуже давнє запитання, але це поверх Google, і мені не дуже подобаються відповіді, які я бачу, ось ось моя власна.

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

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

Для вирішення пунктів, прийнятих у прийнятій відповіді: CouchDb має чудову систему редагування, але це не означає, що він підходить (або більше підходить) лише для місць, де важливе оновлення. Крім того, couchdb є дружньою для важких записів завдяки своєму природному стилю (записи операцій повертаються в найкоротші терміни, гарантуючи, що жодні дані ніколи не будуть втрачені).

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

Щоб бути справедливим та вичерпним, перевага MongoDb над CouchDb - це інструментальне та маркетингове забезпечення. У них є першокласні інструменти для громадян для всіх основних мов і платформ, що робить його легко на борту, і це додає до їх запиту adhoc, що робить перехід від SQL ще простішим.

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

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

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

Але як тільки ти зробив це, воно справді окупається. Мені особисто потрібні дуже вагомі причини чи великий перешкодник проекту, щоб вибрати іншу базу даних, але поки я жодної не зустрічав.


12
Оновлення 2016 року: з версії 2.0, випущеної у вересні 2016 року, CouchDb підтримує спеціальні запити нестандартно :)
tobiak777

1
CouchDb relies on b-tree indexes. This means that whether you have 1 "row" or 20 billions, the querying time will always remain below 10ms.Хіба це не стосується майже всіх баз даних? Таким чином, це словосполучення означає інше.
Шельваку

38

Задайте собі ці питання самі? І ви вирішите ваш вибір БД.

  1. Вам потрібен майстер-майстер ? Потім CouchDB. Здебільшого CouchDB підтримує реплікацію master-master, яка передбачає відключення вузлів протягом тривалого періоду часу. MongoDB не вдавався б у таких умовах.
  2. Вам потрібна МАКСИМАЛЬНА пропускна здатність ? Потім MongoDB
  3. Вам потрібна максимальна довговічність одного сервера, оскільки ви будете мати лише один сервер БД? Потім CouchDB.
  4. Чи зберігаєте ви МАСИВНИЙ набір даних , який потребує різкості, зберігаючи божевільну пропускну здатність? Потім MongoDB.
  5. Вам потрібна сильна узгодженість даних? Потім MongoDB.
  6. Вам потрібна висока доступність бази даних? Потім CouchDB.
  7. Ви сподіваєтесь на багато баз даних та декілька таблиць / колекцій? Потім MongoDB
  8. У вас є автономні користувачі мобільного додатка і хочете синхронізувати дані про їх діяльність з сервером? Тоді вам потрібен CouchDB.
  9. Вам потрібна велика різноманітність двигуна запитів ? Потім MongoDB
  10. Вам потрібна велика спільнота, щоб використовувати БД? Потім MongoDB

№9 - це віртуальна прив'язка між CouchDB та MongoDB станом на CouchDB 2.x.
Flimzy

27

Я підсумовую відповіді, знайдені в цій статті:

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

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

CouchDB: Краща реплікація, з майстром для освоєння реплікації та вирішення конфліктів, зберігання даних у JSON (для людського читання, кращий доступ через REST-сервіси), запит через зменшення карт.

Отже, на закінчення, MongoDB швидше, CouchDB - безпечніший.

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


7
Відповідь корисна, але висновок важко подобається.
Ерік Каплун

Що ви маєте на увазі під "важко подобатися"?
Олексій Дуфреной

23

Будьте в курсі проблеми із розрідженими унікальними індексами в MongoDB. Я вдарив, і це надзвичайно громіздко вирішується.

Проблема полягає в цьому - у вас є поле, яке є унікальним, якщо воно є, і ви хочете знайти всі об'єкти, де це поле відсутнє. Те, як в Монго реалізуються рідкісні унікальні індекси, полягає в тому, що об’єкти, у яких це поле відсутнє, взагалі відсутні в індексі - їх неможливо отримати запитом у цьому полі - {$exists: false}просто не працює.

Єдине вирішення, яке я придумав, - це створення спеціального нульового сімейства значень, де порожнє значення переводиться на спеціальний префікс (наприклад, null :), приєднаний до uuid. Це справжній головний біль, адже треба пильнувати перетворення в / з порожніх значень під час запису / запитання / читання. Основна неприємність.

Я ніколи не використовував виконання JavaScript на сервері в MongoDB (все одно не рекомендується), і їх карта / зменшення має жахливу ефективність, коли є лише один вузол Mongo. Через всі ці причини я зараз розглядаю можливість перевірити CouchDB, можливо, це більше відповідає моєму конкретному сценарію.

До речі, якщо хтось знає посилання на відповідну проблему Монго, що описує рідкісну унікальну проблему з індексом - будь ласка, поділіться.


3
Вибачте, але у мене є таке нудотне відчуття, що це не дуже гарна ідея, і це почуття я навчився не ігнорувати
орлан,

8
Ну, я не можу посперечатися з почуттям. Я знаю лише те, що мені потрібні були рідкісні унікальні індекси через необов'язкові поля, які є унікальними, якщо вони є.
позначка

37
Я розумію, у вас є фактичний випадок використання, який описує проблему, але як щодо моєї кишки?
Шев

14
Я не знаю. Що з цим?
відмітка

2
ROTFL. +1 Алекс Форд та позначте свої веселі коментарі. :-)) @mark, я не впевнений, що проблеми, які ви перераховуєте, справді виправдовують перехід від MongoDB до CouchDB. Я не працював ні з MongoDB, ні з CouchDB, але мій кишечник говорить мені, що ти зіткнешся з деякими іншими складними обмеженнями з CouchDB і втратитьш ще трохи часу, працюючи над ними. Якщо ви зараз освоїли MongoDB, то, мабуть, ви повинні його дотримуватися. Але знову ж таки, я ніколи не бував у Nosql-land, це лише моя кишка.
MiniQuark

6

Я впевнений, що ви можете з Монго (більш знайомий з цим), і майже впевнений, що можете і з диваном.

Обидва є документально орієнтованими (на базі JSON), тому у документах не буде "стовпців", а скоріше полів - але вони можуть бути повністю динамічними.

Вони обидва роблять це, можливо, ви захочете поглянути на інші фактори, якими можна скористатися: інші функції, які вам цікаві, популярність тощо.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.