Организация Apache Software Foundation обяви издаването на разпределената СУБД Apache Cassandra 4.0, която принадлежи към класа noSQL системи и е предназначена за изграждане на високо мащабируеми и надеждни хранилища на огромни масиви от данни, съхранявани под формата на асоциативен масив (хеш). Изпускането на Cassandra 4.0 е признато за готово за работни внедрения и вече е тествано в инфраструктури на компании като Amazon, Apple, DataStax, Instaclustr, iland и Netflix с клъстери, наброяващи над 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).
Основни нововъведения:
- Подобрена производителност и мащабируемост. Увеличена ефективност на обмена на данни в формат SSTable (Sorted Strings Table) между възлите. Оптимизиран е протоколът за обмен на съобщения между възлите (Internode Messaging Protocol). Скоростта на предаване на потока данни между възлите е увеличена до 5 пъти (главно благодарение на прилагането на техниката Zero Copy и предаването на SSTables в цялост), а пропускателната способност при операции за четене и запис е до 25%. Оптимизиран е процесът на инкрементално възстановяване. Забавянията, причинени от спирането на операцията от събирача на боклук, са намалени до няколко милисекунди.
- Добавена е поддръжка на лог за одит, позволяващ проследяване на операции по идентификация на потребители и всички изпълнени заявки CQL.
- Добавена е възможност за водене на пълен бинарен лог на заявките, позволяващ запазване на целия трафик от заявки и отговори. За управление са предложени командите „nodetool enablefullquerylog|disablefullquerylog|resetfullquerylog“, а за анализ на лога е предоставена утилитата fqltool. Предоставени са команди за преобразуване на лога в четим вид (Dump), сравняване на срезове на активността (Compare) и повторно изпълнение (Replay) за анализ с възпроизвеждане на условия, характерни за реално натоварване.
- Добавена е поддръжка на виртуални таблици, отразяващи не данни, съхранявани в SSTables, а информация, извеждана чрез API (метрики на производителността, информация за настройки, съдържание на кеша, сведения за свързани клиенти и т.н.).
- Повишена е ефективността на съхранение на данни в компресиран вид, което позволява намаляване на потреблението на дисково пространство и повишаване на производителността на операциите за четене.
- Данните, свързани със системното ключово пространство (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) или виртуализационни системи.

Източник: opennet.ru
