SlideShare a Scribd company logo
Apache CassandraЕще одно NoSQLхранилище
О чем будет идти речь?Пару слов про NoSQLAmazon DynamoGoogle Big TableCassandra снаружиCassandra кассандра изнутриНаш опыт использования
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
NoSQL - WTF?Казалось бы, причем тут ЛужковSQL?Абсолютно не причем! SQL – просто язык запросовПод “SQL” понимают MySQL/InnoDB, MSSQL и аналоги (row oriented, b-tree индексы).NoSQL== No MySQLНекоторые из NoSQLхранилищ предоставляют SQL-синтаксис. Например, Apache Hive
CAP-теоремаConsistency: в один момент времени, все клиенты видят один и тот же набор данныхAvailability: на каждый запрос будет дан ответ (включая сообщение об ошибке)Partition tolerance: система продолжает работать при нарушении связи между любыми двумя узламиМожно выбрать только два!
NoSQLхранилища – тысячи их!MongoDBтот же MySQL, только в профиль. Apache Hadoop: offline, MapReduceGoogle BigTable family: HbaseAmazon Dynamo: RiakGoogle BigTable + Amazon Dynamo= Apache Cassandra
Dynamo
Amazon DynamoОписана в статье 2007-ого годаДве операции: get(key), put(key, value)Область использования в Amazon: session management, shopping cart, etcПолная распределенностьОтсутствует master node: клиент общается сразу со всеми серверами в кластереБлижайший родственник – DHT в BitTorrent
Token Ring
Replication
ЗаписьКлиент не знает ничего о топологии кластераКоманда на запись отправляется на произвольный сервер, который становится координатором данной операцииКоординатор записывает данные на нужные сервераКлиент выбирает критерий успешности записиЕсли одна из реплик недоступна, запись будет завершена позже
ЧтениеКоманда на чтение оправляется произвольному серверу в кластереСервер знает опрашивает нужные репликиКритерий успешности чтений (количество живых реплик) настраивается клиентом
BigTable
BigTableУ каждой строки может быть индивидуальный набор колонокСхема данных отсутствует
Пример схемы данныхБудем хранить список друзей в социальной сетиКлюч – имя пользователяКолонка – тоже имя пользователя!Значение: 1/2/3 в зависимости от взаимности дружбыf(key, column_name) ->column_value – более удобное представление модели данныхSELECT WHERE key >= start AND key <= end AND name<=maxColumn AND name<minColumn
Хранение данных
Данные внутри tablet server’аMemtable – данные, которые были добавлены недавноMemtableдублируется commit log’ом на дискеSSTable – неизменяемая структура данных на диске с O(1) временем доступа к ключуBloomfilterдля каждой SSTableSSTable compaction – переодическийmerge маленьких SSTable
Тандем BigTableи Dynamo
Что взяли из DynamoToken ringАлгоритм записи/чтения
Что взяли из BigTable?Модель данных: key/columnЛокальную структуру данных на серверахMemtable/commit log – временное хранилищеSSTable/Bloomfilter – постоянное хранилищеSSTable compactionВместо put/get доступны сложные запросы: SELECT WHERE key>=start AND key <= end AND columnName >= c1 AND columnName <= c2Индексы!
Терминология CassandraCluster. Глобальные настройки: тип ключей, partitioning (ordered, md5), размер кэша, топология кластераKeyspace. Аналог в MySQL: база данных. Настройки уровня keyspace: replication factorColumn family. Аналог в MySQL: таблица.размер кэша, индексыSuper columns.
Super columnЕще один уровень вложенности
Операцииmutation(key, column, value) get(key, column)multi_get([k1, k2,…], column)get_slice(key, column_predicate). column_predicate: набор колонок или интервалget_range_slices(start_key, end_key, column_predicate)multi_get_sliceCounters: add/remove(key, column)
ЗаписьКоманда идет на произвольный сервер в кластере. Сервер находит нужные реплики (ReplicationStrategy)Сервер сохраняет данные локально(Hinted handoff)Критерий успешности записи определяет клиент согласно настройки ConsistencyLevel
Репликация: один датацентр
Репликация: два датацентра
Запись: внутренностиMemtable: хранилище новых записей. Настраиваемый flush-критерий (по таймауту, по размеру)Commit-log: дублирует memtableна случай падения сервераMemtable flush -> SSTableSSTable: data + index + bloomfilterSSTable compaction – борьба с фрагметнацией
ЧтениеКоманду на чтение обрабатывает произвольный серверСервер определяет ближайшую реплику на основе настройки snitch: Simple, Topology, DynamicКлиент определяет критерий успешности чтенияRead repair (optional): убедится, что все реплики содержат свежие данные
КонфликтыКаждое значение в колонке имеет timstampTimestamp проставляется клиентом как текущее времяМожно переопределить timestamp на любое 64-х битное числоКлиент получает всегда последний timestamp
Кеширование запросовKey cache: кеширование позиции ключей внутри SSTableRow cache: кеширование ключей и их значений в памятиПринцип кеширования: LIFO. Настраивается для каждой column family отдельноНо! Кассандра использует mmapдля чтения файловНастройки кеширования использовать не рекомендуется. Лучше полагаться на кеширование файловой системы
ИндексыSecondary Indexes: на columns, но не на super columns!При полностью распределенной архитектуре сложно реализовать индексыЧтобы найти значение по индексу, нужно опросить все сервераОграничение реализации: можно делать запросы только по строгому сравнению (SELECT … WHERE column>value– не поддерживается)Индексы сильно замедляют вставку данныхИтого: индексы довольно бесполезная фича
Масштабирование: как добавить сервера в кластер?У каждого сервера есть операцияmove token. Можно переназначит token у любого сервераТопология кластера измениться, миграция данных будет происходить в фонеПока миграция не закончена, сервер будет отвечать за старый кусок данныхАналогично будет отработана ситуация добавления нового сервера в token ring
Проще всего масштабироватьсяв 2 раза
ПреимуществаБыстрый write, особенно когда не нужна consistencyЛегкость в администрировании. Один daemon с одним конфигурационным файломВ HBase: четыре daemon’а на каждый сервер
НедостаткиПлохо реализован range scan: кассандра не умеет передавать данные поточно.Слишком много настроек вынесено на cluster-level: вид и стратегия хранения ключей, и т.д.Compaction существенно замедляет запросыПротоколобщения между нодами: Thrift
Наш опытХраним события в online рекламы: показы/клики/конверсииТипичный клиент: 1 миллиард событий в месяц, 100 миллионов уникальных пользователей (ключей)Ключ: ID пользователя. Имя колонки:ID  событияВопрос N1: сколько уникальных пользователей было в каждом городеВопрос N2: сколько уникальных пользователей видели баннер X, но не видели баннер Y; какое распределение таких пользователей по городамВопрос N3: на какие объявления нажимал конкретный пользователь
Плюсы и минусы+ Быстрая запись, группировка по пользователям во время записи+ Нет проблемы дубликации данных- Плохо реализованный range scan- Нельзя выполнять логику прямо на серверах
Решение проблемАггрегация данных на сервере. Опции: Hadoop/MapReduce, кастомное решениеМинусы Hadoop: операционные расходы, возможность использовать лишь один column family как источник данныхСвое решение: кастомный демон на каждом сервере (аналог map), финальная аггрегация на клиенте.
Наши цифры на тестовых данныхКластер: 3 x (m1.large EC2: 7.5Gb RAM, 2CPU)Скорость записи: 12тысяч событий в секундуСкорость чтения: 9 тысяч событий в секундуОбъем данных: 600Gb за 1.5 месяца, 1.5 миллиарда событий (значений колонок), 100 миллионов ключей

More Related Content

What's hot (20)

PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
PDF
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
PPTX
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
PPTX
No sql.mongodb scaling
Олег Винников
 
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
PPTX
MongoDB первые впечатления
fudz1k
 
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
PPT
MongoDB basics in Russian
Oleg Kachan
 
PDF
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
PPTX
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
PPTX
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
PPTX
NoSQL - взрыв возможностей
Aleksey Solntsev
 
PPTX
Mysql vs postgresql
Daniel Podolsky
 
PPT
phpConf 2010 Классификация систем хранения
Slach
 
PPTX
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Ontico
 
PDF
Лекция 10. Apache Mahout
Technopark
 
PDF
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
PDF
HBase inside
Anatoliy Nikulin
 
PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Ontico
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
No sql.mongodb scaling
Олег Винников
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
MongoDB первые впечатления
fudz1k
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
MongoDB basics in Russian
Oleg Kachan
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
NoSQL - взрыв возможностей
Aleksey Solntsev
 
Mysql vs postgresql
Daniel Podolsky
 
phpConf 2010 Классификация систем хранения
Slach
 
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Ontico
 
Лекция 10. Apache Mahout
Technopark
 
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
HBase inside
Anatoliy Nikulin
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Ontico
 

Viewers also liked (20)

PDF
Александр Соловьёв, Griddynamics.com
Ontico
 
PDF
Технологии и продукты Oracle для обработки и анализа Больших Данных
Andrey Akulov
 
PDF
Создание географически-распределенных датацентров на базе инженерных систем
Andrey Akulov
 
PDF
FOSS Sea 2014_DataWarehouse & BigData_Владимир Слободянюк ( Luxoft)
GeeksLab Odessa
 
PDF
SSAS: multidemention vs tabular mode
Andrey Korshikov
 
PDF
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
HappyDev
 
PDF
Getting Started with Couchbase Ruby
Sergey Avseyev
 
PPT
Web весна 2012 лекция 6
Technopark
 
PPTX
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Olga Lavrentieva
 
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
PPTX
DataTalks #4: Построение хранилища данных на основе платформы hadoop / Игорь ...
WG_ Events
 
PPTX
NoSQL - World IT Planet, Saint Petersburg 2015
Shamim bhuiyan
 
PPT
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Ontico
 
PPTX
Oracle NoSQL Database
Andrey Akulov
 
PDF
NoSQL и Zend Framework (Ростислав Михайлив)
zfconfua
 
PPTX
3 ibm bdw2015
antishmanti
 
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
PPTX
Data Lake vs. Data Warehouse: Which is Right for Healthcare?
Health Catalyst
 
PDF
NoNoSQL = Not Only NoSQL, HappyDev'13
chaltaj
 
Александр Соловьёв, Griddynamics.com
Ontico
 
Технологии и продукты Oracle для обработки и анализа Больших Данных
Andrey Akulov
 
Создание географически-распределенных датацентров на базе инженерных систем
Andrey Akulov
 
FOSS Sea 2014_DataWarehouse & BigData_Владимир Слободянюк ( Luxoft)
GeeksLab Odessa
 
SSAS: multidemention vs tabular mode
Andrey Korshikov
 
2015-12-05 Данил Никифоров - NoSQL для мобайла с синхронизацией данных
HappyDev
 
Getting Started with Couchbase Ruby
Sergey Avseyev
 
Web весна 2012 лекция 6
Technopark
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Olga Lavrentieva
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
DataTalks #4: Построение хранилища данных на основе платформы hadoop / Игорь ...
WG_ Events
 
NoSQL - World IT Planet, Saint Petersburg 2015
Shamim bhuiyan
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Ontico
 
Oracle NoSQL Database
Andrey Akulov
 
NoSQL и Zend Framework (Ростислав Михайлив)
zfconfua
 
3 ibm bdw2015
antishmanti
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
Data Lake vs. Data Warehouse: Which is Right for Healthcare?
Health Catalyst
 
NoNoSQL = Not Only NoSQL, HappyDev'13
chaltaj
 
Ad

Similar to Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович) (20)

PPTX
Cassandra db
Andrei Poliakov
 
PPTX
Cassandra
Ilya Medvedev
 
PDF
Technopolis.NoSQL 03 Cassandra
Vadim Tsesko
 
PPTX
apache cassandra и подруга её scylla
Daniel Podolsky
 
PDF
Nosql and Mongodb
Eduard Antsupov
 
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
PDF
Базы данных. Cassandra
Vadim Tsesko
 
PDF
Cassandra
Vadim Tsesko
 
PDF
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
it-people
 
PPTX
Cassandra design patterns
Denis Gabaydulin
 
PPT
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
PDF
12 - Hadoop. HBase и Cassandra
Roman Brovko
 
PDF
Aлександр Зайцев, LifeStreet
Ontico
 
PDF
NoSQL thumbtack experience, Анатолий Никулин
Anatoliy Nikulin
 
PDF
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
ODP
Новые нереляционные системы хранения данных
Vsevolod Dyomkin
 
PDF
Дмитрий Долгов
CodeFest
 
PPTX
Cassandra:Курс молодого бойца
Igor Khokhryakov
 
PPTX
#PostgreSQLRussia в банке Тинькофф, доклад №1
Nikolay Samokhvalov
 
PPT
hl++ Rubtsov
Ontico
 
Cassandra db
Andrei Poliakov
 
Cassandra
Ilya Medvedev
 
Technopolis.NoSQL 03 Cassandra
Vadim Tsesko
 
apache cassandra и подруга её scylla
Daniel Podolsky
 
Nosql and Mongodb
Eduard Antsupov
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Базы данных. Cassandra
Vadim Tsesko
 
Cassandra
Vadim Tsesko
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
it-people
 
Cassandra design patterns
Denis Gabaydulin
 
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
12 - Hadoop. HBase и Cassandra
Roman Brovko
 
Aлександр Зайцев, LifeStreet
Ontico
 
NoSQL thumbtack experience, Анатолий Никулин
Anatoliy Nikulin
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
Новые нереляционные системы хранения данных
Vsevolod Dyomkin
 
Дмитрий Долгов
CodeFest
 
Cassandra:Курс молодого бойца
Igor Khokhryakov
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
Nikolay Samokhvalov
 
hl++ Rubtsov
Ontico
 
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)

  • 1. Apache CassandraЕще одно NoSQLхранилище
  • 2. О чем будет идти речь?Пару слов про NoSQLAmazon DynamoGoogle Big TableCassandra снаружиCassandra кассандра изнутриНаш опыт использования
  • 4. NoSQL - WTF?Казалось бы, причем тут ЛужковSQL?Абсолютно не причем! SQL – просто язык запросовПод “SQL” понимают MySQL/InnoDB, MSSQL и аналоги (row oriented, b-tree индексы).NoSQL== No MySQLНекоторые из NoSQLхранилищ предоставляют SQL-синтаксис. Например, Apache Hive
  • 5. CAP-теоремаConsistency: в один момент времени, все клиенты видят один и тот же набор данныхAvailability: на каждый запрос будет дан ответ (включая сообщение об ошибке)Partition tolerance: система продолжает работать при нарушении связи между любыми двумя узламиМожно выбрать только два!
  • 6. NoSQLхранилища – тысячи их!MongoDBтот же MySQL, только в профиль. Apache Hadoop: offline, MapReduceGoogle BigTable family: HbaseAmazon Dynamo: RiakGoogle BigTable + Amazon Dynamo= Apache Cassandra
  • 8. Amazon DynamoОписана в статье 2007-ого годаДве операции: get(key), put(key, value)Область использования в Amazon: session management, shopping cart, etcПолная распределенностьОтсутствует master node: клиент общается сразу со всеми серверами в кластереБлижайший родственник – DHT в BitTorrent
  • 11. ЗаписьКлиент не знает ничего о топологии кластераКоманда на запись отправляется на произвольный сервер, который становится координатором данной операцииКоординатор записывает данные на нужные сервераКлиент выбирает критерий успешности записиЕсли одна из реплик недоступна, запись будет завершена позже
  • 12. ЧтениеКоманда на чтение оправляется произвольному серверу в кластереСервер знает опрашивает нужные репликиКритерий успешности чтений (количество живых реплик) настраивается клиентом
  • 14. BigTableУ каждой строки может быть индивидуальный набор колонокСхема данных отсутствует
  • 15. Пример схемы данныхБудем хранить список друзей в социальной сетиКлюч – имя пользователяКолонка – тоже имя пользователя!Значение: 1/2/3 в зависимости от взаимности дружбыf(key, column_name) ->column_value – более удобное представление модели данныхSELECT WHERE key >= start AND key <= end AND name<=maxColumn AND name<minColumn
  • 17. Данные внутри tablet server’аMemtable – данные, которые были добавлены недавноMemtableдублируется commit log’ом на дискеSSTable – неизменяемая структура данных на диске с O(1) временем доступа к ключуBloomfilterдля каждой SSTableSSTable compaction – переодическийmerge маленьких SSTable
  • 19. Что взяли из DynamoToken ringАлгоритм записи/чтения
  • 20. Что взяли из BigTable?Модель данных: key/columnЛокальную структуру данных на серверахMemtable/commit log – временное хранилищеSSTable/Bloomfilter – постоянное хранилищеSSTable compactionВместо put/get доступны сложные запросы: SELECT WHERE key>=start AND key <= end AND columnName >= c1 AND columnName <= c2Индексы!
  • 21. Терминология CassandraCluster. Глобальные настройки: тип ключей, partitioning (ordered, md5), размер кэша, топология кластераKeyspace. Аналог в MySQL: база данных. Настройки уровня keyspace: replication factorColumn family. Аналог в MySQL: таблица.размер кэша, индексыSuper columns.
  • 22. Super columnЕще один уровень вложенности
  • 23. Операцииmutation(key, column, value) get(key, column)multi_get([k1, k2,…], column)get_slice(key, column_predicate). column_predicate: набор колонок или интервалget_range_slices(start_key, end_key, column_predicate)multi_get_sliceCounters: add/remove(key, column)
  • 24. ЗаписьКоманда идет на произвольный сервер в кластере. Сервер находит нужные реплики (ReplicationStrategy)Сервер сохраняет данные локально(Hinted handoff)Критерий успешности записи определяет клиент согласно настройки ConsistencyLevel
  • 27. Запись: внутренностиMemtable: хранилище новых записей. Настраиваемый flush-критерий (по таймауту, по размеру)Commit-log: дублирует memtableна случай падения сервераMemtable flush -> SSTableSSTable: data + index + bloomfilterSSTable compaction – борьба с фрагметнацией
  • 28. ЧтениеКоманду на чтение обрабатывает произвольный серверСервер определяет ближайшую реплику на основе настройки snitch: Simple, Topology, DynamicКлиент определяет критерий успешности чтенияRead repair (optional): убедится, что все реплики содержат свежие данные
  • 29. КонфликтыКаждое значение в колонке имеет timstampTimestamp проставляется клиентом как текущее времяМожно переопределить timestamp на любое 64-х битное числоКлиент получает всегда последний timestamp
  • 30. Кеширование запросовKey cache: кеширование позиции ключей внутри SSTableRow cache: кеширование ключей и их значений в памятиПринцип кеширования: LIFO. Настраивается для каждой column family отдельноНо! Кассандра использует mmapдля чтения файловНастройки кеширования использовать не рекомендуется. Лучше полагаться на кеширование файловой системы
  • 31. ИндексыSecondary Indexes: на columns, но не на super columns!При полностью распределенной архитектуре сложно реализовать индексыЧтобы найти значение по индексу, нужно опросить все сервераОграничение реализации: можно делать запросы только по строгому сравнению (SELECT … WHERE column>value– не поддерживается)Индексы сильно замедляют вставку данныхИтого: индексы довольно бесполезная фича
  • 32. Масштабирование: как добавить сервера в кластер?У каждого сервера есть операцияmove token. Можно переназначит token у любого сервераТопология кластера измениться, миграция данных будет происходить в фонеПока миграция не закончена, сервер будет отвечать за старый кусок данныхАналогично будет отработана ситуация добавления нового сервера в token ring
  • 34. ПреимуществаБыстрый write, особенно когда не нужна consistencyЛегкость в администрировании. Один daemon с одним конфигурационным файломВ HBase: четыре daemon’а на каждый сервер
  • 35. НедостаткиПлохо реализован range scan: кассандра не умеет передавать данные поточно.Слишком много настроек вынесено на cluster-level: вид и стратегия хранения ключей, и т.д.Compaction существенно замедляет запросыПротоколобщения между нодами: Thrift
  • 36. Наш опытХраним события в online рекламы: показы/клики/конверсииТипичный клиент: 1 миллиард событий в месяц, 100 миллионов уникальных пользователей (ключей)Ключ: ID пользователя. Имя колонки:ID событияВопрос N1: сколько уникальных пользователей было в каждом городеВопрос N2: сколько уникальных пользователей видели баннер X, но не видели баннер Y; какое распределение таких пользователей по городамВопрос N3: на какие объявления нажимал конкретный пользователь
  • 37. Плюсы и минусы+ Быстрая запись, группировка по пользователям во время записи+ Нет проблемы дубликации данных- Плохо реализованный range scan- Нельзя выполнять логику прямо на серверах
  • 38. Решение проблемАггрегация данных на сервере. Опции: Hadoop/MapReduce, кастомное решениеМинусы Hadoop: операционные расходы, возможность использовать лишь один column family как источник данныхСвое решение: кастомный демон на каждом сервере (аналог map), финальная аггрегация на клиенте.
  • 39. Наши цифры на тестовых данныхКластер: 3 x (m1.large EC2: 7.5Gb RAM, 2CPU)Скорость записи: 12тысяч событий в секундуСкорость чтения: 9 тысяч событий в секундуОбъем данных: 600Gb за 1.5 месяца, 1.5 миллиарда событий (значений колонок), 100 миллионов ключей