43
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись" Докладчик: Алексей Зиновьев

2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

  • Upload
    -

  • View
    255

  • Download
    6

Embed Size (px)

DESCRIPTION

В презентации встречаются пасхалки!

Citation preview

Page 1: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Выбор NoSQL базы данных для вашего проекта:

"Не в свои сани не садись"Докладчик: Алексей Зиновьев

Page 2: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

● аспирант НИИЧАВО, математик● занимаюсь теорией графов, прогнозированием

пробок, исследованием транспортных систем● большой фанат различных Boobs API ● лидер GDG Omsk, соорганизатор IT-субботников

Page 3: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

О чем этот доклад?

Отдохнул на базе…данных

Page 4: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Мир NoSQL баз данных велик и ужасен и каждая хороша в чем-то своем. А в чем именно? На чем основываться, выбирая NoSQL решение для своего проекта? Может быть на предпочтениях бабушки вашего ведущего программиста или на основе забрасывания сапога за ворота в ночь перед Рождеством? Передаю приветы парням в первом ряду. Да, именно тебе! Лови конфетку за внимательность. Нас ждет увлекательный полет над гладью болот MongoDB, Cassandra, Riak, HerrBase, Neo6j, CouchSS. А в тихом омуте, как известно, и черти водятся.

Page 5: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Эмоции

Page 6: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Эмоции● То, что мы чувствуем -

важно● Мода и тренд● Протест и компромисс● Запечатление и эффект

якоря влияют на нас не меньше чем умные статьи

● Через это должен пройти каждый и этот этап не стоит откладывать

Page 7: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Эмоции: за что я не люблю ...

Hbase не знаю, но осуждаю

Riak немного нервирует, потому что я его не знаю

CouchBase, потому что я замучался его тестировать

Кассандра навязывает ограниченный cql и относительно медлено читает и без гектора никуда

Монга модная, сложная и ненадежная Мускул решит все

проблемы и он такой же быстрый

Page 8: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Рынок баз данных

Page 9: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Мифы - это часть борьбыУтверждение Процент согласных

Mongo - ненадежна и падает 45%

Cassandra надежна, устойчива и почти не падает 53%

CouchDB предназначен для веба 35%

Neo4j нужен только, чтобы хранить граф социальных сетей

54%

Hbase нужна только тем, кто не может прикрутить к Hadoop другой нормальной базы

70%

Mongo имеет отличный встроенный MapReduce 62%

Cassandra навязывает нам SQL - подход 86%

Page 10: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Суровая реальность● Нет базы “моей мечты”● Чтобы решать задачи,

необходимо знакомство с основными парадигмами и их воплощениями

● Если вы будете, вопреки голосу разума, цепляться за первую любовь - вас ждет поражение

Page 11: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Принципы приличной NoSQL● Масштабируемость

(автоматическое распределение данных)

● Поддержка нескольких датацентров

● Возможность добавлять прозрачно новые сервера

● Собственная, отличная от реляционной, модель данных

● Согласованность в конечном счете

Page 12: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Критерии сравнения NoSQL● кривая обучения● производительность ● возможности языка запросов● свои фреймворки и “ORM”● простота интеграции с Hadoop, поддержка MapReduce● поддержка PHP и Scala-driver● Красивые окошечки для винды● наличие вспомогательных средств для работы● модность, стильность, молодежность● поддержка основных концепций по управления данными● сфера влияния и распространение в проектах ● наличие конкурентов при решении определенной задачи

Page 13: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Категоризация 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

Page 14: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Сравнение возможностей 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, REST

Hash

Page 15: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Сравнение возможностей IIВторичные индексы

MapReduce Модность

Cassandra да нет оптовка: дешево и сердито

CouchDB да JavaScript не раскрученный бренд

Hbase нет Hadoop слабая поддержка

MongoDB да JavaScript повышенная

Neo4j да (с помощью Lucene)

нет (графы и MapReduce?)

для нердов

Riak да JavaScript, Erlang

слабая поддержка

Page 16: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Riak: преимущества● Отказоустойчивость (кольцо)● Links, du hast (ссылки на

другие ключи) + фильтры ключей

● MapReduce (Erlang + JC)● REST● Подсистема поиска● Возможность настройки

параметров согласованности и доступности на уровне отдельного запроса

Page 17: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Riak: недостатки● Бедные возможности

запросов● Нет ACID● Неполноценная поддержка

JavaScript● Отсутствие поддержки

структур данных● Невозможно похвастаться

перед родней

Page 18: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Mongo: преимущества● Полноценный язык запросов● Aggregation framework● Mongo + Node.js + JС● Хранение сложных

денормализованных документов

● Большой выбор индексов ● Вам меньше 25● Репликация данных и

сегментирование коллекций● Community

Page 19: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Mongo: недостатки● Ограничение на размер

результата (16 Мб)● Проблема четного числа узлов

и сложные выборы● Опечатка стоит дорого● Вам обязательно скажут, что

она падает● Над планированием кластера

надо думать● Иногда навязывает

воспроизведение схемы в коде (проверка типов и т.д.)

Page 20: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

CouchDB: преимущества● Функции-фильтры и как

следствие “псевдошардинг”● Мобильная версия● Простота встраивания и

резервного копирования● Сверхбыстрый формат данных

CouchSON, позволяющий сжимать данные в 10^9 раз на нанобитовом уровне

Page 21: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

CouchDB: недостатки● Не всегда удобная система

репликации (“все или ничего”)

● Неполноценный язык запросов, основанный на MapReduce операциях над представлениями

● Нет нормального механизма сегментирования

Page 22: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

HBase: преимущества● Версионирование и сжатие● Горизонтальное

масштабирование● Первое место по обработке

трудоемких запросов● Быстрое восстановление

после отказа● Отзывчивое community

энтузиастов● Тесная интеграция с Hadoop

Page 23: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

HBase: недостатки● Суровая документация и

высокий порог вхождения● Заимствованная

терминология из мира SQL скорее мешает

● Надо не менее 5 узлов● Нет средств сортировки и

индексирования● Строгая согласованность без

возможности изменений

Page 24: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Cassandra: преимущества● Высокая доступность,

восстановление на ходу● Нет центральной точки

отказа● Datastax, Hector и все-все-все● CQL с поддержкой JOIN● Строка может динамически

раcширяться до бесконечности

● Резервное копирование не нужно

Page 25: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Cassandra: недостатки

● Непростая (по сравнению с Hbase) интеграция с Hadoop

● Моделирование таблиц зависит от ваших запросов● Нет ACID, нет откатов● Сложность в моделировании (необходимо сильно

поменять взгляд на моделирование данных)● Требовательная к RAM

Page 26: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Neo4j: преимущества● Оптимальна для

сильносвязанных сущностей● Вершины, ребра, атрибуты● Индексы на значения

атрибутов● ACID● REST API + Cypher● Множество плагинов,

включая 2d индекс

Page 27: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Neo4j: недостатки● Нет полноценного

горизонтального масштабирования

● Плохо приспособлен для размещения на нескольких машинах

● Для полноценного удаления приходится перезапускать сервер

Page 28: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
Page 29: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Чемпионы-тяжеловесыГраф Число

вершинЧисло ребер

Объем данных на диске

Прирост в день

Web-граф 1 трлн 8 трлн 100 PB 300 TB

Facebook (граф друзей)

1 млрд 140 млрд

1 PB 15 TB

Дорожный граф Европы

18 млн 42 млн 20 GB 50 MB

Дорожный граф Омска

80 000 160 000 300 MB 500 KB

Page 30: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
Page 31: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
Page 32: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
Page 33: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Фаза исследованияЭту фазу не стоит пропускать, ибо это единственная фаза, которая позволяет вам экономить деньги.

До ее начала необходимо ответить себе на вопросы о характере ваших данных и сформулировать требования по их использованию.

Page 34: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Первая развилка: связиВ вашем приложении есть сеть данных, граф знаний, а самый популярный запрос связан с обходом сложной иерархии объектов?

Вы готовы отказаться размещения на нескольких машинах?

Neo4j спешит на помощь!

Page 35: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Вторая развилка: BigData

Данные о достаточно большом количестве объектов, изменяющихся во времени и пространстве (движения звезд, твиты об омских зарплатах, фотки в Instagram)

Page 36: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Вторая развилка: BigData

Придется попрощаться с SQL и наращиванием мощности одного сервера.Впрочем и Neo4j для этого не готов

Page 37: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Третья развилка: простотаНужно лишь чтение/запись по ключу, безграничное масштабирование, отсутствие точек общего отказа

Между данными почти нет связей.

Riak оставляет всех позади себя, добавляя возможность MapReduce над вашими данными.

Page 38: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Четвертая развилка: иерархия Структура данных отличается высокой изменчивостью и большой вложенностью.

Связность отдельных сегментов данных невысока.

Riak уходит, на сцену выходит Mongo DB, кружась в смертельном танго с CouchDB.

Page 39: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Пятая развилка: отчеты Необходима обработка и сложная агрегация данных при помощи Hadoop.

Данные довольно плоские.

Hbase царствует безраздельно, но Cassandra наступает ей на пятки, предлагая ряд преимуществ.

Page 40: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

О данных замолвите слово● Данные - это океан,

полный морских существ● Но пока они не выловлены,

пользы от никакой● Средство лова: удочку,

сеть, глушить гранатой или вычерпывать кастрюлей, выбираем мы сами

Page 41: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Список источников1. Эрик Редмонд, Джим Р. Уилсон “Семь баз данных

за семь недель”2. “A generic intro to NoSQL” by Ben Scofield.3. http://nosql-database.org/4. Исследования компании Тамтэк5. Собственные исследования

Page 42: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Данные - все, способ хранения - ничто!

Page 43: 2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных

Вопросы?