SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Распространенные  ошибки  
 применения  баз  данных
       Аверин  Сергей
Badoo  —  это:
•   Социальная  сеть  для  знакомств  с  новыми  людьми
•   В  Top-­‐200  Alexa  c  2007  года
•   140+  миллионов  зарегистрированных  пользователей
•   150+  тысяч  новых  ползователей  в  день
•   3+  миллиона  фотографий  загружаются  ежедневно
•   2+  тысячи  серверов
•   30+  тысяч  запросов  в  секунду  к  бекендам
•   MySQL,  PHP,  C(++),  Linux,  nginx,  PHP-­‐fpm,  memcache
Масштабирование
Масштабирование
•   Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому  
    масштабированию
•   Тратим  большие  ресурсы  без  быстрой  отдачи  
•   Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта  
    или  проблемы  еще  непонятны
Масштабирование
•   Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому  
    масштабированию
•   Тратим  большие  ресурсы  без  быстрой  отдачи  
•   Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта  
    или  проблемы  еще  непонятны

    На  самом  деле,  это  предполагет,  что  ваши  бизнес-­‐метрики  
    тоже  вырастут  в  десятки  и  сотни  раз,  а  архитектура  
    сохранится
Масштабирование
Что  имеем:
Масштабирование
Что  рассчитываем  получить:
Масштабирование
Способ  масштабирования:
Масштабирование
•   «Серебряной  пули»  масштабирования  нет
•   Проблемы  будут  уникальными  для  вашего  проекта
•   Понадобится  творческое  решение
•   И  многое  придется  переделывать
Масштабирование
•   Для  стартапа  главными  ценностями  являются  быстрый  старт  и  дешевизна  
    изменений
•   Начните  с  простых,  быстрых  и  несложных  решений  «по  рецепту»
•   Клиенты  →  опыт  →  понимание,  какая  архитектура  нужна



                  К.  О.  предупреждает:  истиной  для  100%  случаев  не  является
Отказоустойчивость
Отказоустойчивость
•   При  проектировании  архитектуры  проблемы  нижних  уровней  во  внимание  
    не  принимаются
•   Железо,  человеческий  фактор,  внешние  риски  и  т.  д.
•   Взаимосвязанность  сбоев
•   В  рамках  одного  сервера  на  практике  не  бывает
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Выделенные  БД-­‐сервера
•   проверенного  вендора
•   резервирование  по  питанию
•   RAID  1+0
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Софт
•   фаерволл
•   Percona  Server
•   разные  права  доступа
•   chrooted  environment
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Архитектура
•   запись  в  транзакции,  на  один  сервер
•   синхронизация  с  другим  ДЦ  через  общую  очередь
БД  c  запасом  на  вырост
БД  c  запасом  на  вырост
•   Выбирается  БД,  без  большого  запаса  фич,  которые  могут  понадобиться  в  
    будущем
•   Ни  один  стартап  не  становился  огромным  в  один  день
•   Узкоспециализированные  БД  →  теряется  гибкость
•   NoSQL  →  нет  возможности  делать  сложные  вещи  худо-­‐бедно,  но  ценой  
    малых  затрат  на  кодирование
БД  —  хранилище  событий
БД  —  хранилище  событий
Использование  БД  как  хранилища  событий  чаще  всего  оправдано  только  
ленью
Распространенные  use  case’ы:
•   события,  порожденные  транзакциями
•   события,  которые  должны  надежно  доставляться
•   события,  которые  можно  потерять
БД  —  хранилище  событий
Cпециализированный  движок:
•   скорость
•   простота
•   фичи
•   масштабируемость
БД  —  хранилище  событий
В  Баду  для  некоторых  задач  используем  Scribe:
•   своя  обертка  с  агрегацией  данных,  вставкой  в  БД
•   меньше  сетевых  соединений
•   гибкие  настройки
•   при  сбоях  сохраняет  данные  локально
•   очень  быстр
Старые  песни  о  главном
Поиск
Поиск
•   Либо  быстро,  просто,  плохо
•   Либо  используя  сложный  фреймворкреймворк  для  организации  поиска  в  
    базе
•   Либо  делаем  сами  такой  фреймворк
Поиск
99%  случаев  —  быстро,  просто,  плохо:


    SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  LIKE  '%one%'
Поиск
99%  случаев  —  быстро,  просто,  плохо:


    SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  LIKE  '%one%'


    SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  RLIKE  '[[:<:]]one[[:>:]]'


    h•p://www.slideshare.net/billkarwin/prac™cal-­‐full-­‐text-­‐search-­‐with-­‐my-­‐sql
Поиск
99%  случаев  —  быстро,  просто,  плохо:


   Some people, when confronted with a problem, think “I know, I’ll use
   regular expressions.” Now they have two problems.
                                                      — Jamie Zawinsky
Поиск
99%  случаев  —  быстро,  просто,  плохо:
 • потом  используем  MySQL  FULLTEXT  Index
 • для  простых  решений  прекрасно  работает  обратный  индекс
 • Но  с  полноценным  поиском  по  тексту  проблема  в  том,  что  просто  
   плохо  ищет  =)
 • а  также:  мало  фич,  медленно,  хуже  масштабируется
Поиск
99%  случаев  —  быстро,  просто,  плохо:
 • а  для  каких-­‐то  задач  просто  неприменимо

Тест  Percona:  индекс  по  всем  статьям  Википедии.
2,5  млн  записей,  15  Гб  текста  на  одном  сервере
 • Sphinx:  20  минут
 • MySQL:  админ  уснул  через  6  часов,  так  и  не  дождавшись

h•p://www.percona.com/files//presenta™ons/opensql2008_sphinx.pdf
Поиск
Большие  и  сложные  фреймворки:
 • готовых  open-­‐source  и  известных  я  не  знаю
 • написать  свой  —  rocket  science
Поиск
Используйте  специализированный  софт:
 •   проще  в  разработке
 •   быстрее
 •   больше  возможостей
 •   масштабируется
 •   а  главное,  лучше  ищет
Сильная  consistency
Сильная  consistency
• Часто  не  нужна  в  вебе
• Неоправданно  сложно  достигаема
• Особенно,  когда  данные  в  один  сервер  не  помещаются  и  надо  что-­‐то  
  придумывать
Сильная  consistency
• Eventual  consistency  рулит
• Можно  писать  в  базу  выборочно  или  писать  аггрегированные  данные,  не  
  нагружая  БД
• Денормализация  может  дать  большой  прирост  производительности
• Важно  знать  меру,  и  что  мы  теряем,  а  что  получаем
Сильная  consistency
Чтобы  не  получилось  так:

   SQL  DB  =  ‘A consistent transactional datastore with schema guarantees
   that uses relational algebra to access normalized tables.’
                     Много  данных                  кривые  руки
   ‘A consistent transactional datastore with schema guarantees that uses
   relational algebra to access normalized tables.’
   =  datastore  with  access  to  data,  лучше  и  не  скажешь

h•p://www.youtube.com/watch?v=zAbFRiyT3LU
Используйте  хорошо  изученные  
        инструменты
Используйте  хорошо  изученные  
          инструменты
• Неизвестность  →  опасность
• Выше  скорость  разработки
• Не  поддавайтесь  просто  так  на  моду  NoSQL
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
 • marke™ng  hype
 • мало  знаний  в  области  SQL:  ACID,  CAP,  3  НФ,  транзакции
 • пытается  сделать  вид,  что  БД-­‐специалист  не  нужен
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
Идеальная  БД  для  программиста
 • хранит  объекты  классов  приложения  (сериализация)
 • работает  быстро  (чтобы  можно  было  похвастаться  друзьям)
 • обо  всем  остальном  заботится  сама
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
Выбор  БД
 • техн.  менеджмент  спускает  вопрос  на  тормозах,  хотя  это  его  задача
 • БД  выбирает  тот  самый  программист
 • Выбираете  NoSQL  —  понимайте,  почему  вы  это  делаете



                       К.  О.  предупреждает:  так  бывает  далеко  не  всегда
Используйте  хорошо  изученные  
        инструменты
NoSQL:
     −  запись  в  один  поток
     −  memory-­‐mapped  files,  IO  scheduling  не  для  БД
     −  один  индекс  на  запрос
     −  не  очень  гибкий  шардинг
     −  производительность  тюнится  только  на  уровне  ОС
     −  нет  атомарности  на  уровне  одного  запроса
Используйте  хорошо  изученные  
        инструменты
NoSQL:
         −  иногда  скудный  мониторинг,  статистика
         +  быстрее  MySQL
         +  проще  развертывать,  особенно  шардинг
         +  нет  схемы,  ALTER  TABLE  забыто,  как  страшный  сон
         +  зачастую,  приходится  писать  кучу  довольно  скучного  кода  на  
         уровне  приложения
Используйте  хорошо  изученные  
        инструменты
SQL:
       −  медленнее
       −  сложнее
       −  много  настроек
       −  в  редких  случаях  непредсказуемо  работает
       (−)  позволяет  писать  медленные/плохие  запросы
       +  более  популярно,  язык  у  всех  на  80%  совпадает  
Используйте  хорошо  изученные  
        инструменты
SQL:
       +  хорошо  изучено,  стабильно
       +  оптимизировано  хранение  данных
       +  куча  настроек,  рычагов  оптимизации
       +  Constraint'ы,  триггеры,  хранимые  процедуры
       +  ACID
       +  B-­‐Tree,  R-­‐Tree,  GIN,  GIST,  hash-­‐индексы
Используйте  хорошо  изученные  
        инструменты
SQL:
       (+)  Join'ы,  которые  зло,  но  иногда  выручают
       +  очень  навороченный  оптимизатор  запросов
       +  параллельное  исполнение  (под)запросов
       +  многоуровневое  кеширование
       +  статистика,  мониторинг
       +  сложные  запросы  позволяют  меньше  писать  код  приложения
EVERYBODY  LIES
Спасибо!

Вопросы?

           twitter.com/ryba_xek
                     s@averin.ru
                 averin.ru/slides/

Más contenido relacionado

La actualidad más candente

Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ontico
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014Alex Chistyakov
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupMail.ru Group
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Alexey Zinoviev
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрsportgid
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Andrew Avdeev
 
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...Ontico
 
So Your WAF Needs a Parser
So Your WAF Needs a ParserSo Your WAF Needs a Parser
So Your WAF Needs a Parseryalegko
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 

La actualidad más candente (19)

Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru GroupАндрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
Андрей Ларионов, Moscow Atlassian Meetup 21 апреля, Mail.Ru Group
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
 
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
 
So Your WAF Needs a Parser
So Your WAF Needs a ParserSo Your WAF Needs a Parser
So Your WAF Needs a Parser
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 

Similar a Распространенные ошибки применения баз данных (Сергей Аверин)

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, PerconaOntico
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Tanya Denisyuk
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 

Similar a Распространенные ошибки применения баз данных (Сергей Аверин) (20)

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Как разраба
Как разрабаКак разраба
Как разраба
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Sivko
SivkoSivko
Sivko
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 

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. Badoo  —  это: • Социальная  сеть  для  знакомств  с  новыми  людьми • В  Top-­‐200  Alexa  c  2007  года • 140+  миллионов  зарегистрированных  пользователей • 150+  тысяч  новых  ползователей  в  день • 3+  миллиона  фотографий  загружаются  ежедневно • 2+  тысячи  серверов • 30+  тысяч  запросов  в  секунду  к  бекендам • MySQL,  PHP,  C(++),  Linux,  nginx,  PHP-­‐fpm,  memcache
  • 4. Масштабирование • Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому   масштабированию • Тратим  большие  ресурсы  без  быстрой  отдачи   • Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта   или  проблемы  еще  непонятны
  • 5. Масштабирование • Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому   масштабированию • Тратим  большие  ресурсы  без  быстрой  отдачи   • Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта   или  проблемы  еще  непонятны На  самом  деле,  это  предполагет,  что  ваши  бизнес-­‐метрики   тоже  вырастут  в  десятки  и  сотни  раз,  а  архитектура   сохранится
  • 9. Масштабирование • «Серебряной  пули»  масштабирования  нет • Проблемы  будут  уникальными  для  вашего  проекта • Понадобится  творческое  решение • И  многое  придется  переделывать
  • 10. Масштабирование • Для  стартапа  главными  ценностями  являются  быстрый  старт  и  дешевизна   изменений • Начните  с  простых,  быстрых  и  несложных  решений  «по  рецепту» • Клиенты  →  опыт  →  понимание,  какая  архитектура  нужна К.  О.  предупреждает:  истиной  для  100%  случаев  не  является
  • 12. Отказоустойчивость • При  проектировании  архитектуры  проблемы  нижних  уровней  во  внимание   не  принимаются • Железо,  человеческий  фактор,  внешние  риски  и  т.  д. • Взаимосвязанность  сбоев • В  рамках  одного  сервера  на  практике  не  бывает
  • 13. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Выделенные  БД-­‐сервера • проверенного  вендора • резервирование  по  питанию • RAID  1+0
  • 14. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Софт • фаерволл • Percona  Server • разные  права  доступа • chrooted  environment
  • 15. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Архитектура • запись  в  транзакции,  на  один  сервер • синхронизация  с  другим  ДЦ  через  общую  очередь
  • 16. БД  c  запасом  на  вырост
  • 17. БД  c  запасом  на  вырост • Выбирается  БД,  без  большого  запаса  фич,  которые  могут  понадобиться  в   будущем • Ни  один  стартап  не  становился  огромным  в  один  день • Узкоспециализированные  БД  →  теряется  гибкость • NoSQL  →  нет  возможности  делать  сложные  вещи  худо-­‐бедно,  но  ценой   малых  затрат  на  кодирование
  • 19. БД  —  хранилище  событий Использование  БД  как  хранилища  событий  чаще  всего  оправдано  только   ленью Распространенные  use  case’ы: • события,  порожденные  транзакциями • события,  которые  должны  надежно  доставляться • события,  которые  можно  потерять
  • 20. БД  —  хранилище  событий Cпециализированный  движок: • скорость • простота • фичи • масштабируемость
  • 21. БД  —  хранилище  событий В  Баду  для  некоторых  задач  используем  Scribe: • своя  обертка  с  агрегацией  данных,  вставкой  в  БД • меньше  сетевых  соединений • гибкие  настройки • при  сбоях  сохраняет  данные  локально • очень  быстр
  • 22. Старые  песни  о  главном
  • 24. Поиск • Либо  быстро,  просто,  плохо • Либо  используя  сложный  фреймворкреймворк  для  организации  поиска  в   базе • Либо  делаем  сами  такой  фреймворк
  • 25. Поиск 99%  случаев  —  быстро,  просто,  плохо: SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  LIKE  '%one%'
  • 26. Поиск 99%  случаев  —  быстро,  просто,  плохо: SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  LIKE  '%one%' SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  RLIKE  '[[:<:]]one[[:>:]]' h•p://www.slideshare.net/billkarwin/prac™cal-­‐full-­‐text-­‐search-­‐with-­‐my-­‐sql
  • 27. Поиск 99%  случаев  —  быстро,  просто,  плохо: Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. — Jamie Zawinsky
  • 28. Поиск 99%  случаев  —  быстро,  просто,  плохо: • потом  используем  MySQL  FULLTEXT  Index • для  простых  решений  прекрасно  работает  обратный  индекс • Но  с  полноценным  поиском  по  тексту  проблема  в  том,  что  просто   плохо  ищет  =) • а  также:  мало  фич,  медленно,  хуже  масштабируется
  • 29. Поиск 99%  случаев  —  быстро,  просто,  плохо: • а  для  каких-­‐то  задач  просто  неприменимо Тест  Percona:  индекс  по  всем  статьям  Википедии. 2,5  млн  записей,  15  Гб  текста  на  одном  сервере • Sphinx:  20  минут • MySQL:  админ  уснул  через  6  часов,  так  и  не  дождавшись h•p://www.percona.com/files//presenta™ons/opensql2008_sphinx.pdf
  • 30. Поиск Большие  и  сложные  фреймворки: • готовых  open-­‐source  и  известных  я  не  знаю • написать  свой  —  rocket  science
  • 31. Поиск Используйте  специализированный  софт: • проще  в  разработке • быстрее • больше  возможостей • масштабируется • а  главное,  лучше  ищет
  • 33. Сильная  consistency • Часто  не  нужна  в  вебе • Неоправданно  сложно  достигаема • Особенно,  когда  данные  в  один  сервер  не  помещаются  и  надо  что-­‐то   придумывать
  • 34. Сильная  consistency • Eventual  consistency  рулит • Можно  писать  в  базу  выборочно  или  писать  аггрегированные  данные,  не   нагружая  БД • Денормализация  может  дать  большой  прирост  производительности • Важно  знать  меру,  и  что  мы  теряем,  а  что  получаем
  • 35. Сильная  consistency Чтобы  не  получилось  так: SQL  DB  =  ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ Много  данных                  кривые  руки ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ =  datastore  with  access  to  data,  лучше  и  не  скажешь h•p://www.youtube.com/watch?v=zAbFRiyT3LU
  • 37. Используйте  хорошо  изученные   инструменты • Неизвестность  →  опасность • Выше  скорость  разработки • Не  поддавайтесь  просто  так  на  моду  NoSQL
  • 38. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: • marke™ng  hype • мало  знаний  в  области  SQL:  ACID,  CAP,  3  НФ,  транзакции • пытается  сделать  вид,  что  БД-­‐специалист  не  нужен
  • 39. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: Идеальная  БД  для  программиста • хранит  объекты  классов  приложения  (сериализация) • работает  быстро  (чтобы  можно  было  похвастаться  друзьям) • обо  всем  остальном  заботится  сама
  • 40. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: Выбор  БД • техн.  менеджмент  спускает  вопрос  на  тормозах,  хотя  это  его  задача • БД  выбирает  тот  самый  программист • Выбираете  NoSQL  —  понимайте,  почему  вы  это  делаете К.  О.  предупреждает:  так  бывает  далеко  не  всегда
  • 41. Используйте  хорошо  изученные   инструменты NoSQL: −  запись  в  один  поток −  memory-­‐mapped  files,  IO  scheduling  не  для  БД −  один  индекс  на  запрос −  не  очень  гибкий  шардинг −  производительность  тюнится  только  на  уровне  ОС −  нет  атомарности  на  уровне  одного  запроса
  • 42. Используйте  хорошо  изученные   инструменты NoSQL: −  иногда  скудный  мониторинг,  статистика +  быстрее  MySQL +  проще  развертывать,  особенно  шардинг +  нет  схемы,  ALTER  TABLE  забыто,  как  страшный  сон +  зачастую,  приходится  писать  кучу  довольно  скучного  кода  на   уровне  приложения
  • 43. Используйте  хорошо  изученные   инструменты SQL: −  медленнее −  сложнее −  много  настроек −  в  редких  случаях  непредсказуемо  работает (−)  позволяет  писать  медленные/плохие  запросы +  более  популярно,  язык  у  всех  на  80%  совпадает  
  • 44. Используйте  хорошо  изученные   инструменты SQL: +  хорошо  изучено,  стабильно +  оптимизировано  хранение  данных +  куча  настроек,  рычагов  оптимизации +  Constraint'ы,  триггеры,  хранимые  процедуры +  ACID +  B-­‐Tree,  R-­‐Tree,  GIN,  GIST,  hash-­‐индексы
  • 45. Используйте  хорошо  изученные   инструменты SQL: (+)  Join'ы,  которые  зло,  но  иногда  выручают +  очень  навороченный  оптимизатор  запросов +  параллельное  исполнение  (под)запросов +  многоуровневое  кеширование +  статистика,  мониторинг +  сложные  запросы  позволяют  меньше  писать  код  приложения
  • 47. Спасибо! Вопросы? twitter.com/ryba_xek s@averin.ru averin.ru/slides/