A organização Apache Software Foundation lançou a versão do banco de dados distribuído Apache Cassandra 4.0, que pertence à classe dos sistemas noSQL e foi projetada para criar armazenamentos altamente escaláveis e confiáveis de grandes volumes de dados, armazenados na forma de um array associativo (hash). O lançamento do Cassandra 4.0 é considerado pronto para implementação em produção e já foi testado em infraestruturas de empresas como Amazon, Apple, DataStax, Instaclustr, iland e Netflix com clusters que contêm mais de 1000 nós. O código do projeto é escrito em Java e é distribuído sob a licença Apache 2.0.
Inicialmente, o banco de dados Cassandra foi desenvolvido pela Facebook e em 2009 foi transferido para o apoio da fundação Apache. Soluções industriais baseadas no Cassandra estão em operação para garantir a funcionalidade de serviços de empresas como Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit e Twitter. Por exemplo, a infraestrutura de armazenamento da Apple, baseada em Apache Cassandra, conta com mais de mil clusters, incluindo 160 mil nós e armazenando mais de 100 petabytes de dados. A Huawei utiliza mais de 300 clusters Apache Cassandra, com 30 mil nós, enquanto a Netflix opera mais de 100 clusters, englobando 10 mil nós e processando mais de um trilhão de solicitações por dia.
O banco de dados Cassandra combina um sistema de hash totalmente distribuído, o Dynamo, que oferece escalabilidade praticamente linear com o aumento do volume de dados. Cassandra utiliza um modelo de armazenamento baseado em famílias de colunas (ColumnFamily), que se diferencia de sistemas como o memcachedb, que armazena dados apenas em pares chave/valor, pela possibilidade de organizar o armazenamento de hashes com múltiplos níveis de aninhamento. Para facilitar a interação com o banco de dados, é suportada a linguagem de formação de consultas estruturadas CQL (Cassandra Query Language), que se assemelha ao SQL, mas com funcionalidades reduzidas. Entre as capacidades, destaca-se o suporte a namespaces e famílias de colunas, e a criação de índices através da expressão "CREATE INDEX".
O banco de dados permite a criação de armazenamentos resistentes a falhas: os dados inseridos no banco são automaticamente replicados em vários nós de uma rede distribuída, que pode abranger diferentes centros de dados. Em caso de falha de um nó, suas funções são assumidas por outros nós em tempo real. A adição de novos nós ao cluster e a atualização da versão do Cassandra ocorrem sem intervenção manual adicional e reconfiguração de outros nós. Drivers com suporte a CQL estão disponíveis para as linguagens Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ e JavaScript (Node.js).
Principais novidades:
- Aumentada a performance e escalabilidade. A eficiência na troca de dados no formato SSTable (Sorted Strings Table) entre os nós foi aprimorada. O protocolo de troca de mensagens entre nós (Internode Messaging Protocol) foi otimizado. A velocidade de transmissão de fluxos de dados entre os nós aumentou em até 5 vezes (principalmente devido à aplicação da técnica Zero Copy e à transferência de SSTables como um todo), e a largura de banda em operações de leitura e gravação cresceu em até 25%. O processo de recuperação incremental foi otimizado. Os atrasos devido à pausa da execução pelo coletor de lixo foram reduzidos para alguns milissegundos.
- Adicionada a suporte ao log de auditoria, permitindo rastrear operações de autenticação de usuários e todas as requisições CQL executadas.
- Adicionada a possibilidade de manter um log binário completo de requisições, que permite salvar todo o tráfego de requisições e respostas. Para gerenciamento, foram propostas os comandos "nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog", e para análise do log, a ferramenta fqltool é fornecida. Foram disponibilizados comandos para transformar o log em um formato legível (Dump), comparar recortes de atividade (Compare) e reexecutar (Replay) para análise com reprodução das condições características de uma carga real.
- Adicionada a suporte a tabelas virtuais, que refletem não os dados armazenados em SSTables, mas informações expostas através da API (métricas de desempenho, informações de configuração, conteúdo de cache, dados sobre clientes conectados, etc.).
- A eficiência no armazenamento de dados em formato compactado foi aumentada, o que permite a redução do consumo de espaço em disco e melhora o desempenho das operações de leitura.
- Os dados relacionados ao espaço de chave do sistema (system.*) agora são colocados por padrão no primeiro diretório em vez de serem distribuídos em todos os diretórios com dados, o que permite manter a operabilidade do nó em caso de falha de um dos discos adicionais.
- Foi adicionada a suporte experimental para replicação transitória (Transient Replication) e quóruns leves (Cheap Quorums). Réplicas temporárias não armazenam todos os dados e utilizam recuperação incremental para se alinhar com réplicas completas. Quóruns leves implementam uma otimização de operações de gravação onde a gravação em réplicas temporárias não ocorre até que um conjunto suficiente de réplicas completas esteja disponível.
- Foi adicionada a suporte experimental para Java 11.
- Foi adicionada uma opção experimental para comparar todas as árvores Merkle (Merkle Tree). Por exemplo, ativar a opção em um cluster com 3 nós, onde duas réplicas são idênticas e uma está obsoleta, levará à atualização da réplica obsoleta usando apenas uma operação de cópia da réplica atual.
- Novas funções currentTimestamp, currentDate, currentTime e currentTimeUUID foram adicionadas.
- Foi adicionada a suporte para operações aritméticas em consultas CQL.
- Foi disponibilizada a possibilidade de realizar operações aritméticas entre dados dos tipos 'timestamp'/'date' e 'duration'.
- Foi adicionado um modo para visualizar os fluxos de dados necessários para a recuperação (nodetool repair —preview) e a capacidade de verificar a integridade dos dados recuperados (nodetool repair —validate).
- Nas consultas SELECT, agora é possível processar elementos Map e Set.
- Foi adicionada a suporte para paralelização da etapa de construção inicial de visões materializadas (cassandra.yaml:concurrent_materialized_view_builders).
- No comando 'nodetool cfstats' foi adicionada a suporte para ordenação por métricas específicas e limitação do número de linhas exibidas.
- Foram fornecidas configurações para restringir o acesso do usuário apenas a determinados data centers.
- Foi adicionada a possibilidade de limitar a intensidade (rate limit) das operações de criação e limpeza de snapshots.
- No cqlsh e cqlshlib, foi implementada a suporte para Python 3 (a suporte para Python 2.7 ainda é mantida).
- A suporte para a plataforma Windows foi descontinuada. Para executar o Cassandra no Windows, é recomendável usar ambientes Linux criados com base no Windows Subsystem for Linux 2 (WSL2) ou sistemas de virtualização.

Fonte: opennet.ru
