L'organizzazione Apache Software Foundation ha rilasciato il database distribuito Apache Cassandra 4.0, appartenente alla classe dei sistemi noSQL, progettato per la creazione di archivi altamente scalabili e affidabili di enormi volumi di dati, memorizzati in forma di array associativo (hash). Il rilascio di Cassandra 4.0 è considerato pronto per implementazioni produttive ed è già stato testato nelle infrastrutture di aziende come Amazon, Apple, DataStax, Instaclustr, iland e Netflix, con cluster che contano più di 1000 nodi. Il codice del progetto è scritto in Java e distribuito sotto licenza Apache 2.0.
Originariamente, il database Cassandra è stato sviluppato da Facebook e nel 2009 è stato ceduto alla fondazione Apache. Soluzioni industriali basate su Cassandra sono implementate per supportare i servizi di aziende come Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit e Twitter. Ad esempio, l'infrastruttura di archiviazione di Apple, basata su Apache Cassandra, conta più di mille cluster, che includono 160.000 nodi e gestiscono oltre 100 petabyte di dati. Huawei utilizza oltre 300 cluster di Apache Cassandra, con 30.000 nodi, mentre Netflix ha più di 100 cluster, coprendo 10.000 nodi e gestendo oltre un trilione di richieste al giorno.
Il DBMS Cassandra combina un sistema hash completamente distribuito basato su Dynamo, fornendo una scalabilità quasi lineare all'aumentare del volume dei dati. Cassandra utilizza un modello di archiviazione dei dati basato su famiglie di colonne (ColumnFamily), che si differenzia da sistemi simili a memcachedb, i quali memorizzano i dati solo in coppie chiave/valore, grazie alla possibilità di organizzare la memorizzazione di hash con più livelli di nidificazione. Per semplificare l'interazione con il DB, è supportato il linguaggio di query CQL (Cassandra Query Language), che assomiglia all'SQL, ma è ridotto nelle funzionalità. Tra le opzioni disponibili si segnala il supporto per spazi dei nomi e famiglie di colonne, e la creazione di indici tramite l'espressione "CREATE INDEX".
Il DBMS consente la creazione di archivi resistenti ai guasti: i dati memorizzati nel DB vengono automaticamente replicati su più nodi di una rete distribuita, che può coprire diverse data center. In caso di malfunzionamento di un nodo, le sue funzioni vengono immediatamente assunte da altri nodi. L'aggiunta di nuovi nodi al cluster e l'aggiornamento della versione di Cassandra avvengono in tempo reale, senza la necessità di intervento manuale o riconfigurazione di altri nodi. I driver che supportano CQL sono disponibili per i linguaggi Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ e JavaScript (Node.js).
Novità principali:
- Migliorata la performance e la scalabilità. Ottimizzazione dell'efficienza dello scambio di dati nel formato SSTable (Sorted Strings Table) tra i nodi. Ottimizzato il protocollo di messaggistica tra nodi (Internode Messaging Protocol). La velocità di trasmissione dei flussi di dati tra i nodi è aumentata fino a 5 volte (principalmente grazie all'uso della tecnica Zero Copy e alla trasmissione integrale degli SSTable), mentre la larghezza di banda per le operazioni di lettura e scrittura è aumentata fino al 25%. Ottimizzato il processo di ripristino incrementale. Le interruzioni causate dalla pausa del garbage collector sono ridotte a pochi millisecondi.
- Aggiunta la supporto per il log delle attività, che consente di monitorare le operazioni di autenticazione degli utenti e tutte le query CQL eseguite.
- È stata aggiunta la possibilità di tenere un registro binario completo delle richieste, consentendo di salvare tutto il traffico delle richieste e delle risposte. Per la gestione, sono disponibili i comandi «nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog», mentre per l'analisi del registro è fornuto lo strumento fqltool. Sono presenti comandi per trasformare il registro in un formato leggibile (Dump), confrontare i campioni di attività (Compare) e riprodurre (Replay) per l'analisi ricreando le condizioni tipiche di un carico reale.
- È stato aggiunto il supporto per le tabelle virtuali, che riflettono non i dati memorizzati negli SSTables, ma le informazioni fornite tramite API (metriche delle prestazioni, informazioni sulle configurazioni, contenuti della cache, dati sui client connessi, ecc.).
- È stata migliorata l'efficienza di archiviazione dei dati in formato compresso, consentendo di ridurre il consumo di spazio su disco e migliorare le prestazioni delle operazioni di lettura.
- I dati relativi allo spazio chiave del sistema (system.*) ora vengono posizionati per impostazione predefinita nella prima directory, anziché distribuiti in tutte le directory dei dati, il che consente di mantenere funzionante il nodo in caso di guasto di uno dei dischi aggiuntivi.
- Aggiunta il supporto sperimentale per la replicazione temporanea (Transient Replication) e i quorum leggeri (Cheap Quorums). Le repliche temporanee non memorizzano tutti i dati e utilizzano il ripristino incrementale per allinearsi con le repliche complete. I quorum leggeri ottimizzano le operazioni di scrittura, in cui la scrittura nelle repliche temporanee non avviene finché non è disponibile un numero sufficiente di repliche complete.
- Aggiunto il supporto sperimentale per Java 11.
- Aggiunta un'opzione sperimentale per il confronto di tutti gli alberi di Merkle (Merkle Tree). Ad esempio, attivando l'opzione in un cluster con 3 nodi, in cui due repliche sono identiche e una è obsoleta, si procederà all'aggiornamento della replica obsoleta utilizzando solo un'operazione di copia della replica attuale.
- Aggiunte nuove funzioni currentTimestamp, currentDate, currentTime e currentTimeUUID.
- È stata aggiunta la supporto per le operazioni aritmetiche nelle query CQL.
- È stata fornita la possibilità di eseguire operazioni aritmetiche tra dati di tipo «timestamp»/«date» e «duration».
- È stata aggiunta una modalità per l'anteprima dei flussi di dati necessari per il ripristino (nodetool repair —preview) e la possibilità di verificare l'integrità dei dati ripristinati (nodetool repair —validate).
- Nelle query SELECT è stata introdotta la possibilità di elaborare elementi Map e Set.
- È stata aggiunta la supporto per la parallelizzazione della fase iniziale di costruzione delle visioni materializzate (cassandra.yaml:concurrent_materialized_view_builders).
- Nella comando «nodetool cfstats» è stata aggiunta la supporto per la ordinamento in base a metriche specifiche e la limitazione del numero di righe restituite.
- Sono state fornite impostazioni per limitare l'accesso degli utenti solo a determinati data center.
- È stata aggiunta la possibilità di limitare l'intensità (rate limit) delle operazioni di creazione e pulizia degli snapshot.
- In cqlsh e cqlshlib è stata implementata la supporto per Python 3 (il supporto per Python 2.7 è ancora mantenuto).
- Supporto per la piattaforma Windows interrotto. Per eseguire Cassandra su Windows, si raccomanda di utilizzare ambienti Linux basati sul WSL2 (Windows Subsystem for Linux 2) o sistemi di virtualizzazione.

Fonte: opennet.ru
