NoSQL – взрыв возможностей Алексей Солнцев, iForum, 17 апреля 2012
О себе 10 лет в индустрии информационных технологий Solution Architect в компании Infopulse Украина Agile волонтёр Организатор и координатор краудсорсинг-переводов книг на русский язык Тренер в центре XP Injection Алексей
Scrum и XP: заметки с
Scrum и Kanban: выжимаем
Этимология термина NoSQL No значит Not Only SQL значит RDBMS NoSQL значит NotOnlyRDMBS Эрик
Троллинг off Это не движение Это не противостояние РСУБД Это не серебряная пуля Пока что без стандартов
Что изменилось с
Цифровая вселенная
Информация в фактах Обрабатывает 24 петабайта информации в день Хранит свыше 2 миллиардов фотографий Получает 160 миллионов твиттов в месяц За 20 минут добавляют 10 миллионов
Проблемы цифровой вселенной Объёмы данных Связанность данных Слабая структурируемость данных Обработка данных при помощи независимых
Ограничения реляционных СУБД Фиксированная структура Разряженные таблицы JOIN плохо масштабируется Блокировки при записи Работа с медленными
Масштабирование Цена решения Производительность
Типы масштабирования Вертикальное Горизонтальное
Стоимость лицензий Порядка $ за ядро
Репликация Клиент Slave (Ведомый) Slave (Ведомый) Нагрузка на Master сервер при записи Master
Репликация Клиент Peer (Равноправный узел) Peer (Равноправный узел) Peer (Равноправный узел) Проблемы синхронизации
Шардинг Клиент Peer (K-S) Slave (T-Z) Как добавить новый узел? Peer (A-J) Роутер
MySQL
Как грибы после
Разнообразие типов Key-Value Column Families Объектно-ориентированные Документ-ориентированные Граф-ориентированные
Второе дыхание NoSQL Теорема Брювера Amazon Dynamo Google BigTable
Свойства распределённых систем Согласованность Доступность Устойчивость к сбоям
Key -Value Ключ – DHT Value – String, Set Примитивные операции Нет составных запросов Кэширование Хранение сессий Хранение логов In-memory Сохранение на
Распределённая хэш-таблица
Amazon Dynamo и Basho Riak Решение для систем, требующих высокую степень доступности Децентрализованная, распределённая база
Инкрементальная масштабируемость Узлы объединены в кольцо Все знают о
Инкрементальная масштабируемость Пересчёт k/n
Согласованность «в конечном итоге» N – количество копий R – кворум на чтение W – кворум на запись W > N/2 R+W > N Если Тогда Иначе Дано При чтении получите последнюю версию Получите согласованность в «конечном итоге»
Согласованность и скорость ответа Надёжно, но медленно R = 2, W = 3, N = 4 Быстро, но не совсем надёжно R = 1, W = 1, N = 3
Google BigTable и Apache HBase Хранение огромных объёмов данных Обработка огромных объёмов данных Анализ огромных объёмов
Архитектура Big Table
ColumnFamily
Архитектура MapReduce
Cassandra FacebookDynamoBigTable Модель данных Метод хранения данных MapReduce P2P архитектура Управление кластером
Документ-ориентированные
Схемы и запросы СхемаЗапросы MySQLФиксированнаяДинамические CouchDBДинамическаяФиксированные MongoDBДинамическаяДинамические
Формат документов { "_id" : ObjectId("497ce96f395f2f052a494fd4"), "title" : "Awesome Blog Post", "body" : "Text text text text, text text text...", "created": "Tue, 3 Jan :13:56 GMT", "tags" : [ "css", "javascipt", "jquery" ], "comments" : [ { "name" : "Kelly Glover" "created" : "Tue, 22 Jan :22:32 GMT", "text" : "This is a very good..." }, ], "shortUrl" : "awesome-blog-post" } { "_id" : ObjectId("497ce96f395f2f052a494fd4"), "title" : "Awesome Blog Post", "body" : "Text text text text, text text text...", "created": "Tue, 3 Jan :13:56 GMT", "tags" : [ "css", "javascipt", "jquery" ], "comments" : [ { "name" : "Kelly Glover" "created" : "Tue, 22 Jan :22:32 GMT", "text" : "This is a very good..." }, ], "shortUrl" : "awesome-blog-post" }
API для запросов // найти записи по условию db.stat.find({clicks: {$gt: 10} }); // найти все записи и отсортировать db.users.find({}).sort({name: 1}); //найти все записи, пропустить первые 20 записей db.users.find().skip(20).limit(10); // найти записи по условию db.stat.find({clicks: {$gt: 10} }); // найти все записи и отсортировать db.users.find({}).sort({name: 1}); //найти все записи, пропустить первые 20 записей db.users.find().skip(20).limit(10);
Граф-ориентированные Нахождение кратчайшего пути Построение социальных графов Работа с информационными
Neo4j Узел Связь Key-value параметры
Polyglot persistence
Take away Знайте свой продукт Следите за комьюнити Следите за спонсорами проектов Будьте аккуратней с новинками и
Оставайтесь на linkedin.com/in/solntsev