Состоялся релиз СУБД Valkey 8.1, ответвившейся от СУБД Redis после её перехода на проприетарную лицензию. Проект развивается на нейтральной площадке под покровительством организации Linux Foundation при участии разработчиков из таких компаний, как Amazon, Google, Oracle, Ericsson и Snap. К разработке Valkey присоединился Маделин Олсон (Madelyn Olson), бывший мэйнтейнер Redis. Код проекта написан на языке Си и распространяется под лицензией BSD. Поддерживается работа в Linux, macOS, OpenBSD, NetBSD и FreeBSD.
Начиная с выпуска 7.4 СУБД Redis перешла на использование лицензий RSALv2 (Redis Source Available License v2) и SSPLv1 (Server Side Public License v1), которые приводят к дискриминации отдельных категорий пользователей, что не позволяет считать их открытыми или свободными. По своим целям обе лицензии походят друг на друга, а отличия сводятся к тому, что лицензия SSPL основана на копилефт лицензии AGPLv3, а лицензия RSAL основана на пермиссивной лицензии BSD. Лицензия RSAL позволяет использовать, изменять, распространять и интегрировать код в приложения, за исключением случаев, когда эти приложения являются коммерческими или используются для предоставления управляемых платных сервисов. Лицензия SSPL дополнительно содержит требование поставки под той же лицензией не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
СУБД Valkey и Redis предоставляют функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. БД хранится в памяти и синхронизируется с версией на диске или отражается в логе изменений на диске, что гарантирует сохранность данных в случае аварийного завершения работы. Поддерживаются транзакции, режим "публикация/подписка", команды для инкремента/декремента, операции над списками и множествами (объединение, пересечение), переименование ключей, master-slave репликация, множественные выборки и функции сортировки.
В новой версии:
- Полностью переписана реализация хэш-таблицы, используемой как в основном хранилище данных в формате ключ-значение, так и при хранении данных с типами "Hash", "Set" и "Sorted Set". Новый вариант отличается уменьшением потребления памяти и снижением числа операций случайного доступа к памяти. Для каждой пары ключ-значение без TTL (ограничение времени жизни объекта) потребление памяти снижено на 20 байт, а с TTL - на 30 байт. Пропускная способность увеличилась примерно на 10% при работе не в режиме многопоточного ввода/вывода.
- Добавлена поддержка упреждающей загрузки из памяти (prefetching) при выполнении операции перебора ключей, применяемой, например, при выполнении команды KEYS или при отправке всех ключей на новый узел в кластере при репликации. Благодаря данной оптимизации удалось ускорить перебор ключей в 3.5 раза, так как при переходе к обработке следующего ключа, он теперь оказывается загружен в кэш CPU.
- Продолжен перевод компонентов на многопоточную обработку ввода/вывода. Добавлена возможность использования отдельных потоков ввода/вывода при согласовании TLS-соединений, что в три раза повысило производительность приёма новых соединений. В отдельные потоки также вынесены вызовы функций SSL_pending() и ERR_clear_error(), что привело к повышению пропускной способности при выполнении операций SET на 10%, а GET - на 22%.
- Повышена эффективность репликации. Удаление излишних вычислений контрольных сумм при бездисковой репликации на 18% ускорило выполнение полной синхронизации при включённом TLS. Накладные расходы при выполнении операций copy-on-write сокращены на 47%.
- Оптимизирована реализация сортированных списков (тип данных "sorted set"), выполнение команды ZRANK для которых стало выполняться на 45% быстрее. В реализации команды ZADD задействованы SIMD-инструкции.
- Сокращено потребление памяти при подсчёте уникальных элементов с использованием вероятностного типа hyperloglog (независимо от размера данных теперь требуется лишь 12 КБ памяти). Благодаря задействованию инструкций AVX2 на системах x86 производительность операций PFMERGE и PFCOUNT с типами данных hyperloglog возросла до 12 раз, а операции BITCOUNT до 5 раз.
- В систему активной дефрагментации внесены изменения, предотвращающие появление задержек, длительностью более 1 миллисекунды. Время каждого цикла дефрагментации сокращено до 500 микросекунд. Добавлен механизм (anti-starvation), предотвращающий задержку выполнения операций, таких как цикл дефрагментации, из-за выполнения длительно работающих команд.
- Добавлены новые настройки форматирования логов и отображения времени в логах. Добавлен режим COMMANDLOG для отражения в логе больших запросов и ответов (по аналогии с сохранением длительно выполняемых запросов).
- В команду "LATENCY LATEST", применяемую для анализа задержек, добавлены дополнительные метрики со сведениями о числе зарегистрированных задержек и всплесках задержек.
- Добавлена поддержка операции "SET IFEQ", выполняемой если заданное в сравнении значение соответствует текущему значению ключа.
- Добавлена поддержка создания новых скриптовых движков в виде модулей, что позволяет реализовать поддержку языков, отличных от Lua.
- Представлены новые модули:
- Search Module - движок для векторного поиска похожих значений, оптимизированный для задач машинного обучения, в которых необходимы низкие задержки и высокая пропускная способность. Модуль предоставлен компанией Google.
- JSON Module - реализация типа данных JSON, позволяющая обращаться к частям JSON-документов без их полной обработки на клинтской стороне. Модуль предоставлен компанией AWS.
- Probabilistic Bloom Filter Module - реализация фильтров Блума, вероятностной структуры для проверки вхождения во множество, допускающей ложное определение отсутствующего элемента, но исключающая пропуск существующего элемента. Модуль предоставлен компанией AWS.
|