Релиз БД Apache Cassandra 2.0 с поддержкой триггеров и легковесных транзакций
Представлен релиз распределённой БД Apache Cassandra 2.0, относящейся к классу noSQL-систем и рассчитанной на создание высокомасштабируемых и надёжных хранилищ огромных массивов данных, хранимых в форме ассоциативного массива (хэша). Код проекта написан на языке Java и распространяется в рамках лицензии Apache 2.0. БД Cassandra объединяет в себе полностью распределённую hash-систему Dynamo, обеспечивающую практически линейную масштабируемость при увеличении объема данных. Cassandra использует модель хранения данных на базе семейства столбцов (ColumnFamily), отличающуюся от систем подобных memcachedb, которые хранят данные только в связке ключ/значение, возможностью организовать хранение хэшей с несколькими уровнями вложенности.
Cassandra относится к категории хранилищ повышенно устойчивых к сбоям: помещаемые в БД данные автоматически реплицируются на несколько узлов распределённой сети или даже равномерно распределяются по нескольким дата-центрам. При сбое узла, его функции на лету подхватываются другими узлами. Добавление новых узлов в кластер и обновление версии Cassandra производится на лету, без дополнительного ручного вмешательства и переконфигурирования других узлов.
Для упрощения взаимодействия с БД поддерживается язык формирования структурированных запросов CQL (Cassandra Query Language), на первый взгляд напоминающий SQL, но существенно урезанный по функциональности. Например, можно выполнять только простейшие запросы SELECT с выборкой по определённому условию, но без поддержки сортировки и группировки. Добавление и обновление данных производится через единое выражение UPDATE, операция INSERT отсутствует (если записи нет, при выполнении UPDATE она создаётся). Из возможностей можно отметить поддержку пространств имён и семейств столбцов, создание индексов через выражение «CREATE INDEX». Драйверы с поддержкой CQL подготовлены для языков Python, Java (JDBC/DBAPI2) и JavaScript (Node.js).
Изначально проект был разработан в недрах компании Facebook и в 2009 году передан под покровительство фонда Apache. Промышленные решения на базе Cassandra, способные обрабатывать тысячи запросов в секунду, развернуты для обеспечения сервисов таких компаний и оргнизаций, как Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Netflix, Sony, Rackspace, Reddit и Twitter. Наиболее крупный кластер серверов, обслуживающих единую БД Cassandra насчитывает более 400 машин и используется для хранения более 300 Тб данных.
Особенности новой версии:
Поддержка легковесных транзакций, позволяющих гарантировать порядок выполнения последовательности операций и обеспечить изоляцию, защищающую от возникновения конфликтов при выполнении конкурирующих запросов; Экспериментальная поддержка триггеров, позволяющих вынести выполнение критичного к производительности кода на сторону сервера, ближе к обрабатываемым данным. Пример задания триггера: «CREATE TRIGGER myTrigger ON myTable USING 'org.apache.cassandra.triggers.InvertedIndex'», где обработчик org.apache.cassandra.triggers.InvertedIndex задаётся в виде Java-класса; Расширение языка CQL3 (Cassandra Query Language) в направлении удобства использовании в data-driven-приложениях (отделение данных от логики из обработки в форме бэкенд/фронтэнд) и упрощения миграции с реляционных СУБД. Добавление в выражение SELECT поддержки псевдонимов (alias), задаваемых при помощи ключевого слова «AS», например,» SELECT name AS user_name FROM users;». В блоках «WHERE» и «ORDER BY» псевдонимы не поддерживаются; Возобновлена поддержка выражения «ALTER TABLE DROP» для таблиц CQL3; В выражениях CREATE для пространств ключей, таблиц и индексов (CREATE KEYSPACE, CREATE TABLE и CREATE INDEX) добавлена поддержка условной операции «IF NOT EXISTS», позволяющей выполнять операцию только при отсутствии объекта с указанным именем; В выражение добавлена поддержка условия «IF NOT EXISTS»; В выражение UDPATE добавлена поддержка условия «IF»; Поддержка вторичных индексов для столбцов, отмеченных как первичные ключи (PRIMARY KEY); Поддержка библиотеки JEMalloc с реализацией высоко эффективных функций распределения памяти, позволяющих заметно снизить уровень фрагментации памяти; Оптимизация упаковки данных в хранилище, позволяющая сохранить высокую производительность чтения в конфигурациях с большой нагрузкой на запись; Режим горячего повтора операции для избежания возникновения таймаутов при выполнении запроса — если после отправки первого запроса прошло слишком много времени без ответа отправляется дополнительные запросы к другим репликам; Собственная реализация Thrift-сервера, созданная на основе библиотеки LMAX Disruptor, предоставляющей средства обмена сообщениями между нитями с минимальной задержкой.
© OpenNet