SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Вы	
  решили	
  написать	
  собственное	
  
         хранилище	
  данных	
  
       Илья	
  Космодемьянский	
  
Данные	
  
• 	
  	
  Традиционно	
  хранят	
  в	
  СУБД	
  
• 	
  	
  Данные	
  нужно	
  хранить	
  надежно	
  
• 	
  	
  С	
  данными	
  нужно	
  производить	
  действия:	
  CRUD	
  
• 	
  	
  CR	
  –	
  «просто»,	
  UD	
  –	
  «сложно»	
  
• 	
  	
  Хранилища	
  данных	
  имеют	
  специализацию	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  

                     • 	
  	
  Уперлись	
  в	
  мастер	
  
                     • 	
  	
  Медленные	
  join’ы	
  
                     • 	
  «И	
  вообще	
  все	
  криво»	
  
                     • 	
  «Хотим	
  искать	
  максимальную	
  клику	
  графа	
  и	
  чтоб	
  нам	
  за	
  это	
  ничего	
  не	
  было»	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Postgres,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  

                    • 	
  	
  «Не	
  репликация	
  а	
  черти	
  что»	
  
                    • 	
  	
  «Не	
  смогли	
  научить	
  использовать	
  правильный	
  индекс»	
  
                    • 	
  	
  «И	
  вообще	
  все	
  криво»	
  
                    • 	
  	
  «Хотим	
  найти	
  все	
  циклы	
  в	
  произвольном	
  графе	
  и	
  чтобы	
  
                    	
  	
  	
  	
  	
  	
  нам	
  за	
  это	
  ничего	
  не	
  было»	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Postgres,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Oracle,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
                    • 	
  	
  «Хотим	
  мультимастер	
  в	
  две	
  стороны»	
  
                    • 	
  	
  «Не	
  смогли	
  научить	
  использовать	
  правильный	
  индекс»	
  
                    • 	
  	
  «Очень	
  сложно,	
  Concepts	
  читать	
  долго,	
  много	
  воды»	
  
                    • 	
  	
  «Хотим	
  перемножать	
  матрицы	
  за	
  O(1)	
  и	
  чтоб	
  золотая	
  	
  
                    	
  	
  	
  	
  	
  рыбка	
  была	
  у	
  меня	
  на	
  посылках»	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Postgres,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Oracle,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  DB2/MSSQL/Sybase	
  …	
  whatever»	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Postgres,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Oracle,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  DB2/MSSQL/Sybase	
  …	
  whatever»	
  
• 	
  	
  «А	
  давайте	
  запилим	
  что-­‐нибудь	
  высокотехнологичное	
  –	
  будем	
  как…»	
  
Зачем	
  писать	
  свое	
  хранилище?	
  
Распростарненные	
  случаи	
  
• 	
  	
  «Делали	
  на	
  MySQL,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Postgres,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  Oracle,	
  устали	
  –	
  	
  теперь	
  хотим	
  чего-­‐либо	
  более	
  светлого»	
  
• 	
  	
  «Делали	
  на	
  DB2/MSSQL/Sybase	
  …	
  whatever»	
  
• 	
  	
  «А	
  давайте	
  запилим	
  что-­‐нибудь	
  высокотехнологичное	
  –	
  будем	
  как…»	
  
• 	
  	
  «Чтоб	
  разгрузить	
  БД,	
  нужно	
  простенькое	
  быстрое	
  хранилище»	
  !!!	
  
Вобщем	
  решили	
  писать	
  с	
  нуля	
  
Ну	
  или	
  почти	
  с	
  нуля	
  –	
  не	
  суть	
  ;-­‐)	
  
Надежность	
  хранилища	
  
Mission	
  cri>cal?	
  


Перевод	
  денег	
  со	
  счета	
  на	
  счет	
  в	
  банке	
     Где	
  граница?	
  




Порядок	
  постов	
  во	
  френдленте	
  
Надежности	
  мешают	
  отказы	
  
   Хороший	
  термин	
  Failure,	
  переведем	
  его	
  как	
  Падение	
  
   • 	
  	
  Падает	
  железо	
  
   • 	
  	
  Падает	
  ПО	
  
   • 	
  	
  Непродуманый	
  дизайн	
  ПО	
  ведет	
  к	
  падениям	
  
   • 	
  	
  Нерадивый	
  админ	
  нажал	
  не	
  на	
  ту	
  кнопку	
  и	
  все	
  упало	
  

Потенциальная	
  	
                   Случившаяся	
                   Ошибка	
                        Падение	
  
  проблема	
                           проблема	
                                                (ошибка	
  которую	
  	
  
                                                                                                нельзя	
  обработать)	
  
Начинаем	
  с	
  простого	
  

     D	
  
Добавляем	
  надежность	
  
                           Простое	
  и	
  логичное	
  решение!	
  

D1	
     D2	
     D3	
  




Dm	
  
Это	
  был	
  подход	
  	
  
                           «Чтобы	
  не	
  падало»	
  
Почему	
  плохо	
  
• 	
  	
  Сразу	
  две	
  проблемы	
  –	
  и	
  с	
  чтением	
  и	
  записью	
  
• 	
  	
  Непроизводительно	
  
Быстро	
  поднятое	
  не	
  считается	
  
                   упавшим	
  
• 	
  	
  Исходим	
  из	
  того,	
  что	
  система	
  всё	
  равно	
  когда-­‐нибудь	
  может	
  упасть	
  
• 	
  	
  Минимизируем	
  потери	
  
Атомарность	
  
   D1	
            D2	
  




Такая	
  последовательность	
  действий	
  восстановима	
  
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
     A1 	
   затем	
   A2 	
  
                                                                                или	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
     A2 	
   затем	
   A1 	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
  
S	
  =	
  700RUR	
  !	
  
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
     A1 	
   затем	
   A2 	
  
                                                                                или	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
     A2 	
   затем	
   A1 	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
                             Изоляция
S	
  =	
  700RUR	
  !	
  
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
     A1 	
   затем	
   A2 	
  
                                                                                или	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
     A2 	
   затем	
   A1 	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
                             Изоляция
S	
  =	
  700RUR	
  !	
  


Восстановимость	
  +	
  изоляция	
  =	
  атомарность	
  
Свойства	
  действий	
  с	
  блоками	
  данных	
  
• 	
  	
  Атомарность	
  
• 	
  	
  Целостность	
  –	
  набор	
  правил	
  для	
  данных	
  
• 	
  	
  Долговечность	
  	
  

Действие,	
  обладающее	
  такими	
  свойствами	
  есть	
  транзакция	
  
Быстрая	
  восстановимость	
  
 • 	
  	
  Версии	
  


    D0	
          D1	
     VN	
  


                                               Если	
  все	
  действие	
  прошло	
  успешно,	
  
А	
  если	
  упали	
  на	
  смене	
  VN?	
  
                                                                	
  достигнут	
  Commit	
  point	
  
Быстрая	
  восстановимость	
  
• 	
  	
  Версии	
  
• 	
  	
  Пишем	
  лог	
  



  	
  Изоляция/корректность	
  –	
  легко	
  без	
  производительности
T1	
                T2	
                    r1[x]	
   w2[x]	
   w1[y]	
   w2[y]	
   -­‐	
  корректная	
  история	
  
                                                                                             История	
  корректна	
  если	
  	
  
r1[x]	
          w2[x]	
                                                                     эквивалентна	
  	
  
                                                Направление	
  стрелок	
  –	
  	
            последовательному	
  	
  
w1[y]	
   w2[y]	
                               порядок	
  выполненения	
                    выполнению	
  транзакций	
  –	
  	
  
                                                                                             сериализуема	
  
                                                конфликтующих	
  действий	
  


                                         Граф	
  действий	
  /	
  граф	
  
            T2	
                             конфликтов	
  
                                T4	
  
                                                                             Некорректная	
  история	
  –	
  	
  
T1	
                       Если	
  нет	
  циклов,	
  то	
  
                           историю	
  на	
  которой	
  он	
  
                                                                             падение	
  и	
  нарушение	
  целостности	
  
                           построенможно	
  
             T3	
          сериализовать	
  
2PL	
  
• 	
  	
  с	
  конфликтами	
  борятся	
  блокировками	
  –	
  блокирующий	
  шедулер	
  
• 	
  	
  двухфазное	
  блокирование	
  –	
  сначала	
  выставляем	
  все	
  блокировки,	
  ни	
  одна	
  	
  	
  	
  	
  
	
  	
  	
  блокировка	
  не	
  может	
  быть	
  снята	
  пока	
  не	
  выставлены	
  все	
  	
  
• 	
  	
  С	
  помощью	
  2PL	
  мы	
  добиваемся	
  изоляции	
  при	
  сохранении	
  
	
  	
  	
  	
  производительности	
  
Мы	
  построили	
  хранилище	
  на	
  отдельно	
  взятой	
  
                               машине	
  
• 	
  	
  Объективно	
  машина	
  не	
  справляется.	
  Что	
  дальше?	
  
• 	
  	
  Scale	
  out	
  –	
  репликация	
  и	
  шардинг	
  
• 	
  	
  Асинхронный	
  месседжинг	
  –	
  очереди	
  –	
  что	
  они	
  дают	
  
• 	
  	
  Распределенные	
  транзакции	
  –	
  если	
  до	
  этого	
  было	
  еще	
  не	
  страшно	
  
Нерассмотренные	
  важные	
  моменты	
  
•  Сеть и производительность
• 	
  	
  Мониторинг	
  
• 	
  	
  capex/opex	
  
Возвращаемся	
  к	
  постановке	
  задачи	
  
•  Данные не должны браться из ниоткуда и не должны пропадать
•  Данные связаны между собой
• 	
  Устранены-­‐ли	
  проблемы	
  по	
  которым	
  нас	
  не	
  устраивала	
  СУБД	
  
• 	
  Сколько	
  мы	
  на	
  это	
  все	
  потратитли	
  и	
  сколько	
  еще	
  потратим?	
  

Más contenido relacionado

Similar a Вы решили написать собственное хранилище (Илья Космодемьянский)

Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Ontico
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQLBadoo Development
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Ontico
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Ontico
 
Sql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationSql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationAnatoly Popov
 

Similar a Вы решили написать собственное хранилище (Илья Космодемьянский) (6)

Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
Sql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationSql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migration
 

Más de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Más de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Вы решили написать собственное хранилище (Илья Космодемьянский)

  • 1. Вы  решили  написать  собственное   хранилище  данных   Илья  Космодемьянский  
  • 2. Данные   •     Традиционно  хранят  в  СУБД   •     Данные  нужно  хранить  надежно   •     С  данными  нужно  производить  действия:  CRUD   •     CR  –  «просто»,  UD  –  «сложно»   •     Хранилища  данных  имеют  специализацию  
  • 3. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     Уперлись  в  мастер   •     Медленные  join’ы   •   «И  вообще  все  криво»   •   «Хотим  искать  максимальную  клику  графа  и  чтоб  нам  за  это  ничего  не  было»  
  • 4. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Не  репликация  а  черти  что»   •     «Не  смогли  научить  использовать  правильный  индекс»   •     «И  вообще  все  криво»   •     «Хотим  найти  все  циклы  в  произвольном  графе  и  чтобы              нам  за  это  ничего  не  было»  
  • 5. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Хотим  мультимастер  в  две  стороны»   •     «Не  смогли  научить  использовать  правильный  индекс»   •     «Очень  сложно,  Concepts  читать  долго,  много  воды»   •     «Хотим  перемножать  матрицы  за  O(1)  и  чтоб  золотая              рыбка  была  у  меня  на  посылках»  
  • 6. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»  
  • 7. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»   •     «А  давайте  запилим  что-­‐нибудь  высокотехнологичное  –  будем  как…»  
  • 8. Зачем  писать  свое  хранилище?   Распростарненные  случаи   •     «Делали  на  MySQL,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Postgres,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  Oracle,  устали  –    теперь  хотим  чего-­‐либо  более  светлого»   •     «Делали  на  DB2/MSSQL/Sybase  …  whatever»   •     «А  давайте  запилим  что-­‐нибудь  высокотехнологичное  –  будем  как…»   •     «Чтоб  разгрузить  БД,  нужно  простенькое  быстрое  хранилище»  !!!  
  • 9. Вобщем  решили  писать  с  нуля   Ну  или  почти  с  нуля  –  не  суть  ;-­‐)  
  • 10. Надежность  хранилища   Mission  cri>cal?   Перевод  денег  со  счета  на  счет  в  банке   Где  граница?   Порядок  постов  во  френдленте  
  • 11. Надежности  мешают  отказы   Хороший  термин  Failure,  переведем  его  как  Падение   •     Падает  железо   •     Падает  ПО   •     Непродуманый  дизайн  ПО  ведет  к  падениям   •     Нерадивый  админ  нажал  не  на  ту  кнопку  и  все  упало   Потенциальная     Случившаяся   Ошибка   Падение   проблема   проблема   (ошибка  которую     нельзя  обработать)  
  • 13. Добавляем  надежность   Простое  и  логичное  решение!   D1   D2   D3   Dm  
  • 14. Это  был  подход     «Чтобы  не  падало»   Почему  плохо   •     Сразу  две  проблемы  –  и  с  чтением  и  записью   •     Непроизводительно  
  • 15. Быстро  поднятое  не  считается   упавшим   •     Исходим  из  того,  что  система  всё  равно  когда-­‐нибудь  может  упасть   •     Минимизируем  потери  
  • 16. Атомарность   D1   D2   Такая  последовательность  действий  восстановима  
  • 17. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   A1   затем   A2   или   send_money(S,  B,  200  )      A2   A2   затем   A1   S  =  900RUR  ?     S  =  800RUR  ?   S  =  700RUR  !  
  • 18. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   A1   затем   A2   или   send_money(S,  B,  200  )      A2   A2   затем   A1   S  =  900RUR  ?     S  =  800RUR  ?   Изоляция S  =  700RUR  !  
  • 19. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   A1   затем   A2   или   send_money(S,  B,  200  )      A2   A2   затем   A1   S  =  900RUR  ?     S  =  800RUR  ?   Изоляция S  =  700RUR  !   Восстановимость  +  изоляция  =  атомарность  
  • 20. Свойства  действий  с  блоками  данных   •     Атомарность   •     Целостность  –  набор  правил  для  данных   •     Долговечность     Действие,  обладающее  такими  свойствами  есть  транзакция  
  • 21. Быстрая  восстановимость   •     Версии   D0   D1   VN   Если  все  действие  прошло  успешно,   А  если  упали  на  смене  VN?    достигнут  Commit  point  
  • 22. Быстрая  восстановимость   •     Версии   •     Пишем  лог    Изоляция/корректность  –  легко  без  производительности
  • 23. T1   T2   r1[x]   w2[x]   w1[y]   w2[y]   -­‐  корректная  история   История  корректна  если     r1[x]   w2[x]   эквивалентна     Направление  стрелок  –     последовательному     w1[y]   w2[y]   порядок  выполненения   выполнению  транзакций  –     сериализуема   конфликтующих  действий   Граф  действий  /  граф   T2   конфликтов   T4   Некорректная  история  –     T1   Если  нет  циклов,  то   историю  на  которой  он   падение  и  нарушение  целостности   построенможно   T3   сериализовать  
  • 24. 2PL   •     с  конфликтами  борятся  блокировками  –  блокирующий  шедулер   •     двухфазное  блокирование  –  сначала  выставляем  все  блокировки,  ни  одна                блокировка  не  может  быть  снята  пока  не  выставлены  все     •     С  помощью  2PL  мы  добиваемся  изоляции  при  сохранении          производительности  
  • 25. Мы  построили  хранилище  на  отдельно  взятой   машине   •     Объективно  машина  не  справляется.  Что  дальше?   •     Scale  out  –  репликация  и  шардинг   •     Асинхронный  месседжинг  –  очереди  –  что  они  дают   •     Распределенные  транзакции  –  если  до  этого  было  еще  не  страшно  
  • 26. Нерассмотренные  важные  моменты   •  Сеть и производительность •     Мониторинг   •     capex/opex  
  • 27. Возвращаемся  к  постановке  задачи   •  Данные не должны браться из ниоткуда и не должны пропадать •  Данные связаны между собой •   Устранены-­‐ли  проблемы  по  которым  нас  не  устраивала  СУБД   •   Сколько  мы  на  это  все  потратитли  и  сколько  еще  потратим?