Die Apache Software Foundation hat die Version 4.0 der verteilten NoSQL-Datenbank Apache Cassandra präsentiert, die für den Aufbau hochskalierbarer und zuverlässiger Speicher für enorme Datenmengen in Form eines assoziativen Arrays (Hash) konzipiert ist. Die Veröffentlichung von Cassandra 4.0 wird als bereit für den produktiven Einsatz angesehen und wurde bereits in den Infrastrukturen von Unternehmen wie Amazon, Apple, DataStax, Instaclustr, iland und Netflix getestet, mit Clustern, die mehr als 1000 Knoten umfassen. Der Code des Projekts ist in der Programmiersprache Java verfasst und wird unter der Apache 2.0 Lizenz verbreitet.
Ursprünglich wurde die Datenbank Cassandra von Facebook entwickelt und 2009 unter die Schirmherrschaft der Apache Foundation gestellt. Industrielle Lösungen auf Basis von Cassandra sind implementiert, um den Betrieb von Diensten solcher Unternehmen wie Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit und Twitter zu gewährleisten. Zum Beispiel umfasst die von Apple implementierte Infrastruktur zur Speicherung auf Basis von Apache Cassandra mehr als tausend Cluster mit 160.000 Knoten, die über 100 Petabyte Daten speichern. Bei Huawei kommen mehr als 300 Cluster von Apache Cassandra zum Einsatz, die 30.000 Knoten umfassen, während Netflix über 100 Cluster mit 10.000 Knoten verfügt und mehr als eine Billion Anfragen pro Tag verarbeitet.
Die Datenbank Cassandra vereint ein vollständig verteiltes Hash-System namens Dynamo, das eine fast lineare Skalierbarkeit mit zunehmendem Datenvolumen ermöglicht. Cassandra verwendet ein Datenspeichermodell basierend auf Spaltenfamilien (ColumnFamily), das sich von Systemen wie memcachedb unterscheidet, die Daten nur in einer Schlüssel/Wert-Paar-Kombination speichern, und ermöglicht die Organisation von Hashes mit mehreren Ebenen der Verschachtelung. Um die Interaktion mit der Datenbank zu vereinfachen, wird die Abfragesprache CQL (Cassandra Query Language) unterstützt, die SQL ähnlich ist, aber in ihren Funktionen eingeschränkt ist. Zu den Möglichkeiten gehören die Unterstützung von Namensräumen und Spaltenfamilien sowie das Erstellen von Indizes durch den Befehl „CREATE INDEX“.
Die Datenbank ermöglicht den Aufbau von fehlerresistenten Speicherlösungen: Die in der Datenbank gespeicherten Daten werden automatisch auf mehrere Knoten eines verteilten Netzwerks repliziert, das unterschiedliche abdecken kann. Rechenzentren. Bei einem Knotenfehler übernehmen andere Knoten dessen Funktionen in Echtzeit. Das Hinzufügen neuer Knoten zum Cluster und das Aktualisieren der Cassandra-Version erfolgt in Echtzeit, ohne zusätzliche manuelle Eingriffe und Neukonfiguration anderer Knoten. Treiber mit CQL-Unterstützung sind für die Programmiersprachen Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ und JavaScript (Node.js) bereitgestellt.
Hauptneuheiten:
- Die Leistung und Skalierbarkeit wurden verbessert. Die Effizienz des Datenaustauschs im SSTable-Format (Sorted Strings Table) zwischen Knoten wurde erhöht. Das Protokoll für die Nachrichtenübertragung zwischen Knoten (Internode Messaging Protocol) wurde optimiert. Die Übertragungsrate von Datenströmen zwischen Knoten hat sich um das Fünffache erhöht (hauptsächlich aufgrund der Anwendung der Zero-Copy-Technik und der vollständigen Übertragung von SSTables), und die Bandbreite bei Lese- und Schreibvorgängen ist um bis zu 25 % gestiegen. Der Prozess der inkrementellen Wiederherstellung wurde optimiert. Verzögerungen durch eine Pause des Garbage Collectors wurden auf einige Millisekunden reduziert.
- Die Unterstützung für ein Audit-Log wurde hinzugefügt, das die Authentifizierungsoperationen der Benutzer und alle ausgeführten CQL-Anfragen verfolgt.
- Die Möglichkeit zur Führung eines vollständigen Binärlogs für Anfragen wurde hinzugefügt, das den gesamten Datenverkehr von Anfragen und Antworten speichert. Zur Verwaltung stehen die Befehle «nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog» zur Verfügung, und zur Analyse des Logs wird das Tool fqltool bereitgestellt. Es wurden Befehle zur Umwandlung des Logs in ein lesbares Format (Dump), zum Vergleichen von Aktivitätsausschnitten (Compare) und zur Wiederholung (Replay) zur Analyse mit Wiedergabe der Bedingungen, die für die reale Last typisch sind, bereitgestellt.
- Die Unterstützung für virtuelle Tabellen wurde hinzugefügt, die nicht die in SSTables gespeicherten Daten, sondern Informationen bereitstellen, die über die API ausgegeben werden (Leistungsmetriken, Informationen zu Einstellungen, Cache-Inhalte, Informationen über verbundene Clients usw.).
- Die Effizienz der Speicherung von Daten in komprimierter Form wurde erhöht, was zu einer Verringerung des Speicherplatzbedarfs und einer Verbesserung der Lesevorgänge führt.
- Daten, die mit dem System-Schlüsselraum (system.*) verbunden sind, werden jetzt standardmäßig im ersten Verzeichnis platziert, anstatt auf alle Verzeichnisse mit Daten verteilt zu werden, was die Funktionsfähigkeit des Knotens im Falle eines Ausfalls einer der zusätzlichen Festplatten gewährleistet.
- Experimentelle Unterstützung für die temporäre Replikation (Transient Replication) und leichte Quoren (Cheap Quorums) wurde hinzugefügt. Temporäre Replikate speichern nicht alle Daten und verwenden inkrementelle Wiederherstellung, um mit vollständigen Replikaten synchronisiert zu werden. Leichte Quoren implementieren eine Optimierung für Schreibvorgänge, bei der in temporäre Replikate erst dann geschrieben wird, wenn eine ausreichende Anzahl vollständiger Replikate verfügbar ist.
- Experimentelle Unterstützung für Java 11 wurde hinzugefügt.
- Eine experimentelle Option zum Vergleich aller Merkle-Bäume (Merkle Tree) wurde hinzugefügt. Beispielsweise führt die Aktivierung der Option in einem Cluster mit 3 Knoten, in dem zwei Replikate identisch und eines veraltet ist, zur Aktualisierung des veralteten Replikats unter Verwendung nur einer Kopieroperation des aktuellen Replikats.
- Neue Funktionen currentTimestamp, currentDate, currentTime und currentTimeUUID wurden hinzugefügt.
- Unterstützung für arithmetische Operationen in CQL-Abfragen wurde hinzugefügt.
- Die Möglichkeit, arithmetische Operationen zwischen Datentypen "timestamp" / "date" und "duration" auszuführen, wurde bereitgestellt.
- Ein Modus zur Vorschau der Datenströme, die für die Wiederherstellung erforderlich sind (nodetool repair —preview), sowie die Möglichkeit zur Überprüfung der Integrität der wiederhergestellten Daten (nodetool repair —validate) wurde hinzugefügt.
- In SELECT-Abfragen wurde die Möglichkeit zur Verarbeitung von Map- und Set-Elementen eingeführt.
- Unterstützung für die Parallelisierung der Anfangsbauten von Materialized Views (cassandra.yaml:concurrent_materialized_view_builders) wurde hinzugefügt.
- Die Unterstützung für die Sortierung nach bestimmten Metriken und das Limitieren der Anzahl ausgegebener Zeilen wurde im Befehl "nodetool cfstats" hinzugefügt.
- Einstellungen wurden bereitgestellt, um die Verbindung des Benutzers nur mit bestimmten Rechenzentren zu begrenzen.
- Die Möglichkeit zur Begrenzung der Intensität (Rate Limit) von Erstellungs- und Löschvorgängen für Snapshots wurde hinzugefügt.
- In cqlsh und cqlshlib wurde Unterstützung für Python 3 implementiert (die Unterstützung für Python 2.7 bleibt vorerst erhalten).
- Die Unterstützung für die Windows-Plattform wurde eingestellt. Zur Ausführung von Cassandra unter Windows wird empfohlen, Linux-Umgebungen zu verwenden, die auf dem WSL2 (Windows Subsystem for Linux 2) oder Virtualisierungssystemen basieren.

Quelle: opennet.ru
