Страницы

2016-03-08

Обзор NoSQL базы данных. Для 80-90% задач NoSQL не нужен.

Основной смысл - для 80-90% задач NoSQL не нужен.
  • Целостность данных важна всегда
  • Очень большие объёмы данных встречаются не часто
  • Реляционная модель достаточно гибкая
  • Используйте нужную базу данных для своей нагрузки
  • Не масштабируйте базу в отрыве от приложения
  • Если вы знаете, как решить свою проблему NoSQL базой, значит вы знаете, как решить проблему и в RDBMS
Хочу сказать сразу я не противник NoSQL, скорее я даже их сторонник - но мне кажется, что надо применять там где это действительно надо.

Сравнительная таблица из википедии
Data ModelPerformanceScalabilityFlexibilityComplexityFunctionality
Key–value Storeshighhighhighnonevariable (none)
Column Storehighhighmoderatelowminimal
Document Storehighvariable (high)highlowvariable (low)
Graph Databasevariablevariablehighhighgraph theory
Relational Databasevariablevariablelowmoderaterelational algebra

Более понятная для понимания таблица 1
Сравнение возможностей I
Модель данныхAPI запросовСистема хранения данных
CassandraСемейства столбцовThriftMemtable/SSTable
CouchDBДокументыMap/ReduceAppend-only-B-tree
HbaseСемейства столбцовThrift, RESTMemtable/SSTable on HDFS
MongoDBДокументыCursorB-tree
Neo4jГрафыGraphOn-disk linked lists
RiakКлюч/ЗначениеNested hashes, RESTHash

Более понятная для понимания таблица 2
Сравнение возможностей II
Вторичные индексыMapReduceПроизвольные запросы
CassandraданетCQL (no joins)
CouchDBдаJavaScriptвременные представления
HbaseнетHadoopслабая поддержка
MongoDBдаJavaScriptполный набор (no joins)
Neo4jда (с помощью Lucene)нет (графы и MapReduce?)обход графа, поиск
RiakдаJavaScript, Erlangслабая поддержка, Lucene

Riak преимущества:
  • Отказоустойчивость (кольцо)
  • Links (ссылки на другие ключи) + фильтры ключей
  • MapReduce (Erlang + JS)
  • REST
  • Подсистема поиска
  • Возможность настройки параметров согласованности и доступности на уровне отдельного запроса
Riak недостатки:
  • Бедные возможности запросов
  • Нет ACID
  • Неполноценная поддержка JavaScript
  • Отсутствие поддержки структур данных
Mongo преимущества:
  • Полноценный язык запросов Aggregation framework Mongo + Node.js + JS Хранение сложных денормализованных документов
  • Большой выбор индексов (Btree, 2d, 3d)
  • Репликация данных и сегментирование коллекций
  • Community
Mongo недостатки:
  • Ограничение на размер результата (16 Мб)
  • Проблема четного числа узлов и сложные выборы
  • Опечатка стоит дорого
  • Над планированием кластера надо думать
  • Иногда навязывает воспроизведение схемы в коде (проверка типов и т.д.)
CouchDB преимущества:
  • Функции-фильтры и как следствие “псевдошардинг”
  • Мобильная версия
  • Простота встраивания и резервного копирования
  • Функции-валидаторы, функции-представления, функции-фильтры сохраняются в текстовом виде в самой базе данных
CouchDB недостатки:
  • Не всегда удобная система репликации ("все или ничего")
  • Неполноценный язык запросов, основанный на MapReduce операциях над представлениями
  • Нет нормального механизма сегментирования
HBase преимущества:
  • Версионирование и сжатие
  • Горизонтальное масштабирование
  • Первое место по обработке трудоемких запросов
  • Быстрое восстановление после отказа
  • Отзывчивое community энтузиастов
  • Тесная интеграция с Hadoop
HBase недостатки:
  • Суровая документация и высокий порог вхождения
  • Заимствованная терминология из мира SQL скорее мешает
  • Надо не менее 5 узлов
  • Нет средств сортировки и индексирования
  • Строгая согласованность без возможности изменений
Cassandra преимущества:
  • Высокая доступность, восстановление на ходу
  • Нет центральной точки отказа
  • Datastax, Hector и все-все-все
  • CQL - SQL без join
  • Строка может динамически раcширяться до 2 миллиардов колонок
  • Резервное копирование не нужно
Cassandra недостатки:
  • Непростая (по сравнению с Hbase) интеграция с Hadoop
  • Моделирование таблиц зависит от ваших запросов
  • Нет ACID, нет откатов
  • Сложность в моделировании (необходимо сильно поменять взгляд на моделирование данных)
  • Требовательная к RAM
Neo4j преимущества:
  • Оптимальна для сильносвязанных сущностей
  • Вершины, ребра, атрибуты
  • Индексы на значения атрибутов
  • ACID
  • REST API + Cypher
  • Множество плагинов, включая 2d индекс
Neo4j недостатки:
  • Нет полноценного горизонтального масштабирования
  • Плохо приспособлен для размещения на нескольких машинах
  • Для полноценного удаления приходится перезапускать сервер

MongoDB в продакшен - миф или реальность?


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

Комментариев нет:

Отправить комментарий