Организация Apache Software Foundation представила релиз распределённой СУБД Apache Cassandra 4.0, относящейся к классу noSQL-систем и рассчитанной на создание высокомасштабируемых и надёжных хранилищ огромных массивов данных, хранимых в форме ассоциативного массива (хэша). Выпуск Cassandra 4.0 признан готовым для рабочих внедрений и уже протестирован в инфраструктурах компаний Amazon, Apple, DataStax, Instaclustr, iland и Netflix c кластерами, насчитывающими более 1000 узлов. Код проекта написан на языке Java и распространяется в рамках лицензии Apache 2.0.
Изначально СУБД Cassandra была разработана компанией Facebook и в 2009 году передана под покровительство фонда Apache. Промышленные решения на базе Cassandra развернуты для обеспечения работы сервисов таких компаний, как Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit и Twitter. Например, развёрнутая компанией Apple инфраструктура хранения на базе Apache Cassandra насчитывает более тысячи кластеров, включающих 160 тысяч узлов и хранящих более 100 петабайт данных. В компании Huawei используется более 300 кластеров Apache Cassandra, включающих 30 тысяч узлов, а в Netflix – более 100 кластров, охватывающих 10 тысяч узлов и обрабатывающих более триллиона запросов в день.
СУБД Cassandra объединяет в себе полностью распределённую hash-систему Dynamo, обеспечивающую практически линейную масштабируемость при увеличении объёма данных. Cassandra использует модель хранения данных на базе семейства столбцов (ColumnFamily), отличающуюся от систем подобных memcachedb, которые хранят данные только в связке ключ/значение, возможностью организовать хранение хэшей с несколькими уровнями вложенности.
Для упрощения взаимодействия с БД поддерживается язык формирования структурированных запросов CQL (Cassandra Query Language), напоминающий SQL, но урезанный по функциональности. Из возможностей можно отметить поддержку пространств имён и семейств столбцов, создание индексов через выражение “CREATE INDEX”.
СУБД позволяет создавать устойчивые к сбоям хранилища: помещаемые в БД данные автоматически реплицируются на несколько узлов распределённой сети, которая может охватывать разные центры обработки данных. При сбое узла, его функции на лету подхватываются другими узлами. Добавление новых узлов в кластер и обновление версии Cassandra производится на лету, без дополнительного ручного вмешательства и переконфигурирования других узлов. Драйверы с поддержкой CQL подготовлены для языков Python, Java (JDBC/DBAPI2), Ruby, PHP, C++ и JavaScript (Node.js).
- Повышена производительность и масштабируемость. Скорость передачи потоков данных между узлами возросла до 5 раз, а пропускная способность при операциях чтения и записи до 25%. Оптимизирован процесс инкрементального восстановления. Задержки из-за приостановки выполнения сборщиком мусора снижены до нескольких миллисекунд.
- Добавлена поддержка лога аудита, позволяющего отслеживать операции аутентификации пользователей и все выполняемые запросы CQL.
- Добавлена возможность ведения полного бинарного лога запросов. Для управления предложены команды “nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog”, а для анализа лога поставляется утилита fqltool.
- Добавлена функция “capture and replay”, позволяющая сохранить срез активности для последующего анализа c воспроизведением условий, свойственных реальной нагрузке.
- Повышена эффективность хранения данных в сжатом виде, что позволяет снизить потребление дискового пространства и повысить производительность операций чтения.
- Данные, относящиеся к системному пространству ключей (system.*), теперь по умолчанию размещаются в первой директории вместо распределения по всем директориям с данными, что позволяет сохранить работоспособность узла в случае выхода из строя одного из дополнительных дисков.
- Добавлена экспериментальная поддержка временной репликации (Transient Replication) и лёгких кворумов (Cheap Quorums). Временные реплики не хранят все данные и используют инкрементное восстановление для согласования с полными репликами.
Лёгкие кворумы реализуют оптимизацию операций записи, при которой запись во временные реплики не производится пока не доступен достаточный набор полных реплик. - Добавлена экспериментальная поддержка Java 11.
- Добавлена экспериментальная опция для сравнения всех деревьев Меркла (Merkle Tree). Например, включение опции на кластере с 3 узлами, в котором две реплики одинаковые, а одна устаревшая, приведёт к выполнению обновления устаревшей реплики с использованием только одной операции копирования актуальной реплики.
- Добавлены новые функции currentTimestamp, currentDate, currentTime и currentTimeUUID.
- Добавлена поддержка арифметических операций в запросах CQL.
- Предоставлена возможность выполнения арифметических операций между данными с типами “timestamp”/”date” и “duration”.
- Добавлен режим для предпросмотра потоков данных, необходимых для восстановления (nodetool repair –preview) и возможность проверки целостности восстанавливаемых данных (nodetool repair –validate).
- В запросах SELECT появилась возможность обработки элементов Map и Set.
- Добавлена поддержка распараллеливания этапа начального построения материализованных представлений (cassandra.yaml:concurrent_materialized_view_builders).
- В команде “nodetool cfstats” добавлена поддержка сортировки по определённым метрикам и ограничения числа выводимых строк.
- Предоставлены настройки для ограничения подключения пользователя только к определённым датацентрам.
- Добавлена возможность ограничения интенсивности (rate limit) операций создания и очистки снапшотов.
- В cqlsh и cqlshlib реализована поддержка Python 3 (поддержка Python 2.7 пока сохранена).
- Прекращена поддержка платформы Windows. Для запуска Cassandra в Windows рекомендуется использовать Linux-окружения, созданные на основе подсистемы WSL2 (Windows Subsystem for Linux 2) или систем виртуализации.