Основной смысл - для 80-90% задач NoSQL не нужен.
- Целостность данных важна всегда
- Очень большие объёмы данных встречаются не часто
- Реляционная модель достаточно гибкая
- Используйте нужную базу данных для своей нагрузки
- Не масштабируйте базу в отрыве от приложения
- Если вы знаете, как решить свою проблему NoSQL базой, значит вы знаете, как решить проблему и в RDBMS
Хочу сказать сразу я не противник NoSQL, скорее я даже их сторонник - но мне кажется, что надо применять там где это действительно надо.
Сравнительная таблица из википедии
Сравнительная таблица из википедии
Data Model | Performance | Scalability | Flexibility | Complexity | Functionality |
---|---|---|---|---|---|
Key–value Stores | high | high | high | 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 |
Более понятная для понимания таблица 1
Сравнение возможностей 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 |
Более понятная для понимания таблица 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 базы данных для вашего проекта: "Не в свои сани не садись"
Комментариев нет:
Отправить комментарий