È stata rilasciata la versione del database Valkey 9.0, che si è separata lo scorso anno dal database Redis. Il fork è stato creato dopo che Redis 7.4 è passato a una licenza proprietaria. Con il rilascio di Redis 8.0, il codice è tornato sotto la licenza aperta AGPLv3, ma questo non ha influenzato lo sviluppo del progetto Valkey. Valkey si sviluppa in una piattaforma neutrale sotto il patrocinio dell'organizzazione Linux Foundation con la partecipazione di sviluppatori di aziende come Amazon, Google, Oracle, Ericsson e Snap. Il codice del progetto è scritto in linguaggio C e distribuito sotto licenza BSD. È supportato per funzionare su Linux, macOS, OpenBSD, NetBSD e FreeBSD.
I database Valkey e Redis offrono funzionalità per la memorizzazione dei dati in formato chiave/valore, ampliate dal supporto per formati di dati strutturati come liste, hash e insiemi, nonché la possibilità di eseguire operazioni lato server. server script handler in Lua. The database is stored in memory and synchronized with the disk version or reflected in the change log on disk, ensuring data integrity in case of a crash. Transactions, 'publish/subscribe' mode, increment/decrement commands, list and set operations (union, intersection), key renaming, master-slave replication, multiple selections, and sorting functions are supported.
Nella nuova versione:
- For data transfer between nodes in the cluster, an atomic slot migration technique is employed, where data is transferred not at the level of individual keys (one key at a time) but at the level of atomic movement of 16,384 byte storage slots. The transfer is performed using the AOF format, allowing separate elements of collections to be sent instead of all data related to a key. This approach significantly improves performance, avoids redirection, and eliminates delays that arise when a client accesses the migrating key.
- È stata aggiunta la possibilità di definire un tempo di vita separato per i diversi campi all'interno degli hash associati a una chiave (in precedenza il tempo di vita era legato solo alla chiave e copriva tutti i campi contemporaneamente). Sono stati aggiunti nuovi comandi per gestire il tempo di vita dei dati: HEXPIRE, HEXPIREAT, HEXPIRETIME, HGETEX, HPERSIST, HPEXPIRE, HPEXPIREAT, HPEXPIRETIME, HPTTL, HSETEX e HTTL.
- È stata fornita la possibilità di utilizzare database numerati in modalità cluster, in cui lo spazio delle chiavi è suddiviso in diversi database (di default 16).
- È stata aumentata l'efficienza operativa dei grandi cluster: è stato dimostrato un cluster di 2000 nodi, in grado di elaborare un miliardo di richieste al secondo.
- È stata aggiunta un'ottimizzazione che consente, in alcune situazioni, di aumentare del 40% la capacità di elaborazione grazie al caricamento anticipato dei comandi raggruppati (pipelining) in memoria.
- È stata implementata un'ottimizzazione che consente, in alcune situazioni, di aumentare del 20% la capacità di elaborazione eliminando la copia dei dati in memoria (zero copy) durante l'elaborazione di richieste di grandi dimensioni.
- È stata aggiunta la supporto per la tecnologia Multipath TCP per la consegna simultanea dei pacchetti su più percorsi attraverso diverse interfacce di rete collegate a diversi indirizzi IP. L'uso di Multipath TCP può ridurre i ritardi fino al 25% in alcune situazioni.
- Sono state aggiunte ottimizzazioni in BITCOUNT e HyperLogLog che utilizzano istruzioni SIMD, consentendo in determinate circostanze di aumentare la capacità fino al 200%.
- Nei dati geospaziali è stata aggiunta la supporto per le query di posizione basate su coordinate di poligoni.
- È stato aggiunto il comando "DELIFEQ" per rimuovere una chiave se il valore associato corrisponde a quello specificato.
- Nel comando "CLIENT LIST" è stata implementata la possibilità di impostare filtri che escludono elementi in base a nome, flag, attività, database, indirizzo IP e autorizzazioni.
- È stata ripristinata la supporto per 25 comandi precedentemente dichiarati obsoleti.
Fonte: opennet.ru
