Programmering

NoSQL-standouts: De bedste dokumentdatabaser

"Det rigtige værktøj til det rigtige job." Hvis sådan visdom gælder hvor som helst, gælder det bestemt med valget af database, som en udvikler vælger til en given applikation. Dokumentdatabaser, en af ​​familien af ​​dataprodukter, der samlet betegnes som "NoSQL", er til udviklere, der ønsker at fokusere på deres Ansøgning snarere end databaseteknologi.

Med en dokumentdatabase lagres data ikke i tabeller med forskellige kolonnetyper. I stedet gemmes det i "freeform" -dokumenter med et hvilket som helst antal felter og et vilkårligt antal indlejrede strukturer. Sådanne dokumenter er typisk repræsenteret som JSON og opdateres enten ved hjælp af API'er eller ved at sende JSON til et REST-slutpunkt. De fleste ethvert moderne programmeringssprog understøtter JSON og REST, så det at arbejde med en dokumentdatabase føles mere som at arbejde indbygget med disse datastrukturer end at arbejde med en traditionel database.

Dette skemløse design, som det kaldes, har sine begrænsninger. En udvikler skal gøre mere arbejde for at sikre, at indsatte data er konsistente, fordi sådan konsistens ikke altid garanteres af selve databasen. SQL, standardproblemet og det forståede sprog til databasearbejde, understøttes ikke af de fleste dokumentdatabaser, så dem med eksisterende databaseekspertise skal starte fra bunden. Men bekvemmeligheden, hastigheden, skalerbarheden og alsidigheden i en dokumentdatabase er svær at slå, når du skriver et program, der har brug for en protean datastruktur i fri form.

Her har vi profileret syv af de bedst kendte og mest anvendte dokumentdatabaser. Fire af de syv - CouchDB, Couchbase Server, MongoDB og RethinkDB - er open source-projekter med få eller ingen praktiske barrierer for at komme i gang; Couchbase og MongoDB er også tilgængelige i understøttede virksomhedsudgaver under kommercielle licenser. De andre tre - Amazon DynamoDB, Google Firebase og IBM Cloudant - er hostede tjenester fra store cloud-leverandører, hvor tæt integration med andre tjenester i disse skyer er et stort træk.

Se tabellen nedenfor for at sammenligne funktioner; rul til højre i tabellen for at se alle kolonner ved hjælp af rullepanelet i bunden. Læs videre for korte diskussioner af hver database.

Nøgle: L= Linux, W= Windows, M= MacOS, S= Solaris, jeg= iOS, EN= Android, O= anden mobil,

1. Tredjepartsværktøjer kan give denne funktionalitet. 2. Per bord. 3. Kun Enterprise-udgave. 4. Vis kun funktioner. 5. Multidokumenttransaktioner er også tilgængelige, men ikke på knuste klynger.

 Amazon DynamoDBCosmos DBCouchbaseCouchDBGoogle FirebaseIBM CloudantMarkLogicMongoDBRethinkDB
PlatformeKun skyKun skyLWMLWMIAOKun skyKun skyLWMSLWMSLWM
ForespørgselssystemerREST APIMongoDB wire-protokolMemcached-protokol, REST APIREST APIREST / JavaScript APIREST APIREST APIJSON-baseret API, delvis REST APIReQL-forespørgselssprog, REST API
SQL-forespørgsel Nej 1JaVia N1QL-sprog Ingen Ingen Ingen Ja Nej 1 Ingen
Stærk typingJaJaJa Ingen Ja Ingen Til XML-skemaerJaJa
Indfødte slutter sig Ingen JaJa Ingen Ingen Ingen JaJaJa
OpdelingspartitioneringJaJaJaJaNAJaJaJaJa2
Klyngedannelse NA JaJaJa NA NA JaJaJa
ReplikationJaJaJaJa NA JaJaJaPer bord
Konsistens: UmiddelbarPer læsningJaPer samlet Ingen Forbundne klienter Ingen JaPer skrivningPer dokument
Konsistens: EventueltJaJaJaJaOffline klienterJaJaJaHele databasen
SamtidighedJaJaJaJaJaJaJaJaJa
Funktioner i hukommelsen NA NA Ingen Ingen NA Ingen NA Ja 3 Ingen
Gemte procedurer Ingen JavaScriptJavaScript4JavaScript4ReglerJavaScript4XQuery-modulJavaScript Ingen
TransaktionerEfter appJaEnkeltdokumenterEnkeltdokumenterJaEnkeltdokumenterEnkeltdokumenterEnkeltdokumenter5Enkeltdokumenter
Nuværende versionNANA5.0 (okt. 2017)2.1.1 (nov. 2017)NANA9.0 (maj 2016)3.4.10 (okt. 2017)2.3.6 (jul. 2017)
Første udgivelse201220172011200520122010200520092009

Amazon DynamoDB

Amazons DynamoDB-dokumentbutik begyndte i 2012 som en udvidelse af Amazons SimpleDB. Under emhætten drives den af ​​en nøgleværdibutik, Dynamo. En co-udvikler af DynamoDB ville senere trække på mange af de samme ideer til at oprette Apache Cassandra.

DynamoDB-funktioner

Som de fleste af Amazons andre cloud-tilbud er DynamoDB en betalt-som-du-går-for-hvad-du-har brug for-administreret service. Udviklere indstiller, hvor meget lagerkapacitet der skal leveres til opbevaring af ustrukturerede dokumenter eller nøgleværdipar, og vælger en fast timesats for læsning og skriveanmodning til databasen. Intet behov for at tilvejebringe servere eller konfigurere replikering - Amazon håndterer alt dette under coveret og for nylig tilføjet autoskalering til blandingen.

Naturligvis tilbyder DynamoDB udviklere nyttige integrationer med andre tjenester i Amazon skyen. Udløsere kan f.eks. Oprettes ved hjælp af AWS Lambda-funktioner. Amazons BI- og analyseværktøjer er også i nærheden. Nærheden til disse tjenester er praktisk, men det betyder også, at Amazon kan sælge funktionalitet på mange måder. Cache og acceleration a la Redis er f.eks. Tilgængelige via DynamoDB Accelerator, en omkostnings-plus-tilføjelse.

DynamoDB Local

Du finder ikke DynamoDB i en open source-inkarnation. Den er udelukkende tilgængelig som et hostet tilbud på Amazon-skyen.

Når det er sagt, i modsætning til mange andre cloud-native databaser, er DynamoDB også tilgængelig i en version, der kan downloades og køres lokalt. Men DynamoDB Local er ikke beregnet til produktionsanvendelse, men snarere som en måde at iscenesætte en applikation i et testmiljø uden at kræve forbindelse eller køre en Amazon-regning.

Microsoft Azure Cosmos DB

Cosmos DB er et ambitiøst projekt, et databasesystem, der omfatter flere modeller til lagring og hentning af data. Cosmos DB kan fungere som en dokumentdatabase, en søjledatabase, en grafdatabase eller en nøgleværdilager, så brugeren kan vælge det paradigme, der passer dem og trække på forskellige API'er til at arbejde med disse paradigmer.

Cosmos DB funktioner

I stedet for at opfinde en helt ny API til et dokumentdatabasesystem, leverer Cosmos DB en API, der er kompatibel med den populære MongoDB (diskuteret nedenfor). Blandt fordelene er, at eksisterende kode, der bruger MongoDB-interface-biblioteker eller MongoDBs binære wire-protokol, kan fungere som den er. Det svarer til, at Cosmos DB er i stand til at levere MongoDB som en tjeneste. Ligeledes understøtter Cosmos DB API af Cassandra, den populære kolonne-familie database.

Microsoft viser flere fordele for Cosmos DB, der ikke nødvendigvis er eksklusive for dets dokumentdatabasefunktionalitet, men er beregnet til at appellere til disse bygningsdokumentdatabaseapplikationer. Et sådant tilbud er tunbare konsistensniveauer. Hvis du har nogle klasser af dokumenttransaktioner, der kræver stærkere konsistens på tværs af Azure-regioner end andre, kan du manuelt specificere dem pr. Transaktion.

Andre funktioner er mere specifikke for dokumentdatabaser. For eksempel skal MongoDB-brugere oprette indekser på dokumentsamlinger for at optimere søgninger. Cosmos DB-brugere, der arbejder med MongoDB API'erne, behøver ikke at indstille indeksering for dokumenter, da hver egenskab i en indsat dokumenteret automatisk indekseres.

Brug af Cosmos DB på Microsoft Azure

Der er ingen lokalt hostet version af Cosmos DB. Den er kun tilgængelig som en tjeneste i Microsoft Azure-skyen. Når det er sagt, er udviklings-API'er til Cosmos DB tilgængelige for de fleste populære virksomhedssprog - Java, Node.js, .NET og Python.

Couchbase-server

Couchbase er ikke så meget søskende til CouchDB som efterfølger. Couchbase blev bygget på arbejde udført i CouchDB og Membase, men er ikke relateret til nogen af ​​disse projekter. Det er en dokumentdatabase og distribueret nøgleværdilager rullet ind i en med avancerede funktioner som automatiseret failover og replikering på tværs af datacenter beregnet til virksomhedsbrugssager.

Couchbase-funktioner

En funktion, der adskiller Couchbase, ikke kun fra anden NoSQL-konkurrence, men fra sin forgænger CouchDB, er dens SQL-lignende forespørgselssprog kaldet N1QL (udtalt "nikkel"). N1QL tilbyder ikke det fulde udvalg af kommandoer, du forventer af en ANSI SQL-implementering, men det giver nok nyttige funktioner, såsom JOIN-operationer, til at nogen med SQL-erfaring kan få brugbare resultater.

Couchbase-forespørgselssystemet er ikke kun for udviklere, men for DBA'er og forretningsanalytikere, der normalt beskæftiger sig med konventionelle databaser. Funktioner som EXPLAIN-nøgleordet ser ud til at være blevet sat specielt ind for at appellere til den skare.

Som en kombinationsdokumentdatabase og nøgleværdilager gemmer Couchbase dokumenter ved hjælp af deres unikke identifikatorer som nøgle. Dokumenter kan også tildeles tid-til-live-værdier for at fungere som en nøgleværdicache. Når det er sagt, vil et ægte nøgleværdiecache-system som Redis være langt hurtigere til grundlæggende nøgleværdilagring, men Couchbase er mere fleksibel, og Redis og Couchbase kan kombineres effektivt for at fremskynde tingene. På den note har Couchbase native support til Memcached-protokollen, så eksisterende applikationer, der bruger Memcached, kan tilsluttes Couchbase som erstatning.

Couchbase Community vs. Enterprise

Couchbase Server leveres i en fuldt udviklet for-pay-forretningsudgave, en gratis-til-brug-community-udgave og en open source-udgave, som er grundlaget for de andre. Binære downloads til virksomheds- og community-udgaven er tilgængelige fra Couchbases websted, og kildekoden er tilgængelig fra Couchbases udviklerside. (Der er ikke noget GitHub-lager til Couchbase open source-projektet, da det er en sammenlægning af flere projekter.)

Community-udgaven kan implementeres i produktion, men mangler de mere avancerede funktioner som enterprise-udgaven samt support, så ikke-køber pas på. Nogle funktioner i Couchbase, såsom dens vandrette skaleringsfunktionalitet, har fundet vej ind i CouchDB-projektet, men det er mere undtagelsen end reglen.

Couchbase Lite

En anden udgave af Couchbase, der er værd at bemærke for appudviklere, er Couchbase Lite, en indlejret version af Couchbase, der kan synkroniseres med forekomster af den fuldblæste udgave. Couchbase Lite er nøglekomponenten i Couchbase Mobile, en applikationsstak til mobilapps, der har brug for et datalager, der automatisk synkroniseres med en back-end. Couchbase Mobile er tilgængelig til iOS, Android, Java. .Net, MacOS og tvOS.

CouchDB

CouchDB-projektet blev startet i 2005 af en tidligere IBM-udvikler og flyttede til Apache Software Foundation i 2008. Det antages undertiden, at CouchDB er grundlaget for Couchbase, men CouchDB og Couchbase er parallelle projekter med forskellige mål.

CouchDB vs. Couchbase

Mens Couchbase både er en dokumentdatabase og en nøgleværdilager, er CouchDB strengt taget en dokumentdatabase. Og mens Couchbase længe har fokuseret på virksomhedsfunktioner som fejltolerance og et SQL-lignende forespørgselssprog, begynder sådanne finesser kun at ankomme i CouchDB.

CouchDB funktioner

CouchDB understreger enkelheden ved implementering og brugervenlighed. Hentning af data fra databasen er så simpelt som at sende JSON-formaterede forespørgsler til et REST HTTPS-slutpunkt, hvor resultaterne returneres i JSON. De fleste ethvert moderne programmeringssprog kan gøre disse ting og også udføre den nødvendige kortlægning og reduktion for at skabe synspunkter bag CouchDB-forespørgsler og rapporter. Der er ikke behov for en ODBC-driver eller et dataforbindelse.

En af CouchDBs særlige saucer er dens dataforligningsteknologi. Ændringer foretaget på en CouchDB-peer afstemmes automatisk med andre på en måde, der ligner et versionskontrolsystem. Eventuelle konflikter mellem dokumentversioner bevares som om de var tidligere revisioner af dokumentet.

Denne i sidste ende konsistente model er nyttig til databaser, der ikke altid eller konstant er forbundet (f.eks. Til intermitterende tilsluttede mobilapplikationer) eller i tilfælde, hvor du ikke har brug for den nyeste og bedste version af data i en bestemt node. Men eventuel konsistens er også en af ​​CouchDBs største advarsler. hvis du gør har brug for øjeblikkelig konsistens, er CouchDB ikke stedet at finde det.

Skalerbarhed har længe været et svagt sted for CouchDB, men det er for nylig blevet behandlet. Version 2.0 omrørte en ny klyngeteknologi med tilladelse til bits, der er åbne fra Cloudant / IBM og fusioneret i projektet. Endelig giver Mango-projektet, også fra Cloudant / IBM, dem, der er fortrolige med MongoDB og ønsker at bruge en lignende deklarativ forespørgselsyntaks, som en ekstern tilføjelse.

CouchDB download

CouchDB-binære filer til alle større platforme og kildekode kan downloades fra det officielle CouchDB-websted. Kilden til projektet er også tilgængelig på GitHub.

Google Firebase Realtime-database

Du tænker måske på Google Firebase som Googles svar på DynamoDB - en måde at levere hurtig-synkroniserende datalagring mellem en cloud-backend og lokale apps på flere platforme.

Firebase Realtime Database er kun en komponent i Firebase-stakken, der er beregnet til at opbygge apps, der er tunge på publikumsengagement og indsigt. Hele stakken inkluderer funktioner som godkendelse, overvågning af ydeevne, brugeranalyse og mange andre, men her fokuserer vi på selve Firebase.

Google Firebase-funktioner

Google erhvervede Firebase i 2014. I årene siden har det koblet Firebase til at drage fordel af mange Google Cloud-funktioner. Google Cloud-funktioner til Firebase giver dig f.eks. Mulighed for at udløse JavaScript-funktioner i skyen som svar på Firebase-begivenheder. Google Analytics til Firebase lader dig trække mobilappdata til BigQuery til dybere analyse.

Da spil er en af ​​Firebases målapplikationer, inkluderer SDK'erne til Firebase Unity-platformen til spiludvikling. Udviklere, der arbejder på mere konventionelle virksomhedsfokuserede eller forbrugerorienterede projekter, har masser af andre valg: native iOS og Android, C ++, generisk web / JavaScript og ethvert andet sprog, der understøtter REST (Java, Python, du hedder det).

Firebase er designet til at fungere i scenarier, hvor der ikke garanteres forbindelse. Ligesom CouchDB cacher den ændringer lokalt, når den er offline, og synkroniseres automatisk med bagenden, når forbindelsen vender tilbage. Bemærk, at Firebase ikke er designet til at blive brugt som en enkeltstående, helt offline løsning; På Android er lokale databaser f.eks. begrænset til 10 MB lagerplads.

Firebase på Google Cloud og GitHub

Firebase er ikke tilgængelig som et enkeltstående produkt, men er kun tilgængeligt som en del af Googles cloud-produkter. Firebase GitHub-arkivet har kildekode til SDK'erne og til forskellige platformsspecifikke værktøjer.

IBM Cloudant

Cloudant er i det væsentlige IBMs hostede udgave af CouchDB. Oprindeligt var Cloudant et uafhængigt firma, der tilbød en udgave af CouchDB kaldet "BigCouch", som var vært på IBMs SoftLayer-sky. I 2014 erhvervede IBM Cloudant direkte som en del af IBMs samlede skub mod analyse og big data.

Overskyet vs. CouchDB

Cloudant er beregnet til at være mere end en hostet version af CouchDB. Cloudant giver funktioner, der ikke er let tilgængelige i selve CouchDB, såsom naturlig integreret fuldtekstsøgning. Fuldtekstsøgning i CouchDB kræver typisk integration med eksterne projekter. Data kan replikeres i begge retninger mellem Cloudant og en forekomst af CouchDB, så det er relativt let at flytte mellem den ene efter behov.

Nogle af Cloudants forbedringer af CouchDB har fundet vej tilbage til det underliggende CouchDB-projekt, herunder CouchDB 2.0s vandrette skaleringsfunktionalitet og Mango-forespørgselens sproggrænseflade. Men tag det ikke som bevis for, at Cloudant-funktioner automatisk siver ned til CouchDB.

Cloudant på IBM Cloud

Cloudant er primært et skyudbud på IBM Cloud, hvor det kan bruges sammen med andre IBM Cloud-dataprodukter som dashDB, DataWorks og Watson Analytics.

Overskyet lokalt

En bag-firewall-udgave af Cloudant, kaldet Cloudant Local, tilbyder alle de samme funktioner som det cloudhostede tilbud. Cloudant Local er tilgængeligt på Ubuntu- og Red Hat-smag af x86 Linux samt IBMs eget System z, der kører Red Hat eller Suse. Udviklere kan downloade en gratis, kun test-og-dev-version i et Docker-billede.