Wprowadzono na rynek system baz danych Valkey 9.0, który w zeszłym roku wydzielił się z systemu Redis. Fork powstał po przejściu Redis 7.4 na licencję proprietarną. W wydaniu Redis 8.0 kod wrócono do otwartej licencji AGPLv3, jednak nie wpłynęło to na rozwój projektu Valkey. Valkey rozwija się na neutralnej platformie pod patronatem organizacji Linux Foundation z udziałem deweloperów z takich firm, jak Amazon, Google, Oracle, Ericsson i Snap. Kod projektu napisany jest w języku C i rozpowszechniany na licencji BSD. Obsługuje platformy Linux, macOS, OpenBSD, NetBSD i FreeBSD.
Systemy baz danych Valkey i Redis oferują funkcje do przechowywania danych w formacie klucz/wartość, rozszerzone wsparciem dla złożonych formatów danych, takich jak listy, hashe i zbiory, a także możliwością wykonywania skryptów po stronie serwera. serwera Skripty te są napisane w języku Lua. Baza danych przechowywana jest w pamięci i synchronizowana z wersją na dysku lub odzwierciedlana w dzienniku zmian na dysku, co zapewnia utrzymanie danych w przypadku nagłego zakończenia pracy. Obsługiwane są transakcje, tryb „publikacja/subskrypcja”, komendy do inkrementacji/dekrementacji, operacje na listach i zbiorach (łączenie, przecięcie), zmiana nazw kluczy, replikacja master-slave, wielokrotne odczyty i funkcje sortowania.
W nowej wersji:
- Do transferu danych między węzłami w klastrze wykorzystywana jest technika atomowej migracji slotów, w której dane przenoszone są nie na poziomie pojedynczych kluczy (jeden klucz za drugim), lecz na poziomie atomowego przenoszenia 16384 bajtowych slotów pamięci. Transfer dokonywany jest z użyciem formatu AOF, umożliwiającego przesyłanie pojedynczych elementów kolekcji zamiast wszystkich danych powiązanych z kluczem. Takie podejście znacząco zwiększa wydajność, pozwala uniknąć przekierowań i eliminuje opóźnienia, które występowały podczas dostępu klienta do przenoszonego klucza.
- Dodano możliwość określenia oddzielnego czasu życia dla różnych pól w hashach powiązanych z jednym kluczem (wcześniej czas życia był powiązany z kluczem i obejmował jednocześnie wszystkie pola). Dla zarządzania czasem życia danych dodano nowe komendy: HEXPIRE, HEXPIREAT, HEXPIRETIME, HGETEX, HPERSIST, HPEXPIRE, HPEXPIREAT, HPEXPIRETIME, HPTTL, HSETEX i HTTL.
- Wprowadzono możliwość korzystania z trybu klastrowego dla numerowanych baz danych, w których przestrzeń kluczy jest dzielona na kilka różnych baz danych (domyślnie 16).
- Zwiększono efektywność działania dużych klastrów — zaprezentowano klaster z 2000 węzłami, zdolny do obsługi miliarda zapytań na sekundę.
- Dodano optymalizację, która w niektórych sytuacjach pozwala na zwiększenie przepustowości o 40% dzięki wstępnemu ładowaniu grupowanych (pipelining) poleceń do pamięci.
- Dodano optymalizację, która w niektórych sytuacjach pozwala na zwiększenie przepustowości o 20% dzięki wyłączeniu kopiowania danych w pamięci (zero copy) podczas przetwarzania dużych zapytań.
- Dodano wsparcie dla technologii Multipath TCP w celu organizacji dostarczania pakietów jednocześnie przez kilka tras przez różne interfejsy sieciowe przypisane do różnych adresów IP. Zastosowanie Multipath TCP pozwala w niektórych przypadkach zmniejszyć opóźnienia o 25%.
- W BITCOUNT i HyperLogLog dodano optymalizacje wykorzystujące instrukcje procesora SIMD, które w niektórych sytuacjach pozwalają na zwiększenie przepustowości o 200%.
- Do indeksów geoprzesztrzennych dodano wsparcie dla zapytań lokalizacji na podstawie współrzędnych wielokąta.
- Dodano polecenie „DELIFEQ” do usunięcia klucza, jeśli powiązana z nim wartość jest zgodna z podaną.
- W poleceniu „CLIENT LIST” zaimplementowano możliwość stosowania filtrów odrzucających elementy według nazwy, flag, aktywności, bazy danych, adresem IP i uprawnień.
- Przywrócono wsparcie dla 25 poleceń, które wcześniej zostały uznane za przestarzałe.
Źródło: opennet.ru
