MongoDB i CouchDB to typy baz danych NoSQL opartych na dokumentach. Baza danych dokumentów jest również nazywana magazynem dokumentów mdocument i są one zwykle używane do przechowywania formatu dokumentu częściowo ustrukturyzowanych danych i ich szczegółowego opisu. Pozwala na tworzenie i aktualizację programów bez konieczności odwoływania się do schematu głównego. Zarządzanie treścią i obsługa danych w aplikacji mobilnej to dwa pola, w których można zastosować magazyn dokumentów.
Przegląd MongoDB
MongoDB był startem modelu 10gen, który powstał w 2007 roku. Pochodząc z rodziny sklepów Document, jest to jedna z typowych, pozbawionych schematów baz danych NoSQL o stosunkowo wysokiej wydajności, skalowalności i bogatej w funkcjach przetwarzania danych. Ta baza danych o otwartym kodzie źródłowym jest napisana w języku C++ i korzysta ze schematów dynamicznych. Architektura MongoDB zawiera dokumenty pogrupowane w kolekcje na podstawie ich struktury. Ta baza danych wykorzystuje BSON. BSON jest binarną reprezentacją JSON i obsługuje przechowywanie dokumentów i wymianę danych. W MongoDB tematy biznesowe mogą być przechowywane w minimalnej liczbie dokumentów, które mogą być indeksowane przede wszystkim lub wtórnie, bez dzielenia ich na wiele relacyjnych.
Wraz z wyżej wymienionymi możliwościami MongoDB zapewnia również dużą kolekcję zestawów replik, gdzie każdy zestaw może zawierać więcej niż jedną kopię danych. W zestawach replik wszystkie podstawowe funkcje (odczyt i zapis) są wykonywane na zestawie podstawowym, natomiast zestawy wtórne są wykorzystywane w przypadku awarii poprzedniego. MongoDB zawiera sharding, który wykorzystuje proces skalowania w poziomie. Właściwość równoważenia obciążenia tej bazy danych magazynu dokumentów jest uzasadniona faktem, że działa ona na wielu serwerach, zapewniając w ten sposób duplikację danych i równoważenie obciążenia. W zamian zapewnia również kopię zapasową podczas awarii sprzętu. Wykorzystuje również system plików grid, który dzieli konkretny plik na różne części i przechowuje je osobno.
Wspólne cechy MongoDB:
- Projekt modelu danych zmniejsza potrzebę złączeń i zapewnia łatwą ewolucję schematu.
- Wysoka wydajność, ponieważ nie zawiera połączeń ani transakcji, które zapewniają szybki dostęp, a zatem wydajność jest zwiększona.
- Wysoka dostępność dzięki włączeniu zestawów replik, które są w stanie zapewnić kopię zapasową podczas awarii, a także są bardzo odporne.
- Łatwa skalowalność.
- Właściwość shardingu MongoDB umożliwia mu szybkie i wydajne wykonywanie funkcji rozproszonych. Jest to również możliwe, ponieważ obsługuje poziome skalowanie danych.
- Język jest bardzo bogaty w zapytania. MongoDB ma własny język zapytań o nazwie Mongo, który może zastąpić języki SQL. Podobnie funkcje użytkowe i mapowanie lub zmniejszanie mogą zastąpić skomplikowane funkcje agregujące.
Przegląd CouchDB
CouchDB, produkt Apache Software Foundation, zainspirowany Lotus Notes, jest również opartą na dokumentach bazą danych typu open source NoSQL, która koncentruje się głównie na łatwości użytkowania. Jest to baza danych z jednym węzłem, działająca dokładnie tak, jak inne bazy danych. Zwykle zaczyna się od wystąpienia pojedynczego węzła, ale można go bezproblemowo uaktualnić do klastra. Pozwala użytkownikowi uruchomić pojedynczą bazę danych na wielu serwerach lub maszynach wirtualnych. Klaster CouchDB zapewnia wysoką pojemność i dostępność w porównaniu z jednowęzłowym CouchDB. Używa Erlang, języka ogólnego przeznaczenia. Podobnie jak MongoDB, używa również javascript i map/reduce. Przechowuje dane w postaci zbioru dokumentów, a nie tabel. Zaktualizowana CouchDB jest bezblokadowa, co oznacza, że nie ma potrzeby blokowania bazy danych podczas zapisu. Dokumenty w tej bazie danych również korzystają z protokołu HTTP i JSON, wraz z możliwością dołączania do nich plików innych niż JSON. Tak więc CouchDB jest kompatybilny z każdą aplikacją lub oprogramowaniem obsługującym format JSON.
Wspólne cechy CouchDB
- Serwer CouchDB obsługuje nazwane bazy danych, które przechowują dokumenty z unikatową nazwą w bazie danych, a CouchDB zapewnia RESTful HTTP API do odczytywania i aktualizowania (dodawania, edytowania, usuwania) dokumentów bazy danych
- CouchDB zapewnia graficzny interfejs użytkownika oparty na przeglądarce do obsługi danych, uprawnień i konfiguracji.
- CouchDB zapewnia najprostszą formę replikacji.
- CouchDB ułatwia uwierzytelnianie i obsługę sesji:aby zachować otwarte uwierzytelnianie za pomocą pliku cookie sesji, takiego jak aplikacja internetowa.
- CouchDB zapewnia zabezpieczenia na poziomie bazy danych, gdzie uprawnienia na bazę danych są rozdzielone na czytelników i administratorów. Czytelnicy mogą czytać i pisać w bazie danych CouchDB.
- CouchDB sprawdza poprawność wprowadzonych danych do bazy danych przy użyciu uwierzytelniania, aby sprawdzić, czy twórca i identyfikator sesji logowania są takie same.
Interfejs API REST służy do zapisywania i wysyłania zapytań do danych . Oferuje również odczytywanie, dodawanie, edytowanie i usuwanie dokumentów. Wykorzystuje model ACID zamiast BASE przez implementację MVCC. Podobnie jak MongoDB obsługuje replikację urządzeń, gdy są one offline. Wykorzystuje specjalny model replikacji o nazwie Ewentualna Spójność. CouchDB jest wysoce i poważnie niezawodny pod względem danych. Jednowęzłowe bazy danych wykorzystują odporną na awarie strukturę danych tylko do dołączania, a wielotrybowa lub klastrowa baza danych może nadmiarowo zapisywać dane, dzięki czemu można je udostępnić zawsze, gdy użytkownik tego potrzebuje. CouchDB można skalować od tak dużych klastrów, jak klastry globalne, do tak małych, jak urządzenia mobilne. Możliwość uruchomienia na dowolnym urządzeniu z systemem Android lub iOS sprawia, że CouchDB wyróżnia się spośród innych baz danych.
Architektura CouchDB jest rozproszona, która obsługuje synchronizację dwukierunkową. Nie wymaga żadnego schematu, ponieważ wykorzystuje unikalny identyfikator. Chociaż CouchDB podąża za cechą AP (dostępność i tolerancja partycji) modelu CAP, aby przezwyciężyć spójność handlową, w praktyce stosuje się model ACID.
Porównania między CouchDB i MongoDB
Funkcja porównania | CouchDB | MongoDB |
Model danych | Jest zgodny z modelem zorientowanym na dokument, a dane są prezentowane w formacie JSON. | Jest zgodny z modelem zorientowanym na dokument, ale dane są prezentowane w formacie BSON. |
Interfejs | CouchDB używa interfejsu opartego na HTTP/REST. Jest bardzo intuicyjny i bardzo dobrze zaprojektowany. | MongoDB używa protokołu binarnego i protokołu niestandardowego przez TCP/IP. |
Przechowywanie obiektów | W CouchDB baza danych zawiera dokumenty. | W MongoDB baza danych zawiera kolekcje, a kolekcja zawiera dokumenty. |
Prędkość | Szybkość odczytu ma kluczowe znaczenie dla bazy danych, MongoDB jest szybszy niż CouchDB | MongoDB zapewnia większe prędkości odczytu. |
Wsparcie dla telefonów komórkowych | CouchDB można uruchomić na urządzeniach Apple iOS i Android, oferując obsługę urządzeń mobilnych. | Brak obsługi mobilnej |
Rozmiar | Baza danych może rosnąć wraz z CouchDB; MongoDB lepiej nadaje się do szybkiego wzrostu, gdy struktura nie jest jasno zdefiniowana od początku. | Jeśli mamy szybko rosnącą bazę danych, MongoDB jest lepszym wyborem. |
Metoda zapytania | Zapytania używają funkcji map-reduce. Chociaż może to być eleganckie rozwiązanie, może być trudniej uczyć się osobom z tradycyjnym doświadczeniem SQL. | MongoDB podąża za Map/Reduce (JavaScript) tworząc kolekcję + obiektowy język zapytań. Dla użytkowników posiadających wiedzę na temat SQL, MongoDB jest łatwiejszy do nauczenia, ponieważ ma bliższą składnię. |
Replikacja | CouchDB obsługuje replikację master-master z niestandardowymi funkcjami rozwiązywania konfliktów. | MongoDB obsługuje replikację master-slave. |
Współbieżność | Jest zgodny z MVCC (Multi-Version Concurrency Control). | Aktualizuj na miejscu. |
Preferencje | CouchDB sprzyja dostępności. | MongoDB sprzyja spójności. |
Spójność działania | CouchDB jest bezpieczniejszy niż MongoDB. | MongoDB, baza danych zawiera kolekcje, a kolekcja zawiera dokumenty. |
Spójność | CouchDB jest ostatecznie spójny. | MongoDB jest mocno spójny. |
Napisane w | Jest napisany w języku Erlang. | Jest napisany w C++. |
Analiza | Jeśli potrzebujemy bazy danych działającej na urządzeniach mobilnych, potrzebujemy replikacji master-master lub trwałości pojedynczego serwera, CouchDB jest doskonałym wyborem. | Jeśli szukamy maksymalnej przepustowości lub mamy szybko rosnącą bazę danych, MongoDB jest najlepszym wyborem. |
CouchDB i MongoDB:bardzo różne zapytania
CouchDB i MongDB to magazyny danych zorientowane na dokumenty, które działają z dokumentami JSON, ale jeśli chodzi o zapytania, obie bazy danych nie mogłyby się bardziej różnić. CouchDB wymaga wstępnie zdefiniowanych widoków (które są zasadniczo funkcjami MapReduce JavaScript), a MongoDB obsługuje zapytania dynamiczne (w zasadzie to, do czego jesteśmy przyzwyczajeni z normalnymi zapytaniami SQL ad-hoc RDBMS).
Na przykład, aby wstawić niektóre dane do CouchDB za pomocą klienta RESTClient Groovy i wystawić post RESTful, jak poniżej:
import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])
Przykładowy kod funkcji do odpytywania dowolnego dokumentu, którego własnością oficera jest „Micheal Jordan”:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Kiedy wysyłamy żądanie HTTP GET do nazwy tego widoku, możemy oczekiwać co najmniej jednego dokumentu, jak poniżej:
response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}
MongoDB działa podobnie jak zwykłe bazy danych:możemy zadawać pytania o to, czego dusza zapragnie w czasie wykonywania.
Wstawianie tej samej instancji biletu parkingowego przy użyciu natywnego sterownika Java MongoDB:
DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);
Aby zapytać o jakikolwiek bilet z MongoDB wystawiony przez funkcjonariusza Michaela Jordana, po prostu wysyłając zapytanie do nieruchomości funkcjonariusza:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Wnioski
W tym blogu porównaliśmy dwie oparte na dokumentach bazy danych NoSQL — MongoDB i CouchDB. Tabela zawiera przegląd głównych porównań parametrycznych między tymi dwiema bazami danych. Jak widzieliśmy, o wyborze systemu zadecyduje priorytet projektu. Główne różnice obejmują metodę replikacji i obsługę platformy. Również z porównań jasno wynika, że jeśli aplikacja wymaga większej wydajności i szybkości, to MongoDB jest lepszym wyborem niż CouchDB. Jeśli użytkownik musi uruchomić swoją bazę danych na urządzeniu mobilnym, a także potrzebuje replikacji z wieloma wzorcami, CouchDB jest oczywistym wyborem. Ponadto MongoDB sprawdza się lepiej niż CouchDB, jeśli baza danych szybko rośnie. Główną zaletą korzystania z CouchDB jest to, że jest obsługiwany na urządzeniach mobilnych (Android i iOS), a nie MongoDB. Zasadniczo różne wymagania aplikacji będą wymagały różnych baz danych w zależności od scenariuszy.
Zaobserwowaliśmy, że MongoDB jest nieco lepszy niż CouchDB, ponieważ wykorzystuje strukturę zapytań podobną do SQL, a to samo jest łatwiejsze w pierwszym. Ponadto, jeśli chodzi o używanie zapytań dynamicznych, MongoDB jest znacznie lepszym wyborem. Jeśli chodzi o bezpieczeństwo w obu bazach danych, badania wciąż trwają i trudno powiedzieć, która z nich zapewnia lepsze i bezpieczne środowisko.