Открояващи се NoSQL: Най-добрите бази данни с документи

„Правилният инструмент за правилната работа.“ Ако такава мъдрост е вярна някъде, тя със сигурност важи с избора на база данни, която разработчикът избира за дадено приложение. Базите данни на документи, едно от семейството на продуктите за данни, наричани общо „NoSQL“, са за разработчици, които искат да се съсредоточат върху своето приложение, а не върху технологията на базата данни .

С база данни на документи данните не се съхраняват в таблици с различни типове колони. Вместо това се съхранява във „документи“ със свободен формат с произволен брой полета и произволен брой вложени структури. Такива документи обикновено се представят като JSON и се актуализират или чрез API, или чрез изпращане на JSON до REST крайна точка. Повечето всеки съвременен език за програмиране поддържа JSON и REST, така че работата с база данни с документи изглежда по-скоро като работа с тези структури от данни, отколкото работа с традиционна база данни.

Този безсхемен дизайн, както се нарича, има своите ограничения. Разработчикът трябва да свърши повече работа, за да гарантира, че вмъкнатите данни са последователни, тъй като такава последователност не винаги се гарантира от самата база данни. SQL, стандартният и широко разбираем език за работа с бази данни, не се поддържа от повечето бази данни, така че тези със съществуващ опит в базата данни трябва да започнат от нулата. Но удобството, скоростта, мащабируемостта и гъвкавостта на базата данни с документи е трудно да се победи, когато пишете приложение, което се нуждае от протеинова структура със свободна форма на данни.

Тук сме профилирали седем от най-известните и най-широко използваните бази данни на документи. Четири от седемте - CouchDB, Couchbase Server, MongoDB и RethinkDB - са проекти с отворен код с малко или никакви практически пречки за започване; Couchbase и MongoDB се предлагат и в поддържани корпоративни издания с търговски лицензи. Останалите три - Amazon DynamoDB, Google Firebase и IBM Cloudant - са хоствани услуги от големи доставчици на облаци, при които тясната интеграция с други услуги в тези облаци е голяма полза.

Вижте таблицата по-долу, за да сравните характеристиките; превъртете надясно в таблицата, за да видите всички колони, като използвате лентата за превъртане отдолу. Прочетете за кратки дискусии на всяка база данни.

L W M S I A O

1. Инструментите на трети страни могат да предоставят тази функционалност. 2 . На маса. 3 . Само за корпоративно издание. 4 . Преглед само на функции. 5 . Предлагат се и многодокументални транзакции, но не и на остри клъстери.

Ключ: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = други мобилни устройства,
  Amazon DynamoDB Cosmos DB Лежанка CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB Преосмислете DB
Платформи Само в облак Само в облак LWM LWMIAO Само в облак Само в облак LWMS LWMS LWM
Системи за заявки REST API Кабелен протокол MongoDB Memcached протокол, REST API REST API REST / JavaScript API REST API REST API JSON-базиран API, частичен REST API ReQL език за заявки, REST API
SQL заявки № 1 Да Чрез езика N1QL Не Не Не Да № 1 Не
Силно писане Да Да Да Не Да Не За XML схеми Да Да
Родни присъединява Не Да Да Не Не Не Да Да Да
Разделяне на рязкост Да Да Да Да NA Да Да Да Да2
Групиране NA Да Да Да NA NA Да Да Да
Репликация Да Да Да Да NA Да Да Да На маса
Консистенция: Незабавна На четене Да Като цяло Не Свързани клиенти Не Да На писане На документ
Консистенция: Евентуална Да Да Да Да Офлайн клиенти Да Да Да Цяла база данни
Съвпадение Да Да Да Да Да Да Да Да Да
Операции в паметта NA NA Не Не NA Не NA Да3 Не
Съхранени процедури Не JavaScript JavaScript4 JavaScript4 Правила JavaScript4 Модул XQuery JavaScript Не
Транзакции По приложение Да Единични документи Единични документи Да Единични документи Единични документи Отделни документи5 Единични документи
Сегашна версия NA NA 5.0 (октомври 2017 г.) 2.1.1 (ноември 2017 г.) NA NA 9,0 (май 2016 г.) 3.4.10 (октомври 2017 г.) 2.3.6 (юли 2017 г.)
Първоначално освобождаване 2012 г. 2017 г. 2011 г. 2005 г. 2012 г. 2010 г. 2005 г. 2009 г. 2009 г.

Amazon DynamoDB

Магазинът за документи DynamoDB на Amazon започна живот през 2012 г. като продължение на SimpleDB на Amazon. Под предния капак се захранва от магазин за ключови стойности, Динамо. Съразработчик на DynamoDB по-късно ще използва много от същите идеи, за да създаде Apache Cassandra. 

Характеристики на DynamoDB

Подобно на повечето други облачни предложения на Amazon, DynamoDB е управлявана услуга за плащане, колкото искате. Разработчиците определят колко капацитет за съхранение да осигурят за съхраняване на неструктурирани документи или двойки ключ-стойност и избират фиксиран лимит на почасова ставка за заявки за четене и запис в базата данни. Няма нужда да предоставяте сървъри или да конфигурирате репликация - Amazon обработва всичко това под завивките и наскоро добави автоматично мащабиране към микса.

Естествено, DynamoDB предлага на разработчиците полезна интеграция с други услуги в облака на Amazon. Тригерите, например, могат да бъдат настроени чрез функциите на AWS Lambda. BI и инструментите за анализ на Amazon също са наблизо. Близостта до тези услуги е удобна, но също така означава, че Amazon може да продаде функционалността по всякакъв начин. Кеширането и ускорението а ла Редис, например, се предлагат чрез DynamoDB Accelerator, добавка с допълнителни разходи.

DynamoDB Local

Няма да намерите DynamoDB в инкарнация с отворен код. Предлага се изключително като хоствано предложение в облака на Amazon.

Въпреки това, за разлика от много други бази данни в облака, DynamoDB се предлага и във версия, която може да се изтегли и стартира локално. Но DynamoDB Local не е предназначен за производствена употреба, а по-скоро като начин за поставяне на приложение в тестова среда, без да се изисква свързаност или пускане на сметка на Amazon.

Microsoft Azure Cosmos DB

Cosmos DB е амбициозен проект, система от бази данни, която обхваща множество модели за съхранение и извличане на данни. Cosmos DB може да служи като база данни на документи, колонна база данни, база данни с графики или съхранение на ключ-стойност, позволявайки на потребителя да избере парадигмата, която му подхожда, и да използва различни API за работа с тези парадигми. 

Функции на Cosmos DB

Вместо да изобрети изцяло нов API за система от бази данни на документи, Cosmos DB предоставя API, съвместим с популярния MongoDB (обсъден по-долу). Сред предимствата е, че съществуващият код, който използва MongoDB интерфейсни библиотеки или двоичния проводник на MongoDB, може да работи както е. Това означава, че Cosmos DB може да предоставя MongoDB като услуга. По същия начин Cosmos DB поддържа API на Cassandra, популярната база данни от семейства колони. 

Microsoft изтъква няколко предимства на Cosmos DB, които не са непременно изключителни за функционалността на базата данни с документи, но са предназначени да се харесат на тези приложения на базата данни за изграждане на документи. Едно такова предложение са регулируемите нива на последователност. Ако имате някои класове на транзакции с документи, които изискват по-голяма последователност в регионите на Azure от други, можете да ги зададете ръчно на база на транзакция.

Други характеристики са по-специфични за базите данни на документи. Например потребителите на MongoDB трябва да настройват индекси в колекциите на документи, за да оптимизират търсенията. Потребителите на Cosmos DB, работещи с API на MongoDB, не трябва да настройват индексиране за документи, тъй като всяко свойство във вмъкнато документирано автоматично се индексира.

Използване на Cosmos DB в Microsoft Azure

Няма локално хоствана версия на Cosmos DB. Предлага се само като услуга в облака на Microsoft Azure. Въпреки това, API за разработка на Cosmos DB са достъпни за повечето популярни корпоративни езици - Java, Node.js, .NET и Python.

Couchbase сървър

Couchbase не е толкова брат или сестра на CouchDB, колкото наследник. Couchbase е изграден върху работата, извършена в CouchDB и Membase, но не е свързан с нито един от тези проекти. Това е база данни с документи и разпределено хранилище ключ-стойност, превърнато в едно, с усъвършенствани функции като автоматичен отказ и репликация на кръстосани центрове за данни, предназначени за случаи на корпоративна употреба.

Функции на Couchbase

Една функция, която отличава Couchbase, не само от другите конкуренти на NoSQL, но и от предшественика си CouchDB, е неговият SQL-подобен език за заявки, наречен N1QL (произнася се „никел“). N1QL не предлага пълния набор от команди, които бихте очаквали от изпълнението на ANSI SQL, но предоставя достатъчно полезни функции, като JOIN операции, за някой с SQL опит да получи работещи резултати.

Системата за заявки Couchbase не е само за разработчици, но и за администраторите на данни и бизнес анализаторите, които обикновено се занимават с конвенционални бази данни. Функции като EXPLAIN ключовата дума изглежда са били включени специално, за да привлекат тази тълпа.

Като комбинация от бази данни на документи и хранилище на ключ-стойност, Couchbase съхранява документи, като използва техните уникални идентификатори като ключ. На документите може да се присвоят и стойности за актуализиране на времето, за да функционират като кеш ключ-стойност. Въпреки това, истинската система за кеширане на ключ-стойност като Redis ще бъде далеч по-бърза за основното съхранение на ключ-стойност, но Couchbase е по-гъвкава и Redis и Couchbase могат да се комбинират ефективно, за да ускорят нещата. В тази бележка Couchbase има вградена поддръжка за протокола Memcached, така че съществуващите приложения, които използват Memcached, могат да се включат в Couchbase като заместител.

Couchbase общност срещу Enterprise

Couchbase Server се предлага в пълноценно корпоративно издание, безплатно за общност издание и издание с отворен код, което е основата за останалите. Бинарни файлове за изтегляне за корпоративното издание и изданието на общността са достъпни от сайта на Couchbase, а изходният код е достъпен от сайта за разработчици на Couchbase. (Няма едно хранилище на GitHub за проекта с отворен код Couchbase, тъй като това е съвкупност от няколко проекта.)

Изданието на общността може да бъде внедрено в производство, но липсва по-усъвършенстваните функции на корпоративното издание, както и поддръжка, така че не-купувачът трябва да се пази. Някои функции в Couchbase, като неговата функционалност за хоризонтално мащабиране, са намерили своето място в проекта CouchDB, но това е по-скоро изключение, отколкото правило.

Couchbase Lite

Друго издание на Couchbase, достойно за внимание за разработчиците на приложения, е Couchbase Lite, вградена версия на Couchbase, която може да се синхронизира с екземпляри на пълното издание. Couchbase Lite е ключовият компонент в Couchbase Mobile, стек от приложения за мобилни приложения, които се нуждаят от хранилище за данни, което се синхронизира автоматично със заден край. Couchbase Mobile се предлага за iOS, Android, Java. .Net, MacOS и tvOS.

CouchDB

Проектът CouchDB е започнал през 2005 г. от бивш разработчик на IBM и е преместен в Apache Software Foundation през 2008 г. Понякога се предполага, че CouchDB е основата за Couchbase, но CouchDB и Couchbase са паралелни проекти с различни цели.

CouchDB срещу Couchbase

Докато Couchbase е едновременно база данни на документи и хранилище на ключ-стойност, CouchDB е строго база данни на документи. И докато Couchbase отдавна се фокусира върху корпоративни функции като толерантност към грешки и подобен на SQL език за заявки, подобни сладкиши едва започват да пристигат в CouchDB.

CouchDB функции

CouchDB подчертава простотата на внедряване и лекотата на използване. Извличането на данни от базата данни е толкова просто, колкото изпращането на JSON-форматирани заявки до REST HTTPS крайна точка, като резултатите се връщат в JSON. Повечето всеки съвременен език за програмиране могат да правят тези неща, а също така да извършват картографирането и намаляването, необходимо за създаване на изгледите зад заявките и отчетите на CouchDB. Няма нужда от ODBC драйвер или конектор за данни.

Един от специалните сосове на CouchDB е технологията за съгласуване на данните. Промените, направени в един партньор на CouchDB, автоматично се съгласуват с други, по начин, подобен на система за контрол на версиите. Всички конфликти между версиите на документите се запазват, сякаш са били предишни ревизии на този документ.

Този евентуално последователен модел е полезен за бази данни, които не са винаги или постоянно свързани (например за периодично свързани мобилни приложения), или в случаите, когато не се нуждаете от най-новата и най-добрата версия на данни в определен възел. Но евентуалната последователност е и едно от най-големите предупреждения на CouchDB. Ако сте се нуждаят от незабавна консистенция, CouchDB не е мястото да го намери.

Мащабируемостта отдавна е слабо място за CouchDB, но наскоро тя беше разгледана. Версия 2.0 се разбърка в нова технология за клъстериране, благодарение на битове, отворени от Cloudant / IBM и обединени в проекта. И накрая, за тези, които са запознати с MongoDB и искат да използват подобен декларативен синтаксис на заявката, проектът Mango, също от Cloudant / IBM, предвижда това като външна добавка.

Изтегляне на CouchDB

CouchDB двоичните файлове за всички основни платформи и изходния код могат да бъдат изтеглени от официалния сайт на CouchDB. Източникът на проекта е достъпен и на GitHub.

База данни на Google Firebase в реално време

Може да мислите за Google Firebase като за отговора на Google на DynamoDB - начин за осигуряване на бързо синхронизиращо съхранение на данни между облачен back-end и локални приложения на множество платформи.

Базата данни в реално време на Firebase е само един компонент в стека на Firebase, предназначен за изграждане на приложения, затрудняващи ангажираността и прозрението на аудиторията. Целият стек включва функции като удостоверяване, наблюдение на производителността, потребителски анализ и много други, но тук се фокусираме върху самия Firebase.

Функции на Google Firebase

Google придоби Firebase през 2014 г. През годините след това той свързва Firebase, за да се възползва от много функции на Google Cloud. Google Cloud Functions за Firebase например ви позволява да задействате JavaScript функции в облака в отговор на събития във Firebase. Google Analytics за Firebase ви позволява да изтегляте данни от мобилни приложения в BigQuery за по-задълбочен анализ.

Тъй като игрите са едно от целевите приложения на Firebase, SDK, предоставени за Firebase, включват рамката за разработка на игри на Unity за различни платформи. Разработчиците, работещи по по-конвенционални проекти, насочени към предприятията или ориентирани към потребителите, имат много други възможности за избор: роден iOS и Android, C ++, общ уеб / JavaScript и всеки друг език, който поддържа REST (Java, Python, вие го наричате).

Firebase е проектиран да работи в сценарии, при които свързаността не е гарантирана. Подобно на CouchDB, той кешира промените локално, когато е офлайн, и автоматично се синхронизира със задния край, когато връзката се върне. Имайте предвид, че Firebase не е проектиран да се използва като самостоятелно, изцяло офлайн решение; на Android, например, локалните бази данни са ограничени до 10 MB за съхранение.

Firebase на Google Cloud и GitHub

Firebase не се предлага като самостоятелен продукт, но е наличен само като част от предложенията на Google за облачни продукти. Хранилището на Firebase GitHub има изходен код за SDK и за различни инструменти, специфични за платформата.

IBM Cloudant

Cloudant е по същество хостваното издание на CouchDB на IBM. Първоначално Cloudant е независима компания, предлагаща издание на CouchDB, наречено „BigCouch“, което се хоства в облака на IBM SoftLayer. През 2014 г. IBM придоби направо Cloudant като част от цялостния тласък на IBM към анализи и големи данни. 

Cloudant срещу CouchDB

Cloudant е предназначен да бъде повече от хоствана версия на CouchDB. Cloudant предоставя функции, които не са лесно достъпни в самия CouchDB, като например интегрирано търсене на пълен текст. Пълнотекстовото търсене в CouchDB обикновено изисква интеграция с външни проекти. Данните могат да се репликират в двете посоки между Cloudant и екземпляр на CouchDB, така че е относително лесно да се придвижвате между двете, ако е необходимо.

Някои от подобренията на Cloudant в CouchDB намериха своя път обратно в основния проект CouchDB, включително функционалността на CouchDB 2.0 за хоризонтално мащабиране и интерфейсът на езика за заявки Mango. Но не приемайте това като доказателство, че функциите на Cloudant автоматично ще се стичат до CouchDB.

Cloudant на IBM Cloud

Cloudant е предимно облачно предложение на IBM Cloud, където може да се използва заедно с други продукти за данни на IBM Cloud, като dashDB, DataWorks и Watson Analytics.

Облачно местно

Изданието на Cloudant зад защитната стена, наречено Cloudant Local, предлага всички същите функционалности като хостваното в облака предложение. Cloudant Local е наличен за Ubuntu и Red Hat за x86 Linux, както и за собствената система на IBM z z Red Hat или Suse. Разработчиците могат да изтеглят безплатна версия, тествана и разработена само в образ на Docker.