Не SQL’ем единым
Александр Козько
ByndyuSoft
alkozko@yandex.ru
6-я конференция .NET разработчиков
28 апреля 2013
www.dotnetconf.ru
2Не SQL’ем единым, Александр Козько
План
NoSQL
Виды NoSQL БД
MongoDB
3Не SQL’ем единым, Александр Козько
«Теорема CAP»
Можно выбрать только два из трех
Consistency (Согласованность).
Avalability (Доступность).
Partition Tolerance (Устойчивость к
разделению системы).
4Не SQL’ем единым, Александр Козько
Реляционные СУБД: CA, жертвуя P
NoSQL БД: обеспечивают AP жертвуя C
5Не SQL’ем единым, Александр Козько
Принципы NoSQL
Нереляционная модель данных
Распределенность
Хорошая горизонтальная
масштабируемость.
6Не SQL’ем единым, Александр Козько
Колоночные БД
Быстрое чтение
Меньше места на диске
Медленная запись
7Не SQL’ем единым, Александр Козько
Хранилища ключ-значения
Скорость
Запросы только по ключу
8Не SQL’ем единым, Александр Козько
БД на основе графов
Скорость для иерархических данных
Скорость для всего остального
Плохая масштабируемость
9Не SQL’ем единым, Александр Козько
Документно-ориентированные БД
Единица информации - документ
Модель данных совпадает с объектной
моделью приложения
Индексы не только по ключу
10Не SQL’ем единым, Александр Козько
Документно-ориентированная
С открытым исходным кодом (С++)
Имеет драйверы для всех популярных
платформ/языков
Пользователи:
http://www.mongodb.org/
11Не SQL’ем единым, Александр Козько
Гибкая схема
Документы хранятся в виде бинарного
JSON (BSON).
Нет ограничений на JSON, кроме наличия _id
{
_id: 4
title: "Не SQL'ем единым",
startTime: ISODate("2013-28-04T12:30:00.00Z")
}
12Не SQL’ем единым, Александр Козько
Нет джойнов
Взамен предлагается денормализация и
концепция встраивания
{
_id: 5
title: "Не SQL'ем единым",
startTime: ISODate("2013-28-04T12:30:00.00Z"),
author: {
name: "Александр Козько",
emails: ["alkozko@yandex.ru","alkozko@gmail.com"]
}
}
13Не SQL’ем единым, Александр Козько
Нет транзакций
Но есть атомарные обновления одного документа
db.users.update({
_id:1020,
{
$push:{friends:900},
$inc:{friend_count:1}
}
});
14Не SQL’ем единым, Александр Козько
Возможности индексирования
db.people.ensureIndex( { "phone-number": 1 } )
db.collection.ensureIndex( { a: 1, b: 1, c: 1 } )
db.collection.ensureIndex( { a: 1 }, { unique: true } )
db.collection.ensureIndex( { a: 1 }, { sparse: true } )
А ещё есть
Geospatial Indexes
Text Search Indexes
15Не SQL’ем единым, Александр Козько
Server-side Javascript
Некий Аналог ХП.
Рекомендуется для обновления больших
объемов информации, без выгрузки на
клиент
Однопоточный, блокирует все остальные
операции
16Не SQL’ем единым, Александр Козько
Map/Reduce
Средство для обработки больших объемов
данных
1. В Map группируем данные из коллекции по
ключу
2. В Reduce получаем сгруппированные по
ключу значения и проводим обработку
3. Записываем результат
Для описания функций Map и Reduce
используется JavaScript
17Не SQL’ем единым, Александр Козько
GridFS
Спецификация, описывающая дробление
и сохранение больших файлов в
MongoDB.
Позволяет хранить объекты больше 16MB
18Не SQL’ем единым, Александр Козько
Особенности
Memory mapped files — данные лежат
только в кэше ОС, нет дублирования
данных в кэше БД
Невозможно выставить ограничение
потребления памяти
Для быстрого изменения документы
должны быть в памяти
19Не SQL’ем единым, Александр Козько
Масштабирование
Шардинг по диапазонам ключей с
автоматической балансировкой
Репликация
20Не SQL’ем единым, Александр Козько
Инструменты
Скачать БД: http://www.mongodb.org/downloads
Драйвер в NuGet’e: MongoCSharpDriver
Клиенты c GUI:
Robomongo http://robomongo.org/
MongoVUE http://www.mongovue.com/
21Не SQL’ем единым, Александр Козько
Где использовать?
Логирование и статистика
Rich key-value
Данные динамической природы
Прототипирование
Сохранение объектов сложной структуры
22Не SQL’ем единым, Александр Козько
Где не использовать?
Необходимость транзакций
Важна целостность и непротиворечивость
данных на уровне БД
Можно обойтись реляционными БД
NoSQL базы — это ещё один
инструмент, а не замена РСУБД
23Не SQL’ем единым, Александр Козько
Спасибо за внимание
Александр Козько
ByndyuSoft
alkozko@yandex.ru

Не SQL'ем единым

  • 1.
    Не SQL’ем единым АлександрКозько ByndyuSoft alkozko@yandex.ru 6-я конференция .NET разработчиков 28 апреля 2013 www.dotnetconf.ru
  • 2.
    2Не SQL’ем единым,Александр Козько План NoSQL Виды NoSQL БД MongoDB
  • 3.
    3Не SQL’ем единым,Александр Козько «Теорема CAP» Можно выбрать только два из трех Consistency (Согласованность). Avalability (Доступность). Partition Tolerance (Устойчивость к разделению системы).
  • 4.
    4Не SQL’ем единым,Александр Козько Реляционные СУБД: CA, жертвуя P NoSQL БД: обеспечивают AP жертвуя C
  • 5.
    5Не SQL’ем единым,Александр Козько Принципы NoSQL Нереляционная модель данных Распределенность Хорошая горизонтальная масштабируемость.
  • 6.
    6Не SQL’ем единым,Александр Козько Колоночные БД Быстрое чтение Меньше места на диске Медленная запись
  • 7.
    7Не SQL’ем единым,Александр Козько Хранилища ключ-значения Скорость Запросы только по ключу
  • 8.
    8Не SQL’ем единым,Александр Козько БД на основе графов Скорость для иерархических данных Скорость для всего остального Плохая масштабируемость
  • 9.
    9Не SQL’ем единым,Александр Козько Документно-ориентированные БД Единица информации - документ Модель данных совпадает с объектной моделью приложения Индексы не только по ключу
  • 10.
    10Не SQL’ем единым,Александр Козько Документно-ориентированная С открытым исходным кодом (С++) Имеет драйверы для всех популярных платформ/языков Пользователи: http://www.mongodb.org/
  • 11.
    11Не SQL’ем единым,Александр Козько Гибкая схема Документы хранятся в виде бинарного JSON (BSON). Нет ограничений на JSON, кроме наличия _id { _id: 4 title: "Не SQL'ем единым", startTime: ISODate("2013-28-04T12:30:00.00Z") }
  • 12.
    12Не SQL’ем единым,Александр Козько Нет джойнов Взамен предлагается денормализация и концепция встраивания { _id: 5 title: "Не SQL'ем единым", startTime: ISODate("2013-28-04T12:30:00.00Z"), author: { name: "Александр Козько", emails: ["alkozko@yandex.ru","alkozko@gmail.com"] } }
  • 13.
    13Не SQL’ем единым,Александр Козько Нет транзакций Но есть атомарные обновления одного документа db.users.update({ _id:1020, { $push:{friends:900}, $inc:{friend_count:1} } });
  • 14.
    14Не SQL’ем единым,Александр Козько Возможности индексирования db.people.ensureIndex( { "phone-number": 1 } ) db.collection.ensureIndex( { a: 1, b: 1, c: 1 } ) db.collection.ensureIndex( { a: 1 }, { unique: true } ) db.collection.ensureIndex( { a: 1 }, { sparse: true } ) А ещё есть Geospatial Indexes Text Search Indexes
  • 15.
    15Не SQL’ем единым,Александр Козько Server-side Javascript Некий Аналог ХП. Рекомендуется для обновления больших объемов информации, без выгрузки на клиент Однопоточный, блокирует все остальные операции
  • 16.
    16Не SQL’ем единым,Александр Козько Map/Reduce Средство для обработки больших объемов данных 1. В Map группируем данные из коллекции по ключу 2. В Reduce получаем сгруппированные по ключу значения и проводим обработку 3. Записываем результат Для описания функций Map и Reduce используется JavaScript
  • 17.
    17Не SQL’ем единым,Александр Козько GridFS Спецификация, описывающая дробление и сохранение больших файлов в MongoDB. Позволяет хранить объекты больше 16MB
  • 18.
    18Не SQL’ем единым,Александр Козько Особенности Memory mapped files — данные лежат только в кэше ОС, нет дублирования данных в кэше БД Невозможно выставить ограничение потребления памяти Для быстрого изменения документы должны быть в памяти
  • 19.
    19Не SQL’ем единым,Александр Козько Масштабирование Шардинг по диапазонам ключей с автоматической балансировкой Репликация
  • 20.
    20Не SQL’ем единым,Александр Козько Инструменты Скачать БД: http://www.mongodb.org/downloads Драйвер в NuGet’e: MongoCSharpDriver Клиенты c GUI: Robomongo http://robomongo.org/ MongoVUE http://www.mongovue.com/
  • 21.
    21Не SQL’ем единым,Александр Козько Где использовать? Логирование и статистика Rich key-value Данные динамической природы Прототипирование Сохранение объектов сложной структуры
  • 22.
    22Не SQL’ем единым,Александр Козько Где не использовать? Необходимость транзакций Важна целостность и непротиворечивость данных на уровне БД Можно обойтись реляционными БД NoSQL базы — это ещё один инструмент, а не замена РСУБД
  • 23.
    23Не SQL’ем единым,Александр Козько Спасибо за внимание Александр Козько ByndyuSoft alkozko@yandex.ru