Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

О  себе   ì  10  лет  в  индустрии   информационных  технологий   ì  SoluGon  Architect  в  компании   Infopulse  Украина   ì  Agile  волонтёр   ì  Организатор  и  координатор   краудсорсинг-­‐переводов  книг  на   русский  язык   ì  Тренер    в  центре  XP  InjecGon   Алексей   Солнцев   @a_solntsev  

Slide 3

Slide 3 text

Scrum  и  XP:  заметки  с  передовой   @a_solntsev  

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Этимология  термина   ì  NoSQL   ì  No  значит  Not  Only   ì  SQL  значит  RDBMS   ì  NoSQL  значит  NotOnlyRDMBS   Эрик  Эванс   @a_solntsev  

Slide 6

Slide 6 text

 Троллинг  off   ì  Это  не  движение   ì  Это  не  противостояние  РСУБД   ì  Это  не  серебряная  пуля   ì  Пока  что  без  стандартов  

Slide 7

Slide 7 text

Что  изменилось  с  70-­‐ых?   @a_solntsev  

Slide 8

Slide 8 text

Цифровая  вселенная   130   эксабайт   1227   эксабайт   7910   эксабайт   2005   2010   2015  

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Проблемы  цифровой  вселенной   ì  Объёмы  данных   ì  Связанность  данных   ì  Слабая  структурируемость  данных   ì  Обработка  данных  при  помощи   независимых  сервисов   @a_solntsev  

Slide 11

Slide 11 text

Ограничения  реляционных  СУБД   ì  Фиксированная  структура   ì  Разряженные  таблицы   ì  JOIN  плохо  масштабируется   ì  Блокировки  при  записи   ì  Работа  с  медленными  дисками   @a_solntsev  

Slide 12

Slide 12 text

Масштабирование   0   5   10   15   20   25   0   1   2   3   4   5   Цена  решения     Производительность     Масштабирование   @a_solntsev  

Slide 13

Slide 13 text

Типы  масштабирования   Вертикальное   Горизонтальное  

Slide 14

Slide 14 text

Стоимость  лицензий   Порядка  $28  000  за  ядро  

Slide 15

Slide 15 text

Репликация   Клиент   Slave   (Ведомый)   Slave   (Ведомый)   Нагрузка  на  Master     сервер  при  записи   Master   (Ведущий)   @a_solntsev  

Slide 16

Slide 16 text

Репликация   Клиент   Peer   (Равноправный  узел)   Peer   (Равноправный  узел)   Peer   (Равноправный  узел)   Проблемы   синхронизации   обновлений   @a_solntsev  

Slide 17

Slide 17 text

Шардинг   Клиент   Peer   (K-­‐S)   Slave   (T-­‐Z)   Как  добавить   новый  узел?   Peer   (A-­‐J)   Роутер     запросов   @a_solntsev  

Slide 18

Slide 18 text

MySQL  Cluster?   @a_solntsev  

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Разнообразие  типов   ì  Key-­‐Value   ì  Column  Families   ì  Объектно-­‐ориентированные   ì  Документ-­‐ориентированные   ì  Граф-­‐ориентированные  

Slide 21

Slide 21 text

Второе  дыхание  NoSQL   ì  Теорема  Брювера   ì  Amazon  Dynamo   ì  Google  BigTable  

Slide 22

Slide 22 text

Свойства  распределённых  систем   Согласованность     Доступность     Устойчивость     к  сбоям  узлов   @a_solntsev  

Slide 23

Slide 23 text

Key  -­‐Value   ì  Ключ  –  DHT   ì  Value  –  String,  Set   ì  Примитивные  операции   ì  Нет  составных  запросов     Кэширование   Хранение  сессий   Хранение  логов   In-­‐memory   Сохранение  на   диск     @a_solntsev  

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Инкрементальная  масштабируемость   A L T W (A, L] (W, A] (T, W] (L, T] Узлы  объединены  в  кольцо   Все  знают  о  всех   @a_solntsev  

Slide 27

Slide 27 text

Инкрементальная  масштабируемость   A L T W F (A, F] (F, L] Пересчёт   k/n  ключей   @a_solntsev  

Slide 28

Slide 28 text

Согласованность  «в  конечном  итоге»   N  –  количество  копий   R  –  кворум  на  чтение   W  –  кворум  на  запись   W  >  N/2   R+W  >  N   Если   Тогда   Иначе   Дано   При  чтении  получите   последнюю  версию   Получите  согласованность     в  «конечном  итоге»  

Slide 29

Slide 29 text

Согласованность  и  скорость  ответа   Надёжно,  но  медленно   R  =  2,  W  =  3,  N  =  4   Быстро,  но  не  совсем  надёжно   R  =  1,  W  =  1,  N  =  3  

Slide 30

Slide 30 text

Google  BigTable  и  Apache  HBase   ì  Хранение  огромных   объёмов  данных   ì  Обработка  огромных   объёмов  данных   ì  Анализ  огромных  объёмов   данных   @a_solntsev   @a_solntsev  

Slide 31

Slide 31 text

Архитектура  Big  Table    

Slide 32

Slide 32 text

ColumnFamily  

Slide 33

Slide 33 text

Архитектура  MapReduce  

Slide 34

Slide 34 text

Cassandra   Cassandra   Facebook   Dynamo   BigTable   Модель  данных   Метод  хранения  данных   MapReduce   P2P  архитектура   Управление  кластером   DTH   @a_solntsev  

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Формат  документов     {    "_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"   }  

Slide 38

Slide 38 text

API  для  запросов     //  найти  записи  по  условию   db.stat.find({clicks:  {$gt:  10}  });         //  найти  все  записи  и  отсортировать   db.users.find({}).sort({name:  1});         //найти  все  записи,  пропустить  первые  20  записей   db.users.find().skip(20).limit(10);      

Slide 39

Slide 39 text

Граф-­‐ориентированные   ì  Нахождение  кратчайшего  пути   ì  Построение  социальных   графов   ì  Работа  с  информационными   потоками   @a_solntsev  

Slide 40

Slide 40 text

Neo4j   Узел   Связь   Key-­‐value   параметры  

Slide 41

Slide 41 text

Polyglot  persistence  

Slide 42

Slide 42 text

Take  away   ì   Знайте  свой  продукт   ì  Следите  за  комьюнити   ì  Следите  за  спонсорами   проектов   ì  Будьте  аккуратней  с   новинками  и  клонами   @a_solntsev  

Slide 43

Slide 43 text

Оставайтесь  на  связи   @a_solntsev   aleksey.solntsev@gmail.com   linkedin.com/in/solntsev