Apache Cassandra — это бесплатная система управления базами данных с открытым исходным кодом , разработанная для обработки больших объемов данных на нескольких серверах . Cassandra поддерживает кластеры и охват нескольких центров обработки данных , [2] с асинхронной репликацией и репликацией без мастера. Она обеспечивает малозадерживаемые операции для всех клиентов и включает распределенные методы хранения и репликации Amazon Dynamo в сочетании с моделью движка хранения данных Bigtable от Google . [3]
Авинаш Лакшман, соавтор Dynamo от Amazon , и Прашант Малик разработали Cassandra в Facebook для поддержки функции поиска в папке «Входящие». Facebook открыл исходный код Cassandra на Google Code в июле 2008 года [4] , и он стал проектом Apache Incubator [5] в марте 2009 года, а 17 февраля 2010 года он перешел в разряд проектов верхнего уровня. [6]
Разработчики Facebook назвали свою базу данных в честь Кассандры , троянской пророчицы из мифологии, намекая на классическое проклятие, наложенное на оракула . [7]
Apache Cassandra разработана для обеспечения высокой доступности и отказоустойчивости, позволяя каждому узлу выполнять одни и те же функции, что помогает исключить отдельные точки отказа.
Данные распределяются по всему кластеру с использованием настраиваемых стратегий репликации, которые можно реализовать в нескольких центрах обработки данных, тем самым повышая избыточность и поддерживая аварийное восстановление.
Система поддерживает линейное масштабирование, что увеличивает пропускную способность чтения и записи за счет добавления новых узлов, обеспечивая при этом непрерывность обслуживания.
Cassandra классифицируется как система AP (доступность и устойчивость к разделам), которая делает акцент на доступности и устойчивости к разделам, а не на согласованности. Она также предлагает настраиваемые уровни согласованности для операций чтения и записи. Кроме того, Cassandra интегрируется с Hadoop , поддерживая MapReduce , Apache Pig и Apache Hive , и предлагает язык запросов Cassandra (CQL) для упрощенного доступа к данным. Окончательная согласованность управляется с помощью надгробий для чтения, обновления, вставки и удаления.
Cassandra представила язык запросов Cassandra (CQL). CQL — это простой интерфейс для доступа к Cassandra, как альтернатива традиционному языку структурированных запросов (SQL). CQL добавляет уровень абстракции , который скрывает детали реализации этой структуры и предоставляет собственные синтаксисы для коллекций и других распространенных кодировок. Драйверы языка доступны для Java ( JDBC ), Python (DBAPI2), Node.JS (Datastax), Go (gocql) и C++ . [8]
Пространство ключей в Cassandra — это пространство имен, которое определяет репликацию данных между узлами. Таким образом, репликация определяется на уровне пространства ключей. Ниже приведен пример создания пространства ключей, включая семейство столбцов в CQL 3.0: [9]
СОЗДАТЬ ПРОСТРАНСТВО КЛЮЧЕЙ MyKeySpace С РЕПЛИКАЦИЕЙ = { 'class' : 'SimpleStrategy' , 'replication_factor' : 3 } ; ИСПОЛЬЗОВАТЬ MyKeySpace ; СОЗДАТЬ COLUMNFAMILY MyColumns ( id текст , lastName текст , firstName текст , PRIMARY KEY ( id )); ВСТАВИТЬ В MyColumns ( id , lastName , firstName ) ЗНАЧЕНИЯ ( '1' , 'Doe' , 'John' ); ВЫБРАТЬ * ИЗ МоиКолонки ;
Что дает:
идентификатор | фамилия | имя----+----------+---------- 1 | Доу | Джон(1 ряд)
До версии Cassandra 1.0 Cassandra не была согласованной на уровне строк, что означает, что вставки и обновления в таблице, которые влияют на одну и ту же строку и обрабатываются примерно в одно и то же время, могут влиять на неключевые столбцы непоследовательным образом. [10] Одно обновление может повлиять на один столбец, а другое — на другой, что приводит к наборам значений в строке, которые никогда не были указаны или предназначены. Cassandra 1.1 решила эту проблему, введя изоляцию на уровне строк . [11]
Cassandra не поддерживается в Windows, начиная с версии 4, см. проблему CASSANDRA-16171. [12]
Известно, что маркеры удаления, называемые « надгробиями », вызывают снижение производительности при интенсивном удалении данных. [13] Надгробия распространены во многих базах данных, и эта проблема не уникальна для Cassandra.
Cassandra — это широкое колоночное хранилище , и, как таковое, оно по сути является гибридом между системой управления базами данных «ключ-значение» и табличной. Его модель данных — секционированное строковое хранилище с настраиваемой согласованностью. [14] Строки организованы в таблицы ; первым компонентом первичного ключа таблицы является ключ раздела; внутри раздела строки кластеризуются по оставшимся столбцам ключа. [15] Другие столбцы могут индексироваться отдельно от первичного ключа. [16]
Таблицы можно создавать, удалять или изменять во время выполнения, не блокируя обновления и запросы. [17]
Cassandra не может выполнять соединения или подзапросы . Вместо этого Cassandra делает акцент на денормализации с помощью таких функций, как коллекции. [18]
Семейство столбцов (называемое «таблицей» с CQL 3) напоминает таблицу в СУРБД (система управления реляционными базами данных). Семейства столбцов содержат строки и столбцы. Каждая строка уникально идентифицируется ключом строки. Каждая строка имеет несколько столбцов, каждый из которых имеет имя, значение и временную метку. В отличие от таблицы в СУРБД, разные строки в одном и том же семействе столбцов не обязательно должны совместно использовать один и тот же набор столбцов, и столбец может быть добавлен к одной или нескольким строкам в любое время. [19]
Каждый ключ в Cassandra соответствует значению, которое является объектом. Каждый ключ имеет значения в виде столбцов, и эти столбцы группируются в наборы, называемые семействами столбцов. Таким образом, каждый ключ идентифицирует строку переменного числа элементов. Эти семейства столбцов можно рассматривать как таблицы. Таблица в Cassandra представляет собой распределенную многомерную карту, индексированную ключом. Кроме того, приложения могут указывать порядок сортировки столбцов в семействе суперстолбцов или простых столбцов.
Cassandra — это система на основе Java, которую можно контролировать и управлять ею с помощью Java Management Extensions (JMX). Например, совместимая с JMX утилита Nodetool может использоваться для управления кластером Cassandra. [20] Nodetool также предлагает ряд команд для возврата метрик Cassandra, относящихся к использованию диска, задержке, сжатию, сборке мусора и т. д. [21]
С момента выпуска Cassandra 2.0.2 в 2013 году измерения нескольких метрик производятся с помощью фреймворка метрик Dropwizard [22] и могут быть запрошены через JMX с использованием таких инструментов, как JConsole , или переданы во внешние системы мониторинга с помощью совместимых с Dropwizard плагинов-отчетчиков. [23]
После окончания обучения в вузе будут выпущены:
{{cite web}}
: Отсутствует или пусто |title=
( помощь )Врожденные концепции центров обработки данных Cassandra важны, поскольку они позволяют запускать несколько рабочих нагрузок в нескольких центрах обработки данных...
Cassandra названа в честь греческой мифологической пророчицы Кассандры. [...] Из-за ее красоты Аполлон даровал ей способность пророчества. [...] Когда Кассандра из Трои отказала Аполлону, он наложил на нее проклятие, чтобы все ее предсказания и предсказания ее потомков не были приняты во внимание. [...] Кассандра — проклятый Оракул[.]