SlideShare a Scribd company logo
1 of 55
Download to read offline
Распространенные  ошибки  
 применения  баз  данных
       Аверин  Сергей
Badoo  —  это:
•   Социальная  сеть  для  знакомств  с  новыми  людьми
•   В  Top-­‐200  Alexa  c  2007  года
•   140+  миллионов  зарегистрированных  пользователей
•   150+  тысяч  новых  пользователей  в  день
•   3+  миллиона  фотографий  загружаются  ежедневно
•   2+  тысячи  серверов
•   30+  тысяч  запросов  в  секунду  к  бекендам
•   MySQL,  PHP,  C(++),  Linux,  nginx,  PHP-­‐fpm,  memcache
7  советов  стартапам
1.  Масштабирование
Масштабирование
•   Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому  
    масштабированию
•   Тратим  большие  ресурсы  без  быстрой  отдачи  
•   Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта  
    или  проблемы  еще  непонятны
Масштабирование
•   Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому  
    масштабированию
•   Тратим  большие  ресурсы  без  быстрой  отдачи  
•   Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта  
    или  проблемы  еще  непонятны

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



                  К.  О.  предупреждает:  истиной  для  100%  случаев  не  является
2.  Отказоустойчивость
Отказоустойчивость
•   При  проектировании  архитектуры  проблемы  нижних  уровней  во  внимание  
    не  принимаются
•   Железо,  человеческий  фактор,  внешние  риски  и  т.  д.
•   Взаимосвязанность  сбоев
•   В  рамках  одного  сервера  на  практике  не  бывает
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Выделенные  БД-­‐серверы
•   проверенного  вендора
•   резервирование  по  питанию
•   RAID  1+0
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Софт
•   фаервол
•   Percona  Server
•   разные  права  доступа
•   chroot-­‐окружение
Отказоустойчивость
Как  это  сделано  в  Баду,  на  примере  пользовательских  данных:
Архитектура
•   запись  в  транзакции,  на  один  сервер
•   синхронизация  с  другим  ДЦ  через  общую  очередь
3.  БД  c  запасом  на  вырост
БД  c  запасом  на  вырост
•   Выбирается  БД  без  большого  запаса  фич,  которые  могут  понадобиться  в  
    будущем
•   Ни  один  стартап  не  становился  огромным  в  один  день
•   Узкоспециализированные  БД  →  теряется  гибкость
•   NoSQL  →  нет  возможности  делать  сложные  вещи  худо-­‐бедно,  но  ценой  
    малых  затрат  на  кодирование
4.  БД  —  хранилище  событий
БД  —  хранилище  событий
Использование  БД  как  хранилища  событий  чаще  всего  оправдано  только  
ленью
Распространенные  use  case’ы:
•   события,  порожденные  транзакциями
•   события,  которые  должны  надежно  доставляться
•   события,  которые  можно  потерять
БД  —  хранилище  событий
Cпециализированный  движок  —  RabbitMQ,  Kestrel,  Scribe,  и  даже  Redis:
•   скорость
•   простота
•   фичи
•   масштабируемость
БД  —  хранилище  событий
В  Баду  для  некоторых  задач  используем  Scribe:
•   своя  обертка  с  агрегацией  данных,  вставкой  в  БД
•   меньше  сетевых  соединений
•   передаем  данные  между  ДЦ
•   гибкие  настройки
•   при  сбоях  сохраняет  данные  локально
•   очень  быстрый
Старые  песни  о  главном
5.  Поиск
Поиск
•   Либо  быстро,  просто,  плохо
•   Либо  используем  бесплатный  движок  —  
    Sphinx,  Lucene/Solr/ElasˆcSearch
Поиск
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
Поиск
Используйте  специализированный  софт:
 •   проще  в  разработке
 •   быстрее
 •   больше  возможностей
 •   масштабируется
 •   а  главное,  лучше  ищет
6.  Сильная  consistency
Сильная  consistency
• Не  всегда  нужна  в  вебе
• Часто  сложно  достигаема
• Особенно,  когда  данные  в  один  сервер  не  помещаются  и  надо  что-­‐то  
  придумывать
Сильная  consistency
• Eventual  consistency  рулит
• Можно  писать  в  базу  выборочно  или  писать  агрегированные  данные,  не  
  нагружая  БД
• Денормализация  может  дать  большой  прирост  производительности
• Важно  знать  меру,  и  что  мы  теряем,  а  что  получаем
Сильная  consistency
Чтобы  не  получилось  так:

   SQL  DB  =  ‘A consistent transactional datastore with schema guarantees
   that uses relational algebra to access normalized tables.’
Сильная  consistency
Чтобы  не  получилось  так:
+  добавляем  slave  —  репликация
Сильная  consistency
Чтобы  не  получилось  так:
+  добавляем  slave  —  репликация
+  мемкеш
Сильная  consistency
Чтобы  не  получилось  так:
+  добавляем  slave  —  репликация
+  мемкеш
+  добавляем  еще  slave’ов  —  репликация  репликации
Сильная  consistency
Чтобы  не  получилось  так:
+  добавляем  slave  —  репликация
+  мемкеш
+  добавляем  еще  slave’ов  —  репликация  репликации
+  шардинг
Сильная  consistency
Чтобы  не  получилось  так:
+  добавляем  slave  —  репликация
+  мемкеш
+  добавляем  еще  slave’ов  —  репликация  репликации
+  шардинг
+  один  столбец  на  таблицу,  храним  в  нем  сериализованный  объект
Сильная  consistency
Чтобы  не  получилось  так:

   SQL  DB  =  ‘A consistent transactional datastore with schema guarantees
   that uses relational algebra to access normalized tables.’
Сильная  consistency
Чтобы  не  получилось  так:

   SQL  DB  =  ‘A consistent transactional datastore with schema guarantees
   that uses relational algebra to access normalized tables.’
                     Много  данных                  кривые  руки
Сильная  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
7.  Используйте  хорошо  
изученные  инструменты
Используйте  хорошо  изученные  
          инструменты
• Неизвестность  →  опасность
• Выше  скорость  разработки
• Не  поддавайтесь  просто  так  на  моду  NoSQL
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
 • markeˆng  hype
 • мало  знаний  в  области  SQL:  ACID,  CAP,  3  НФ,  транзакции
 • пытается  сделать  вид,  что  БД-­‐специалист  не  нужен
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
Идеальная  БД  для  программиста
 • хранит  объекты  классов  приложения  (сериализация)
 • работает  быстро  (чтобы  можно  было  похвастаться  друзьям)
 • обо  всем  остальном  заботится  сама
Используйте  хорошо  изученные  
        инструменты
“Психологическая”  популярность  NoSQL:
Выбор  БД
 • техн.  менеджмент  спускает  вопрос  на  тормозах,  хотя  это  его  задача
 • БД  выбирает  тот  самый  программист
 • Выбираете  NoSQL  —  понимайте,  почему  вы  это  делаете



                       К.  О.  предупреждает:  так  бывает  далеко  не  всегда
Используйте  хорошо  изученные  
        инструменты
NoSQL:
     −  запись  в  один  поток
     −  memory-­‐mapped  files,  IO  scheduling  не  для  БД
     −  один  индекс  на  запрос
     −  не  очень  гибкий  шардинг
     −  производительность  тюнится  только  на  уровне  ОС
     −  нет  атомарности  на  уровне  одного  запроса
Используйте  хорошо  изученные  
        инструменты
NoSQL:
         −  иногда  скудный  мониторинг,  статистика
         −  зачастую,  приходится  писать  кучу  довольно  скучного  кода  на  
         уровне  приложения
         +  чаще  всего  быстрее  SQL-­‐баз
         +  проще  развертывать,  особенно  шардинг
         +  нет  схемы,  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/

More Related Content

What's hot

2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Code'n'Coffee SPb., вводный доклад по оптимизации производительности
Code'n'Coffee SPb., вводный доклад по оптимизации производительностиCode'n'Coffee SPb., вводный доклад по оптимизации производительности
Code'n'Coffee SPb., вводный доклад по оптимизации производительностиAlex 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
 
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ontico
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийFuenteovejuna
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
CodeFest 2013. Бабаев А. — Сервер для самых маленьких
CodeFest 2013. Бабаев А. — Сервер для самых маленькихCodeFest 2013. Бабаев А. — Сервер для самых маленьких
CodeFest 2013. Бабаев А. — Сервер для самых маленькихCodeFest
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Ontico
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Ontico
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 

What's hot (19)

2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Code'n'Coffee SPb., вводный доклад по оптимизации производительности
Code'n'Coffee SPb., вводный доклад по оптимизации производительностиCode'n'Coffee SPb., вводный доклад по оптимизации производительности
Code'n'Coffee SPb., вводный доклад по оптимизации производительности
 
Андрей Ларионов, 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
 
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
Zabbix и правильное обнаружение проблем - Алексей Владышев @ RootConf 2015
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья Космодемьянский
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
CodeFest 2013. Бабаев А. — Сервер для самых маленьких
CodeFest 2013. Бабаев А. — Сервер для самых маленькихCodeFest 2013. Бабаев А. — Сервер для самых маленьких
CodeFest 2013. Бабаев А. — Сервер для самых маленьких
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 

Viewers also liked

Serbarea abecedarului
Serbarea abecedaruluiSerbarea abecedarului
Serbarea abecedaruluibalada65
 
Burgers tonen lef masterthese definitief 3 h
Burgers tonen lef masterthese definitief 3 hBurgers tonen lef masterthese definitief 3 h
Burgers tonen lef masterthese definitief 3 hMieke Sanden, van der
 
Applying data and research to developing campus priorities tcnj 2010
Applying data and research to developing campus priorities tcnj 2010Applying data and research to developing campus priorities tcnj 2010
Applying data and research to developing campus priorities tcnj 2010Columbia University
 
Eb86 b03f 666d-4a8d-90fda1142cd29dae
Eb86 b03f 666d-4a8d-90fda1142cd29daeEb86 b03f 666d-4a8d-90fda1142cd29dae
Eb86 b03f 666d-4a8d-90fda1142cd29daeCarlos Carvalho
 
Kgigroep luchlezing rochdale 2 d
Kgigroep luchlezing rochdale 2 dKgigroep luchlezing rochdale 2 d
Kgigroep luchlezing rochdale 2 dQuietroom Label
 
Multi sector CSRpartnerships: Natural partnerships-unnatural partners
Multi sector CSRpartnerships:  Natural partnerships-unnatural partnersMulti sector CSRpartnerships:  Natural partnerships-unnatural partners
Multi sector CSRpartnerships: Natural partnerships-unnatural partnersWayne Dunn
 
Week Aef4 11
Week Aef4 11Week Aef4 11
Week Aef4 11Les Davy
 
アジアにおける広帯域ネットワークサービス需要の活況
アジアにおける広帯域ネットワークサービス需要の活況アジアにおける広帯域ネットワークサービス需要の活況
アジアにおける広帯域ネットワークサービス需要の活況KVH Co. Ltd.
 
Дмитрий Волох_фулфилмент_Owox_2014
Дмитрий Волох_фулфилмент_Owox_2014Дмитрий Волох_фулфилмент_Owox_2014
Дмитрий Волох_фулфилмент_Owox_2014TOCHKA
 
Profiling with Xhprof
Profiling with XhprofProfiling with Xhprof
Profiling with XhprofTim Massey
 
Infographic - Cloud Monitoring Basics Cheat Sheet
Infographic - Cloud Monitoring Basics Cheat SheetInfographic - Cloud Monitoring Basics Cheat Sheet
Infographic - Cloud Monitoring Basics Cheat SheetCopperEgg
 
Rassegnastampa rca napoli_virtuosa
Rassegnastampa rca napoli_virtuosaRassegnastampa rca napoli_virtuosa
Rassegnastampa rca napoli_virtuosaMeMeEsposito
 
Kudavi 1.25.2016
Kudavi 1.25.2016Kudavi 1.25.2016
Kudavi 1.25.2016Tom Currier
 

Viewers also liked (20)

Serbarea abecedarului
Serbarea abecedaruluiSerbarea abecedarului
Serbarea abecedarului
 
Burgers tonen lef masterthese definitief 3 h
Burgers tonen lef masterthese definitief 3 hBurgers tonen lef masterthese definitief 3 h
Burgers tonen lef masterthese definitief 3 h
 
Applying data and research to developing campus priorities tcnj 2010
Applying data and research to developing campus priorities tcnj 2010Applying data and research to developing campus priorities tcnj 2010
Applying data and research to developing campus priorities tcnj 2010
 
Moms and media 2011
Moms and media 2011Moms and media 2011
Moms and media 2011
 
Ensayo_tutorial_kainos_SWF
Ensayo_tutorial_kainos_SWFEnsayo_tutorial_kainos_SWF
Ensayo_tutorial_kainos_SWF
 
apa
apaapa
apa
 
Q4 07
Q4 07Q4 07
Q4 07
 
Eb86 b03f 666d-4a8d-90fda1142cd29dae
Eb86 b03f 666d-4a8d-90fda1142cd29daeEb86 b03f 666d-4a8d-90fda1142cd29dae
Eb86 b03f 666d-4a8d-90fda1142cd29dae
 
Kgigroep luchlezing rochdale 2 d
Kgigroep luchlezing rochdale 2 dKgigroep luchlezing rochdale 2 d
Kgigroep luchlezing rochdale 2 d
 
Business Analyst Training
Business Analyst TrainingBusiness Analyst Training
Business Analyst Training
 
Multi sector CSRpartnerships: Natural partnerships-unnatural partners
Multi sector CSRpartnerships:  Natural partnerships-unnatural partnersMulti sector CSRpartnerships:  Natural partnerships-unnatural partners
Multi sector CSRpartnerships: Natural partnerships-unnatural partners
 
Week Aef4 11
Week Aef4 11Week Aef4 11
Week Aef4 11
 
アジアにおける広帯域ネットワークサービス需要の活況
アジアにおける広帯域ネットワークサービス需要の活況アジアにおける広帯域ネットワークサービス需要の活況
アジアにおける広帯域ネットワークサービス需要の活況
 
Дмитрий Волох_фулфилмент_Owox_2014
Дмитрий Волох_фулфилмент_Owox_2014Дмитрий Волох_фулфилмент_Owox_2014
Дмитрий Волох_фулфилмент_Owox_2014
 
Profiling with Xhprof
Profiling with XhprofProfiling with Xhprof
Profiling with Xhprof
 
Light painting presentation
Light painting presentationLight painting presentation
Light painting presentation
 
Infographic - Cloud Monitoring Basics Cheat Sheet
Infographic - Cloud Monitoring Basics Cheat SheetInfographic - Cloud Monitoring Basics Cheat Sheet
Infographic - Cloud Monitoring Basics Cheat Sheet
 
Rassegnastampa rca napoli_virtuosa
Rassegnastampa rca napoli_virtuosaRassegnastampa rca napoli_virtuosa
Rassegnastampa rca napoli_virtuosa
 
Kudavi 1.25.2016
Kudavi 1.25.2016Kudavi 1.25.2016
Kudavi 1.25.2016
 
ใบความรู้ที่ 4
ใบความรู้ที่ 4ใบความรู้ที่ 4
ใบความรู้ที่ 4
 

Similar to Распространенные ошибки применения баз данных

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

Similar to Распространенные ошибки применения баз данных (20)

Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Как разраба
Как разрабаКак разраба
Как разраба
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.com
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
 

More from Sergey Xek

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте Sergey Xek
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической командыSergey Xek
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейкахSergey Xek
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Sergey Xek
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьSergey Xek
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL Sergey Xek
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosqlSergey Xek
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныSergey Xek
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Sergey Xek
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 

More from Sergey Xek (15)

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической команды
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейках
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosql
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 

Распространенные ошибки применения баз данных

  • 1. Распространенные  ошибки   применения  баз  данных Аверин  Сергей
  • 2. Badoo  —  это: • Социальная  сеть  для  знакомств  с  новыми  людьми • В  Top-­‐200  Alexa  c  2007  года • 140+  миллионов  зарегистрированных  пользователей • 150+  тысяч  новых  пользователей  в  день • 3+  миллиона  фотографий  загружаются  ежедневно • 2+  тысячи  серверов • 30+  тысяч  запросов  в  секунду  к  бекендам • MySQL,  PHP,  C(++),  Linux,  nginx,  PHP-­‐fpm,  memcache
  • 5. Масштабирование • Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому   масштабированию • Тратим  большие  ресурсы  без  быстрой  отдачи   • Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта   или  проблемы  еще  непонятны
  • 6. Масштабирование • Стартап  тратит  кучу  сил  и  времени  на  «готовность»  к  highload,  большому   масштабированию • Тратим  большие  ресурсы  без  быстрой  отдачи   • Сложные  вопросы  не  рассматриваются  по  причине  того,  что  мало  опыта   или  проблемы  еще  непонятны На  самом  деле,  это  предполагет,  что  ваши  бизнес-­‐метрики   тоже  вырастут  в  десятки  и  сотни  раз,  а  архитектура   сохранится
  • 10. Масштабирование • «Серебряной  пули»  масштабирования  нет • Проблемы  будут  уникальными  для  вашего  проекта • Понадобится  творческое  решение • И  многое  придется  переделывать
  • 11. Масштабирование • Для  стартапа  главными  ценностями  являются  быстрый  старт  и  дешевизна   изменений • Начните  с  простых,  быстрых  и  несложных  решений  «по  рецепту» • Клиенты  →  опыт  →  понимание,  какая  архитектура  нужна К.  О.  предупреждает:  истиной  для  100%  случаев  не  является
  • 13. Отказоустойчивость • При  проектировании  архитектуры  проблемы  нижних  уровней  во  внимание   не  принимаются • Железо,  человеческий  фактор,  внешние  риски  и  т.  д. • Взаимосвязанность  сбоев • В  рамках  одного  сервера  на  практике  не  бывает
  • 14. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Выделенные  БД-­‐серверы • проверенного  вендора • резервирование  по  питанию • RAID  1+0
  • 15. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Софт • фаервол • Percona  Server • разные  права  доступа • chroot-­‐окружение
  • 16. Отказоустойчивость Как  это  сделано  в  Баду,  на  примере  пользовательских  данных: Архитектура • запись  в  транзакции,  на  один  сервер • синхронизация  с  другим  ДЦ  через  общую  очередь
  • 17. 3.  БД  c  запасом  на  вырост
  • 18. БД  c  запасом  на  вырост • Выбирается  БД  без  большого  запаса  фич,  которые  могут  понадобиться  в   будущем • Ни  один  стартап  не  становился  огромным  в  один  день • Узкоспециализированные  БД  →  теряется  гибкость • NoSQL  →  нет  возможности  делать  сложные  вещи  худо-­‐бедно,  но  ценой   малых  затрат  на  кодирование
  • 19. 4.  БД  —  хранилище  событий
  • 20. БД  —  хранилище  событий Использование  БД  как  хранилища  событий  чаще  всего  оправдано  только   ленью Распространенные  use  case’ы: • события,  порожденные  транзакциями • события,  которые  должны  надежно  доставляться • события,  которые  можно  потерять
  • 21. БД  —  хранилище  событий Cпециализированный  движок  —  RabbitMQ,  Kestrel,  Scribe,  и  даже  Redis: • скорость • простота • фичи • масштабируемость
  • 22. БД  —  хранилище  событий В  Баду  для  некоторых  задач  используем  Scribe: • своя  обертка  с  агрегацией  данных,  вставкой  в  БД • меньше  сетевых  соединений • передаем  данные  между  ДЦ • гибкие  настройки • при  сбоях  сохраняет  данные  локально • очень  быстрый
  • 23. Старые  песни  о  главном
  • 25. Поиск • Либо  быстро,  просто,  плохо • Либо  используем  бесплатный  движок  —   Sphinx,  Lucene/Solr/ElasˆcSearch
  • 26. Поиск 99%  случаев  —  быстро,  просто,  плохо: SELECT  `id`,  `body`  FROM  `entries`  WHERE  `body`  LIKE  '%one%'
  • 27. Поиск 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
  • 28. Поиск 99%  случаев  —  быстро,  просто,  плохо: Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. — Jamie Zawinsky
  • 29. Поиск 99%  случаев  —  быстро,  просто,  плохо: • потом  используем  MySQL  FULLTEXT  Index • для  простых  решений  прекрасно  работает  обратный  индекс • Но  с  полноценным  поиском  по  тексту  проблема  в  том,  что  просто   плохо  ищет  =) • а  также:  мало  фич,  медленно,  хуже  масштабируется
  • 30. Поиск 99%  случаев  —  быстро,  просто,  плохо: • а  для  каких-­‐то  задач  просто  неприменимо Тест  Percona:  индекс  по  всем  статьям  Википедии. 2,5  млн  записей,  15  Гб  текста  на  одном  сервере • Sphinx:  20  минут • MySQL:  админ  уснул  через  6  часов,  так  и  не  дождавшись h”p://www.percona.com/files//presentaˆons/opensql2008_sphinx.pdf
  • 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.’
  • 36. Сильная  consistency Чтобы  не  получилось  так: +  добавляем  slave  —  репликация
  • 37. Сильная  consistency Чтобы  не  получилось  так: +  добавляем  slave  —  репликация +  мемкеш
  • 38. Сильная  consistency Чтобы  не  получилось  так: +  добавляем  slave  —  репликация +  мемкеш +  добавляем  еще  slave’ов  —  репликация  репликации
  • 39. Сильная  consistency Чтобы  не  получилось  так: +  добавляем  slave  —  репликация +  мемкеш +  добавляем  еще  slave’ов  —  репликация  репликации +  шардинг
  • 40. Сильная  consistency Чтобы  не  получилось  так: +  добавляем  slave  —  репликация +  мемкеш +  добавляем  еще  slave’ов  —  репликация  репликации +  шардинг +  один  столбец  на  таблицу,  храним  в  нем  сериализованный  объект
  • 41. Сильная  consistency Чтобы  не  получилось  так: SQL  DB  =  ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’
  • 42. Сильная  consistency Чтобы  не  получилось  так: SQL  DB  =  ‘A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables.’ Много  данных                  кривые  руки
  • 43. Сильная  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
  • 44. 7.  Используйте  хорошо   изученные  инструменты
  • 45. Используйте  хорошо  изученные   инструменты • Неизвестность  →  опасность • Выше  скорость  разработки • Не  поддавайтесь  просто  так  на  моду  NoSQL
  • 46. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: • markeˆng  hype • мало  знаний  в  области  SQL:  ACID,  CAP,  3  НФ,  транзакции • пытается  сделать  вид,  что  БД-­‐специалист  не  нужен
  • 47. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: Идеальная  БД  для  программиста • хранит  объекты  классов  приложения  (сериализация) • работает  быстро  (чтобы  можно  было  похвастаться  друзьям) • обо  всем  остальном  заботится  сама
  • 48. Используйте  хорошо  изученные   инструменты “Психологическая”  популярность  NoSQL: Выбор  БД • техн.  менеджмент  спускает  вопрос  на  тормозах,  хотя  это  его  задача • БД  выбирает  тот  самый  программист • Выбираете  NoSQL  —  понимайте,  почему  вы  это  делаете К.  О.  предупреждает:  так  бывает  далеко  не  всегда
  • 49. Используйте  хорошо  изученные   инструменты NoSQL: −  запись  в  один  поток −  memory-­‐mapped  files,  IO  scheduling  не  для  БД −  один  индекс  на  запрос −  не  очень  гибкий  шардинг −  производительность  тюнится  только  на  уровне  ОС −  нет  атомарности  на  уровне  одного  запроса
  • 50. Используйте  хорошо  изученные   инструменты NoSQL: −  иногда  скудный  мониторинг,  статистика −  зачастую,  приходится  писать  кучу  довольно  скучного  кода  на   уровне  приложения +  чаще  всего  быстрее  SQL-­‐баз +  проще  развертывать,  особенно  шардинг +  нет  схемы,  ALTER  TABLE  забыто,  как  страшный  сон
  • 51. Используйте  хорошо  изученные   инструменты SQL: −  медленнее −  сложнее (−)  много  каверзных  настроек −  в  редких  случаях  непредсказуемо  работает (−)  позволяет  писать  медленные/плохие  запросы +  более  популярно,  язык  у  всех  на  80%  совпадает  
  • 52. Используйте  хорошо  изученные   инструменты SQL: +  хорошо  изучено,  стабильно +  оптимизировано  хранение  данных +  куча  рычагов  оптимизации +  constraint'ы,  триггеры,  хранимые  процедуры +  ACID +  B-­‐Tree,  R-­‐Tree,  GIN,  GIST,  hash-­‐индексы
  • 53. Используйте  хорошо  изученные   инструменты SQL: (+)  join'ы,  которые  зло,  но  иногда  выручают +  очень  навороченный  оптимизатор  запросов +  параллельное  исполнение  (под)запросов +  многоуровневое  кеширование +  статистика,  мониторинг +  сложные  запросы  позволяют  меньше  писать  код  приложения
  • 54. EVERYBODY  LIES Выводов  нет,  думайте  своей  головой!
  • 55. Спасибо! Вопросы? twitter.com/ryba_xek s@averin.ru averin.ru/slides/