Elementi distintivi di NoSQL: i migliori database di valori-chiave a confronto

La maggior parte delle applicazioni richiede una qualche forma di persistenza, un modo per archiviare i dati al di fuori dell'applicazione per conservarli al sicuro. Il modo più semplice è scrivere i dati nel file system, ma questo può diventare rapidamente un modo lento e poco maneggevole per risolvere il problema. Un database completo fornisce un modo potente per indicizzare e recuperare i dati, ma potrebbe anche essere eccessivo. A volte, tutto ciò di cui hai bisogno è un modo rapido per prendere un'informazione a mano libera, associarla a un'etichetta, riporla da qualche parte ed estrarla di nuovo in un batter d'occhio.

Inserisci l'archivio valori-chiave. È essenzialmente un database NoSQL, ma con uno scopo altamente specifico e un design deliberatamente vincolato. Il suo compito è consentirti di prendere dati (un valore), applicarvi un'etichetta (una chiave) e archiviarli in memoria o in un sistema di archiviazione ottimizzato per il recupero rapido. Le applicazioni utilizzano database chiave-valore per qualsiasi cosa, dalla memorizzazione nella cache di oggetti alla condivisione di dati di uso comune tra i nodi dell'applicazione.

Molti database relazionali possono funzionare come negozi di valori chiave, ma è un po 'come usare un trattore stradale per andare a fare la spesa. Funziona, ma è drammaticamente inefficiente e ci sono modi molto più leggeri per risolvere il problema. Un archivio chiave-valore, come altri database NoSQL, fornisce un'infrastruttura sufficiente per l'archiviazione e il recupero di valori semplici, si integra in modo più diretto con le applicazioni che lo utilizzano e si adatta in modo più granulare con il carico di lavoro dell'applicazione.

Caratteristiche del database NoSQL valore-chiave a confronto

Cinque prodotti ampiamente utilizzati (incluso un servizio cloud) meritano la tua considerazione; sono fatturati esplicitamente come database di valori-chiave o offrono l'archiviazione di valori-chiave come funzionalità centrale. Le loro differenze di base:

  • Hazelcast e Memcached tendono al minimalismo e non si preoccupano nemmeno di eseguire il backup dei dati su disco.
  • Aerospike, Cosmos DB e Redis sono più completi, ma ruotano ancora attorno alla metafora del valore-chiave.

Tabella: prodotti database NoSQL valore-chiave confrontati

L W M S I A O

* Attraverso un'implementazione di terze parti.

Legenda: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = Altro.
  Aerospike Hazelcast IMDG Microsoft Azure Cosmos DB Memcached Redis
Piattaforme LWMO Giava Solo cloud LWMO LWMO
Versione corrente 3.14.1.1 3.9 N / A 1.5.1 4.0.1
Versione iniziale 2012 2008 2017 2003 2009
Licenza AGPL Apache 2 Proprietario BSD BSD
Backup su disco No No SìBSD
Clustering No
Sharding / partizionamento No
Scripting nativo Giava No
Transazioni Per chiave No
Incorporabile Sì*

No Sì*

Sì*

Database NoSQL valore-chiave Aerospike in dettaglio

Se Redis è Memcached con steroidi, si potrebbe dire che Aerospike è Redis con steroidi. Come Redis, Aerospike è un archivio di valori-chiave che può funzionare come database persistente o cache di dati. Aerospike è progettato per essere facile da raggruppare e scalare, per supportare meglio i carichi di lavoro aziendali.

Caratteristiche uniche di Aerospike

Molto in Aerospike riecheggia sia altri archivi di valori-chiave che altri database NoSQL. I dati vengono archiviati e recuperati tramite chiavi e possono essere conservati in una serie di tipi di dati fondamentali, inclusi interi a 64 bit, stringhe, numeri a virgola mobile a doppia precisione e dati binari grezzi serializzati da numerosi linguaggi di programmazione comuni.

Aerospike può anche memorizzare i dati in tipi complessi : elenchi di valori, raccolte di coppie chiave-valore chiamate mappe e dati geospaziali nel formato GeoJSON. Aerospike può eseguire l'elaborazione nativa sui dati geospaziali, ad esempio per determinare quali posizioni archiviate nel database sono più vicine l'una all'altra semplicemente eseguendo una query, rendendolo un'opzione interessante per gli sviluppatori di applicazioni che si basano sulla posizione.

I dati archiviati in Aerospike possono essere organizzati in diversi contenitori gerarchici. Alcuni sistemi NoSQL sono orientati ai documenti, il che significa che i dati sono incapsulati in un qualche tipo di oggetto, tipicamente JSON. Con Aerospike, i container sono più o meno come i documenti, ma con funzioni e comportamenti specifici di Aerospike. Ogni tipo di contenitore consente di impostare diverse proprietà comportamentali sui dati al suo interno.

Ad esempio, il livello più alto di contenitori, spazi dei nomi, determina se i dati sono archiviati su disco, nella RAM o in entrambi; se i dati vengono replicati nel cluster o tra i cluster; e quando o come i dati sono scaduti o rimossi. Attraverso gli spazi dei nomi, Aerospike consente agli sviluppatori di mantenere in memoria i dati a cui si accede più di frequente per la risposta più rapida possibile.

Come Aerospike gestisce lo storage e il clustering

Aerospike può conservare i suoi dati su quasi tutti i file system, ma è stato scritto appositamente per sfruttare gli SSD. Detto questo, non aspettarti di rilasciare Aerospike su qualsiasi vecchio SSD e aspettarti buoni risultati. Gli sviluppatori di Aerospike mantengono un elenco di dispositivi SSD approvati e hanno creato uno strumento chiamato ACT per valutare le prestazioni dei dispositivi di archiviazione SSD con carichi di lavoro Aerospike.

Aerospike, come la maggior parte dei sistemi NoSQL, utilizza un'architettura nulla condiviso per il bene della replica e del clustering. Aerospike non ha nodi master e nessuna partizione manuale. Ogni nodo è identico. I dati vengono distribuiti in modo casuale tra i nodi e ribilanciati automaticamente per evitare la formazione di colli di bottiglia. Se lo desideri, puoi impostare regole per il modo in cui i dati vengono ribilanciati in modo aggressivo. È possibile configurare più cluster, in esecuzione in diversi segmenti di rete o anche in diversi data center, per la sincronizzazione tra loro.

Scripting in Aerospike

Come Redis, Aerospike consente agli sviluppatori di scrivere script Lua, o UDF (funzioni definite dall'utente), che vengono eseguiti all'interno del motore Aerospike. È possibile utilizzare UDF per leggere o modificare i record, ma è meglio utilizzarli per eseguire operazioni ad alta velocità, di sola lettura, di riduzione delle mappe tra raccolte o "flussi" di record su più nodi.

Dove trovare Aerospike

La community edition di Aerospike può essere scaricata direttamente dal sito Web di Aerospike. Ciò include le edizioni server per Linux, versioni desktop per MacOS di Apple e Microsoft Windows, edizioni cloud per Amazon EC2, Azure e Google Compute Engine e contenitori Docker. L'edizione aziendale di Aerospike è disponibile tramite il programma Quick Start di Aerospike, che fornisce una versione di prova illimitata di 90 giorni.

Il codice sorgente è disponibile su GitHub.

Hazelcast IMDG chiave-valore database NoSQL in profondità

Hazelcast viene fatturato come una "griglia di dati in memoria", essenzialmente un modo per raggruppare le risorse RAM e CPU su più macchine per consentire la distribuzione dei set di dati su tali macchine e la manipolazione in memoria.

I database NoSQL offrono funzionalità per valori-chiave, grafici o documenti. Hazelcast si concentra sulla funzionalità valore-chiave, sottolineando un accesso rapido ai dati distribuiti. Secondo i suoi creatori, può anche essere utilizzato come alternativa a prodotti come Pivotal Gemfire, Software Terracotta e Oracle Coherence.

Hazelcast può essere eseguito come un servizio distribuito o essere incorporato direttamente all'interno di un'applicazione Java. I client sono disponibili per Java, Scala, .Net, C / C ++, Python e Node.js e uno per Go è in lavorazione.

Caratteristiche uniche di Hazelcast

Hazelcast è costruito con Java e ha un ecosistema incentrato su Java. Ogni nodo in un cluster Hazelcast esegue un'istanza della libreria principale di Hazelcast, IMDG, sulla JVM. Anche il modo in cui Hazelcast lavora con i dati è strettamente correlato alle strutture linguistiche di Java. L'interfaccia Map di Java, ad esempio, viene utilizzata da Hazelcast per fornire l'archiviazione di valori-chiave. Come con Memcached, nulla viene scritto su disco; tutto viene tenuto sempre in memoria.

Un vantaggio che Hazelcast può fornire in un ambiente distribuito è "near cache", in cui gli oggetti comunemente richiesti vengono migrati sul server che effettua le richieste. In questo modo, le richieste possono essere eseguite direttamente in memoria sullo stesso sistema, senza richiedere un round trip attraverso la rete.

Oltre alle coppie chiave-valore, puoi archiviare e distribuire molti altri tipi di strutture dati tramite Hazelcast. Alcuni sono semplici implementazioni di oggetti Java, come Map. Altri sono specifici di Hazelcast. MultiMap, ad esempio, è una variante dell'archiviazione di valori-chiave che può archiviare più valori nella stessa chiave. Queste caratteristiche consentono di emulare alcuni comportamenti di altri sistemi NoSQL, come l'organizzazione dei dati in documenti, ma l'enfasi è sulle strutture che consentono la distribuzione e l'accesso rapido ai dati.

Come Hazelcast gestisce il clustering

I cluster Hazelcast non hanno una configurazione master / slave; tutto è peer-to-peer. I dati vengono automaticamente partizionati e distribuiti tra tutti i membri del cluster. È inoltre possibile designare alcuni membri del cluster come "lite", che inizialmente non contengono dati ma possono essere successivamente promossi a membri a pieno titolo. Ciò consente ad alcuni nodi di essere utilizzati rigorosamente per il calcolo o per distribuire i dati gradualmente attraverso un cluster mentre viene portato online.

Hazelcast può anche garantire che le operazioni procedano solo se almeno un certo numero di nodi è online. Tuttavia, è necessario configurare questo comportamento manualmente e funziona solo per determinate strutture di dati. A partire dalla versione 3.9 di Hazelcast, è possibile riconfigurare le strutture dei dati in un cluster senza dover prima portarlo offline.

Dove trovare Hazelcast

Hazelcast è disponibile per il download direttamente dal sito Hazelcast. In genere viene distribuito come raccolta di file Java .JAR. Le immagini Docker sono disponibili anche nel registro Docker ufficiale.

È possibile scaricare l'edizione aziendale di Hazelcast direttamente da Hazelcast. Puoi anche ottenere una chiave di prova gratuita di 30 giorni per Hazelcast.

Database NoSQL di valori-chiave Memcached in dettaglio

Memcached è semplice e veloce quanto lo storage di valori-chiave. Scritto originariamente come livello di accelerazione per la piattaforma di blog LiveJournal, Memcached da allora è diventato un componente onnipresente degli stack tecnologici web. Se hai molti piccoli frammenti di dati che possono essere associati a una semplice chiave e non devono essere replicati tra istanze di cache, Memcached è lo strumento giusto.

Caratteristiche uniche di Memcached

Memcached è più comunemente usato per memorizzare nella cache le query da un database e mantenere i risultati esclusivamente in memoria. Sotto questo aspetto, è diverso da molti altri database NoSQL, valore-chiave o altro, poiché memorizzano i dati in una forma persistente. 

Memcached non esegue il backup del suo archivio dati su nulla. Tutte le chiavi sono conservate solo in memoria, quindi evaporano ogni volta che l'istanza Memcached o il server che la ospita viene reimpostato. Pertanto, Memcached non può davvero essere utilizzato come sostituto di un database NoSQL.

Ciò per cui può essere utilizzato, tuttavia, è un modo ad alta velocità per riporre i dati di uso comune che potrebbe richiedere ordini di grandezza più tempo per eseguire query da una fonte.

Tutti i dati che possono essere serializzati in un flusso binario possono essere memorizzati in Memcached. I valori possono essere impostati in modo che scadano dopo un certo periodo di tempo, o su richiesta, facendo riferimento alle chiavi ai valori da un'applicazione. La quantità di memoria che dedichi a una determinata istanza di Memcached dipende interamente da te e più server possono eseguire Memcached fianco a fianco per distribuire il carico. Inoltre, Memcached scala linearmente con il numero di core disponibili in un sistema perché è un'applicazione multithread.

I linguaggi di programmazione più popolari hanno librerie client per Memcached. Ad esempio, libmemcachedconsente ai programmi C e C ++ di lavorare direttamente con le istanze Memcached. Consente inoltre di incorporare Memcached nei programmi C.

Come Memcached gestisce il clustering

Anche se è possibile eseguire più istanze di Memcached, sia sullo stesso server che su più nodi su una rete, non c'è federazione o sincronizzazione automatica dei dati tra le istanze. I dati inseriti in un'istanza Memcached sono disponibili solo da quell'istanza, punto.

Dove trovare Memcached

Il codice sorgente di Memcached è disponibile per il download da GitHub e dal sito ufficiale di Memcached. I binari di Linux sono disponibili nei repository per la maggior parte delle distribuzioni Linux. Gli utenti Windows possono crearlo direttamente dai sorgenti; alcuni file binari non ufficiali sono stati costruiti in passato ma non sembrano essere disponibili in modo affidabile.

Database NoSQL valore-chiave di Microsoft Azure Cosmos DB in dettaglio

La maggior parte dei database ha un paradigma generale: archivio di documenti, archivio di valori-chiave, archivio di colonne larghe, database di grafici e così via. Non così Azure Cosmos DB. Derivato dal database NoSQL di Microsoft come servizio, DocumentDB, Cosmos DB è il tentativo di Microsoft di creare un singolo database che può utilizzare più paradigmi.

Funzionalità esclusive di Azure Cosmos DB

Cosmos DB usa quello che viene chiamato un sistema di archiviazione di sequenze di record atom per supportare diversi modelli di dati. Gli atomi sono tipi primitivi come stringhe, numeri interi e valori booleani. I record sono raccolte di atomi, come le strutture in C. Le sequenze sono array di atomi o record.

Cosmos DB utilizza questi blocchi predefiniti per replicare il comportamento di più tipi di database. Può riprodurre il comportamento delle tabelle presenti nei database relazionali convenzionali. Ma può anche riprodurre la funzionalità dei tipi di dati presenti nei sistemi NoSQL: documenti JSON senza schema (DocumentDB e MongoDB) e grafici (Gremlin, Apache TinkerPop).