После шести месяцев разработки представлен релиз распределенной БД Apache Cassandra 0.8, относящейся к классу noSQL-систем и рассчитанной на создание высокомасштабируемых и надежных хранилищ огромных массивов данных, представленных в виде хэша. Изначально проект был разработан в недрах Facebook и в 2009 году передан под покровительство фонда Apache. Промышленные решения на базе Cassandra развернуты для обеспечения сервисов таких компаний, как Cisco, Cloudkick, Reddit, Digg, Rackspace и Twitter. Наиболее крупный кластер серверов, обслуживающих единую БД Cassandra, насчитывает более 400 машин.
БД Cassandra написана на языке Java и объединяет в себе полностью распределенную 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);
- Поддержка распределенных счетчиков, дающих возможность создавать актуальные для всего хранилища атомарно инкрементируемые поля;
- Поддержка шифрования внутреннего трафика, передаваемого между узлами кластера Cassandra. Ранее, при работе узлов в недоверительной сети приходилось использовать неочевидные надстройки в виде создания туннелей поверх VPN;
- Возможность обновления на лету с ветки 0.7.x до версии 0.8, без остановки работы кластера. В процессе rolling-обновления, узлы обновляются и перезапускаются друг за другом в порядке очереди, не влияя на работоспособность кластера в целом.
- Поддержка выполнения операции упаковки базы в многопоточном режиме с возможностью регулирования пропускной способности для ограничения интенсивности выполнения операции упаковки;
- Возможность установки лимитов на общий размер используемой для memtable памяти. По умолчанию используется 1/3 всего размера кучи.