Programmering

NoSQL standouts: De beste dokumentdatabasene

“Det rette verktøyet for riktig jobb.” Hvis slik visdom holder til overalt, gjelder det absolutt med valget av database en utvikler velger for en gitt applikasjon. Dokumentdatabaser, en av familien av dataprodukter som kollektivt kalles “NoSQL”, er for utviklere som ønsker å fokusere på deres applikasjon heller enn databaseteknologi.

Med en dokumentdatabase lagres ikke data i tabeller med forskjellige kolonnetyper. I stedet lagres den i fritt “dokumenter” med et hvilket som helst antall felt og et hvilket som helst antall nestede strukturer. Slike dokumenter blir vanligvis representert som JSON, og oppdateres enten ved hjelp av API-er eller ved å sende JSON til et REST-sluttpunkt. De fleste ethvert moderne programmeringsspråk støtter JSON og REST, så det å jobbe med en dokumentdatabase føles mer som å jobbe naturlig med disse datastrukturene enn å jobbe med en tradisjonell database.

Denne skjemale designen, som den kalles, har sine begrensninger. En utvikler må gjøre mer arbeid for å sikre at innsatte data er konsistente, fordi slik konsistens ikke alltid garanteres av selve databasen. SQL, standardutgaven og det forståelige språket for databasearbeid, støttes ikke av de fleste dokumentdatabaser, så de med eksisterende databasekompetanse må starte helt fra bunnen av. Men bekvemmeligheten, hastigheten, skalerbarheten og allsidigheten til en dokumentdatabase er vanskelig å slå når du skriver et program som trenger en protean, fri form datastruktur.

Her har vi profilert sju av de mest kjente og mest brukte dokumentdatabasene. Fire av de syv - CouchDB, Couchbase Server, MongoDB og RethinkDB - er open source-prosjekter med få eller ingen praktiske barrierer for å komme i gang; Couchbase og MongoDB er også tilgjengelig i støttede bedriftsutgaver under kommersielle lisenser. De tre andre - Amazon DynamoDB, Google Firebase og IBM Cloudant - er vertte tjenester fra store skyleverandører, der tett integrasjon med andre tjenester i disse skyene er et stort trekk.

Se tabellen nedenfor for å sammenligne funksjoner; bla rett i tabellen for å se alle kolonnene, ved hjelp av rullefeltet nederst. Les videre for korte diskusjoner om hver database.

Nøkkel: L= Linux, W= Windows, M= MacOS, S= Solaris, Jeg= iOS, EN= Android, O= annen mobil,

1. Tredjepartsverktøy kan tilby denne funksjonaliteten. 2. Per bord. 3. Bare bedriftsutgaven. 4. Vis bare funksjoner. 5. Multidokumenttransaksjoner er også tilgjengelige, men ikke på skjærede klynger.

 Amazon DynamoDBCosmos DBCouchbaseCouchDBGoogle FirebaseIBM CloudantMarkLogicMongoDBRethinkDB
PlattformerBare skyBare skyLWMLWMIAOBare skyBare skyLWMSLWMSLWM
SpørringssystemerREST APIMongoDB wire protokollMemcached-protokoll, REST APIREST APIREST / JavaScript APIREST APIREST APIJSON-basert API, delvis REST APIReQL spørringsspråk, REST API
SQL-spørring Nei 1JaVia N1QL-språk Nei Nei Nei Ja Nei 1 Nei
Sterk skrivingJaJaJa Nei Ja Nei For XML-skjemaerJaJa
Innfødte blir med Nei JaJa Nei Nei Nei JaJaJa
Skjæring av partisjoneringJaJaJaJaNAJaJaJaJa2
Gruppering NA JaJaJa NA NA JaJaJa
ReplikeringJaJaJaJa NA JaJaJaPer bord
Konsistens: UmiddelbarPer lesningJaPer samlet Nei Tilknyttede klienter Nei JaPer skrivPer dokument
Konsistens: EventueltJaJaJaJaFrakoblede kunderJaJaJaHele databasen
SamtidighetJaJaJaJaJaJaJaJaJa
Operasjoner i minnet NA NA Nei Nei NA Nei NA Ja3 Nei
Lagrede prosedyrer Nei JavaScriptJavaScript4JavaScript4ReglerJavaScript4XQuery-modulJavaScript Nei
TransaksjonerEtter appJaEnkeltdokumenterEnkeltdokumenterJaEnkeltdokumenterEnkeltdokumenterEnkeltdokumenter5Enkeltdokumenter
Gjeldende versjonNANA5.0 (oktober 2017)2.1.1 (nov. 2017)NANA9.0 (Mai 2016)3.4.10 (okt. 2017)2.3.6 (jul. 2017)
Første utgivelse201220172011200520122010200520092009

Amazon DynamoDB

Amazons DynamoDB-dokumentbutikk begynte i 2012 som en utvidelse av Amazons SimpleDB. Under panseret drives den av en nøkkelverdibutikk, Dynamo. En medutvikler av DynamoDB ville senere trekke på mange av de samme ideene for å lage Apache Cassandra.

DynamoDB-funksjoner

Som de fleste av Amazons andre skytilbud, er DynamoDB en betalt-som-du-går-for-det-du-trenger-administrert tjeneste. Utviklere angir hvor mye lagringskapasitet som skal gis for å beholde ustrukturerte dokumenter eller nøkkelverdipar, og velger en flat timeprisgrense for lese- og skriveforespørsler til databasen. Du trenger ikke å klargjøre servere eller konfigurere replikering - Amazon håndterer alt dette under dekslene, og har nylig lagt til autoskalering i blandingen.

Naturligvis tilbyr DynamoDB utviklere nyttige integrasjoner med andre tjenester i Amazon-skyen. Utløsere kan for eksempel settes opp ved hjelp av AWS Lambda-funksjoner. Amazons BI- og analyseverktøy er også i nærheten. Nærheten til disse tjenestene er praktisk, men det betyr også at Amazon kan oversette funksjonalitet på mange måter. Caching og akselerasjon a la Redis, for eksempel, er tilgjengelig via DynamoDB Accelerator, et kostnad-pluss tillegg.

DynamoDB Local

Du finner ikke DynamoDB i en åpen kildekodeinkarnasjon. Den er eksklusivt tilgjengelig som et tilbud på Amazon-skyen.

Når det er sagt, i motsetning til mange andre cloud-native databaser, er DynamoDB også tilgjengelig i en versjon som kan lastes ned og kjøres lokalt. Men DynamoDB Local er ikke ment for produksjonsbruk, men snarere som en måte å iscenesette en applikasjon i et testmiljø uten å kreve tilkobling eller å kjøre opp en Amazon-regning.

Microsoft Azure Cosmos DB

Cosmos DB er et ambisiøst prosjekt, et databasesystem som omfatter flere modeller for lagring og henting av data. Cosmos DB kan fungere som en dokumentdatabase, en kolonnedatabase, en grafdatabase eller en nøkkelverdilager, slik at brukeren kan velge paradigmet som passer dem og trekke på forskjellige API-er for å jobbe med disse paradigmene.

Cosmos DB-funksjoner

I stedet for å oppfinne en helt ny API for et dokumentdatabasesystem, gir Cosmos DB en API som er kompatibel med den populære MongoDB (diskutert nedenfor). Blant fordelene er at eksisterende kode som bruker MongoDB-grensesnittbiblioteker eller MongoDBs binære wire-protokoll, kan fungere som den er. Det tilsvarer at Cosmos DB kan tilby MongoDB som en tjeneste. På samme måte støtter Cosmos DB APIen til Cassandra, den populære kolonne-familie-databasen.

Microsoft viser til flere fordeler for Cosmos DB som ikke nødvendigvis er eksklusive for dokumentdatabasefunksjonaliteten, men som er ment å appellere til de bygningsdokumentbaserte applikasjonene. Et slikt tilbud er avstemmbare konsistensnivåer. Hvis du har noen klasser av dokumenttransaksjoner som krever sterkere konsistens i Azure-regioner enn andre, kan du manuelt spesifisere dem per transaksjonsbasis.

Andre funksjoner er mer spesifikke for dokumentdatabaser. For eksempel må MongoDB-brukere sette opp indekser på dokumentsamlinger for å optimalisere søk. Cosmos DB-brukere som arbeider med MongoDB API-ene, trenger ikke å sette opp indeksering for dokumenter, ettersom hver eiendom i en dokumentert dokumentasjon blir indeksert automatisk.

Bruker Cosmos DB på Microsoft Azure

Det er ingen versjon av Cosmos DB som er lokalt vert. Den er bare tilgjengelig som en tjeneste i Microsoft Azure-skyen. Når det er sagt, er utviklings-API-er for Cosmos DB tilgjengelig for de fleste populære bedriftsspråk - Java, Node.js, .NET og Python.

Couchbase Server

Couchbase er ikke så mye søsken til CouchDB som etterfølger. Couchbase ble bygget på arbeid utført i CouchDB og Membase, men er ikke relatert til noen av disse prosjektene. Det er en dokumentdatabase og distribuert nøkkelverdi-butikk rullet inn i en, med avanserte funksjoner som automatisert failover og replikering på tvers av datasentre, beregnet på forretningsbruk.

Couchbase-funksjoner

En funksjon som skiller Couchbase, ikke bare fra annen NoSQL-konkurranse, men fra forgjengeren CouchDB, er dens SQL-lignende spørrespråk kalt N1QL (uttalt "nikkel"). N1QL tilbyr ikke hele spekteret av kommandoer du forventer av en ANSI SQL-implementering, men det gir nok nyttige funksjoner, for eksempel JOIN-operasjoner, for at noen med SQL-erfaring skal kunne fungere.

Couchbase-spørresystemet er ikke bare for utviklere, men for DBA-er og forretningsanalytikere som normalt håndterer konvensjonelle databaser. Funksjoner som EXPLAIN-søkeordet ser ut til å ha blitt satt inn spesielt for å appellere til publikum.

Som en kombinasjonsdokumentdatabase og nøkkelverdilagring lagrer Couchbase dokumenter ved å bruke deres unike identifikatorer som nøkkel. Dokumenter kan også tildeles tid-til-live-verdier, for å fungere som en nøkkelverdi-hurtigbuffer. Når det er sagt, vil et ekte nøkkelverdi-caching-system som Redis være langt raskere for grunnleggende nøkkelverdilagring, men Couchbase er mer fleksibelt, og Redis og Couchbase kan kombineres effektivt for å øke hastigheten. På det notatet har Couchbase innfødt støtte for Memcached-protokollen, slik at eksisterende applikasjoner som bruker Memcached kan plugges inn i Couchbase som erstatning.

Couchbase Community vs. Enterprise

Couchbase Server kommer i en fullverdig for-betalt enterprise-utgave, en gratis-å-bruke community-utgave og en open source-utgave, som er grunnlaget for de andre. Binære nedlastinger for enterprise- og community-utgaven er tilgjengelig fra Couchbases nettsted, og kildekoden er tilgjengelig fra Couchbases utviklerside. (Det er ikke noe GitHub-lager for Couchbase open source-prosjekt, ettersom det er en samling av flere prosjekter.)

Fellesskapsutgaven kan distribueres i produksjon, men mangler de mer avanserte funksjonene virksomhetsutgaven samt støtte, så vær ikke-kjøper. Noen funksjoner i Couchbase, for eksempel dens horisontale skaleringsfunksjonalitet, har funnet veien inn i CouchDB-prosjektet, men det er mer unntaket enn regelen.

Couchbase Lite

En annen utgave av Couchbase som er verdt å merke seg for apputviklere, er Couchbase Lite, en innebygd versjon av Couchbase som kan synkroniseres med forekomster av den fullstendige utgaven. Couchbase Lite er nøkkelkomponenten i Couchbase Mobile, en applikasjonsstabel for mobilapper som trenger et datalager som automatisk synkroniseres med en backend. Couchbase Mobile er tilgjengelig for iOS, Android, Java. .Net, MacOS og tvOS.

CouchDB

CouchDB-prosjektet ble startet i 2005 av en tidligere IBM-utvikler og flyttet til Apache Software Foundation i 2008. Det antas noen ganger at CouchDB er grunnlaget for Couchbase, men CouchDB og Couchbase er parallelle prosjekter med forskjellige mål.

CouchDB vs. Couchbase

Mens Couchbase både er en dokumentdatabase og en nøkkelverdilager, er CouchDB strengt tatt en dokumentdatabase. Og mens Couchbase lenge har fokusert på bedriftsfunksjoner som feiltoleranse og et SQL-lignende spørrespråk, begynner slike finesser bare å ankomme CouchDB.

CouchDB funksjoner

CouchDB understreker enkel implementering og brukervennlighet. Å hente data fra databasen er så enkelt som å sende JSON-formaterte spørsmål til et REST HTTPS-sluttpunkt, med resultatene returnert i JSON. De fleste moderne programmeringsspråk kan gjøre disse tingene, og også utføre kartleggingen og reduseringen som er nødvendig for å skape visningene bak CouchDB-spørsmål og rapporter. Det er ikke behov for en ODBC-driver eller en datakontakt.

En av CouchDBs spesielle sauser er dens dataavstemmingsteknologi. Endringer gjort til en CouchDB-kollega blir automatisk avstemt med andre, på en måte som ligner på et versjonskontrollsystem. Eventuelle konflikter mellom dokumentversjoner beholdes som om de var tidligere revisjoner av dokumentet.

Denne til slutt konsistente modellen er nyttig for databaser som ikke alltid eller konsekvent er koblet til (for eksempel for periodisk tilkoblede mobilapplikasjoner), eller i tilfeller der du ikke trenger den nyeste og beste versjonen av data i en bestemt node. Men eventuell konsistens er også en av CouchDBs største advarsler. Hvis du gjøre trenger umiddelbar konsistens, er ikke CouchDB stedet å finne den.

Skalerbarhet har lenge vært et svakt sted for CouchDB, men det har nylig blitt adressert. Versjon 2.0 vekket inn en ny klyngeteknologi, med tillatelse fra biter som er hentet fra Cloudant / IBM og fusjonert i prosjektet. Til slutt, for de som er kjent med MongoDB og vil bruke en lignende deklarativ spørringssyntaks, gir Mango-prosjektet, også fra Cloudant / IBM, det som et eksternt tillegg.

CouchDB nedlasting

CouchDB-binærfiler for alle større plattformer, og kildekode, kan lastes ned fra det offisielle CouchDB-nettstedet. Kilden for prosjektet er også tilgjengelig på GitHub.

Google Firebase sanntidsdatabase

Du kan tenke på Google Firebase som Googles svar på DynamoDB - en måte å gi hurtig synkronisering av datalagring mellom en sky-backend og lokale apper på flere plattformer.

Firebase Realtime Database er bare en komponent i Firebase-stakken, beregnet på å bygge apper som er tungt for publikumsengasjement og innsikt. Hele stakken inneholder funksjoner som autentisering, ytelsesovervåking, brukeranalyse og mange andre, men her fokuserer vi på selve Firebase.

Google Firebase-funksjoner

Google kjøpte Firebase i 2014. I årene siden har det koblet Firebase til å dra nytte av mange Google Cloud-funksjoner. Google Cloud Functions for Firebase, for eksempel, lar deg utløse JavaScript-funksjoner i skyen som svar på Firebase-hendelser. Google Analytics for Firebase lar deg trekke data om mobilapper inn i BigQuery for dypere analyse.

Siden spill er en av Firebases målapplikasjoner, inkluderer SDK-ene som tilbys for Firebase Unity-plattformen for utvikling av spillutvikling. Utviklere som jobber med mer konvensjonelle bedriftsfokuserte eller forbrukervendte prosjekter har mange andre valg: native iOS og Android, C ++, generisk web / JavaScript og ethvert annet språk som støtter REST (Java, Python, you name it).

Firebase er designet for å fungere i scenarier der tilkobling ikke garanteres. I likhet med CouchDB, cacher den endringer lokalt når den er offline, og synkroniseres automatisk med bakenden når tilkoblingen kommer tilbake. Merk at Firebase ikke er designet for å brukes som en frittstående, helt offline løsning; på Android er lokale databaser for eksempel begrenset til 10 MB lagring.

Firebase på Google Cloud og GitHub

Firebase er ikke tilgjengelig som et frittstående produkt, men er bare tilgjengelig som en del av Googles tilbud om skyprodukter. Firebase GitHub-depotet har kildekode for SDK-ene og for forskjellige plattformsspesifikke verktøy.

IBM Cloudant

Cloudant er egentlig IBMs hostede utgave av CouchDB. Opprinnelig var Cloudant et uavhengig selskap som tilbyr en utgave av CouchDB kalt "BigCouch" som ble arrangert på IBMs SoftLayer-sky. I 2014 kjøpte IBM Cloudant direkte som en del av IBMs samlede press mot analyse og big data.

Overskyet mot CouchDB

Cloudant er ment å være mer enn en vertsversjon av CouchDB. Cloudant tilbyr funksjoner som ikke er lett tilgjengelige i CouchDB selv, for eksempel integrert fulltekstsøk. Fulltekst-søk i CouchDB krever vanligvis integrering med eksterne prosjekter. Data kan replikeres i begge retninger mellom Cloudant og en forekomst av CouchDB, så det er relativt enkelt å flytte mellom den ene etter behov.

Noen av Cloudants forbedringer av CouchDB har funnet veien tilbake til det underliggende CouchDB-prosjektet, inkludert CouchDB 2.0s horisontale skaleringsfunksjonalitet og Mango-spørrespråkgrensesnittet. Men ikke ta det som bevis på at Cloudant-funksjoner automatisk siver ned til CouchDB.

Cloudant på IBM Cloud

Cloudant er primært et skytilbud på IBM Cloud, hvor det kan brukes i forbindelse med andre IBM Cloud-dataprodukter som dashDB, DataWorks og Watson Analytics.

Overskyet lokalt

En bak-brannmur-utgaven av Cloudant, kalt Cloudant Local, tilbyr alt av samme funksjonalitet som det skyhostede tilbudet. Cloudant Local er tilgjengelig på smakene Ubuntu og Red Hat i x86 Linux, samt IBMs eget System z som kjører Red Hat eller Suse. Utviklere kan laste ned en gratis, bare test-og-dev-versjon i et Docker-bilde.