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

PPT
Алексей Чумаков. Apache Cassandra на реальном проекте
PPTX
Введение в Apache Cassandra
PPTX
Cassandra: быстрая запись данных в высоконагруженных системах
PDF
Класс!ная Cassandra
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
За гранью NoSQL: NewSQL на Cassandra
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Алексей Чумаков. Apache Cassandra на реальном проекте
Введение в Apache Cassandra
Cassandra: быстрая запись данных в высоконагруженных системах
Класс!ная Cassandra
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
За гранью NoSQL: NewSQL на Cassandra
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

What's hot (20)

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

Viewers also liked (20)

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

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

PPT
Быстрое масштабирование систем
PPT
Smirnov Memcached Highload 2008
PPT
Smirnov Memcached High Load 2008
PPT
Oracle Timesten
PDF
Дмитрий Еманов — Под капотом серверного ПО
PDF
Android Telegram S Optimizations
PPT
Introduction to MongoDB
PDF
12 - Hadoop. HBase и Cassandra
PDF
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
PPTX
Cassandra db
PDF
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
PPT
XML Native Database на примере SednaXML
PPTX
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
PPT
Sef Trubach V1.2
PPT
Управление свободным пространством на файловой системе в UNIX и Linux
PPT
Ukraine, Kharkiv, Java Club. Day 2
PPT
Redis: возможности, выгоды, примеры использования
PDF
Nosql and Mongodb
PDF
Оптимизация – стоимость владения
PDF
Максим Шапошников, Nutanix
Быстрое масштабирование систем
Smirnov Memcached Highload 2008
Smirnov Memcached High Load 2008
Oracle Timesten
Дмитрий Еманов — Под капотом серверного ПО
Android Telegram S Optimizations
Introduction to MongoDB
12 - Hadoop. HBase и Cassandra
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cassandra db
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
XML Native Database на примере SednaXML
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Sef Trubach V1.2
Управление свободным пространством на файловой системе в UNIX и Linux
Ukraine, Kharkiv, Java Club. Day 2
Redis: возможности, выгоды, примеры использования
Nosql and Mongodb
Оптимизация – стоимость владения
Максим Шапошников, Nutanix

More from Ontico (20)

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

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 миллионов ключей