MongoDB и CouchDB са типовете базирани на документи NoSQL бази данни. Базата данни за документи се нарича още mdocument store и те обикновено се използват за съхраняване на формата на документа на полуструктурираните данни и подробното им описание. Позволява създаването и актуализирането на програми, без да е необходимо да се препраща към основната схема. Управлението на съдържанието и обработката на данни в мобилното приложение са две от полетата, в които може да се приложи съхраняването на документи.
Общ преглед на MongoDB
MongoDB беше стартирането на 10gen, което произхожда от 2007 г. Идва от семейството на магазините за документи, това е една от типичните NoSQL бази данни без схеми със сравнително висока производителност, мащабируемост и е богата във функциите за обработка на данни. Тази база данни с отворен код е написана на C++ и използва динамични схеми. Архитектурата на MongoDB съдържа документи, групирани в колекции въз основа на тяхната структура. Тази база данни използва BSON. BSON е двоичното представяне на JSON и поддържа съхранение на документи и обмен на данни. В MongoDB бизнес субектите могат да се съхраняват в минимален брой документи, които могат да бъдат индексирани основно или вторично, без да се разделят на множество релационни.
Заедно с гореспоменатите възможности на MongoDB, той предоставя и голяма колекция от набори от реплики, където всеки набор може да съдържа повече от едно копие на данни. В наборите от реплики всички първични функции (четене и запис) се изпълняват върху първичния набор, докато вторични набори се използват в случай на повреда на предишния. MongoDB включва разделяне, което използва процеса на мащабиране хоризонтално. Свойството за балансиране на натоварването на тази база данни за съхранение на документи е оправдано от факта, че тя работи на множество сървъри, като по този начин осигурява дублиране на данни и балансиране на натоварването. В замяна той също така осигурява резервно копие по време на хардуерна повреда. Той също така използва файлова система с мрежа, която разделя конкретния файл на различни части и ги съхранява отделно.
Общите характеристики на MongoDB:
- Дизайнът на модела на данни намалява нуждата от обединения и осигурява лесна еволюция на схемата.
- Висока производителност, тъй като не съдържа нито присъединяване, нито транзакции, които осигуряват бърз достъп и следователно производителността се повишава.
- Висока наличност поради включването на набори от реплики, които могат да осигурят резервно копие по време на неуспехи и също така са много стабилни.
- Леснота в мащабируемостта.
- Свойството за разделяне на MongoDB му позволява да изпълнява бързо и по ефикасен начин в разпределените функции. Това също е възможно, тъй като поддържа хоризонтално мащабиране на данните.
- Езикът е много богат в заявката. MongoDB има свой собствен език за заявки, наречен Mongo език за заявки, който може да замени SQL тези. По подобен начин помощните функции и картографирането или намаляването могат да заменят сложните агрегатни функции.
Общ преглед на CouchDB
CouchDB, продукт на Apache Software Foundation и вдъхновен от Lotus Notes, също е базирана на документи NoSQL база данни с отворен код, която се фокусира главно върху лесната употреба. Това е база данни с един възел, работеща точно като другите бази данни. Обикновено започва с един екземпляр на възел, но може да бъде безпроблемно надстроен до клъстера. Той позволява на потребителя да изпълнява една база данни на много сървъри или виртуални машини. CouchDB клъстер осигурява висок капацитет и наличност в сравнение с CouchDB с един възел. Той използва Erlang, език с общо предназначение. Подобно на MongoDB, той също използва javascript и map/reduce. Той съхранява данни под формата на колекция от документи, а не като таблици. Актуализираният CouchDB е без заключване, което означава, че няма нужда да заключвате базата данни по време на запис. Документите в тази база данни също използват HTTP протокол и JSON, заедно с възможността за прикачване на не-JSON файлове към тях. Така че CouchDB е съвместим с всяко приложение или софтуер, който поддържа формат JSON.
Общите характеристики на CouchDB
- Сървърът CouchDB хоства бази данни с имена, които съхраняват документи с уникално име в базата данни, а CouchDB предоставя RESTful HTTP API за четене и актуализиране (добавяне, редактиране, изтриване) на документи на базата данни
- CouchDB предоставя базиран на браузър GUI за обработка на данните, разрешенията и конфигурацията.
- CouchDB предоставя най-простата форма на репликация.
- CouchDB улеснява удостоверяването и поддръжката на сесии:за да поддържа удостоверяването отворено чрез бисквитка за сесия като уеб приложение.
- CouchDB осигурява сигурност на ниво база данни, където разрешенията на база данни са разделени на четци и администратори. На читателите е разрешено да четат и пишат в базата данни CouchDB.
- CouchDB валидира вмъкнатите данни в базата данни, използвайки удостоверяване, за да потвърди, че идентификаторът на създателя и сесията за влизане са еднакви.
API REST се използва за записване и запитване на данните . Той също така предлага четене, добавяне, редактиране и изтриване на документи. Той използва модела ACID, а не BASE от MVCC реализация. Точно както MongoDB поддържа репликацията на устройства, когато те са офлайн. Той използва специален модел на репликация, наречен Eventual Consistency. CouchDB е много и сериозно надежден по отношение на данните. Базите данни с един възел използват устойчива на срив структура от данни само за добавяне, а мултимодова или клъстерна база данни може да запази данните излишно, така че да могат да бъдат предоставени винаги, когато потребителят има нужда от тях. CouchDB може да се мащабира заедно с големи клъстери като глобални клъстери до малки като мобилни устройства. Възможността да работи на всякакви устройства с Android или iOS прави CouchDB да се откроява сред другите бази данни.
Архитектурата CouchDB се разпространява, която поддържа двупосочна синхронизация. Не изисква никаква схема, тъй като използва уникален идентификатор. Въпреки че CouchDB следва характеристиката на AP (достъпност и толерантност към дялове) на модела CAP, за да се преодолее търгуваната последователност, той следва модела ACID на практическа основа.
Сравнения между CouchDB и MongoDB
Функция за сравнение | CouchDB | MongoDB |
Модел на данни | Той следва документно-ориентирания модел и данните се представят във формат JSON. | Той следва документно-ориентирания модел, но данните се представят във формат BSON. |
Интерфейс | CouchDB използва HTTP/REST-базиран интерфейс. Той е много интуитивен и много добре проектиран. | MongoDB използва двоичния протокол и персонализирания протокол през TCP/IP. |
Хранилище на обекти | В CouchDB базата данни съдържа документи. | В MongoDB базата данни съдържа колекции, а колекцията съдържа документи. |
Скорост | Скоростта на четене е от решаващо значение за базата данни, MongoDB е по-бърз от CouchDB | MongoDB осигурява по-бързи скорости на четене. |
Поддръжка за мобилни устройства | CouchDB може да се изпълнява на устройства с Apple iOS и Android, като предлага поддръжка за мобилни устройства. | Не е предоставена мобилна поддръжка |
Размер | Базата данни може да се разраства с CouchDB; MongoDB е по-подходящ за бърз растеж, когато структурата не е ясно дефинирана от самото начало. | Ако имаме бързо нарастваща база данни, MongoDB е по-добрият избор. |
Метод на заявка | Заявките използват функции за намаляване на картата. Макар че може да е елегантно решение, може да бъде по-трудно за хората с традиционен опит в SQL да се научат. | MongoDB следва Map/Reduce (JavaScript), създавайки колекция + обектно-базиран език за заявки. За потребители с познания в SQL, MongoDB е по-лесен за научаване, тъй като е по-близък по синтаксис. |
Репликация | CouchDB поддържа главен-главен репликация с персонализирани функции за разрешаване на конфликти. | MongoDB поддържа репликация главен-подчинен. |
Успоредност | Тя следва MVCC (Multi-Version Concurrency Control). | Актуализиране на място. |
Предпочитания | CouchDB предпочита наличността. | MongoDB предпочита последователността. |
Последователност на производителността | CouchDB е по-безопасен от MongoDB. | MongoDB, базата данни съдържа колекции, а колекцията съдържа документи. |
Последователност | В крайна сметка CouchDB е последователен. | MongoDB е силно последователен. |
Написано на | Написано е на ерланг. | Написано е на C++. |
Анализ | Ако се нуждаем от база данни, която работи, мобилна, има нужда от главен-главен репликация или издръжливост на един сървър, тогава CouchDB е чудесен избор. | Ако търсим максимална пропускателна способност или имаме бързо нарастваща база данни, MongoDB е правилният начин. |
CouchDB и MongoDB:Много различни заявки
CouchDB и MongDB са ориентирани към документи хранилища за данни, които работят с JSON документи, но когато става въпрос за заявки, и двете бази данни не могат да бъдат повече различни. CouchDB изисква предварително дефинирани изгледи (които по същество са функции на JavaScript MapReduce), а MongoDB поддържа динамични заявки (по принцип това, с което сме свикнали с нормалните RDBMS ad-hoc SQL заявки).
Например, за да вмъкнете някои данни в CouchDB с помощта на RESTClient на Groovy и да издадете RESTful публикация, както следва:
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"])
Примерен код за функция за запитване на всеки документ, чието офицерско свойство е „Майкъл Джордан“:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Когато издадем HTTP GET заявка към името на този изглед, можем да очакваме поне един документ, както е посочено по-долу:
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 работи много както сме свикнали с нормалните бази данни:можем да правим запитвания за всичко, което сърцето ни пожелае по време на изпълнение.
Вмъкване на същия екземпляр на билет за паркиране с помощта на естествения драйвер на 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);
За да направите заявка за всеки билет от MongoDB, издаден от полицай Майкъл Джордан, като просто издадете заявка за собствеността на служителя:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Заключение
В този блог сравнихме две базирани на документи NoSQL бази данни – MongoDB и CouchDB. Таблицата дава преглед на основните параметрични сравнения между тези две бази данни. Както видяхме, приоритетът на проекта ще определи избора на системата. Основните разлики включват метода на репликация и поддръжката на платформата. Освен това от сравненията става ясно, че ако приложението изисква повече ефективност и скорост, тогава MongoDB е по-добър избор, отколкото CouchDB. Ако потребителят трябва да стартира своята база данни на мобилно устройство и също така се нуждае от мулти-мастер репликация, тогава CouchDB е очевиден избор. Също така, MongoDB е по-подходящ от CouchDB, ако базата данни се разраства бързо. Основното предимство на използването на CouchDB е, че се поддържа на мобилни устройства (Android и iOS), а не на MongoDB. Така че по принцип различните изисквания на приложението ще изискват различни бази данни въз основа на сценарии.
Забелязахме, че MongoDB е малко по-добър от CouchDB, тъй като използва подобна на SQL структура на заявки, а същото е по-лесно в първата. Също така, за използване на динамични заявки, MongoDB е далеч по-добър избор. По отношение на сигурността и в двете бази данни, изследванията все още продължават и е трудно да се каже кое от тях осигурява по-добра и сигурна среда.