"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.
Amazon DynamoDB | Cosmos DB | Couchbase | CouchDB | Google Firebase | IBM Cloudant | MarkLogic | MongoDB | RethinkDB | |
---|---|---|---|---|---|---|---|---|---|
Platforme | Kun sky | Kun sky | LWM | LWMIAO | Kun sky | Kun sky | LWMS | LWMS | LWM |
Forespørgselssystemer | REST API | MongoDB wire-protokol | Memcached-protokol, REST API | REST API | REST / JavaScript API | REST API | REST API | JSON-baseret API, delvis REST API | ReQL-forespørgselssprog, REST API |
SQL-forespørgsel | Nej 1 | Ja | Via N1QL-sprog | Ingen | Ingen | Ingen | Ja | Nej 1 | Ingen |
Stærk typing | Ja | Ja | Ja | Ingen | Ja | Ingen | Til XML-skemaer | Ja | Ja |
Indfødte slutter sig | Ingen | Ja | Ja | Ingen | Ingen | Ingen | Ja | Ja | Ja |
Opdelingspartitionering | Ja | Ja | Ja | Ja | NA | Ja | Ja | Ja | Ja2 |
Klyngedannelse | NA | Ja | Ja | Ja | NA | NA | Ja | Ja | Ja |
Replikation | Ja | Ja | Ja | Ja | NA | Ja | Ja | Ja | Per bord |
Konsistens: Umiddelbar | Per læsning | Ja | Per samlet | Ingen | Forbundne klienter | Ingen | Ja | Per skrivning | Per dokument |
Konsistens: Eventuelt | Ja | Ja | Ja | Ja | Offline klienter | Ja | Ja | Ja | Hele databasen |
Samtidighed | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
Funktioner i hukommelsen | NA | NA | Ingen | Ingen | NA | Ingen | NA | Ja 3 | Ingen |
Gemte procedurer | Ingen | JavaScript | JavaScript4 | JavaScript4 | Regler | JavaScript4 | XQuery-modul | JavaScript | Ingen |
Transaktioner | Efter app | Ja | Enkeltdokumenter | Enkeltdokumenter | Ja | Enkeltdokumenter | Enkeltdokumenter | Enkeltdokumenter5 | Enkeltdokumenter |
Nuværende version | NA | NA | 5.0 (okt. 2017) | 2.1.1 (nov. 2017) | NA | NA | 9.0 (maj 2016) | 3.4.10 (okt. 2017) | 2.3.6 (jul. 2017) |
Første udgivelse | 2012 | 2017 | 2011 | 2005 | 2012 | 2010 | 2005 | 2009 | 2009 |
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.