Какой должна быть NoSQL СУБД эпохи облаков? Что такое IBM Cloudant и Apache CouchDB?
Как они связаны друг с другом, и есть ли польза для Open Source проекта от коммерческого облачного сервиса на его основе?
2. Что такое Apache CouchDB?
2
LB1
LB2 (failover)
• Open Source проект под эгидой Apache Software Foundation
• Документ-ориентированная СУБД
• Работа с данными в формате JSON через RESTful API
• Горизонтальное масштабирование на чтение и запись
• Устойчивость к отказам отдельных серверов
• Встроенная мульти-мастер репликация
3. Что такое IBM Cloudant?
3
• Облачный сервис NoSQL СУБД от IBM
• Использует доработанное ядро CouchDB
• Эластичное управление пропускной способностью и ёмкостью
• Географически-распределённая инфраструктура ЦОД
• Реализует ряд расширений и усовершенствований, включая работу с
геоданными
• Новые функции интегрируются в Apache CouchDB
4. Некоторые успешные проекты
4
SeniorAdvisor Healthcare
GameStop Retail
Likeminder Media
YukonBaby Healthcare
Dimagi
Life
Sciences
Skechers Retail
Opteamize Education
RunKeeper Healthcare
Menuat Retail
AppAdvice Media
Cabify Transport
Liberty Mutual Insurance
Morningstar Financial
Hothead Games Media
Kohl’s Retail
Ovation
Computer
Services
Quetzal Retail
SpaceCraft Media
RadPad Media
RSG Media Media
Connio
Computer
Services
Comdata
Computer
Services
https://www.ibm.com/case-studies/search
5. • «Родной» интерфейс и формат данных для Web
• Практически неограниченная масштабируемость
• Гибкость и удобство разработки
• Репликация! – в том числе для мобильных устройств и IoT
• Отсутствие привязки к поставщику (Vendor Lock-In)
Spark SQL
Сильные стороны
5
REST (HTTP/s) API
Data APIs
On-Premises Appliances
Analytics Exchange APIs
Cloud Data Services APIs
JSON, REST, Geospatial,
Mobile
Offline Sync
Cloud and Local
Masterless Nodes
Web & Mobile
Applications Data IngestData Export
6. «Родной» интерфейс и формат данных для Web
6
• Сократить (вовсе исключить!) «сериализацию»
• RESTful API = любые средства разработки
• JSON – «штатный» формат обмена для современных приложений
• Межсетевые экраны и прокси-сервера «открыты по умолчанию»
1. {
2. "_id": "110067407",
3. "_rev": "1-9c45439faa16674951ce450e7b88a6b6",
4. "date": "2017/01/15 16:41:25 +0000",
5. "properties": {
6. "source": "boston",
7. "main_crimecode": "arrest",
8. "shooting": false
9. },
10. "geometry": {
11. "type": "Point",
12. "coordinates": [-
71.08561842,42.3286598]
13. }
14. }
7. Практически неограниченная масштабируемость
7
• Распределённая архитектура
• MVCC, eventual consistency
• Запись не будет «бутылочным горлом»
• Добавление серверов по мере надобности
Начать с малого и расти по мере необходимости
Чтение Запись
8. Гибкость и удобство разработки
8
• Схема данных управляется приложением
• но может контролироваться при записи!
• (обработчик обновлений – «update handler»)
• Индексы по полям
• Полнотекстовые индексы на базе Apache Lucene
• Автоматические расчёты внутри БД по схеме Map-Reduce
• Мобильные приложения (сценарии «Offline first»)
• Работа с географическими данными
9. Интерфейсы для работы с данными
9
Документы JSON Первичный индекс Вторичный индекс
• Прямой поиск по полю _id • Существует всегда
• B-trees
• Значение _id à Документ
• Инкрементальный MapReduce
• B-trees
• Ключ à Поля
• Чтение и запись единичного
документа или их набора с
указанием значения поля _id
• Поиск документов по _id
• Возможность поиска по
диапазону значений
• Анализ диапазона или множества
• Агрегация, статистика,
группировка данных
Полнотекстовый (Lucene) Geospatial CouchDB Mango (Cloudant Query)
• На основе Apache Lucene
• Индексируются все поля или
выбранная часть
• R* trees
• Lat/Long координаты GeoJSON
• Декларативные запросы к стиле
MongoDB
• Запросы Ad-hoc
• Поиск документов по
содержимому
• Возможна группировка и базовые
геопространственные операции
• Сложные геометрии
(polygon, circular string, ...)
• Геометрические вычисления
(intersect, overlaps, …)
• Запросы Ad-hoc
• Операторы (>, <, IN, OR, AND)
• Интуитивно для специалистов с
опытом MongoDB или SQL
10. Репликация
10
Pull
Push
Cluster A Cluster B
Sync
SyncSync
§ Двунаправленная:
Push + Pull = Synchronization
§ Непрерывная либо по запросу
§ Фильтруемая:
Отбор подмножества по условию
§ Надёжная:
Возобновляется после прерывания
• Автоматическое обнаружение конфликтов
• Автоматический выбор «победителя»
• Возможность скорректировать выбор в приложении
12. Разработка мобильных приложений
12
• Готовые инструменты для построения мобильных «Offline First»
приложений
• Cloudant Sync – локальное JSON хранилище для мобильных
устройств, Open Source
• Android: https://github.com/cloudant/sync-android
• iOS: https://github.com/cloudant/CDTDatastore
• SwiftCloudant – официальная Open Source библиотека под Apple Swift
для работы с CouchDB и Cloudant
• https://github.com/cloudant/swift-cloudant
• PouchDB – база данных для работы в браузере
• Синхронизация с CouchDB и Cloudant
13. Интеграция Cloudant и Apache Spark
§ Расширение в составе Apache Bahir
§ Варианты применения:
– Быстрая аналитика над данными
– Трансформация и фильтрация
потока данных перед загрузкой
– Аналитика над данными из
нескольких источников (не только
Cloudant)
§ Поддержка Spark SQL
– SQL-запросы к данным Cloudant
– Обработка результатов на Scala и
Python
– Запись результатов обратно в
Cloudant
13
SparkSession / DataFrame / Dataset APIs
Structured
Streaming
MLlib GraphFrame
TensorFrame
s
SQL
Spark Core
Spark Core (RDD APIs)
Data Source
Connections
Spark
SQL
15. Cloudant Geospatial
15
§ Обширный набор функций поддержки ГИС-приложений
– Накрывающий многоугольник и эллипс, окружность, прямоугольник
– Предсказание пути, оптимизация маршрута, GeoIP
– Сегментирование данных на основании сведений о местоположении
– Стандарты GeoJSON, OGC SFSQL, SQL/MM
§ Локальный доступ (на уровне устройства) к функциям ГИС
§ Интеграция с распространенными ГИС-приложениями
– Поддержка формата WKB (GDAL, Python)
– ESRI ArcGIS
– Интеграция с MapBox
16. Влияние Cloudant на развитие CouchDB
16
• CouchDB 1.0:
• Fauxton (GUI для управления и доступа к данным)
• Полнотекстовый поиск
• Поддержка географических запросов
• CouchDB 2.0:
• Поддержка кластерного режима работы
• CouchDB 3.0:
• Партиционированные запросы
• Перебалансировка кластера для расширения
18. Будущее: Cloudant «on Transaction Engine»
18
• Организация работы с данными на основе FoundationDB
• Снижение задержек при запросах
• Автоматическое масштабирование
• долой ручное шардирование!
• Строгая согласованность данных
• вторичные индексы обновляются синхронно
• Доступен уже сегодня
• Реализация в CouchDB ожидается в версии 4.0
• зависит от решений сообщества
19. Пример конфигурации оборудования Cloudant
19
• Типовой узел «bare metal» кластера Cloudant для IBM IaaS
• 48 процессорных ядер
• 128 Гбайт оперативной памяти
• Диски – один из двух вариантов:
• 2 x 1,2 Тбайт SSD в RAID-0
• 4 x 1,2 Тбайт SSD в RAID-10 (для минимизации отказов узла)
• Локальные SSD-диски критичны для производительности
• Кластер на 12 узлов обычно обеспечивает не менее:
• 20 000 чтений в секунду
• 10 000 записей в секунду
• 1 000 глобальных запросов (сканирований) в секунду
• По опыту, тюнинг (партиционирование, индексы, …) позволяет
достичь ещё более высоких показателей на том же кластере
Дополнено 17 июня 2020 года
YMMV
20. Специфика производительности Cloudant и CouchDB
20
• Cloudant и CouchDB – не база ключ/значение
• Вторичные индексы и полнотекстовый поиск
• Инкрементальные расчёты Map-Reduce
• Встроенная система репликации изменений
• Сравнение «скорострельности» с (вашей любимой NoSQL базой)
имеет смысл только при сопоставимой функциональности
• Диски (предпочтительно – flash-память)
• Вместо хранения всех данных в оперативной памяти
• Перспектива – переход на FoundationDB обеспечит снижение нагрузки
ввода-вывода
• Увеличение и уменьшение размера кластера
• Обычно выполняется группами по 3 узла (или кратно)
• Позволяет масштабировать как чтение, так и запись
Дополнено 17 июня 2020 года