La fondation Apache Software a prĂ©sentĂ© la version 4.0 de la base de donnĂ©es distribuĂ©e Apache Cassandra, qui appartient Ă la catĂ©gorie des systĂšmes noSQL et est conçue pour crĂ©er des entrepĂŽts hautement Ă©volutifs et fiables pour de vastes ensembles de donnĂ©es stockĂ©es sous forme de tableaux associatifs (hachages). La version 4.0 de Cassandra est considĂ©rĂ©e comme prĂȘte pour les dĂ©ploiements en production et a dĂ©jĂ Ă©tĂ© testĂ©e dans les infrastructures d'entreprises telles qu'Amazon, Apple, DataStax, Instaclustr, iland et Netflix, disposant de clusters comptant plus de 1000 nĆuds. Le code du projet est Ă©crit en Java et est distribuĂ© sous la licence Apache 2.0.
Ă l'origine, la base de donnĂ©es Cassandra a Ă©tĂ© dĂ©veloppĂ©e par Facebook et a Ă©tĂ© confiĂ©e Ă la fondation Apache en 2009. Des solutions industrielles basĂ©es sur Cassandra sont dĂ©ployĂ©es pour faire fonctionner les services d'entreprises telles qu'Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit et Twitter. Par exemple, l'infrastructure de stockage dĂ©ployĂ©e par Apple basĂ©e sur Apache Cassandra compte plus de mille clusters, incluant 160 000 nĆuds et stockant plus de 100 pĂ©taoctets de donnĂ©es. Huawei utilise plus de 300 clusters Apache Cassandra, incluant 30 000 nĆuds, et Netflix dispose de plus de 100 clusters couvrant 10 000 nĆuds et traitant plus d'un trillion de requĂȘtes par jour.
La base de donnĂ©es Cassandra intĂšgre un systĂšme de hachage complĂštement distribuĂ©, Dynamo, garantissant une Ă©volutivitĂ© presque linĂ©aire Ă mesure que le volume de donnĂ©es augmente. Cassandra utilise un modĂšle de stockage basĂ© sur des familles de colonnes (ColumnFamily), qui diffĂšre des systĂšmes comme memcachedb, qui ne stockent des donnĂ©es que sous forme de paires clĂ©/valeur, en permettant d'organiser le stockage de hachages avec plusieurs niveaux d'imbrication. Pour simplifier l'interaction avec la base de donnĂ©es, un langage de requĂȘte structurĂ©, CQL (Cassandra Query Language), similaire Ă SQL mais limitĂ© en fonctionnalitĂ©s, est pris en charge. On peut noter la prise en charge des espaces de noms et des familles de colonnes, ainsi que la crĂ©ation d'index via l'expression « CREATE INDEX ».
La base de donnĂ©es permet de crĂ©er des stockages rĂ©silients aux pannes : les donnĂ©es insĂ©rĂ©es dans la base de donnĂ©es sont automatiquement rĂ©pliquĂ©es sur plusieurs nĆuds d'un rĂ©seau distribuĂ©, qui peut couvrir diffĂ©rentes centres de donnĂ©es. En cas de dĂ©faillance d'un nĆud, ses fonctions sont immĂ©diatement prises en charge par d'autres nĆuds. L'ajout de nouveaux nĆuds au cluster et la mise Ă jour de la version de Cassandra se font Ă la volĂ©e, sans intervention manuelle supplĂ©mentaire ni reconfiguration des autres nĆuds. Les pilotes prenant en charge CQL sont disponibles pour les langages Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ et JavaScript (Node.js).
Les principales nouveautés :
- AmĂ©lioration de la performance et de l'Ă©volutivitĂ©. L'efficacitĂ© de l'Ă©change de donnĂ©es au format SSTable (Sorted Strings Table) entre les nĆuds a Ă©tĂ© augmentĂ©e. Le protocole de communication entre les nĆuds (Internode Messaging Protocol) a Ă©tĂ© optimisĂ©. La vitesse de transmission des flux de donnĂ©es entre les nĆuds a Ă©tĂ© multipliĂ©e par 5 (principalement grĂące Ă l'application de la technique Zero Copy et Ă la transmission complĂšte des SSTables), et la bande passante pour les opĂ©rations de lecture et d'Ă©criture a augmentĂ© de 25 %. Le processus de rĂ©cupĂ©ration incrĂ©mentale a Ă©tĂ© optimisĂ©. Les retardements dus Ă la suspension par le collecteur de dĂ©chets ont Ă©tĂ© rĂ©duits Ă quelques millisecondes.
- Ajout de la prise en charge des journaux d'audit, permettant de suivre les opĂ©rations d'authentification des utilisateurs et toutes les requĂȘtes CQL effectuĂ©es.
- Ajout de la possibilitĂ© de maintenir un journal binaire complet des requĂȘtes, permettant de conserver tout le trafic des requĂȘtes et des rĂ©ponses. Pour la gestion, des commandes comme « nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog » sont proposĂ©es, et un outil de saisie de donnĂ©es (fqltool) est fourni pour analyser le journal. Des commandes sont fournies pour convertir le journal en un format lisible (Dump), comparer des instantanĂ©s d'activitĂ© (Compare) et rejouer (Replay) pour l'analyse avec reproduction des conditions caractĂ©ristiques de la charge rĂ©elle.
- Ajout de la prise en charge des tables virtuelles, qui reflÚtent non pas les données stockées dans les SSTables, mais les informations fournies via l'API (métriques de performance, informations de configuration, contenu du cache, détails sur les clients connectés, etc.).
- Amélioration de l'efficacité de stockage des données sous une forme compressée, ce qui permet de réduire la consommation d'espace disque et d'améliorer la performance des opérations de lecture.
- Les donnĂ©es relatives Ă l'espace de clĂ©s systĂšme (system.*) sont dĂ©sormais par dĂ©faut placĂ©es dans le premier rĂ©pertoire au lieu d'ĂȘtre rĂ©parties dans tous les rĂ©pertoires de donnĂ©es, ce qui permet de prĂ©server la fonctionnalitĂ© du nĆud en cas de dĂ©faillance de l'un des disques supplĂ©mentaires.
- Ajout du support expĂ©rimental pour la rĂ©plication transitoire (Transient Replication) et les quorum lĂ©gers (Cheap Quorums). Les rĂ©pliques temporaires ne conservent pas toutes les donnĂ©es et utilisent la restauration incrĂ©mentielle pour se synchroniser avec les rĂ©pliques complĂštes. Les quorum lĂ©gers optimisent les opĂ©rations d'Ă©criture, oĂč l'Ă©criture sur les rĂ©pliques temporaires n'est pas effectuĂ©e tant qu'un ensemble suffisant de rĂ©pliques complĂštes n'est pas disponible.
- Ajout du support expérimental pour Java 11.
- Ajout d'une option expĂ©rimentale pour comparer tous les arbres de Merkle (Merkle Tree). Par exemple, activer l'option sur un cluster de 3 nĆuds, avec deux rĂ©pliques identiques et une obsolĂšte, entraĂźnera la mise Ă jour de la rĂ©plique obsolĂšte en n'utilisant qu'une seule opĂ©ration de copie de la rĂ©plique actuelle.
- Ajout de nouvelles fonctions currentTimestamp, currentDate, currentTime et currentTimeUUID.
- Ajout de la prise en charge des opĂ©rations arithmĂ©tiques dans les requĂȘtes CQL.
- Possibilité d'effectuer des opérations arithmétiques entre des données aux types "timestamp"/"date" et "duration".
- Ajout d'un mode pour prĂ©visualiser les flux de donnĂ©es nĂ©cessaires Ă la restauration (nodetool repair âpreview) et possibilitĂ© de vĂ©rifier l'intĂ©gritĂ© des donnĂ©es restaurĂ©es (nodetool repair âvalidate).
- Dans les requĂȘtes SELECT, possibilitĂ© de traiter les Ă©lĂ©ments Map et Set.
- Ajout de la prise en charge du parallélisme lors de la phase de construction initiale des vues matérialisées (cassandra.yaml:concurrent_materialized_view_builders).
- La commande « nodetool cfstats » prend en charge le tri par certaines métriques et limite le nombre de lignes affichées.
- Fourniture de paramÚtres pour restreindre la connexion des utilisateurs à certains centres de données spécifiques.
- Ajout de la possibilité de limiter l'intensité (rate limit) des opérations de création et de nettoyage des snapshots.
- Dans cqlsh et cqlshlib, prise en charge de Python 3 (le support de Python 2.7 est toujours conservé).
- Fin de la prise en charge de la plateforme Windows. Pour faire fonctionner Cassandra sur Windows, il est recommandé d'utiliser des environnements Linux basés sur le sous-systÚme WSL2 (Windows Subsystem for Linux 2) ou des systÚmes de virtualisation.

Source : opennet.ru
