Бесплатная система управления базами данных с открытым исходным кодом
Cassandra — это бесплатная распределенная система управления базами данных NoSQL с открытым исходным кодом и широким набором столбцов , предназначенная для обработки больших объемов данных на множестве обычных серверов и обеспечивающая высокую доступность без единой точки отказа . Cassandra предлагает поддержку кластеров , охватывающих несколько центров обработки данных, [2] с асинхронной репликацией без мастера, обеспечивающей операции с низкой задержкой для всех клиентов. Cassandra была разработана для реализации комбинации технологий распределенного хранения и репликации Dynamo от Amazon и модели механизма хранения данных Bigtable от Google . [3]
История
Авинаш Лакшман, один из авторов Amazon’s Dynamo , и Прашант Малик изначально разработали Cassandra в Facebook для поддержки функции поиска в почтовом ящике Facebook. Facebook выпустил Cassandra как проект с открытым исходным кодом на коде Google в июле 2008 года . [4] В марте 2009 года он стал проектом инкубатора Apache. [5] 17 февраля 2010 года он перешел в проект высшего уровня. [6]
Разработчики Facebook назвали свою базу данных в честь троянской мифологической пророка Кассандры с классическими отсылками к проклятию оракула . [7]
Релизы
Релизы после окончания учебы включают
- 0.6, выпущенная 12 апреля 2010 г., добавлена поддержка встроенного кэширования и Apache Hadoop MapReduce [8].
- 0.7, выпущенная 8 января 2011 г., добавлены вторичные индексы и изменения онлайн-схемы [9]
- В версию 0.8, выпущенную 2 июня 2011 г., добавлен язык запросов Cassandra (CQL), самонастраивающиеся таблицы памяти и поддержка обновлений без простоев [10].
- В версии 1.0, выпущенной 17 октября 2011 г., добавлено интегрированное сжатие, уровневое сжатие и улучшена производительность чтения [11].
- В версии 1.1, выпущенной 23 апреля 2012 г., добавлены самонастраивающиеся кэши, изоляция на уровне строк и поддержка смешанного развертывания SSD/вращающихся дисков [12].
- В версии 1.2, выпущенной 2 января 2013 г., добавлена кластеризация виртуальных узлов, связь между узлами, атомарные пакеты и отслеживание запросов [13].
- 2.0, выпущенная 4 сентября 2013 г., добавлены облегченные транзакции (на основе консенсусного протокола Paxos ), триггеры, улучшено сжатие.
- Версия 2.1 выпущена 10 сентября 2014 г. [14]
- 2.2 выпущена 20 июля 2015 г.
- 3.0 выпущена 11 ноября 2015 г.
- Выпуски с 3.1 по 3.10 представляли собой ежемесячные выпуски с использованием модели выпуска, напоминающей тик-так : выпуски с четными номерами содержали как новые функции, так и исправления ошибок, а выпуски с нечетными номерами включали только исправления ошибок. [15]
- Версия 3.11 выпущена 23 июня 2017 г. в виде стабильной серии выпусков 3.11 и исправлена ошибка из последнего выпуска функции тик-так.
- 4.0 выпущена 26 июля 2021 г.
- 4.1 выпущена 13 декабря 2022 г.
- Версия 4.1.4 выпущена 14 февраля 2024 г.
Основные особенности
- Распределенный
- Каждый узел в кластере имеет одну и ту же роль. Не существует единой точки отказа. Данные распределены по кластеру (поэтому каждый узел содержит разные данные), но нет главного узла, поскольку каждый узел может обслуживать любой запрос.
- Поддерживает репликацию и репликацию в нескольких центрах обработки данных.
- Стратегии репликации настраиваются. [17] Cassandra спроектирована как распределенная система для развертывания большого количества узлов в нескольких центрах обработки данных. Ключевые функции распределенной архитектуры Cassandra специально разработаны для развертывания в нескольких центрах обработки данных, обеспечения резервирования, аварийного переключения и аварийного восстановления.
- Масштабируемость
- Разработанный таким образом, чтобы пропускная способность чтения и записи увеличивалась линейно по мере добавления новых машин, чтобы не было простоев или перерывов в работе приложений.
- Отказоустойчивой
- Данные автоматически реплицируются на несколько узлов для обеспечения отказоустойчивости . Поддерживается репликация между несколькими центрами обработки данных. Неисправные узлы можно заменить без простоя.
- Настраиваемая согласованность
- Cassandra обычно классифицируется как система AP , а это означает, что доступность и устойчивость к разделам обычно считаются более важными, чем согласованность в Cassandra. [18] Операции записи и чтения обеспечивают настраиваемый уровень согласованности , от «запись никогда не выходит из строя» до «блокировать, чтобы все реплики были доступны для чтения», с уровнем кворума посередине. [19]
- Поддержка MapReduce
- Cassandra имеет интеграцию с Hadoop и поддержку MapReduce . Также имеется поддержка Apache Pig и Apache Hive . [20]
- Язык запросов
- Cassandra представила язык запросов Cassandra (CQL). CQL — это простой интерфейс для доступа к Cassandra в качестве альтернативы традиционному языку структурированных запросов (SQL).
- Окончательная согласованность
- Cassandra управляет конечным согласованием операций чтения, добавления и удаления с помощью Tombstones .
Язык запросов Кассандра
Cassandra представила язык запросов Cassandra (CQL). CQL — это простой интерфейс для доступа к Cassandra в качестве альтернативы традиционному языку структурированных запросов (SQL). CQL добавляет уровень абстракции, который скрывает детали реализации этой структуры и предоставляет собственный синтаксис для коллекций и других распространенных кодировок. Языковые драйверы доступны для Java (JDBC), Python (DBAPI2), Node.JS (Datastax), Go (gocql) и C++. [21]
Пространство ключей в Cassandra — это пространство имен, которое определяет репликацию данных между узлами. Таким образом, репликация определяется на уровне пространства ключей. Ниже приведен пример создания пространства ключей, включая семейство столбцов в CQL 3.0: [22]
СОЗДАТЬ ПРОСТРАНСТВО КЛАВИШ MyKeySpace С РЕПЛИКАЦИЕЙ = { 'class' : 'SimpleStrategy' , 'replication_factor' : 3 } ; ИСПОЛЬЗОВАТЬ MyKeySpace ; CREATE COLUMNFAMILY MyColumns ( текст идентификатора , текст последнего имени , текст имени , ПЕРВИЧНЫЙ КЛЮЧ ( id )); INSERT INTO MyColumns ( id , LastName , FirstName ) ЗНАЧЕНИЯ ( '1' , 'Доу' , 'Джон' ); ВЫБРАТЬ * ИЗ MyColumns ;
Который дает:
идентификатор | фамилия | имя----+----------+---------- 1 | Доу | Джон(1 ряд)
Известные вопросы
До Cassandra 1.0 Cassandra не была согласованной на уровне строк, [23] это означает, что вставки и обновления в таблицу, которые затрагивают одну и ту же строку и обрабатываются примерно в одно и то же время, могут непоследовательным образом влиять на неключевые столбцы. Одно обновление может повлиять на один столбец, а другое — на другой, в результате чего в строке появятся наборы значений, которые никогда не были указаны или не предполагались. Cassandra 1.1 решила эту проблему, введя изоляцию на уровне строк . [24]
Cassandra не поддерживается в Windows, начиная с версии 4, см. проблему CASSANDRA-16171. [25]
Надгробия
Известно, что маркеры удаления, называемые «надгробиями», вызывают серьезное ухудшение производительности. [26]
Модель данных
Cassandra — это хранилище с широкими столбцами и, по сути, представляет собой гибрид системы управления ключом-значением и табличной базой данных. Его модель данных представляет собой секционированное хранилище строк с настраиваемой согласованностью. [19] Строки организованы в таблицы ; первый компонент первичного ключа таблицы — это ключ раздела; внутри раздела строки группируются по остальным столбцам ключа. [27] Другие столбцы могут индексироваться отдельно от первичного ключа. [28]
Таблицы можно создавать, удалять и изменять во время выполнения без блокировки обновлений и запросов. [29]
Cassandra не может выполнять соединения или подзапросы . Скорее, Кассандра подчеркивает денормализацию с помощью таких функций, как коллекции. [30]
Семейство столбцов (начиная с CQL 3, называемое «таблицей») напоминает таблицу в СУБД (система управления реляционными базами данных). Семейства столбцов содержат строки и столбцы. Каждая строка однозначно идентифицируется ключом строки. Каждая строка имеет несколько столбцов, каждый из которых имеет имя, значение и метку времени. В отличие от таблицы в СУБД, разные строки в одном и том же семействе столбцов не обязательно должны использовать один и тот же набор столбцов, и столбец можно добавить к одной или нескольким строкам в любое время. [31]
Каждый ключ в Cassandra соответствует значению, которое является объектом. Каждый ключ имеет значения в виде столбцов, а столбцы группируются в наборы, называемые семействами столбцов. Таким образом, каждый ключ идентифицирует строку с переменным числом элементов. Эти семейства столбцов можно было бы рассматривать как таблицы. Таблица в Cassandra — это распределенная многомерная карта, индексированная ключом. Кроме того, приложения могут указывать порядок сортировки столбцов в семействе суперстолбцов или простых столбцов.
Управление и мониторинг
Cassandra — это система на основе Java, которой можно управлять и отслеживать с помощью расширений управления Java (JMX). Например, JMX-совместимая утилита nodetool может использоваться для управления кластером Cassandra (добавление узлов в кольцо, опустошение узлов, вывод узлов из эксплуатации и т. д.). [32] Nodetool также предлагает ряд команд для возврата показателей Cassandra, касающихся использования диска, задержки, сжатия, сборки мусора и многого другого. [33]
Начиная с версии Cassandra 2.0.2 в 2013 году, показатели нескольких показателей создаются с помощью инфраструктуры метрик Dropwizard [34] и могут быть запрошены через JMX с использованием таких инструментов, как JConsole , или переданы во внешние системы мониторинга через плагины отчетов, совместимые с Dropwizard. [35]
Смотрите также
Рекомендации
- ^ Ошибка: невозможно правильно отобразить ссылку. Подробности смотрите в документации .
- ^ Касарес, Хоакин (5 ноября 2012 г.). «Репликация из нескольких центров обработки данных в Cassandra». ДатаСтакс . Проверено 25 июля 2013 г.
Врожденные концепции центров обработки данных Cassandra важны, поскольку они позволяют выполнять несколько рабочих нагрузок в нескольких центрах обработки данных…
- ^ «Обзор документации Apache Cassandra» . Проверено 21 января 2021 г.
- ↑ Гамильтон, Джеймс (12 июля 2008 г.). «Facebook выпускает Cassandra с открытым исходным кодом» . Проверено 4 июня 2009 г.
- ^ «Это теперь новая жара?». Mail-archive.com. 2 марта 2009 г. Архивировано из оригинала 25 апреля 2010 года . Проверено 29 марта 2010 г.
- ^ «Кассандра — это проект верхнего уровня Apache» . Mail-archive.com. 18 февраля 2010 г. Архивировано из оригинала 28 марта 2010 года . Проверено 29 марта 2010 г.
- ^ «Смысл имени апачей Кассандры» . Архивировано из оригинала 1 ноября 2016 г. Проверено 19 июля 2016 г.
Апачи Кассандра названы в честь греческой мифологической пророчицы Кассандры. [...] Из-за ее красоты Аполлон даровал ей способность пророчества. [...] Когда Кассандра Троянская отказала Аполлону, он наложил на нее проклятие, чтобы не поверили всем предсказаниям ее и ее потомков. [...] Кассандра - проклятый Оракул[.]
- ^ «Фонд программного обеспечения Apache объявляет о выпуске Apache Cassandra 0.6: Блог Фонда программного обеспечения Apache» . 13 апреля 2010 года . Проверено 5 января 2016 г.
- ^ «Фонд программного обеспечения Apache объявляет об Apache Cassandra 0.7: Блог Фонда программного обеспечения Apache» . 11 января 2011 года . Проверено 5 января 2016 г.
- ^ Эрик Эванс. «[Пользователь Cassandra] [РЕЛИЗ] 0.8.0». Архивировано из оригинала 8 июня 2015 года . Проверено 5 января 2016 г.
- ^ «Кассандра 1.0.0. Готова к использованию на предприятии» . ИнфоQ . Проверено 5 января 2016 г.
- ^ «Фонд программного обеспечения Apache объявляет об Apache Cassandra™ v1.1: Блог Фонда программного обеспечения Apache» . 24 апреля 2012 года . Проверено 5 января 2016 г.
- ^ «Фонд программного обеспечения Apache объявляет об Apache Cassandra™ v1.2: Блог Фонда программного обеспечения Apache» . apache.org . 2 января 2013 года . Проверено 11 декабря 2014 г.
- ↑ Сильвен Лебрен (10 сентября 2014 г.). «[УСПЕХ ГОЛОСОВАНИЯ] Выпуск Apache Cassandra 2.1.0». mail-archive.com . Проверено 11 декабря 2014 г.
- ^ «Кассандра 2.2, 3.0 и последующие версии» . 16 июня 2015 года. Архивировано из оригинала 20 апреля 2016 года . Проверено 22 апреля 2016 г.
- ^ "Релизы сервера Кассандра" . cassandra.apache.org . Проверено 15 декабря 2015 г.
- ^ «Развертывание Cassandra в нескольких центрах обработки данных» . ДатаСтакс . Проверено 11 декабря 2014 г.
- ^ «Теорема CAP - Изучите Кассандру» . teddyma.gitbooks.io .
- ^ ab DataStax (15 января 2013 г.). «О согласованности данных». Архивировано из оригинала 26 июля 2013 г. Проверено 25 июля 2013 г.
- ^ «Поддержка Hadoop». Архивировано 16 ноября 2017 г. в статье Wayback Machine на вики Кассандры.
- ^ «Драйвер DataStax C/C++ для Apache Cassandra» . ДатаСтакс . Проверено 15 декабря 2014 г.
- Ссылки _ Архивировано из оригинала 13 января 2016 года . Проверено 5 января 2016 г.
- ^ "WAT - Кассандра: согласованность на уровне строк #$@&%*! - datanerds.io" . datanerds.io . Архивировано из оригинала 26 ноября 2016 года . Проверено 28 ноября 2016 г.
- ^ Лебресне, Сильвен (21 февраля 2012 г.). «В Cassandra 1.1: изоляция на уровне строк». DataStax: постоянно действующая платформа данных | НетSQL | Апач Кассандра . Проверено 18 июля 2018 г.
- ^ «Удалить сценарии Windows». Трекер проблем Кассандры . 04.04.2023 . Проверено 4 апреля 2023 г.
- ↑ Родригес, Ален (27 июля 2016 г.). «Об удалениях и надгробиях в Кассандре».
- ^ Эллис, Джонатан (15 февраля 2012 г.). «Схема в Кассандре 1.1». ДатаСтакс . Проверено 25 июля 2013 г.
- ^ Эллис, Джонатан (3 декабря 2010 г.). «Что нового в Cassandra 0.7: вторичные индексы». ДатаСтакс . Проверено 25 июля 2013 г.
- ^ Эллис, Джонатан (2 марта 2012 г.). «Возрождение управления схемами в Cassandra 1.1». ДатаСтакс . Проверено 25 июля 2013 г.
- ^ Лебресне, Сильвен (5 августа 2012 г.). «В версии 1.2: поддержка коллекций в CQL3». ДатаСтакс . Проверено 25 июля 2013 г.
- ^ ДатаСтакс. «Документация Apache Cassandra 0.7 — семейства столбцов». Документация Apache Cassandra 0.7 . Проверено 29 октября 2012 г.
- ^ "NodeTool". Кассандра Вики . Архивировано из оригинала 13 января 2016 года . Проверено 5 января 2016 г.
- ^ «Как отслеживать показатели производительности Cassandra» . Датадог. 3 декабря 2015 года . Проверено 5 января 2016 г.
- ^ «Метрики». Кассандра Вики . Архивировано из оригинала 12 ноября 2015 года . Проверено 5 января 2016 г.
- ^ «Мониторинг». Документация Кассандры . Проверено 1 февраля 2018 г.
Библиография
Внешние ссылки
Викискладе есть медиафайлы по теме Apache Cassandra .
В Викиверситете есть учебные ресурсы о больших данных/Кассандре.
- Лакшман, Авинаш (25 августа 2008 г.). «Кассандра — структурированная система хранения данных в одноранговой сети». Инженерное дело @ Заметки Facebook . Проверено 17 июня 2014 г.
- «Проект Апач Кассандра». Форест-Хилл, Мэриленд, США: Фонд программного обеспечения Apache . Проверено 17 июня 2014 г.
- «Проект Вики». Форест-Хилл, Мэриленд, США: Фонд программного обеспечения Apache . Архивировано из оригинала 14 июня 2014 г. Проверено 17 июня 2014 г.
- Хьюитт, Эбен (1 декабря 2010 г.). «Принятие Apache Cassandra». infoq.com . ИнфоКью, C4Media Inc. Проверено 17 июня 2014 г.
- Лакшман, Авинаш; Малик, Прашант (15 августа 2009 г.). «Кассандра — децентрализованная структурированная система хранения» (PDF) . cs.cornell.edu . Авторы из Facebook . Проверено 17 июня 2014 г.
- Эллис, Джонатан (29 июля 2009 г.). «Что должен знать каждый разработчик о масштабируемости базы данных». SlideShare.net . Проверено 17 июня 2014 г.Из доклада OSCON 2009 о СУРБД против Dynamo, Bigtable и Cassandra.
- «Cassandra-RPM — сборка менеджера пакетов Red Hat (RPM) для проекта Apache Cassandra». code.google.com . Менло-Парк, Калифорния, США: Хостинг проектов Google . Проверено 17 июня 2014 г.
- Рот, Грегор (14 октября 2012 г.). «Кассандра на примере — путь запросов на чтение и запись». SlideShare.net . Проверено 17 июня 2014 г.
- Мансур, Умер (4 ноября 2012 г.). «Сборник обучающих программ по Кассандре» . Проверено 8 февраля 2015 г.
- Бушик, Сергей (22 октября 2012 г.). «Независимое от поставщика сравнение баз данных NoSQL: Cassandra, HBase, MongoDB, Riak». Сетевой Мир . Фрамингем, Массачусетс, США и Стейнс, Миддлсекс, Великобритания: IDG . Архивировано из оригинала 28 мая 2014 г. Проверено 17 июня 2014 г.