NoSQL - MongoDB vs CouchDB [zamknięte]

154

Jestem kompletnym noobem, jeśli chodzi o ruch NoSQL. Wiele słyszałem o MongoDB i CouchDB. Wiem, że są między nimi różnice. Którą naukę polecasz jako pierwszy krok do świata NoSQL?

mpenrow
źródło
Jako pierwszy krok mongoDB jest lepszy, ponieważ jest łatwiejszy do nauczenia, ale ma pewne problemy. Nie ma najlepszego wyboru, aby użyć konkretnej bazy danych noSQL, zależy to od tego, co musisz zrobić. Zobacz zorientowane na dokument, klucz-wartość, zorientowane na wykresy, zorientowane na kolumny.
Chris

Odpowiedzi:

148

Zobacz poniższe linki

Aktualizacja : Znalazłem świetne porównanie baz danych NoSQL .

MongoDB (3,2)

  • Napisane w: C ++
  • Główny punkt: magazyn dokumentów JSON
  • Licencja: AGPL (sterowniki: Apache)
  • Protokół: niestandardowy, binarny (BSON)
  • Replikacja master / slave (automatyczne przełączanie awaryjne z zestawami replik)
  • Wbudowane fragmentowanie
  • Zapytania to wyrażenia javascript
  • Uruchom dowolne funkcje javascript po stronie serwera
  • Posiada indeksowanie i zapytania geoprzestrzenne
  • Wiele silników pamięci masowej o różnych charakterystykach wydajności
  • Wydajność nad funkcjami
  • Walidacja dokumentów
  • Dziennik
  • Potężne ramy agregacji
  • W systemach 32-bitowych, ograniczenie do ~ 2,5 Gb
  • Zintegrowane wyszukiwanie tekstu
  • GridFS do przechowywania dużych zbiorów danych + metadane (nie w rzeczywistości FS)
  • Świadomość centrum danych

Najlepiej używane : jeśli potrzebujesz dynamicznych zapytań. Jeśli wolisz definiować indeksy, nie mapuj / zmniejszaj funkcje. Jeśli potrzebujesz dobrej wydajności na dużej bazie danych. Gdybyś chciał CouchDB, ale twoje dane zbytnio się zmieniają, zapełniając dyski.

Na przykład : w przypadku większości rzeczy, które zrobiłbyś z MySQL lub PostgreSQL, ale posiadanie wstępnie zdefiniowanych kolumn naprawdę cię powstrzymuje.

CouchDB (1.2)

  • Napisane w: Erlang
  • Główny punkt: spójność DB, łatwość użycia
  • Licencja: Apache
  • Protokół: HTTP / REST
  • Replikacja dwukierunkowa (!),
  • ciągłe lub ad-hoc,
  • z wykrywaniem konfliktów,
  • w ten sposób replikacja typu master-master. (!)
  • MVCC - operacje zapisu nie blokują odczytów
  • Dostępne są poprzednie wersje dokumentów
  • Konstrukcja odporna na awarie (niezawodna)
  • Od czasu do czasu wymaga zagęszczania
  • Widoki: osadzona mapa / redukcja
  • Formatowanie widoków: listy i pokazy
  • Możliwa walidacja dokumentów po stronie serwera
  • Możliwość uwierzytelnienia
  • Aktualizacje w czasie rzeczywistym przez „_changes” (!)
  • Obsługa załączników

Najlepiej używane : do gromadzenia, okazjonalnie zmieniających się danych, na których mają być uruchamiane predefiniowane zapytania. Miejsca, w których przechowywanie wersji jest ważne.

Na przykład : CRM, systemy CMS. Szczególnie interesującą funkcją jest replikacja typu master-master, która umożliwia łatwe wdrażanie w wielu lokalizacjach.

amra
źródło
1
Dla każdego, kto martwi się, że licencja serwera MongoDB to AGPL, przyjrzenie się polityce licencyjnej Mongodb może przynieść pewną ulgę.
Patrick,
@amra Więc masz na myśli, że jeśli zapiszę dane i tylko je odczytam, użycie couchdb jest najlepszym wyborem?
verystrongjoe
@verystrongjoe Zależy to od złożoności danych i zapytań. Nie można ogólnie powiedzieć, który z nich jest najlepszy.
amra
@amra Ok. Ale .. Jeśli będzie gromadzić dane i wybierać dane i będę musiał wybierać między mongo a kanapą, która jest lepsza?
verystrongjoe
CouchApps „nie są już zalecane” od ~ 2012 r .: docs.couchdb.com/en/latest/ddocs
Tim Sylvester
123

Jeśli pochodzisz ze świata MySQL, MongoDB będzie dla Ciebie o wiele bardziej naturalne dzięki obsłudze języka podobnego do zapytań.

Myślę, że to właśnie sprawia, że ​​jest tak przyjazny dla wielu ludzi.

CouchDB jest fantastyczny, jeśli chcesz wykorzystać naprawdę świetne wsparcie replikacji typu master-master z konfiguracją wielowęzłową, prawdopodobnie w różnych centrach danych lub coś w tym rodzaju.

Replikacja MongoDB (zestawy replik) to konfiguracja master-slave-slave-slave- *, możesz tylko zapisywać do mastera w zestawie replik i czytać z dowolnego z nich.

W przypadku standardowej konfiguracji witryny jest to w porządku. Bardzo dobrze odwzorowuje użycie MySQL.

Ale jeśli próbujesz stworzyć globalną usługę, taką jak CDN, która musi synchronizować wszystkie globalne węzły, nawet jeśli odczyt / zapis do nich wszystkich, coś takiego jak replikacja w CouchDB będzie dla ciebie ogromnym dobrodziejstwem.

Podczas gdy MongoDB ma język podobny do zapytań, którego można używać i który jest bardzo intuicyjny, CouchDB przyjmuje podejście „zmniejszania mapy” i takie koncepcje widoków. Na początku wydaje się to dziwne, ale kiedy już to zrozumiesz, naprawdę zaczyna wydawać się intuicyjne.

Oto krótki przegląd, więc ma to jakiś sens:

  • CouchDB przechowuje wszystkie twoje dane w b-drzewie
  • Nie możesz dynamicznie wyszukiwać go w zapytaniach, np. „SELECT * FROM user WHERE ...”
  • Zamiast tego definiujesz odrębne „widoki” swoich danych ... „tutaj jest widok wszystkich moich użytkowników”, „tutaj jest widok wszystkich użytkowników w wieku powyżej 10 lat” „tutaj jest widok wszystkich użytkowników starszych niż 30” i wkrótce.
  • Widoki te są definiowane przy użyciu podejścia zmniejszania mapy i są zdefiniowane jako funkcje JavaScript.
  • Kiedy definiujesz widok, DB zaczyna przekazywać wszystkie dokumenty bazy danych, do której przypisałeś widok, poprzez niego i zapisywać wyniki funkcji jako „indeks” tych danych.
  • Istnieje kilka podstawowych zapytań, które możesz wykonać w widokach, takich jak pytanie o określony klucz (ID) lub zakres identyfikatorów, niezależnie od tego, co robi twoja funkcja map / redukuj.
  • Przeczytaj te slajdy , to najlepsze wyjaśnienie mapy / redukcji w Couch, jakie widziałem.

Tak więc oba te źródła używają dokumentów JSON, ale CouchDB podąża za podejściem „każdy serwer jest mistrzem i może synchronizować się ze światem”, co jest fantastyczne, jeśli jest to potrzebne, podczas gdy MongoDB jest naprawdę MySQL świata NoSQL.

Więc jeśli to brzmi bardziej jak to, czego potrzebujesz / chcesz, idź do tego.

Drobne różnice, takie jak protokół binarny Mongo i interfejs RESTful CouchDB, to drobne szczegóły.

Jeśli chcesz surowego szybkość i do diabła z bezpieczeństwem danych, to można dokonać Mongo szybciej niż CouchDB jak można powiedzieć to działać z pamięci i nie popełnić rzeczy na dysku z wyjątkiem rzadkich odstępach czasu.

Możesz zrobić to samo z Couch, ale jego protokół komunikacyjny oparty na HTTP będzie 2-4x wolniejszy niż nieprzetworzona komunikacja binarna z Mongo w tej "prędkości ponad wszystko!" scenariusz.

Pamiętaj, że surowa szalona szalona prędkość jest bezużyteczna, jeśli awaria serwera lub awaria dysku zepsuje i wznieci twoją bazę danych w zapomnienie, więc punkt danych nie jest tak niesamowity, jak mogłoby się wydawać (chyba że robisz systemy handlu w czasie rzeczywistym na Wall Ulica, w takim przypadku spójrz na Redis).

Mam nadzieję, że to wszystko pomoże!

Riyad Kalla
źródło
„MongoDB to naprawdę MySQL świata NoSQL” - nie wiem, czy coś się zmieniło, ale ten artykuł z 2014 roku się z tym nie zgadza: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım
Chociaż, luźno w duchu, myślę, że komentarz nadal działa, masz rację, DUŻO zmieniło się w ciągu ostatniej połowy dekady i mój komentarz powinien zostać łatwo odrzucony.
Riyad Kalla,
1

Obecnie na rynku jest o wiele więcej baz danych NoSQL niż kiedykolwiek wcześniej. Sugeruję nawet przyjrzenie się Gartnerowi Magic Quadrant, jeśli szukasz bazy danych, która będzie również świetna do aplikacji korporacyjnych w oparciu o wsparcie, możliwości rozbudowy, zarządzanie i koszty.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Chciałbym zasugerować Couchbase każdemu, kto jeszcze go nie wypróbował, ale nie w oparciu o wersję, która jest pokazana w raporcie (2.5.1), ponieważ jest prawie 2 wersje za tym, co obecnie znajduje się CB Server, zbliżając się do wydania 4.0 w drugiej połowie 2015 r. .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Inną częścią dotyczącą Couchbase jako dostawcy / produktu jest to, że jest to baza danych wielokrotnego użytku. Może działać jako czysty magazyn K / V, baza danych zorientowana na dokumenty ze skalowaniem wielowymiarowym, pamięć podręczna, pamięć podręczna z trwałością i obsługuje SQL zgodny z ANSI 92 z automatycznymi łączeniami, replikacją do klastrów DR za naciśnięciem przycisku i ma nawet element mobilny wbudowany w ekosystem.

Jeśli nic więcej, warto sprawdzić najnowsze testy porównawcze:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

Austin Gonyou
źródło