4. Мир NoSQL баз данных велик и ужасен и каждая
хороша в чем-то своем. А в чем именно? На чем
основываться, выбирая NoSQL решение для своего
проекта? Может быть на предпочтениях бабушки
вашего ведущего программиста или на основе
забрасывания сапога за ворота в ночь перед
Рождеством? Передаю приветы парням в первом ряду.
Да, именно тебе! Лови конфетку за внимательность.
Нас ждет увлекательный полет над гладью болот
MongoDB, Cassandra, Riak, HerrBase, Neo6j, CouchSS. А в
тихом омуте, как известно, и черти водятся.
6. Эмоции
● То, что мы чувствуем важно
● Мода и тренд
● Протест и компромисс
● Запечатление и эффект
якоря влияют на нас не
меньше чем умные статьи
● Через это должен пройти
каждый и этот этап не
стоит откладывать
7. Эмоции: за что я не люблю ...
CouchBase, потому
что я замучался его
тестировать
Hbase не знаю,
но осуждаю
Монга модная,
сложная и
ненадежная
Riak немного
нервирует, потому
что я его не знаю
Кассандра навязывает
ограниченный cql и
относительно медлено
читает и без гектора
никуда
Мускул решит все
проблемы и он
такой же
быстрый
9. Мифы - это часть борьбы
Утверждение
Процент согласных
Mongo - ненадежна и падает
45%
Cassandra надежна, устойчива и почти не падает
53%
CouchDB предназначен для веба
35%
Neo4j нужен только, чтобы хранить граф социальных
сетей
54%
Hbase нужна только тем, кто не может прикрутить к
Hadoop другой нормальной базы
70%
Mongo имеет отличный встроенный MapReduce
62%
Cassandra навязывает нам SQL - подход
86%
10. Суровая реальность
● Нет базы “моей мечты”
● Чтобы решать задачи,
необходимо знакомство с
основными парадигмами и
их воплощениями
● Если вы будете, вопреки
голосу разума, цепляться
за первую любовь - вас
ждет поражение
11. Принципы приличной NoSQL
● Масштабируемость
(автоматическое
распределение данных)
● Поддержка нескольких
датацентров
● Возможность добавлять
прозрачно новые сервера
● Собственная, отличная от
реляционной, модель
данных
● Согласованность в
конечном счете
12. Критерии сравнения NoSQL
●
●
●
●
●
●
●
●
●
●
●
●
кривая обучения
производительность
возможности языка запросов
свои фреймворки и “ORM”
простота интеграции с Hadoop, поддержка MapReduce
поддержка PHP и Scala-driver
Красивые окошечки для винды
наличие вспомогательных средств для работы
модность, стильность, молодежность
поддержка основных концепций по управления данными
сфера влияния и распространение в проектах
наличие конкурентов при решении определенной задачи
13. Категоризация NoSQL систем
Data Model Performance
Scalability
Flexibility
Complexity
Functionality
Key–value
Stores
зе бест
зе бест
зе бест
none
variable (none)
Column
Store
high
high
moderate
low
minimal
Document
Store
high
variable
(high)
high
low
variable (low)
Graph
Database
variable
variable
high
high
graph theory
Relational
Database
variable
variable
low
moderate
relational algebra
14. Сравнение возможностей I
Модель
данных
API
запросов
Система хранения
данных
Cassandra
Семейства
кошачьих
Thrift
Memtable/SSTable
CouchDB
Документы
Map/Reduce
Append-only-B-tree
Hbase
Семейства
голосеменных
Thrift, REST
Memtable/SSTable on HDFS
MongoDB
Документы
Cursor
B-tree
Neo4j
Графы, бароны
Graph
On-disk linked lists
Riak
Ключ/От/Кварти
ры/Где/Деньги/
Лежат
Nested hashes, Hash
REST
16. Riak: преимущества
● Отказоустойчивость (кольцо)
● Links, du hast (ссылки на
другие ключи) + фильтры
ключей
● MapReduce (Erlang + JC)
● REST
● Подсистема поиска
● Возможность настройки
параметров согласованности
и доступности на уровне
отдельного запроса
17. Riak: недостатки
● Бедные возможности
запросов
● Нет ACID
● Неполноценная поддержка
JavaScript
● Отсутствие поддержки
структур данных
● Невозможно похвастаться
перед родней
18. Mongo: преимущества
●
●
●
●
●
●
●
●
Полноценный язык запросов
Aggregation framework
Mongo + Node.js + JС
Хранение сложных
денормализованных
документов
Большой выбор индексов
Вам меньше 25
Репликация данных и
сегментирование коллекций
Community
19. Mongo: недостатки
● Ограничение на размер
результата (16 Мб)
● Проблема четного числа узлов
и сложные выборы
● Опечатка стоит дорого
● Вам обязательно скажут, что
она падает
● Над планированием кластера
надо думать
● Иногда навязывает
воспроизведение схемы в коде
(проверка типов и т.д.)
20. CouchDB: преимущества
● Функции-фильтры и как
следствие “псевдошардинг”
● Мобильная версия
● Простота встраивания и
резервного копирования
● Сверхбыстрый формат данных
CouchSON, позволяющий
сжимать данные в 10^9 раз на
нанобитовом уровне
21. CouchDB: недостатки
● Не всегда удобная система
репликации (“все или
ничего”)
● Неполноценный язык
запросов, основанный на
MapReduce операциях над
представлениями
● Нет нормального механизма
сегментирования
22. HBase: преимущества
● Версионирование и сжатие
● Горизонтальное
масштабирование
● Первое место по обработке
трудоемких запросов
● Быстрое восстановление
после отказа
● Отзывчивое community
энтузиастов
● Тесная интеграция с Hadoop
23. HBase: недостатки
● Суровая документация и
высокий порог вхождения
● Заимствованная
терминология из мира SQL
скорее мешает
● Надо не менее 5 узлов
● Нет средств сортировки и
индексирования
● Строгая согласованность без
возможности изменений
24. Cassandra: преимущества
● Высокая доступность,
восстановление на ходу
● Нет центральной точки
отказа
● Datastax, Hector и все-все-все
● CQL с поддержкой JOIN
● Строка может динамически
раcширяться до
бесконечности
● Резервное копирование не
нужно
25. Cassandra: недостатки
● Непростая (по сравнению с Hbase) интеграция с
Hadoop
● Моделирование таблиц зависит от ваших запросов
● Нет ACID, нет откатов
● Сложность в моделировании (необходимо сильно
поменять взгляд на моделирование данных)
● Требовательная к RAM
26. Neo4j: преимущества
● Оптимальна для
сильносвязанных сущностей
● Вершины, ребра, атрибуты
● Индексы на значения
атрибутов
● ACID
● REST API + Cypher
● Множество плагинов,
включая 2d индекс
27. Neo4j: недостатки
● Нет полноценного
горизонтального
масштабирования
● Плохо приспособлен для
размещения на нескольких
машинах
● Для полноценного удаления
приходится перезапускать
сервер
33. Фаза исследования
Эту фазу не стоит пропускать,
ибо это единственная фаза,
которая позволяет вам
экономить деньги.
До ее начала необходимо
ответить себе на вопросы о
характере ваших данных и
сформулировать требования по
их использованию.
34. Первая развилка: связи
В вашем приложении есть сеть
данных, граф знаний, а самый
популярный запрос связан с
обходом сложной иерархии
объектов?
Вы готовы отказаться
размещения на нескольких
машинах?
Neo4j спешит на помощь!
35. Вторая развилка: BigData
Данные о достаточно большом количестве
объектов, изменяющихся во времени и
пространстве (движения звезд, твиты об
омских зарплатах, фотки в Instagram)
37. Третья развилка: простота
Нужно лишь чтение/запись по
ключу, безграничное
масштабирование, отсутствие
точек общего отказа
Между данными почти нет
связей.
Riak оставляет всех позади
себя, добавляя возможность
MapReduce над вашими
данными.
38. Четвертая развилка: иерархия
Структура данных отличается
высокой изменчивостью и
большой вложенностью.
Связность отдельных
сегментов данных невысока.
Riak уходит, на сцену выходит
Mongo DB, кружась в
смертельном танго с CouchDB.
39. Пятая развилка: отчеты
Необходима обработка и
сложная агрегация данных
при помощи Hadoop.
Данные довольно плоские.
Hbase царствует безраздельно,
но Cassandra наступает ей на
пятки, предлагая ряд
преимуществ.
40. О данных замолвите слово
● Данные - это океан,
полный морских существ
● Но пока они не выловлены,
пользы от никакой
● Средство лова: удочку,
сеть, глушить гранатой или
вычерпывать кастрюлей,
выбираем мы сами
41. Список источников
1. Эрик Редмонд, Джим Р. Уилсон “Семь баз данных
за семь недель”
2. “A generic intro to NoSQL” by Ben Scofield.
3. http://nosql-database.org/
4. Исследования компании Тамтэк
5. Собственные исследования