L'organizzazione Apache Software Foundation ha presentato il rilascio del database distribuito Apache Cassandra 4.0, appartenente alla classe dei sistemi noSQL, progettato per creare archivi altamente scalabili e affidabili per enormi quantità di dati, memorizzati sotto forma di array associativi (hash). Il rilascio di Cassandra 4.0 è stato dichiarato pronto per l'implementazione in produzione ed è già stato testato nelle infrastrutture delle aziende Amazon, Apple, DataStax, Instaclustr, iland e Netflix con cluster che contano oltre 1000 nodi. Il codice del progetto è scritto in Java e distribuito sotto licenza Apache 2.0.
Inizialmente, il database Cassandra è stato sviluppato dalla Facebook e nel 2009 è stato trasferito sotto l'egida della fondazione Apache. Le soluzioni industriali basate su Cassandra sono state implementate per supportare il funzionamento dei 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 oltre mille cluster, inclusi 160.000 nodi e conserva più di 100 petabyte di dati. In Huawei vengono utilizzati oltre 300 cluster di Apache Cassandra, che includono 30.000 nodi, mentre in Netflix ci sono più di 100 cluster che coprono 10.000 nodi e gestiscono oltre un trilione di richieste al giorno.
Il database Cassandra combina in sé un sistema hash completamente distribuito, Dynamo, che fornisce una scalabilità quasi lineare con l'aumento del volume dei dati. Cassandra utilizza un modello di archiviazione dei dati basato su famiglie di colonne (ColumnFamily), distinto da sistemi simili a memcachedb, che memorizzano i dati solo in associazione chiave/valore, con la possibilità di organizzare la memorizzazione di hash con diversi livelli di nidificazione. Per semplificare l'interazione con il database, è supportato il linguaggio per la strutturazione di query CQL (Cassandra Query Language), simile a SQL, ma limitato nelle funzionalità. Tra le caratteristiche, si può notare il supporto per spazi dei nomi e famiglie di colonne, la creazione di indici tramite l'espressione 'CREATE INDEX'.
Il database consente di creare archivi resistenti ai guasti: i dati memorizzati nel database vengono automaticamente replicati su più nodi di una rete distribuita, che può coprire diverse centri di elaborazione dati. In caso di guasto di un nodo, le sue funzioni vengono assunte al volo da altri nodi. L'aggiunta di nuovi nodi al cluster e l'aggiornamento della versione di Cassandra avvengono al volo, senza ulteriori interventi manuali e riconfigurazione di altri nodi. I driver con supporto 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à. Aumentata l'efficienza dello scambio di dati nel formato SSTable (Sorted Strings Table) tra i nodi. Ottimizzato il protocollo di scambio messaggi tra i nodi (Internode Messaging Protocol). La velocità di trasferimento dei flussi di dati tra i nodi è aumentata fino a 5 volte (principalmente grazie all'applicazione della tecnica Zero Copy e alla trasmissione di SSTables interamente), e la larghezza di banda nelle operazioni di lettura e scrittura fino al 25%. Ottimizzato il processo di ripristino incrementale. Le latenze dovute alla sospensione dell'esecuzione da parte del garbage collector sono state ridotte a pochi millisecondi.
- Aggiunto il supporto per il log di audit, che consente di monitorare le operazioni di autenticazione degli utenti e tutte le richieste CQL eseguite.
- Aggiunta la possibilità di mantenere un log binario completo delle richieste, che consente di salvare tutto il traffico di richieste e risposte. Per la gestione sono disponibili i comandi «nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog», e per l'analisi del log è disponibile l'utility fqltool. Sono forniti comandi per trasformare il log in un formato leggibile (Dump), confrontare istantanee di attività (Compare) e ripetere (Replay) per analisi con riproduzione delle condizioni tipiche di un carico reale.
- Aggiunto il supporto per le tabelle virtuali, che riflettono non i dati memorizzati negli SSTables, ma le informazioni restituite tramite API (metrie di performance, informazioni sulle impostazioni, contenuto della cache, informazioni sui clienti connessi, ecc.).
- Migliorata l'efficienza della memorizzazione dei dati in formato compresso, il che consente di ridurre il consumo di spazio su disco e migliorare le prestazioni delle operazioni di lettura.
- I dati relativi allo spazio chiave di sistema (system.*) sono ora per impostazione predefinita collocati nella prima directory anziché distribuiti tra tutte le directory dei dati, consentendo il mantenimento della funzionalità del nodo in caso di guasto di uno dei dischi supplementari.
- È stata aggiunta la supporto sperimentale per la replica temporanea (Transient Replication) e i quorum leggeri (Cheap Quorums). Le repliche temporanee non memorizzano tutti i dati e utilizzano il ripristino incrementale per sincronizzarsi con le repliche complete. I quorum leggeri implementano un'ottimizzazione delle operazioni di scrittura, in cui la scrittura nelle repliche temporanee non viene effettuata finché non è disponibile un insieme sufficiente di repliche complete.
- È stata aggiunta la supporto sperimentale per Java 11.
- È stata aggiunta un'opzione sperimentale per confrontare tutti gli alberi di Merkle (Merkle Tree). Ad esempio, attivare l'opzione su un cluster con 3 nodi, in cui due repliche sono identiche e una è obsoleta, porterà all'aggiornamento della replica obsoleta utilizzando solo una operazione di copia della replica attuale.
- Sono state 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 aggiunta la possibilità di elaborare elementi Map e Set.
- È stata aggiunta la supporto per la parallelizzazione della fase di iniziale costruzione delle viste materializzate (cassandra.yaml:concurrent_materialized_view_builders).
- Nella comando "nodetool cfstats" è stata aggiunta la supporto per ordinare in base a metriche specifiche e limitare il numero di righe visualizzate.
- Sono state fornite impostazioni per limitare il collegamento dell'utente solo a determinati data center.
- È stata aggiunta la possibilità di limitare l'intensità (rate limit) delle operazioni di creazione e cancellazione degli snapshot.
- In cqlsh e cqlshlib è stata implementata la supporto per Python 3 (il supporto per Python 2.7 rimane ancora disponibile).
- È stata interrotta la supporto per la piattaforma Windows. Per eseguire Cassandra su Windows si consiglia di utilizzare ambienti Linux basati sul sottosistema WSL2 (Windows Subsystem for Linux 2) o sistemi di virtualizzazione.

Fonte: opennet.ru
