4. Cassandra in production
• Netflix: “Cassandra is best for cross-regional
deployments and scaling with no single points of
failure”
• Digital Reasoning: NLP + entity analytics
• OpenX: largest publisher-side ad network in the
world
• SimpleGEO: location-as-API
• Ooyala: video analytics and business intelligence
• ngmoco: massively multiplayer game worlds
5. Почему всё таки
Cassandra?
• Реляционные БД плохо масштабируются
• Б-деревья (B-Tree) не лучший выбор
6. Почему всё таки
Cassandra?
• Большие обьемы данных
• Устойчивость к нагрузкам
• Легкая масштабируемость и репликация
• CAP теорема
• Низкая стоимость администрирования
7. Модель данных
Keyspace a.k.a Database
ColumnFamily a.k.a Table
Row Row Row
- key - key - key
Column Column Column
- name - name - name
- value - value - value
- timestamp - timestamp - timestamp
... ... ...
8. Запись
Reader
Writer Memtable
Commitlog
The Log-Structured Merge-Tree,
Bigtable: A Distributed Storage System
for Structured Data
9. Атрибуты записи
• Не используется чтение
• Не используется “seek”
• Атомарность в пределах ColumnFamily
• Данные всегда записаны
10. Чтение
• По ключу или диапозон ключей
• По имени или диапозону имен колонок
• Никаких блокировок (lock free)
• Row Cache - для избежания использования
(чтения) SSTable
• Key Cache - для избежания поиска по
индексу
16. Надежность
• No single point of failure
• Поддержка многих датацентров
• Легкость в мониторинге
• Доступность в рамках одного датацентра
• Доступность в рамкам многих датацентров
29. Настраемаемая
согласованность
• ONE, QUORUM, ALL (LOCAL_QUORUM,
EACH_QUORUM)
• R +W > N
• Выбор между доступностью и
согласованностью
30. Пример ColumnFamily
users
Name:
driftx Password:*
Brandon
Name: Site:
jbellis Password:*
Jonathan datastax.com
Site:
xedin Password:* Name: Pavel
datastax.com
31. Псевдокод
(c использованием CLI)
• Создание ColumnFamily users:
CREATE COLUMN FAMILY users
WITH key_validation_class=UTF8Type
AND comparator=UTF8Type
AND default_validation_class=UTF8Type
AND column_metadata=[
{ column_name:password,
validation_class:UTF8Type
},
{ column_name:site,
validation_class:UTF8Type,
index_type:KEYS,
index_name:SiteColIndex }
];
32. Псевдокод
(c использованием CLI)
• Добавление данных:
‣ SET users[xedin][name] = ‘Pavel’;
‣ SET users[xedin][site] = ‘datastax.com’;
• Чтение данных:
‣ GET users[xedin];
‣ GET users WHERE name = ‘Pavel’;
‣ LIST users;
33. Индексы
Site: datastax.com
jbellis xedin
...
GET users WHERE site = ‘datastax.com’;
34. Динамическая
ColumnFamily
(миллиарды колонок)
• Примеры:
• Активность друзей (a lá twitter feed)
• Лента комментариев за определенный
период (час, день, месяц, год)
36. Тюнинг записи
• Перенести Commitlog на отдельный
физический диск
- Тяжело сделать в “Облаке”
• Увеличить количество Memtable до записи
на диск (по-умолчанию: 4)?
37. Тюнинг чтения
! Определите свой паттерн чтения
• key cache
• row cache
• OS file cache + JNA