Kiedy używać CouchDB w stosunku do MongoDB i odwrotnie

637

Utknąłem między tymi dwiema bazami danych NoSQL.

W moim projekcie będę tworzyć bazę danych w bazie danych. Na przykład potrzebuję rozwiązania do tworzenia dynamicznych tabel.

Użytkownicy mogą tworzyć tabele z kolumnami i wierszami. Myślę, że albo MongoDB, albo CouchDB będą do tego odpowiednie, ale nie jestem pewien, który z nich. Potrzebuję również wydajnego stronicowania.

Luke101
źródło
19
Żałuję, że nie zmodyfikują systemu, aby ułatwić tworzenie poszukiwanego pytania na dany temat i lepiej skierować użytkowników do tego pytania. Nie mam pojęcia, czy to pytanie zostało kiedykolwiek rozwiązane, ani nie ma dogodnego sposobu na jego wyśledzenie.
doub1ejack
45
Chciałbym, aby dodali funkcjonalność na tej stronie, w której moglibyśmy „głosować” lub „głosować” sam powód nadany temu pytaniu jako „nie na temat”, co może pomóc w przekształceniu tego rodzaju pytań z powrotem na „na temat”.
Sanjay,
9
++ Nie jest dla mnie jasne, dlaczego jest to nie na temat. Pytanie, czy mają jasny cel odpowiedź - PO nie jest prośbą o opinię, ale dla obiektywnej informacji na temat tych dwóch systemów. user799188 podał świetną obiektywną odpowiedź.
user48956
3
Myślę, że administratorzy po prostu patrzą na pytanie, czy zawiera jakiś fragment kodu, a nie na rodzaj poszukiwanych informacji. Przy okazji zawsze możesz głosować, aby ponownie otworzyć pytanie.
Tarun
11
Pytanie właśnie się otworzyło. Witajcie z powrotem wszyscy ...
Alexis Dufrenoy

Odpowiedzi:

523

Z C, A i P (spójność, dostępność i tolerancja partycji), które 2 są dla Ciebie ważniejsze? Krótki przegląd, wizualny przewodnik po systemach NoSQL

  • MongodB: Spójność i tolerancja podziału
  • CouchDB: dostępność i tolerancja partycji

W blogu porównanie Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j zawiera scenariusze „ najlepiej używane ” dla każdej porównywanej bazy danych NoSQL. Cytując link,

  • MongoDB: jeśli potrzebujesz zapytań dynamicznych. Jeśli wolisz definiować indeksy, nie mapuj / zmniejszaj funkcji. Jeśli potrzebujesz dobrej wydajności na dużym DB. Jeśli chciałeś CouchDB, ale Twoje dane zmieniają się zbyt mocno, zapełniając dyski.
  • CouchDB: Do gromadzenia, czasami zmieniających się danych, na których mają być uruchamiane wstępnie zdefiniowane zapytania. Miejsca, w których ważne jest przechowywanie wersji.

Ostatnie (luty 2012 r.) I bardziej wyczerpujące porównanie autorstwa Riyada Kalli,

  • MongoDB: TYLKO replikacja Master-Slave
  • CouchDB: Replikacja Master-Master

Wpis na blogu (październik 2011 r.) Autorstwa kogoś, kto wypróbował jedno i drugie, facet z MongoDB dowiaduje się, że CouchDB skomentował, że stronicowanie CouchDB nie jest tak przydatne.

Datowany (czerwiec 2009) test porównawczy autorstwa Kristiny Chodorow ( część zespołu stojącego za MongoDB ),

Wybrałbym MongoDB.

Mam nadzieję, że to pomoże.

użytkownik799188
źródło
8
Z tego, co rozumiem, MongoDB nie jest w żaden sposób spójny
sheerun
2
Dobra informacja na ten czas, ale to jest naprawdę stare ... wiele się zmieniło (w tym interfejsy REST dla Mongo).
RICh
4
Myślę, że może to być nieco mylące, ale wersja w couchdb nie jest argumentem. Schemat kontroli wersji używany przez couchdb nie powinien być używany jako kontrola wersji na powiedzenie. Służy do obsługi partycji. Podczas kompaktowania bazy danych wersje zostaną usunięte tak, jak w rzeczywistości usunięte. I tylko łańcuchy obrotów powinny pozostać w bazie danych. Jeśli chcesz obsługiwać wersje w couchdb, powinieneś to zrobić tak samo, jak w mongodb.
Loïc Faure-Lacroix
2
Dodałbym do listy, że couchdb może mieć samodzielne aplikacje internetowe. Podobnie jak w couchdb jest tak naprawdę serwerem internetowym.
Loïc Faure-Lacroix
41
Dziwi mnie 332 głosy za złą odpowiedź. MongoDB jest domyślnie CP, a CouchDB jest AP stackoverflow.com/questions/11292215/…
adnan kamili
219

Odpowiedzi przede wszystkim komplikują historię.

  1. Jeśli planujesz mieć komponent mobilny lub potrzebujesz użytkowników komputerów stacjonarnych do pracy offline, a następnie zsynchronizować ich pracę z serwerem, potrzebujesz CouchDB.
  2. Jeśli Twój kod będzie działał tylko na serwerze, przejdź do MongoDB

Otóż ​​to. O ile nie potrzebujesz (niesamowitej) możliwości CouchDB do replikacji na urządzenia mobilne i stacjonarne, MongoDB ma obecnie przewagę pod względem wydajności, społeczności i narzędzi.

Ewan Makepeace
źródło
18
Zwięzłe, tak mi się podoba.
Ely
Uwielbiam takie proste, nie nazbyt techniczne odpowiedzi. Dzięki!
ta odpowiedź przydaje się tym, którzy szukają urządzeń mobilnych, offline i synchronizacji! dzięki
Erik Kaplun,
Zaśmiałem się, gdy przeczytałem „replikuj na urządzenie mobilne” lol, jak mało danych?
Daniel W.
3
„lol, jak małe są twoje dane?” - czy to naprawdę coś? Mogę wybrać CDB, ponieważ moje dane są duże - lub mogę to wybrać, ponieważ ma lepszą replikację niż alternatywy. W tym przypadku filtrujemy zestawy danych do około 100 Mb-200 Mb na urządzenie. Czy to źle?
Ewan Makepeace
62

Bardzo stare pytanie, ale jest na górze Google i nie bardzo lubię odpowiedzi, które widzę, więc oto moje własne.

Couchdb ma znacznie więcej niż zdolność do rozwijania CouchApps. Większość osób korzysta z CouchDb w klasycznej trójwarstwowej architekturze internetowej.

W praktyce decydującym czynnikiem dla większości ludzi będzie fakt, że MongoDb zezwala na zapytania ad-hoc ze składnią podobną do SQL, podczas gdy CouchDb tego nie robi (musisz stworzyć mapę / zmniejszyć widoki, które wyłączają niektóre osoby, nawet jeśli tworzysz te widoki jest przyjazny dla szybkiego tworzenia aplikacji - nie mają one nic wspólnego z procedurami przechowywanymi).

Aby zająć się kwestiami podniesionymi w zaakceptowanej odpowiedzi: CouchDb ma świetny system wersjonowania, ale to nie znaczy, że nadaje się tylko (lub lepiej) do miejsc, w których wersjonowanie jest ważne. Ponadto couchdb jest przyjazny dla ciężkich zapisów, ponieważ ma charakter tylko do dołączania (operacje zapisu wracają w krótkim czasie, gwarantując, że żadne dane nigdy nie zostaną utracone).

Jedną bardzo ważną rzeczą, o której nikt nie wspomina, jest fakt, że CouchDb opiera się na indeksach b-drzewa. Oznacza to, że niezależnie od tego, czy masz 1 „wiersz”, czy 20 miliardów, czas zapytania zawsze pozostanie poniżej 10 ms. Jest to zmieniacz gier, który sprawia, że ​​CouchDb jest bazą danych o małych opóźnieniach i przyjazną do odczytu, i to naprawdę nie powinno być pomijane.

Aby być uczciwym i wyczerpującym, przewagą MongoDb nad CouchDb jest oprzyrządowanie i marketing. Posiadają najwyższej klasy narzędzia obywatelskie dla wszystkich głównych języków i platform, dzięki czemu ich wdrożenie jest łatwe, a to dodane do ich zapytań adhoc sprawia, że ​​przejście z SQL jest jeszcze łatwiejsze.

CouchDb nie ma takiego poziomu narzędzi - mimo że obecnie dostępnych jest wiele bibliotek - ale CouchDb jest dostępny jako interfejs API HTTP, dlatego łatwo jest stworzyć opakowanie w swoim ulubionym języku, aby z nim porozmawiać. Osobiście podoba mi się to podejście, ponieważ pozwala uniknąć wzdęć i pozwala ci brać tylko to, co chcesz (zasada segregacji interfejsu).

Więc powiedziałbym, że używanie jednego lub drugiego jest w dużej mierze kwestią wygody i preferencji w ich paradygmatach. Podejście CouchDb „po prostu pasuje”, dla niektórych osób, ale jeśli po zapoznaniu się z funkcjami bazy danych (w wyczerpującym oficjalnym przewodniku ) nie masz momentu „piekło tak”, prawdopodobnie powinieneś przejść dalej.

Odradzam korzystanie z CouchDb, jeśli chcesz po prostu użyć „odpowiedniego narzędzia do właściwej pracy”. bo przekonasz się, że nie możesz tego tak po prostu wykorzystać i skończysz na tym, że będziesz wkurzony i napisze posty na blogu, takie jak „Gdzie są dołączenia do CouchDb?” i „Gdzie jest zarządzanie transakcjami?”. Rzeczywiście Couchdb jest - paradoksalnie - bardzo przejrzysty, ale jednocześnie wymaga zmiany paradygmatu i zmiany w podejściu do problemów, aby naprawdę błyszczeć (i naprawdę pracować).

Ale kiedy to zrobisz, to naprawdę się opłaca. Osobiście potrzebuję bardzo silnych powodów lub poważnego przełomu w projekcie, aby wybrać inną bazę danych, ale jak dotąd nie spotkałem żadnej.

tobiak777
źródło
12
Aktualizacja 2016: Od wersji 2.0 wydanej we wrześniu 2016 r. CouchDb obsługuje zapytania ad-hoc od razu po wyjęciu z pudełka :)
razu po wyjęciu z 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.Czy nie dotyczy to prawie wszystkich baz danych? Ten sposób wyrażenia oznacza inaczej.
Shelvacu
38

Zadaj sobie to pytanie? A ty wybierzesz DB.

  1. Potrzebujesz master-master ? Następnie CouchDB. Głównie CouchDB obsługuje replikację master-master, która przewiduje rozłączanie węzłów na długi okres czasu. MongoDB nie radziłoby sobie dobrze w tym środowisku.
  2. Czy potrzebujesz MAKSYMALNEJ przepustowości R / W ? Następnie MongoDB
  3. Czy potrzebujesz najwyższej trwałości pojedynczego serwera, ponieważ będziesz mieć tylko jeden serwer DB? Następnie CouchDB.
  4. Czy przechowujesz MASYWNY zestaw danych, który wymaga dzielenia przy jednoczesnym zachowaniu szalonej przepustowości? Następnie MongoDB.
  5. Czy potrzebujesz silnej spójności danych? Następnie MongoDB.
  6. Czy potrzebujesz haju? dostępności bazy danych? Następnie CouchDB.
  7. Czy masz nadzieję wiele baz danych i wiele tabel / kolekcji? Następnie MongoDB
  8. Masz użytkowników aplikacji mobilnej offline i chcesz zsynchronizować dane dotyczące ich aktywności z serwerem? Następnie potrzebujesz CouchDB.
  9. Czy potrzebujesz dużej różnorodności zapytań ? Następnie MongoDB
  10. Czy potrzebujesz dużej społeczności, aby korzystać z DB? Następnie MongoDB
Somnath Muluk
źródło
# 9 to wirtualny remis między CouchDB i MongoDB od CouchDB 2.x.
Flimzy,
27

Podsumowuję odpowiedzi znalezione w tym artykule:

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

MongoDB: Lepsze zapytania, przechowywanie danych w BSON (szybszy dostęp), lepsza spójność danych, wiele zbiorów

CouchDB: lepsza replikacja, z replikacją master do master i rozwiązywaniem konfliktów, przechowywanie danych w JSON (czytelne dla człowieka, lepszy dostęp za pośrednictwem usług REST), odpytywanie poprzez redukcję map.

Podsumowując, MongoDB jest szybszy, CouchDB jest bezpieczniejszy.

Także: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb

Alexis Dufrenoy
źródło
7
Przydatna odpowiedź, ale wniosek trudno polubić.
Erik Kaplun,
Co rozumiesz przez „trudno polubić”?
Alexis Dufrenoy,
23

Należy pamiętać o problemie z rzadkimi unikalnymi indeksami w MongoDB. Uderzyłem w to i obejście tego jest bardzo kłopotliwe.

Problem polega na tym, że masz pole, które jest unikalne, jeśli jest obecne, i chcesz znaleźć wszystkie obiekty, w których pole jest nieobecne. Sposób, w jaki rzadkie unikalne indeksy są implementowane w Mongo, polega na tym, że obiekty, w których brakuje tego pola, w ogóle nie znajdują się w indeksie - nie można ich pobrać za pomocą zapytania na tym polu - {$exists: false}po prostu nie działa.

Jedynym obejściem, jakie wpadłem na to, jest posiadanie specjalnej rodziny wartości null, w której pusta wartość jest tłumaczona na specjalny prefiks (jak null :) połączony z uuid. Jest to prawdziwy ból głowy, ponieważ podczas pisania / sprawdzania / czytania należy zadbać o przekształcenie do / z pustych wartości. Poważna uciążliwość.

Nigdy nie korzystałem z wykonywania javascript po stronie serwera w MongoDB (i tak nie jest zalecane), a ich mapowanie / zmniejszanie ma okropną wydajność, gdy jest tylko jeden węzeł Mongo. Z tych wszystkich powodów rozważam teraz wypróbowanie CouchDB, może bardziej pasuje do mojego konkretnego scenariusza.

BTW, jeśli ktoś zna link do odpowiedniego wydania Mongo opisującego rzadki problem z unikalnym indeksem - udostępnij.

znak
źródło
3
Przepraszam, ale mam to dokuczliwe wrażenie, że nie jest to dobry pomysł, i to uczucie, którego nauczyłem się nie ignorować
eaglestorm
8
Cóż, nie mogę się kłócić z uczuciem. Wiem tylko, że potrzebowałem rzadkich unikalnych indeksów, ponieważ pola opcjonalne są unikalne, jeśli są obecne.
zaznacz
37
Rozumiem, że masz rzeczywisty przypadek użycia opisujący problem, ale co z moim jelitem?
Chev
14
Nie wiem. Co z tym?
zaznacz
2
ROTFL. +1 Alex Ford i znak za zabawne komentarze. :-)) @mark, nie jestem pewien, czy wymienione problemy naprawdę uzasadniają przejście z MongoDB na CouchDB. Nie pracowałem ani z MongoDB, ani z CouchDB, ale moje przeczucie mówi mi, że napotkasz inne złożone ograniczenia z CouchDB i zmarnujesz trochę czasu na ich obejście. Jeśli już opanowałeś MongoDB, prawdopodobnie powinieneś go trzymać. Ale znowu, nigdy nie byłem w kraju Nosql, to tylko moje wnętrzności.
MiniQuark,
6

Jestem pewien, że możesz to zrobić z Mongo (bardziej obeznanym z nim) i całkiem pewnie, że możesz także z kanapą.

Oba są zorientowane na dokumenty (oparte na JSON), więc nie byłoby w nich „kolumn”, a raczej pola w dokumentach - ale mogą być w pełni dynamiczne.

Oboje robią to, możesz chcieć spojrzeć na inne czynniki, na których należy użyć: inne funkcje, na których ci zależy, popularność itp. Wgląd Google, oferty pracy na stronie rzeczywiście byłyby sposobami na sprawdzenie popularności.

Możesz po prostu spróbować, myślę, że powinieneś być w stanie uruchomić mongo w 5 minut.

dm.
źródło