Foi lançado o SGBD Valkey 9.0, que se desvia do SGBD Redis no ano passado. O fork foi criado após a transição do Redis 7.4 para uma licença proprietária. Na versão Redis 8.0, o código foi retornado para a licença livre AGPLv3, mas isso não afetou o desenvolvimento do projeto Valkey. O Valkey é desenvolvido em uma plataforma neutra sob a supervisão da organização Linux Foundation, com a participação de desenvolvedores de empresas como Amazon, Google, Oracle, Ericsson e Snap. O código do projeto é escrito na linguagem C e é distribuído sob a licença BSD. Suporta operação em Linux, macOS, OpenBSD, NetBSD e FreeBSD.
Os SGBDs Valkey e Redis oferecem funções para armazenar dados no formato chave/valor, ampliadas pelo suporte a formatos de dados estruturados, como listas, hashes e conjuntos, além da possibilidade de execução do lado servidor de manipuladores de scripts em Lua. O banco de dados é armazenado na memória e sincronizado com a versão em disco ou registrado em um log de alterações no disco, garantindo a integridade dos dados em caso de encerramento inesperado. Suporta transações, modo de 'publicação/assinatura', comandos para incremento/decremento, operações sobre listas e conjuntos (união, interseção), renomeação de chaves, replicação master-slave, seleções múltiplas e funções de ordenação.
Na nova versão:
- Para a transferência de dados entre nós em um cluster, é utilizada a técnica de migração atômica de slots, onde os dados são transferidos não no nível de chaves individuais (uma chave por vez), mas no nível do movimento atômico de 16384 slots de armazenamento de dados. A transferência é realizada usando o formato AOF, que permite enviar elementos individuais de coleções ao invés de todos os dados associados à chave. Essa abordagem aumenta significativamente o desempenho, evita redirecionamentos e elimina atrasos que ocorrem quando o cliente acessa a chave em movimento.
- Adicionada a possibilidade de definir tempos de vida separados para diferentes campos em hashes associados a uma única chave (anteriormente, o tempo de vida estava vinculado à chave e abrangia todos os campos de uma vez). Novos comandos foram adicionados para gerenciar o tempo de vida dos dados: HEXPIRE, HEXPIREAT, HEXPIRETIME, HGETEX, HPERSIST, HPEXPIRE, HPEXPIREAT, HPEXPIRETIME, HPTTL, HSETEX e HTTL.
- Foi disponibilizada a opção de usar bancos de dados numerados em modo de cluster, onde o espaço de chaves é dividido em vários bancos de dados diferentes (por padrão, 16).
- A eficiência do funcionamento de grandes clusters foi aumentada — foi demonstrado um cluster de 2000 nós, capaz de processar um bilhão de requisições por segundo.
- Foi adicionada uma otimização que permite, em algumas situações, aumentar a capacidade de processamento em 40% através do carregamento antecipado de comandos em grupos (pipelining) na memória.
- Foi adicionada uma otimização que permite, em algumas situações, aumentar a capacidade de processamento em 20% através da eliminação da cópia de dados na memória (zero copy) durante o processamento de grandes requisições.
- Foi adicionada a suporte a tecnologia Multipath TCP para a entrega de pacotes simultaneamente por várias rotas através de diferentes interfaces de rede, associadas a diferentes endereços IP. O uso do Multipath TCP pode, em algumas situações, reduzir a latência em 25%.
- No BITCOUNT e HyperLogLog, foram adicionadas otimizações que utilizam instruções de CPU SIMD, que em algumas situações podem aumentar a capacidade de processamento em 200%.
- Índices geo-espaciais agora suportam consultas de localização por coordenadas de polígonos.
- Foi adicionada o comando 'DELIFEQ' para remover uma chave se o valor associado corresponder ao especificado.
- No comando 'CLIENT LIST' foi implementada a capacidade de definir filtros para filtrar elementos por nome, flags, atividade, DB, endereço IP e permissões.
- O suporte a 25 comandos, anteriormente considerados obsoletos, foi reativado.
Fonte: opennet.ru
