2 Cassandra: определение, структура, особенности
Cassandra — это база данных NoSQL с открытым исходным кодом, нереляционная и в значительной степени распределенная. Такая БД обладает преимуществами как: горизонтальная масштабируемость, распределенная архитектура и гибкость в определении схемы. Cassandra предназначена для хранения больших объемов данных, представленных в виде хэша.
Модель данных Cassandra состоит из следующих элементов:
столбец (column) – ячейка с данными, состоящая из 3 частей: имя (column name) в виде массива байтов, метка времени (timestamp) и само значение (value) также в виде байтового массива.
строка (row) – наименованная коллекция столбцов;
семейство столбцов (column family) – наименованная коллекция строк;
пространство ключей (keyspace) – набор из нескольких семейств столбцов, собранных вместе. Пространство ключей логически группирует семейства столбцов и обеспечивает изолированные области имен.
В Cassandra реализовано еще два оператора: сравнитель (comparator), задаваемого для имени столбца и валидатор (validator) для значений и ключей. Сравнитель задает правила для сравнения и упорядочивания байтовых значений, используемых для имен столбцов, в то время как валидатор определяет правила для подтвреждения значений столбцов и ключей.
Для распределения данных по узлам Cassandra используется последовательное хэширование. Каждому элементу данных, такому как имя столбца или ID строки, присваивается хэш-значение ключа с помощью хэш-алгоритма. Диапазон всех возможных хэш-значений т.е. «пространство ключей» служит для равномерного распределения между узлами кластера, где каждый узел отвечает за хранение/управление своими назначенными элементами данных.
Распределенная архитектура позволяет юзерам отправлять запросы на обработку данных на любые серверы кластера. В случае, если запрашиваемая информация хранится на другом узле, запрос будет перенаправлен.
Также есть возможность самостоятельно изменить необходимое количество реплик данных и управлять ими. Cassandra предоставляет возможность самостоятельно настроить уровень согласованности данных для каждой операции чтения и записи.
Cassandra имеет возможность для высокой записи скорости благодаря тому, что большая часть данных хранится в оперативной памяти ответственного узла, и обновления сначала выполняются в памяти, а только потом сохраняются на диск. Транзакции также фиксируются в специальном журнале на диске, чтобы избежать потери информации. Запись в журналы фиксации только добавляется, что исключает задержку при вращении диска. Cassandra может записывать данные в достаточное количество узлов без разрешения конфликтов несоответствия, что позволяет избежать задержек при записи данных.
Cassandra также обладает гибкой масштабируемостью. Кластер может состоять из сотен узлов и обрабатывать петабайты данных.
Отсутствие центрального узла в Cassandra помогает с отказоустойчивости в работе. Каждый узел в кластере Cassandra равноценен и, если один узел выходит из строя, его функции автоматически переносятся на другой узел.