SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Вы	
  решили	
  написать	
  собственное	
  
хранилище	
  данных	
  
Илья	
  Космодемьянский	
  
Данные	
  
• 	
  	
  Традиционно	
  хранят	
  в	
  СУБД	
  
• 	
  	
  Данные	
  нужно	
  хранить	
  надежно	
  
• 	
  	
  С	
  данными	
  нужно	
  производить	
  действия:	
  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	
  
Добавляем	
  надежность	
  
D3	
  D1	
   D2	
  
Dm	
  
Простое	
  и	
  логичное	
  решение!	
  
Это	
  был	
  подход	
  	
  
«Чтобы	
  не	
  падало»	
  
Почему	
  плохо	
  
• 	
  	
  Сразу	
  две	
  проблемы	
  –	
  и	
  с	
  чтением	
  и	
  записью	
  
• 	
  	
  Непроизводительно	
  
Быстро	
  поднятое	
  не	
  считается	
  
упавшим	
  
• 	
  	
  Исходим	
  из	
  того,	
  что	
  система	
  всё	
  равно	
  когда-­‐нибудь	
  может	
  упасть	
  
• 	
  	
  Минимизируем	
  потери	
  
Атомарность	
  
D1	
   D2	
  
Такая	
  последовательность	
  действий	
  восстановима	
  
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
  
S	
  =	
  700RUR	
  !	
  
A1 	
  
A1 	
  
A2 	
  
A2 	
  
затем	
  
затем	
  
или	
  
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
  
S	
  =	
  700RUR	
  !	
  
A1 	
  
A1 	
  
A2 	
  
A2 	
  
затем	
  
затем	
  
или	
  
Изоляция
Конкурентный	
  доступ	
  
S	
  =	
  1000RUR	
  
send_money(S,	
  B,	
  100	
  )	
  	
  	
  A1	
  
send_money(S,	
  B,	
  200	
  )	
  	
  	
  A2	
  
S	
  =	
  900RUR	
  ?	
  	
  
S	
  =	
  800RUR	
  ?	
  
S	
  =	
  700RUR	
  !	
  
A1 	
  
A1 	
  
A2 	
  
A2 	
  
затем	
  
затем	
  
или	
  
Изоляция
Восстановимость	
  +	
  изоляция	
  =	
  атомарность	
  
Свойства	
  действий	
  с	
  блоками	
  данных	
  
• 	
  	
  Атомарность	
  
• 	
  	
  Целостность	
  –	
  набор	
  правил	
  для	
  данных	
  
• 	
  	
  Долговечность	
  	
  
Действие,	
  обладающее	
  такими	
  свойствами	
  есть	
  транзакция	
  
Быстрая	
  восстановимость	
  
• 	
  	
  Версии	
  
D0	
   D1	
   VN	
  
А	
  если	
  упали	
  на	
  смене	
  VN?	
  
Если	
  все	
  действие	
  прошло	
  успешно,	
  
	
  достигнут	
  Commit	
  point	
  
Быстрая	
  восстановимость	
  
• 	
  	
  Версии	
  
• 	
  	
  Пишем	
  лог	
  
	
  Изоляция/корректность	
  –	
  легко	
  без	
  производительности
T1	
   T2	
  
r1[x]	
   w2[x]	
  
w2[y]	
  w1[y]	
  
w2[y]	
  w1[y]	
  r1[x]	
   w2[x]	
  
-­‐	
  корректная	
  история	
  
Направление	
  стрелок	
  –	
  	
  
порядок	
  выполненения	
  
конфликтующих	
  действий	
  
История	
  корректна	
  если	
  	
  
эквивалентна	
  	
  
последовательному	
  	
  
выполнению	
  транзакций	
  –	
  	
  
сериализуема	
  
T2	
  
T3	
  
T4	
  
T1	
  
Граф	
  действий	
  /	
  граф	
  
конфликтов	
  
Если	
  нет	
  циклов,	
  то	
  
историю	
  на	
  которой	
  он	
  
построенможно	
  
сериализовать	
  
Некорректная	
  история	
  –	
  	
  
падение	
  и	
  нарушение	
  целостности	
  
2PL	
  
• 	
  	
  с	
  конфликтами	
  борятся	
  блокировками	
  –	
  блокирующий	
  шедулер	
  
• 	
  	
  двухфазное	
  блокирование	
  –	
  сначала	
  выставляем	
  все	
  блокировки,	
  ни	
  одна	
  	
  	
  	
  	
  
	
  	
  	
  блокировка	
  не	
  может	
  быть	
  снята	
  пока	
  не	
  выставлены	
  все	
  	
  
• 	
  	
  С	
  помощью	
  2PL	
  мы	
  добиваемся	
  изоляции	
  при	
  сохранении	
  
	
  	
  	
  	
  производительности	
  
Мы	
  построили	
  хранилище	
  на	
  отдельно	
  взятой	
  
машине	
  
• 	
  	
  Объективно	
  машина	
  не	
  справляется.	
  Что	
  дальше?	
  
• 	
  	
  Scale	
  out	
  –	
  репликация	
  и	
  шардинг	
  
• 	
  	
  Асинхронный	
  месседжинг	
  –	
  очереди	
  –	
  что	
  они	
  дают	
  
• 	
  	
  Распределенные	
  транзакции	
  –	
  если	
  до	
  этого	
  было	
  еще	
  не	
  страшно	
  
Нерассмотренные	
  важные	
  моменты	
  
• Сеть и производительность
• 	
  	
  Мониторинг	
  
• 	
  	
  capex/opex	
  
Возвращаемся	
  к	
  постановке	
  задачи	
  
• Данные не должны браться из ниоткуда и не должны пропадать
• Данные связаны между собой
• 	
  Устранены-­‐ли	
  проблемы	
  по	
  которым	
  нас	
  не	
  устраивала	
  СУБД	
  
• 	
  Сколько	
  мы	
  на	
  это	
  все	
  потратитли	
  и	
  сколько	
  еще	
  потратим?	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Ontico
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
Ontico
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Ontico
 

Was ist angesagt? (6)

NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
Going to extreme
Going to extremeGoing to extreme
Going to extreme
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
 

Andere mochten auch

Developing PostgreSQL Performance, Simon Riggs
Developing PostgreSQL Performance, Simon RiggsDeveloping PostgreSQL Performance, Simon Riggs
Developing PostgreSQL Performance, Simon Riggs
Fuenteovejuna
 
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Fuenteovejuna
 
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Fuenteovejuna
 
Social Monitoring Tool codename Looking Glass, Patrice Pelland
Social Monitoring Tool codename Looking Glass, Patrice PellandSocial Monitoring Tool codename Looking Glass, Patrice Pelland
Social Monitoring Tool codename Looking Glass, Patrice Pelland
Fuenteovejuna
 
Managing replication of PostgreSQL, Simon Riggs
Managing replication of PostgreSQL, Simon RiggsManaging replication of PostgreSQL, Simon Riggs
Managing replication of PostgreSQL, Simon Riggs
Fuenteovejuna
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Fuenteovejuna
 
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce MomjianRapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
Fuenteovejuna
 
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Fuenteovejuna
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
Fuenteovejuna
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Fuenteovejuna
 
Native Client, Евгений Эльцин
Native Client, Евгений ЭльцинNative Client, Евгений Эльцин
Native Client, Евгений Эльцин
Fuenteovejuna
 
The Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce MomjianThe Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce Momjian
Fuenteovejuna
 
Real time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav VorozhkoReal time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav Vorozhko
Fuenteovejuna
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Fuenteovejuna
 
InnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter ZaitsevInnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter Zaitsev
Fuenteovejuna
 
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима НиконенкоМониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Fuenteovejuna
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий Востриков
Fuenteovejuna
 

Andere mochten auch (17)

Developing PostgreSQL Performance, Simon Riggs
Developing PostgreSQL Performance, Simon RiggsDeveloping PostgreSQL Performance, Simon Riggs
Developing PostgreSQL Performance, Simon Riggs
 
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
 
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
Интеграция открытых технологий и взаимодействие со сторонними проектами в усл...
 
Social Monitoring Tool codename Looking Glass, Patrice Pelland
Social Monitoring Tool codename Looking Glass, Patrice PellandSocial Monitoring Tool codename Looking Glass, Patrice Pelland
Social Monitoring Tool codename Looking Glass, Patrice Pelland
 
Managing replication of PostgreSQL, Simon Riggs
Managing replication of PostgreSQL, Simon RiggsManaging replication of PostgreSQL, Simon Riggs
Managing replication of PostgreSQL, Simon Riggs
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
 
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce MomjianRapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
 
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
 
Native Client, Евгений Эльцин
Native Client, Евгений ЭльцинNative Client, Евгений Эльцин
Native Client, Евгений Эльцин
 
The Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce MomjianThe Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce Momjian
 
Real time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav VorozhkoReal time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav Vorozhko
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
 
InnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter ZaitsevInnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter Zaitsev
 
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима НиконенкоМониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий Востриков
 

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

Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)
Ontico
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
Ontico
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Ontico
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
Serguei Gitinsky
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
Ontico
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
HappyDev
 

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

Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Deployment to production with an unexpected load
Deployment to production with an unexpected loadDeployment to production with an unexpected load
Deployment to production with an unexpected load
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 

Mehr von Fuenteovejuna

Facebook, Robert Johnson
Facebook, Robert JohnsonFacebook, Robert Johnson
Facebook, Robert Johnson
Fuenteovejuna
 
Shared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
Shared Personalization Service - How To Scale to 15K RPS, Patrice PellandShared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
Shared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
Fuenteovejuna
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Fuenteovejuna
 
Профилирование памяти в приложениях на Python, Антон Грицай
Профилирование памяти в приложениях на Python, Антон ГрицайПрофилирование памяти в приложениях на Python, Антон Грицай
Профилирование памяти в приложениях на Python, Антон Грицай
Fuenteovejuna
 
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Fuenteovejuna
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Fuenteovejuna
 
Динамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр ЛяминДинамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр Лямин
Fuenteovejuna
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Fuenteovejuna
 
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей НековальМасштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Fuenteovejuna
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат ГаджибалаевCloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Fuenteovejuna
 
Goal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter ZaitsevGoal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter Zaitsev
Fuenteovejuna
 

Mehr von Fuenteovejuna (12)

Facebook, Robert Johnson
Facebook, Robert JohnsonFacebook, Robert Johnson
Facebook, Robert Johnson
 
Shared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
Shared Personalization Service - How To Scale to 15K RPS, Patrice PellandShared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
Shared Personalization Service - How To Scale to 15K RPS, Patrice Pelland
 
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий БородинПрактическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
Практическое создание крупного масштабируемого web 20 c нуля, Дмитрий Бородин
 
Профилирование памяти в приложениях на Python, Антон Грицай
Профилирование памяти в приложениях на Python, Антон ГрицайПрофилирование памяти в приложениях на Python, Антон Грицай
Профилирование памяти в приложениях на Python, Антон Грицай
 
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
 
Динамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр ЛяминДинамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр Лямин
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
 
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей НековальМасштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
 
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат ГаджибалаевCloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
 
Goal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter ZaitsevGoal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter Zaitsev
 

Kürzlich hochgeladen

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 

Kürzlich hochgeladen (9)

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 

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

  • 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. Добавляем  надежность   D3  D1   D2   Dm   Простое  и  логичное  решение!  
  • 14. Это  был  подход     «Чтобы  не  падало»   Почему  плохо   •     Сразу  две  проблемы  –  и  с  чтением  и  записью   •     Непроизводительно  
  • 15. Быстро  поднятое  не  считается   упавшим   •     Исходим  из  того,  что  система  всё  равно  когда-­‐нибудь  может  упасть   •     Минимизируем  потери  
  • 16. Атомарность   D1   D2   Такая  последовательность  действий  восстановима  
  • 17. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   send_money(S,  B,  200  )      A2   S  =  900RUR  ?     S  =  800RUR  ?   S  =  700RUR  !   A1   A1   A2   A2   затем   затем   или  
  • 18. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   send_money(S,  B,  200  )      A2   S  =  900RUR  ?     S  =  800RUR  ?   S  =  700RUR  !   A1   A1   A2   A2   затем   затем   или   Изоляция
  • 19. Конкурентный  доступ   S  =  1000RUR   send_money(S,  B,  100  )      A1   send_money(S,  B,  200  )      A2   S  =  900RUR  ?     S  =  800RUR  ?   S  =  700RUR  !   A1   A1   A2   A2   затем   затем   или   Изоляция Восстановимость  +  изоляция  =  атомарность  
  • 20. Свойства  действий  с  блоками  данных   •     Атомарность   •     Целостность  –  набор  правил  для  данных   •     Долговечность     Действие,  обладающее  такими  свойствами  есть  транзакция  
  • 21. Быстрая  восстановимость   •     Версии   D0   D1   VN   А  если  упали  на  смене  VN?   Если  все  действие  прошло  успешно,    достигнут  Commit  point  
  • 22. Быстрая  восстановимость   •     Версии   •     Пишем  лог    Изоляция/корректность  –  легко  без  производительности
  • 23. T1   T2   r1[x]   w2[x]   w2[y]  w1[y]   w2[y]  w1[y]  r1[x]   w2[x]   -­‐  корректная  история   Направление  стрелок  –     порядок  выполненения   конфликтующих  действий   История  корректна  если     эквивалентна     последовательному     выполнению  транзакций  –     сериализуема   T2   T3   T4   T1   Граф  действий  /  граф   конфликтов   Если  нет  циклов,  то   историю  на  которой  он   построенможно   сериализовать   Некорректная  история  –     падение  и  нарушение  целостности  
  • 24. 2PL   •     с  конфликтами  борятся  блокировками  –  блокирующий  шедулер   •     двухфазное  блокирование  –  сначала  выставляем  все  блокировки,  ни  одна                блокировка  не  может  быть  снята  пока  не  выставлены  все     •     С  помощью  2PL  мы  добиваемся  изоляции  при  сохранении          производительности  
  • 25. Мы  построили  хранилище  на  отдельно  взятой   машине   •     Объективно  машина  не  справляется.  Что  дальше?   •     Scale  out  –  репликация  и  шардинг   •     Асинхронный  месседжинг  –  очереди  –  что  они  дают   •     Распределенные  транзакции  –  если  до  этого  было  еще  не  страшно  
  • 26. Нерассмотренные  важные  моменты   • Сеть и производительность •     Мониторинг   •     capex/opex  
  • 27. Возвращаемся  к  постановке  задачи   • Данные не должны браться из ниоткуда и не должны пропадать • Данные связаны между собой •   Устранены-­‐ли  проблемы  по  которым  нас  не  устраивала  СУБД   •   Сколько  мы  на  это  все  потратитли  и  сколько  еще  потратим?