
NoSQL – взрыв возможностей
Алексей Солнцев, iForum, 17 апреля 2012
О себе

           10 лет в индустрии
             информационных технологий
           Solution Architect в компании
             Infopulse Украина
           Agile волонтёр

           Организатор и координатор
             краудсорсинг-переводов книг на
             русский язык
Алексей
           Тренер в центре XP Injection
Солнцев
                                      @a_solntsev
Scrum и XP: заметки с передовой




                          @a_solntsev
Scrum и Kanban: выжимаем максимум




                            @a_solntsev
Этимология термина

              NoSQL

              No значит Not Only

              SQL значит RDBMS

              NoSQL значит NotOnlyRDMBS
Эрик Эванс


                                    @a_solntsev
Троллинг off

 Это не движение

 Это не противостояние РСУБД

 Это не серебряная пуля

 Пока что без стандартов
Что изменилось с 70-ых?




                  @a_solntsev
Цифровая вселенная
                          7910
                        эксабайт




               1227
             эксабайт
     130
  эксабайт

   2005       2010       2015
Информация в фактах




Обрабатывает Хранит свыше    Получает 160    За 20 минут
 24 петабайта 2 миллиардов    миллионов     добавляют 10
информации в фотографий        твиттов в      миллионов
     день                        месяц      комментариев



                                                @a_solntsev
Проблемы цифровой вселенной

  Объёмы данных

  Связанность данных

  Слабая структурируемость данных

  Обработка данных при помощи
   независимых сервисов


                              @a_solntsev
Ограничения реляционных СУБД

     Фиксированная структура

     Разряженные таблицы

     JOIN плохо масштабируется

     Блокировки при записи

     Работа с медленными дисками


                                  @a_solntsev
Масштабирование

      25

      20

                   Масштабирование
Цена решения




      15

      10

          5

          0
               0       1        2      3
                           Производительность   4   5


                                                        @a_solntsev
Типы масштабирования




Вертикальное           Горизонтальное
Стоимость лицензий




Порядка $28 000 за ядро
Репликация


                       Master
                     (Ведущий)
     Клиент

                        Slave
                     (Ведомый)

Нагрузка на Master
сервер при записи       Slave
                     (Ведомый)

                                 @a_solntsev
Репликация

                       Peer
                (Равноправный узел)


                       Peer
   Клиент
                (Равноправный узел)


  Проблемы             Peer
синхронизации   (Равноправный узел)
 обновлений
                                  @a_solntsev
Шардинг

                                 Peer
                                 (A-J)


                     Роутер      Peer
Клиент
                    запросов     (K-S)


                                 Slave
         Как добавить            (T-Z)
         новый узел?
                                  @a_solntsev
MySQL Cluster?




         @a_solntsev
Как грибы после дождя




                @a_solntsev
Разнообразие типов

 Key-Value

 Column Families

 Объектно-ориентированные

 Документ-ориентированные

 Граф-ориентированные
Второе дыхание NoSQL

 Теорема Брювера

 Amazon Dynamo

 Google BigTable
Свойства распределённых систем



    Согласованность     Доступность




               Устойчивость
               к сбоям узлов


                                      @a_solntsev
Key -Value

 Ключ – DHT               Кэширование
                           Хранение сессий
 Value – String, Set      Хранение логов

 Примитивные операции     In-memory
                           Сохранение на
 Нет составных запросов   диск




                                    @a_solntsev
Распределённая хэш-таблица (DHT)




                           @a_solntsev
Amazon Dynamo и Basho Riak

       Решение для
        систем, требующих
        высокую степень
        доступности
       Децентрализованная, расп
        ределённая база данных


                            @a_solntsev
Инкрементальная масштабируемость

         W                  A

        (T,W]          (W,A]


       Узлы объединены в кольцо
       Все знают о всех


        (L,T]            (A, L]

         T                 L

                                  @a_solntsev
Инкрементальная масштабируемость

        W                             A




        Пересчёт
                         (A, F]
        k/n ключей                        F


                 (F L]
                   ,



        T                         L
                                              @a_solntsev
Согласованность «в конечном итоге»

    Дано    N – количество копий
            R – кворум на чтение
            W – кворум на запись

    Если    W > N/2
            R+W > N

    Тогда   При чтении получите
            последнюю версию

   Иначе    Получите согласованность
            в «конечном итоге»
Согласованность и скорость ответа

                       Быстро, но не совсем надёжно
                       R = 1, W = 1, N = 3




Надёжно, но медленно
R = 2, W = 3, N = 4
Google BigTable и Apache HBase

        Хранение огромных
         объёмов данных
        Обработка огромных
         объёмов данных
        Анализ огромных объёмов
         данных

                              @a_solntsev
Архитектура Big Table
ColumnFamily
Архитектура MapReduce
Cassandra

                                BigTable
                   Dynamo



                            Facebook


P2P архитектура
                                           Модель данных
Управление кластером
                                           Метод хранения данных
DTH
                                           MapReduce
                       Cassandra
                                                       @a_solntsev
Документ-ориентированные
Схемы и запросы

             Схема         Запросы
  MySQL Фиксированная    Динамические

CouchDB   Динамическая   Фиксированные

MongoDB Динамическая     Динамические
Формат документов
{
 "_id" : ObjectId("497ce96f395f2f052a494fd4"),
 "title" : "Awesome Blog Post",
 "body" : "Text text text text, text text text ...",
 "created": "Tue, 3 Jan 2011 11:13:56 GMT",
 "tags" : [ "css", "javascipt", "jquery" ],
 "comments" : [
     {
        "name" : "Kelly Glover"
        "created" : "Tue, 22 Jan 2011 2: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);
Граф-ориентированные

 Нахождение кратчайшего пути

 Построение социальных
  графов
 Работа с информационными
  потоками



                       @a_solntsev
Neo4j



Узел




       Key-value
       параметры   Связь
Polyglot persistence
Take away

 Знайте свой продукт

 Следите за комьюнити

 Следите за спонсорами
  проектов
 Будьте аккуратней с
  новинками и клонами

                         @a_solntsev
Оставайтесь на связи

@a_solntsev

aleksey.solntsev@gmail.com

linkedin.com/in/solntsev

NoSQL - взрыв возможностей

Editor's Notes

  • #23 В РАСПРЕДЕЛЁННОЙ СИСТЕМЕ НЕВОЗМОЖНО ОБЕСПЕЧИТЬ ОДНОВРЕМЕННОЕ ВЫПОЛНЕНИЕ ВСЕХ ТРЁХ УСЛОВИЙ: КОРРЕКТНОСТИ, ДОСТУПНОСТИ, УСТОЙЧИВОСТИ К СБОЯМ УЗЛОВ.