NoSQL spicca: i migliori database di documenti

"Lo strumento giusto per il lavoro giusto." Se tale saggezza è vera ovunque, certamente vale per la scelta del database che uno sviluppatore sceglie per una data applicazione. I database di documenti, una delle famiglie di prodotti di dati denominati collettivamente "NoSQL", sono destinati agli sviluppatori che desiderano concentrarsi sulla propria applicazione anziché sulla tecnologia del database .

Con un database di documenti, i dati non vengono archiviati in tabelle con tipi di colonna distinti. Viene invece memorizzato in "documenti" in formato libero con un numero qualsiasi di campi e un numero qualsiasi di strutture annidate. Tali documenti sono in genere rappresentati come JSON e aggiornati tramite API o inviando JSON a un endpoint REST. Quasi tutti i linguaggi di programmazione moderni supportano JSON e REST, quindi lavorare con un database di documenti sembra più come lavorare in modo nativo con quelle strutture di dati che lavorare con un database tradizionale.

Questo design senza schemi, come viene chiamato, ha i suoi limiti. Uno sviluppatore deve lavorare di più per assicurarsi che i dati inseriti siano coerenti, perché tale coerenza non è sempre garantita dal database stesso. SQL, il linguaggio standard e ampiamente compreso per il lavoro sui database, non è supportato dalla maggior parte dei database di documenti, quindi quelli con esperienza nel database esistente devono iniziare da zero. Ma la comodità, la velocità, la scalabilità e la versatilità di un database di documenti sono difficili da battere quando si scrive un'applicazione che necessita di una struttura di dati proteiforme e in formato libero.

Qui abbiamo profilato sette dei database di documenti più conosciuti e più utilizzati. Quattro dei sette - CouchDB, Couchbase Server, MongoDB e RethinkDB - sono progetti open source con pochi o nessun ostacolo pratico per iniziare; Couchbase e MongoDB sono disponibili anche nelle edizioni aziendali supportate con licenze commerciali. Gli altri tre, Amazon DynamoDB, Google Firebase e IBM Cloudant, sono servizi in hosting dei principali fornitori di cloud, in cui la stretta integrazione con altri servizi in quei cloud è una grande attrazione.

Vedere la tabella seguente per confrontare le caratteristiche; scorri a destra nella tabella per vedere tutte le colonne, utilizzando la barra di scorrimento in basso. Continua a leggere per brevi discussioni su ogni database.

L W M S I A O

1. Strumenti di terze parti possono fornire questa funzionalità. 2 . Per tavolo. 3 . Solo edizione Enterprise. 4 . Visualizza solo le funzioni. 5 . Sono disponibili anche transazioni multidocumento, ma non su cluster frammentati.

Legenda: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = altro cellulare,
  Amazon DynamoDB Cosmos DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
Piattaforme Solo cloud Solo cloud LWM LWMIAO Solo cloud Solo cloud LWMS LWMS LWM
Sistemi di query API REST Protocollo di filo MongoDB Protocollo memcached, API REST API REST API REST / JavaScript API REST API REST API basata su JSON, API REST parziale Linguaggio di query ReQL, API REST
Interrogazione SQL No 1 Tramite linguaggio N1QL No No No No 1 No
Forte digitazione No No Per schemi XML
Native si unisce No No No No
Partizionamento Sharding N / A Sì 2
Clustering N / A N / A N / A
Replica N / A Per tavolo
Consistenza: immediata Per lettura Per complessivi No Client connessi No Per scrivere Per documento
Consistenza: Eventuale Clienti offline Intero database
Concorrenza
Operazioni in memoria N / A N / A No No N / A No N / A Sì 3 No
Procedura di archiviazione No JavaScript JavaScript4 JavaScript4 Regole JavaScript4 Modulo XQuery JavaScript No
Transazioni Per app Documenti singoli Documenti singoli Documenti singoli Documenti singoli Documenti singoli 5 Documenti singoli
Versione corrente N / A N / A 5.0 (ottobre 2017) 2.1.1 (novembre 2017) N / A N / A 9.0 (maggio 2016) 3.4.10 (ottobre 2017) 2.3.6 (luglio 2017)
Versione iniziale 2012 2017 2011 2005 2012 2010 2005 2009 2009

Amazon DynamoDB

Il negozio di documenti DynamoDB di Amazon è nato nel 2012 come estensione di SimpleDB di Amazon. Sotto il cofano è alimentato da un negozio chiave-valore, Dynamo. Un co-sviluppatore di DynamoDB avrebbe successivamente attinto a molte delle stesse idee per creare Apache Cassandra. 

Caratteristiche di DynamoDB

Come la maggior parte delle altre offerte cloud di Amazon, DynamoDB è un servizio gestito con pagamento in base a ciò di cui hai bisogno. Gli sviluppatori stabiliscono la quantità di capacità di archiviazione da fornire per conservare documenti non strutturati o coppie chiave-valore e scelgono un limite di tariffa oraria fissa per le richieste di lettura e scrittura al database. Non è necessario eseguire il provisioning dei server o configurare la replica: Amazon gestisce tutto ciò dietro le quinte e ha recentemente aggiunto la scalabilità automatica al mix.

Naturalmente, DynamoDB offre agli sviluppatori utili integrazioni con altri servizi nel cloud Amazon. I trigger, ad esempio, possono essere impostati tramite le funzioni AWS Lambda. Anche la BI e gli strumenti di analisi di Amazon si trovano nelle vicinanze. La vicinanza a questi servizi è conveniente, ma significa anche che Amazon può eseguire l'upselling di funzionalità in diversi modi. Il caching e l'accelerazione alla Redis, ad esempio, sono disponibili tramite DynamoDB Accelerator, un componente aggiuntivo a costo aggiuntivo.

DynamoDB Local

Non troverai DynamoDB in un'incarnazione open source. È disponibile esclusivamente come offerta ospitata sul cloud Amazon.

Detto questo, a differenza di molti altri database nativi del cloud, DynamoDB è disponibile anche in una versione che può essere scaricata ed eseguita localmente. Ma DynamoDB Local non è destinato all'uso in produzione, ma piuttosto come un modo per mettere in scena un'applicazione in un ambiente di test senza richiedere connettività o eseguire una fattura Amazon.

Microsoft Azure Cosmos DB

Cosmos DB è un progetto ambizioso, un sistema di database che comprende più modelli per l'archiviazione e il recupero dei dati. Cosmos DB può fungere da database di documenti, database a colonne, database a grafo o archivio di valori-chiave, consentendo all'utente di scegliere il paradigma più adatto e attingere a varie API per lavorare con tali paradigmi. 

Funzionalità di Cosmos DB

Piuttosto che inventare un'API completamente nuova per un sistema di database di documenti, Cosmos DB fornisce un'API compatibile con il popolare MongoDB (discusso di seguito). Uno dei vantaggi è che il codice esistente che utilizza le librerie di interfaccia MongoDB o il protocollo binario di MongoDB può funzionare così com'è. Significa che Cosmos DB è in grado di fornire MongoDB come servizio. Allo stesso modo, Cosmos DB supporta l'API di Cassandra, il popolare database della famiglia di colonne. 

Microsoft offre numerosi vantaggi a Cosmos DB che non sono necessariamente esclusivi della sua funzionalità di database di documenti, ma sono destinati a fare appello a coloro che creano applicazioni di database di documenti. Una di queste offerte sono i livelli di coerenza sintonizzabili. Se si dispone di alcune classi di transazioni di documenti che richiedono una maggiore coerenza tra le aree di Azure rispetto ad altre, è possibile specificarle manualmente in base alla transazione.

Altre caratteristiche sono più specifiche per i database dei documenti. Ad esempio, gli utenti MongoDB devono impostare indici sulle raccolte di documenti per ottimizzare le ricerche. Gli utenti di Cosmos DB che lavorano con le API MongoDB non devono impostare l'indicizzazione dei documenti, poiché ogni proprietà in un documento inserito viene indicizzata automaticamente.

Utilizzo di Cosmos DB su Microsoft Azure

Non esiste una versione ospitata localmente di Cosmos DB. È disponibile solo come servizio nel cloud Microsoft Azure. Detto questo, le API di sviluppo per Cosmos DB sono disponibili per la maggior parte dei linguaggi aziendali più diffusi: Java, Node.js, .NET e Python.

Couchbase Server

Couchbase non è tanto fratello di CouchDB quanto successore. Couchbase è stato costruito sul lavoro svolto in CouchDB e Membase, ma non è correlato a nessuno di questi progetti. È un database di documenti e un archivio distribuito di valori-chiave riuniti in uno, con funzionalità avanzate come il failover automatizzato e la replica tra centri dati, destinati a casi d'uso aziendali.

Caratteristiche di Couchbase

Una caratteristica che distingue Couchbase, non solo da altri concorrenti NoSQL ma dal suo predecessore CouchDB, è il suo linguaggio di query simile a SQL chiamato N1QL (pronunciato "nickel"). N1QL non offre l'intera gamma di comandi che ci si aspetterebbe da un'implementazione ANSI SQL, ma fornisce sufficienti funzioni utili, come le operazioni JOIN, affinché qualcuno con esperienza SQL possa ottenere risultati realizzabili.

Il sistema di query Couchbase non è solo per gli sviluppatori, ma per i DBA e gli analisti aziendali che normalmente si occupano di database convenzionali. Funzionalità come la parola chiave EXPLAIN sembrano essere state inserite appositamente per attirare quel pubblico.

Essendo una combinazione di database di documenti e archivio chiave-valore, Couchbase archivia i documenti utilizzando i loro identificatori univoci come chiave. Ai documenti possono anche essere assegnati valori time-to-live, in modo che funzionino come una cache di valori-chiave. Detto questo, un vero sistema di memorizzazione nella cache di valori-chiave come Redis sarà molto più veloce per l'archiviazione di valori-chiave di base, ma Couchbase è più flessibile e Redis e Couchbase possono essere combinati efficacemente per velocizzare le cose. In questa nota, Couchbase ha il supporto nativo per il protocollo Memcached, quindi le applicazioni esistenti che utilizzano Memcached possono collegarsi a Couchbase come sostituto.

Couchbase Community vs. Enterprise

Couchbase Server è disponibile in un'edizione aziendale completa a pagamento, un'edizione per la comunità gratuita e un'edizione open source, che è la base per le altre. I download binari per l'edizione Enterprise e Community sono disponibili dal sito di Couchbase e il codice sorgente è disponibile dal sito per sviluppatori di Couchbase. (Non esiste un repository GitHub per il progetto open source Couchbase in quanto è un'aggregazione di diversi progetti.)

La community edition può essere distribuita in produzione, ma manca delle funzionalità più avanzate dell'edizione enterprise e del supporto, quindi fai attenzione ai non acquirenti. Alcune funzionalità di Couchbase, come la funzionalità di ridimensionamento orizzontale, sono state introdotte nel progetto CouchDB, ma questa è più un'eccezione che una regola.

Couchbase Lite

Un'altra edizione di Couchbase degna di nota per gli sviluppatori di app è Couchbase Lite, una versione incorporabile di Couchbase che può sincronizzarsi con le istanze dell'edizione completa. Couchbase Lite è il componente chiave di Couchbase Mobile, uno stack di applicazioni per app mobili che necessitano di un archivio dati che si sincronizza automaticamente con un back-end. Couchbase Mobile è disponibile per iOS, Android, Java. .Net, MacOS e tvOS.

CouchDB

Il progetto CouchDB è stato avviato nel 2005 da un ex sviluppatore IBM e trasferito alla Apache Software Foundation nel 2008. A volte si presume che CouchDB sia la base per Couchbase, ma CouchDB e Couchbase sono progetti paralleli con obiettivi diversi.

CouchDB contro Couchbase

Mentre Couchbase è sia un database di documenti che un archivio di valori-chiave, CouchDB è strettamente un database di documenti. E mentre Couchbase si concentra da tempo su funzionalità aziendali come la tolleranza agli errori e un linguaggio di query simile a SQL, tali sottigliezze stanno solo iniziando ad arrivare in CouchDB.

Caratteristiche di CouchDB

CouchDB enfatizza la semplicità di distribuzione e la facilità d'uso. Il recupero dei dati dal database è semplice come inviare query in formato JSON a un endpoint HTTPS REST, con i risultati restituiti in JSON. Quasi tutti i linguaggi di programmazione moderni possono fare queste cose e anche eseguire la mappatura e la riduzione necessarie per creare le visualizzazioni dietro query e report CouchDB. Non è necessario un driver ODBC o un connettore dati.

Una delle salse speciali di CouchDB è la sua tecnologia di riconciliazione dei dati. Le modifiche apportate a un peer CouchDB vengono riconciliate automaticamente con altre, in un modo simile a un sistema di controllo della versione. Eventuali conflitti tra le versioni del documento vengono conservati come se fossero revisioni precedenti di quel documento.

Questo modello eventualmente coerente è utile per i database che non sono sempre o costantemente connessi (ad esempio per le applicazioni mobili connesse in modo intermittente) o nei casi in cui non è necessaria la versione più recente e più grande dei dati in un particolare nodo. Ma l'eventuale coerenza è anche uno dei maggiori avvertimenti di CouchDB. Se non ha bisogno di coerenza immediata, CouchDB non è il posto per trovarlo.

La scalabilità è stata a lungo un punto debole per CouchDB, ma recentemente è stata affrontata. La versione 2.0 è stata introdotta in una nuova tecnologia di clustering, grazie a bit open source di Cloudant / IBM e incorporata nel progetto. Infine, per coloro che hanno familiarità con MongoDB e desiderano utilizzare una sintassi di query dichiarativa simile, il progetto Mango, anch'esso di Cloudant / IBM, lo fornisce come componente aggiuntivo esterno.

Scarica CouchDB

I binari di CouchDB per tutte le principali piattaforme e il codice sorgente possono essere scaricati dal sito ufficiale di CouchDB. La fonte per il progetto è disponibile anche su GitHub.

Database in tempo reale di Google Firebase

Potresti pensare a Google Firebase come la risposta di Google a DynamoDB, un modo per fornire l'archiviazione dei dati a sincronizzazione rapida tra un back-end cloud e app locali su più piattaforme.

Firebase Realtime Database è solo un componente dello stack Firebase, destinato alla creazione di app che richiedono un coinvolgimento e una visione approfonditi del pubblico. L'intero stack include funzioni come autenticazione, monitoraggio delle prestazioni, analisi degli utenti e molte altre, ma qui ci concentriamo su Firebase stesso.

Funzionalità di Google Firebase

Google ha acquisito Firebase nel 2014. Negli anni successivi, ha cablato Firebase per sfruttare molte funzionalità di Google Cloud. Google Cloud Functions per Firebase, ad esempio, ti consente di attivare le funzioni JavaScript nel cloud in risposta agli eventi Firebase. Google Analytics per Firebase ti consente di trasferire i dati delle app mobili in BigQuery per un'analisi più approfondita.

Poiché il gaming è una delle applicazioni target di Firebase, gli SDK forniti per Firebase includono il framework di sviluppo di giochi multipiattaforma Unity. Gli sviluppatori che lavorano su progetti più convenzionali orientati all'azienda o rivolti al consumatore hanno molte altre scelte: iOS e Android nativi, C ++, Web / JavaScript generico e qualsiasi altro linguaggio che supporti REST (Java, Python, lo chiami).

Firebase è progettato per funzionare in scenari in cui la connettività non è garantita. Come CouchDB, memorizza nella cache le modifiche in locale quando offline e si sincronizza automaticamente con il back-end quando la connettività ritorna. Tieni presente che Firebase non è progettato per essere utilizzato come soluzione autonoma e completamente offline; su Android, ad esempio, i database locali sono limitati a 10 MB di spazio di archiviazione.

Firebase su Google Cloud e GitHub

Firebase non è disponibile come prodotto autonomo, ma è disponibile solo come parte dell'offerta di prodotti cloud di Google. Il repository Firebase GitHub contiene il codice sorgente per gli SDK e per vari strumenti specifici della piattaforma.

IBM Cloudant

Cloudant è essenzialmente l'edizione ospitata da IBM di CouchDB. In origine, Cloudant era una società indipendente, che offriva un'edizione di CouchDB chiamata "BigCouch" che era ospitata sul cloud SoftLayer di IBM. Nel 2014, IBM ha acquisito a titolo definitivo Cloudant come parte della spinta complessiva di IBM verso l'analisi e i big data. 

Cloudant contro CouchDB

Cloudant vuole essere più di una versione ospitata di CouchDB. Cloudant fornisce funzionalità non prontamente disponibili in CouchDB stesso, come la ricerca full-text integrata in modo nativo. La ricerca full-text in CouchDB richiede in genere l'integrazione con progetti esterni. I dati possono essere replicati in entrambe le direzioni tra Cloudant e un'istanza di CouchDB, quindi è relativamente facile spostarsi tra l'uno e l'altro secondo necessità.

Alcuni dei miglioramenti di Cloudant a CouchDB sono tornati nel progetto CouchDB sottostante, inclusa la funzionalità di ridimensionamento orizzontale di CouchDB 2.0 e l'interfaccia del linguaggio di query di Mango. Ma non prenderlo come prova che le funzionalità di Cloudant passeranno automaticamente a CouchDB.

Cloudant su IBM Cloud

Cloudant è principalmente un'offerta cloud su IBM Cloud, dove può essere utilizzata insieme ad altri prodotti di dati IBM Cloud come dashDB, DataWorks e Watson Analytics.

Cloudant Local

Un'edizione dietro il firewall di Cloudant, chiamata Cloudant Local, offre tutte le stesse funzionalità dell'offerta ospitata nel cloud. Cloudant Local è disponibile nelle versioni Ubuntu e Red Hat di x86 Linux, oltre a System z di IBM che esegue Red Hat o Suse. Gli sviluppatori possono scaricare una versione gratuita, solo di prova e sviluppo in un'immagine Docker.