Wyróżnienia NoSQL: Najlepsze bazy danych dokumentów

„Właściwe narzędzie do właściwej pracy”. Jeśli taka mądrość sprawdza się gdziekolwiek, z pewnością sprawdza się przy wyborze bazy danych, którą programista wybiera dla danej aplikacji. Bazy danych dokumentów, jedna z rodziny produktów danych określanych zbiorczo jako „NoSQL”, są przeznaczone dla programistów, którzy chcą skupić się na swoich aplikacjach, a nie na technologii baz danych .

W bazie danych dokumentów dane nie są przechowywane w tabelach z różnymi typami kolumn. Zamiast tego jest przechowywany w dowolnych „dokumentach” z dowolną liczbą pól i dowolną liczbą zagnieżdżonych struktur. Takie dokumenty są zwykle reprezentowane jako JSON i aktualizowane za pomocą interfejsów API lub wysyłając JSON do punktu końcowego REST. Większość współczesnych języków programowania obsługuje JSON i REST, więc praca z bazą danych dokumentów przypomina bardziej natywną pracę z tymi strukturami danych niż pracę z tradycyjną bazą danych.

Ten pozbawiony schematów projekt, jak to się nazywa, ma swoje ograniczenia. Deweloper musi wykonać więcej pracy, aby zapewnić spójność wstawianych danych, ponieważ taka spójność nie zawsze jest gwarantowana przez samą bazę danych. SQL, standardowy i szeroko rozumiany język do pracy z bazami danych, nie jest obsługiwany przez większość baz danych dokumentów, więc osoby z istniejącą wiedzą na temat baz danych muszą zacząć od zera. Ale wygoda, szybkość, skalowalność i wszechstronność bazy danych dokumentów jest trudna do pokonania, gdy piszesz aplikację, która wymaga proteanicznej, swobodnej struktury danych.

Tutaj sprofilowaliśmy siedem najbardziej znanych i najczęściej używanych baz danych dokumentów. Cztery z siedmiu - CouchDB, Couchbase Server, MongoDB i RethinkDB - to projekty typu open source, z niewielkimi lub żadnymi praktycznymi barierami na początku; Couchbase i MongoDB są również dostępne w obsługiwanych wersjach dla przedsiębiorstw na licencjach komercyjnych. Pozostałe trzy - Amazon DynamoDB, Google Firebase i IBM Cloudant - to usługi hostowane od głównych dostawców chmury, w przypadku których ścisła integracja z innymi usługami w tych chmurach jest wielką atrakcją.

Zobacz tabelę poniżej, aby porównać funkcje; przewiń w prawo w tabeli, aby zobaczyć wszystkie kolumny, używając paska przewijania na dole. Przeczytaj krótkie omówienie każdej bazy danych.

L W M S I A O

1. Narzędzia innych firm mogą zapewniać tę funkcjonalność. 2 . Na stół. 3 . Tylko wersja Enterprise. 4 . Wyświetl tylko funkcje. 5 . Dostępne są również transakcje wielodokumentowe, ale nie w klastrach podzielonych na fragmenty.

Klucz: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = inny telefon komórkowy,
  Amazon DynamoDB Cosmos DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
Platformy Tylko w chmurze Tylko w chmurze LWM LWMIAO Tylko w chmurze Tylko w chmurze LWMS LWMS LWM
Systemy zapytań REST API Protokół przewodowy MongoDB Protokół Memcached, REST API REST API REST / JavaScript API REST API REST API Interfejs API oparty na JSON, częściowy interfejs REST API Język zapytań ReQL, REST API
Zapytania SQL Nr 1 tak Za pośrednictwem języka N1QL Nie Nie Nie tak Nr 1 Nie
Silne pisanie tak tak tak Nie tak Nie W przypadku schematów XML tak tak
Połączenia natywne Nie tak tak Nie Nie Nie tak tak tak
Podział na fragmenty tak tak tak tak NA tak tak tak Tak 2
Grupowanie NA tak tak tak NA NA tak tak tak
Replikacja tak tak tak tak NA tak tak tak Na stół
Konsystencja: natychmiastowa Za przeczytane tak Ogólnie Nie Połączeni klienci Nie tak Za pisać Na dokument
Konsystencja: ostateczna tak tak tak tak Klienci offline tak tak tak Cała baza danych
Konkurencja tak tak tak tak tak tak tak tak tak
Operacje w pamięci NA NA Nie Nie NA Nie NA Tak 3 Nie
Procedury składowane Nie JavaScript JavaScript4 JavaScript4 Zasady JavaScript4 Moduł XQuery JavaScript Nie
Transakcje Według aplikacji tak Pojedyncze dokumenty Pojedyncze dokumenty tak Pojedyncze dokumenty Pojedyncze dokumenty Pojedyncze dokumenty 5 Pojedyncze dokumenty
Obecna wersja NA NA 5.0 (październik 2017) 2.1.1 (listopad 2017) NA NA 9.0 (maj 2016) 3.4.10 (październik 2017) 2.3.6 (lipiec 2017)
Pierwsze wydanie 2012 2017 2011 2005 2012 2010 2005 2009 2009

Amazon DynamoDB

Magazyn dokumentów DynamoDB firmy Amazon powstał w 2012 roku jako rozszerzenie SimpleDB firmy Amazon. Pod maską jest zasilany przez sklep z kluczowymi wartościami, Dynamo. Współtwórca DynamoDB wykorzystał później wiele takich samych pomysłów, aby stworzyć Apache Cassandra. 

Funkcje DynamoDB

Podobnie jak większość innych ofert chmurowych firmy Amazon, DynamoDB jest usługą zarządzaną typu „płać zgodnie z rzeczywistym użyciem”. Deweloperzy określają, jaką pojemność pamięci mają zapewnić przechowywanie dokumentów bez struktury lub par klucz-wartość, a także wybierają stałą stawkę godzinową dla żądań odczytu i zapisu w bazie danych. Nie ma potrzeby udostępniania serwerów ani konfigurowania replikacji - Amazon zajmuje się tym wszystkim pod osłonami, a ostatnio dodał do zestawu autoskalowanie.

Oczywiście DynamoDB oferuje programistom przydatne integracje z innymi usługami w chmurze Amazon. Na przykład wyzwalacze można skonfigurować za pomocą funkcji AWS Lambda. W pobliżu znajdują się również narzędzia analizy biznesowej i analizy firmy Amazon. Bliskość tych usług jest wygodna, ale oznacza również, że Amazon może sprzedawać dodatkowe funkcje na wiele sposobów. Na przykład buforowanie i przyspieszanie a la Redis są dostępne za pośrednictwem DynamoDB Accelerator, dodatku kosztującego plus.

DynamoDB Local

Nie znajdziesz DynamoDB w inkarnacji open source. Jest dostępny wyłącznie jako oferta hostowana w chmurze Amazon.

To powiedziawszy, w przeciwieństwie do wielu innych baz danych natywnych dla chmury, DynamoDB jest również dostępne w wersji, którą można pobrać i uruchomić lokalnie. Ale DynamoDB Local nie jest przeznaczony do użytku produkcyjnego, ale raczej jako sposób na przygotowanie aplikacji w środowisku testowym bez konieczności łączenia się z siecią lub uruchamiania rachunku Amazon.

Microsoft Azure Cosmos DB

Cosmos DB to ambitny projekt, system baz danych, który obejmuje wiele modeli do przechowywania i pobierania danych. Cosmos DB może służyć jako baza danych dokumentów, baza danych kolumnowych, baza danych wykresów lub magazyn wartości klucz-wartość, umożliwiając użytkownikowi wybranie paradygmatu, który mu odpowiada i korzystanie z różnych interfejsów API do pracy z tymi paradygmatami. 

Funkcje Cosmos DB

Zamiast wymyślać całkowicie nowy interfejs API dla systemu bazy danych dokumentów, Cosmos DB zapewnia interfejs API zgodny z popularną MongoDB (omówioną poniżej). Jedną z korzyści jest to, że istniejący kod, który korzysta z bibliotek interfejsu MongoDB lub binarnego protokołu przewodowego MongoDB, może działać tak, jak jest. Sprowadza się to do tego, że Cosmos DB może udostępniać MongoDB jako usługę. Podobnie Cosmos DB obsługuje interfejs API Cassandra, popularnej bazy danych rodziny kolumn. 

Firma Microsoft zachwala kilka zalet rozwiązania Cosmos DB, które niekoniecznie dotyczą wyłącznie funkcji bazy danych dokumentów, ale są przeznaczone dla osób tworzących aplikacje baz danych dokumentów. Jedną z takich ofert są dostrajane poziomy spójności. Jeśli masz niektóre klasy transakcji dokumentów, które wymagają większej spójności między regionami platformy Azure niż inne, możesz ręcznie określić je dla poszczególnych transakcji.

Inne funkcje są bardziej specyficzne dla baz danych dokumentów. Na przykład użytkownicy MongoDB muszą skonfigurować indeksy w kolekcjach dokumentów, aby zoptymalizować wyszukiwanie. Użytkownicy Cosmos DB pracujący z interfejsami API MongoDB nie muszą konfigurować indeksowania dokumentów, ponieważ każda właściwość we wstawionym dokumencie jest automatycznie indeksowana.

Korzystanie z rozwiązania Cosmos DB na platformie Microsoft Azure

Nie ma lokalnie hostowanej wersji Cosmos DB. Jest dostępny tylko jako usługa w chmurze Microsoft Azure. To powiedziawszy, programistyczne interfejsy API dla Cosmos DB są dostępne dla większości popularnych języków korporacyjnych - Java, Node.js, .NET i Python.

Serwer Couchbase

Couchbase jest nie tyle rodzeństwem CouchDB, ile następcą. Couchbase został zbudowany na podstawie pracy wykonanej w CouchDB i Membase, ale nie jest powiązany z żadnym z tych projektów. Jest to baza danych dokumentów i rozproszony magazyn wartości kluczy w jednym, z zaawansowanymi funkcjami, takimi jak automatyczne przełączanie awaryjne i replikacja między centrami danych, przeznaczona do zastosowań korporacyjnych.

Funkcje Couchbase

Jedną z funkcji, która wyróżnia Couchbase, nie tylko na tle innych konkurentów NoSQL, ale także od jego poprzednika CouchDB, jest podobny do SQL język zapytań o nazwie N1QL (wymawiane jako „nickel”). N1QL nie oferuje pełnego zakresu poleceń, których można by oczekiwać od implementacji ANSI SQL, ale zapewnia wystarczającą liczbę przydatnych funkcji, takich jak operacje JOIN, dla kogoś z doświadczeniem w SQL, aby uzyskać wykonalne wyniki.

System zapytań Couchbase jest przeznaczony nie tylko dla programistów, ale także dla administratorów baz danych i analityków biznesowych, którzy zwykle mają do czynienia z konwencjonalnymi bazami danych. Wydaje się, że funkcje takie jak słowo kluczowe EXPLAIN zostały wprowadzone specjalnie po to, by przyciągnąć uwagę tego tłumu.

Jako połączenie bazy danych dokumentów i magazynu wartości klucza, Couchbase przechowuje dokumenty, używając ich unikalnych identyfikatorów jako klucza. Dokumentom można również przypisywać wartości czasu życia, aby działały jak pamięć podręczna klucza i wartości. To powiedziawszy, prawdziwy system buforowania wartości klucza, taki jak Redis, będzie znacznie szybszy w przypadku podstawowego przechowywania klucza i wartości, ale Couchbase jest bardziej elastyczny, a Redis i Couchbase można skutecznie połączyć, aby przyspieszyć działanie. W związku z tym Couchbase ma natywną obsługę protokołu Memcached, więc istniejące aplikacje, które używają Memcached, mogą w zastępstwie podłączyć się do Couchbase.

Społeczność Couchbase kontra przedsiębiorstwo

Couchbase Server jest dostępny w pełnowymiarowej płatnej edycji dla przedsiębiorstw, bezpłatnej edycji społecznościowej oraz w wersji open source, która jest podstawą dla pozostałych. Pliki binarne do pobrania dla wersji Enterprise i Community są dostępne w witrynie Couchbase, a kod źródłowy jest dostępny w witrynie programistów Couchbase. (Nie ma jednego repozytorium GitHub dla projektu open source Couchbase, ponieważ jest to agregacja kilku projektów).

Edycję Community można wdrożyć w środowisku produkcyjnym, ale brakuje jej bardziej zaawansowanych funkcji, a także wsparcia dla wersji Enterprise, dlatego osoby niebędące kupującymi powinny mieć się na baczności. Niektóre funkcje Couchbase, takie jak funkcja skalowania poziomego, znalazły swoje miejsce w projekcie CouchDB, ale jest to raczej wyjątek niż reguła.

Couchbase Lite

Inną edycją Couchbase wartą uwagi dla twórców aplikacji jest Couchbase Lite, osadzalna wersja Couchbase, która może synchronizować się z instancjami pełnej wersji. Couchbase Lite jest kluczowym komponentem Couchbase Mobile, stosu aplikacji dla aplikacji mobilnych, które wymagają magazynu danych, który automatycznie synchronizuje się z zapleczem. Couchbase Mobile jest dostępny dla systemów iOS, Android, Java. .Net, MacOS i tvOS.

CouchDB

Projekt CouchDB został zapoczątkowany w 2005 roku przez byłego programistę IBM i przeniesiony do Apache Software Foundation w 2008 roku. Czasami zakłada się, że CouchDB jest podstawą Couchbase, ale CouchDB i Couchbase to równoległe projekty o różnych celach.

CouchDB kontra Couchbase

Podczas gdy Couchbase jest zarówno bazą danych dokumentów, jak i magazynem kluczy i wartości, CouchDB jest wyłącznie bazą danych dokumentów. I chociaż Couchbase od dawna koncentruje się na funkcjach korporacyjnych, takich jak odporność na błędy i język zapytań podobny do SQL, takie niuanse dopiero zaczynają pojawiać się w CouchDB.

Funkcje CouchDB

CouchDB kładzie nacisk na prostotę wdrożenia i łatwość użytkowania. Pobieranie danych z bazy danych jest tak proste, jak wysyłanie zapytań w formacie JSON do punktu końcowego HTTPS REST, a wyniki zwracane są w formacie JSON. Niemal każdy nowoczesny język programowania może robić te rzeczy, a także wykonywać mapowanie i redukcje potrzebne do tworzenia widoków za zapytaniami i raportami CouchDB. Nie ma potrzeby stosowania sterownika ODBC ani złącza danych.

Jednym ze specjalnych sosów CouchDB jest technologia uzgadniania danych. Zmiany dokonane w jednym peer CouchDB są automatycznie uzgadniane z innymi, w sposób podobny do systemu kontroli wersji. Wszelkie konflikty między wersjami dokumentu są zachowywane tak, jakby były poprzednimi wersjami tego dokumentu.

Ten ostatecznie spójny model jest przydatny w przypadku baz danych, które nie są zawsze lub konsekwentnie połączone (na przykład w przypadku sporadycznie połączonych aplikacji mobilnych) lub w przypadkach, gdy nie potrzebujesz najnowszej i najlepszej wersji danych w określonym węźle. Ale ostateczna konsekwencja jest również jednym z największych zastrzeżeń CouchDB. Jeśli nie wymagają natychmiastowej konsystencję, CouchDB nie jest miejsce, aby go odnaleźć.

Skalowalność od dawna jest słabym punktem CouchDB, ale ostatnio została rozwiązana. Wersja 2.0 wykorzystała nową technologię klastrowania, dzięki uprzejmości bitów open source pochodzących z Cloudant / IBM i włączona do projektu. Wreszcie, dla tych, którzy znają MongoDB i chcą używać podobnej deklaratywnej składni zapytań, projekt Mango, również z Cloudant / IBM, zapewnia to jako zewnętrzny dodatek.

Pobieranie CouchDB

Pliki binarne CouchDB dla wszystkich głównych platform oraz kod źródłowy można pobrać z oficjalnej strony CouchDB. Źródło projektu jest również dostępne na GitHub.

Baza danych czasu rzeczywistego Google Firebase

Możesz pomyśleć o Google Firebase jako o odpowiedzi Google na DynamoDB - sposobie na zapewnienie szybkiej synchronizacji przechowywania danych między zapleczem chmury a lokalnymi aplikacjami na wielu platformach.

Baza danych czasu rzeczywistego Firebase to tylko jeden z elementów stosu Firebase, przeznaczony do tworzenia aplikacji, które mają duże znaczenie dla zaangażowania i analizy odbiorców. Cały stos obejmuje funkcje takie jak uwierzytelnianie, monitorowanie wydajności, analityka użytkowników i wiele innych, ale tutaj skupiamy się na samym Firebase.

Funkcje Google Firebase

Firma Google przejęła Firebase w 2014 roku. Od tego czasu połączyła Firebase, aby korzystać z wielu funkcji Google Cloud. Na przykład Google Cloud Functions dla Firebase umożliwia wyzwalanie funkcji JavaScript w chmurze w odpowiedzi na zdarzenia Firebase. Google Analytics dla Firebase umożliwia pobieranie danych aplikacji mobilnych do BigQuery w celu dokładniejszej analizy.

Ponieważ gry są jedną z docelowych aplikacji Firebase, zestawy SDK dostarczone dla Firebase obejmują platformę tworzenia gier międzyplatformowych Unity. Programiści pracujący nad bardziej konwencjonalnymi projektami skoncentrowanymi na przedsiębiorstwach lub konsumentach mają wiele innych możliwości: natywny system iOS i Android, C ++, ogólna sieć internetowa / JavaScript i dowolny inny język obsługujący REST (Java, Python, jak go nazywasz).

Firebase jest zaprojektowany do pracy w sytuacjach, w których łączność nie jest gwarantowana. Podobnie jak CouchDB, buforuje zmiany lokalnie w trybie offline i automatycznie synchronizuje się z zapleczem po przywróceniu łączności. Pamiętaj, że Firebase nie jest przeznaczony do użytku jako samodzielne, całkowicie offline rozwiązanie; na przykład w systemie Android lokalne bazy danych są ograniczone do 10 MB miejsca.

Firebase w Google Cloud i GitHub

Firebase nie jest dostępny jako samodzielny produkt, ale jest dostępny tylko jako część oferty produktów chmurowych Google. Repozytorium Firebase GitHub zawiera kod źródłowy dla pakietów SDK i różnych narzędzi specyficznych dla platformy.

IBM Cloudant

Cloudant jest zasadniczo hostowaną przez IBM edycją CouchDB. Początkowo Cloudant była niezależną firmą oferującą edycję CouchDB o nazwie „BigCouch”, która była hostowana w chmurze IBM SoftLayer. W 2014 roku IBM bezpośrednio przejął Cloudant w ramach ogólnego dążenia IBM do analiz i dużych zbiorów danych. 

Cloudant kontra CouchDB

Cloudant ma być czymś więcej niż hostowaną wersją CouchDB. Cloudant zapewnia funkcje, które nie są łatwo dostępne w samej CouchDB, takie jak natywnie zintegrowane wyszukiwanie pełnotekstowe. Wyszukiwanie pełnotekstowe w CouchDB zazwyczaj wymaga integracji z projektami zewnętrznymi. Dane mogą być replikowane w obu kierunkach między Cloudant a instancją CouchDB, więc stosunkowo łatwo jest przenosić między nimi w razie potrzeby.

Niektóre z ulepszeń Cloudant w CouchDB wróciły do ​​podstawowego projektu CouchDB, w tym funkcja skalowania poziomego CouchDB 2.0 i interfejs języka zapytań Mango. Ale nie traktuj tego jako dowodu, że funkcje Cloudant automatycznie przenikną do CouchDB.

Cloudant na IBM Cloud

Cloudant to przede wszystkim oferta chmurowa w chmurze IBM Cloud, gdzie może być używana w połączeniu z innymi produktami przetwarzania danych IBM Cloud, takimi jak dashDB, DataWorks i Watson Analytics.

Cloudant Local

Wersja Cloudant dostępna za zaporą ogniową, zwana Cloudant Local, oferuje wszystkie te same funkcje, co oferta hostowana w chmurze. Cloudant Local jest dostępny w wersjach Ubuntu i Red Hat systemu x86 Linux, a także na własnym systemie IBM z systemem Red Hat lub Suse. Programiści mogą pobrać bezpłatną wersję przeznaczoną tylko do testów i tworzenia w obrazie platformy Docker.