SlideShare a Scribd company logo
1 of 55
Download to read offline
Не все базы данных
одинаково полезны


Аверин Сергей,
Badoo
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, Solr, Lucene/ElasticSearch
Поиск
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[[:>:]]'

http://www.slideshare.net/billkarwin/practical-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 часов, так и не
    дождавшись

http://www.percona.com/files//presentations/
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, лучше и не скажешь

http://www.youtube.com/watch?v=zAbFRiyT3LU
7. Используйте
   хорошо изученные
   инструменты
Используйте хорошо
изученные инструменты
• Неизвестность → опасность
• Выше скорость разработки
• Не поддавайтесь просто так на моду NoSQL
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:
  • marketing hype
  • мало знаний в области SQL: ACID, CAP, 3 НФ,
    транзакции
  • пытается сделать вид, что БД-специалист не
    нужен
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:

Идеальная БД для программиста
  • хранит объекты классов приложения
    (сериализация)
  • работает быстро (чтобы можно было
    похвастаться друзьям)
  • обо всем остальном заботится сама
Используйте хорошо
изученные инструменты
“Психологическая” популярность NoSQL:

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




Выводов нет, думайте своей головой!
Вопросы?


We’re  hiring!   Аверин Сергей,
                 Badoo
                 twitter.com/ryba_xek
                 s@averin.ru
                 averin.ru/slides/

More Related Content

What's hot

Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Ontico
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Badoo Development
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...Ontico
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Ontico
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ontico
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?Daniel Podolsky
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 

What's hot (17)

Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
ChatOps на практике. Организация работы команды сопровождения / Евгений Потап...
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
 
NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?NoSQL — неспроста ли это "ЖЖЖ"?
NoSQL — неспроста ли это "ЖЖЖ"?
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 

Viewers also liked

Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukena
Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukenaSormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukena
Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukenaKouluterveyskysely
 
Assignment 3 - Certification in Dispute Management
Assignment 3 - Certification in Dispute ManagementAssignment 3 - Certification in Dispute Management
Assignment 3 - Certification in Dispute ManagementJyotpreet Kaur
 
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part iv
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part ivBooks of jeu and the untitled text in the bruce codex schmidt mac dermot part iv
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part ivMarcela D'Amico
 
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
 
Traditional may day celebrations
Traditional may day celebrationsTraditional may day celebrations
Traditional may day celebrationsbalada65
 
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...Gomez García
 
Convince your CEO to go digital
Convince your CEO to go digitalConvince your CEO to go digital
Convince your CEO to go digitalCraig Skipsey
 
Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014futureagricultures
 
Teachers training
Teachers trainingTeachers training
Teachers trainingDebjani Roy
 
The 12 types of advertising 5&6
The 12 types of advertising 5&6The 12 types of advertising 5&6
The 12 types of advertising 5&6Les Davy
 
Логистика на аутсорс: гибкость в период нестабильности IForum2014
Логистика на аутсорс: гибкость в период нестабильности IForum2014Логистика на аутсорс: гибкость в период нестабильности IForum2014
Логистика на аутсорс: гибкость в период нестабильности IForum2014TOCHKA
 
10 species of dinosaur from Romania
10 species of dinosaur from Romania10 species of dinosaur from Romania
10 species of dinosaur from Romaniabalada65
 
Invisible Artists - 2011
Invisible Artists - 2011Invisible Artists - 2011
Invisible Artists - 2011IArtists
 
20 Famous Sopts
20 Famous Sopts20 Famous Sopts
20 Famous Soptshome based
 

Viewers also liked (20)

SystemsOverview
SystemsOverviewSystemsOverview
SystemsOverview
 
Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukena
Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukenaSormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukena
Sormunen: Sähköinen hyvinvointikertomus kunnan strategisen johtamisen tukena
 
03 02 wh_chris_walker
03 02 wh_chris_walker03 02 wh_chris_walker
03 02 wh_chris_walker
 
Assignment 3 - Certification in Dispute Management
Assignment 3 - Certification in Dispute ManagementAssignment 3 - Certification in Dispute Management
Assignment 3 - Certification in Dispute Management
 
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part iv
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part ivBooks of jeu and the untitled text in the bruce codex schmidt mac dermot part iv
Books of jeu and the untitled text in the bruce codex schmidt mac dermot part iv
 
Flash2HTML Convertions #fbm2012
Flash2HTML Convertions #fbm2012Flash2HTML Convertions #fbm2012
Flash2HTML Convertions #fbm2012
 
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
 
Traditional may day celebrations
Traditional may day celebrationsTraditional may day celebrations
Traditional may day celebrations
 
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...
Extensive sampling of basidiomycete genomes demonstrates inadequacy of the wh...
 
Convince your CEO to go digital
Convince your CEO to go digitalConvince your CEO to go digital
Convince your CEO to go digital
 
Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014Researchers - recommendations from AIGLIA2014
Researchers - recommendations from AIGLIA2014
 
Уригард
УригардУригард
Уригард
 
Teachers training
Teachers trainingTeachers training
Teachers training
 
Dawdling
DawdlingDawdling
Dawdling
 
The 12 types of advertising 5&6
The 12 types of advertising 5&6The 12 types of advertising 5&6
The 12 types of advertising 5&6
 
Логистика на аутсорс: гибкость в период нестабильности IForum2014
Логистика на аутсорс: гибкость в период нестабильности IForum2014Логистика на аутсорс: гибкость в период нестабильности IForum2014
Логистика на аутсорс: гибкость в период нестабильности IForum2014
 
10 species of dinosaur from Romania
10 species of dinosaur from Romania10 species of dinosaur from Romania
10 species of dinosaur from Romania
 
Invisible Artists - 2011
Invisible Artists - 2011Invisible Artists - 2011
Invisible Artists - 2011
 
Клубная встреча 13112016
Клубная встреча 13112016Клубная встреча 13112016
Клубная встреча 13112016
 
20 Famous Sopts
20 Famous Sopts20 Famous Sopts
20 Famous Sopts
 

Similar to Не все базы данных одинаково полезны

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Пётр Зайцев, 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
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)Roman Dvornov
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
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
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратораNikolay Sivko
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comOntico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 

Similar to Не все базы данных одинаково полезны (20)

Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
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)
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратора
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Александр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.comАлександр Соловьёв, Griddynamics.com
Александр Соловьёв, Griddynamics.com
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Как разраба
Как разрабаКак разраба
Как разраба
 

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
 
То, что вы хотели знать о 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
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey 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. Не все базы данных одинаково полезны Аверин Сергей, Badoo
  • 2. Badoo — это: • Социальная сеть для знакомств с новыми людьми • В Top-200 Alexa c 2007 года • 140+ миллионов зарегистрированных пользователей • 150+ тысяч новых пользователей в день • 3+ миллиона фотографий загружаются ежедневно • 2+ тысячи серверов • 30+ тысяч запросов в секунду к бекендам • MySQL, PHP, C(++), Linux, nginx, PHP-fpm, memcache
  • 5. Масштабирование • Стартап тратит кучу сил и времени на «готовность» к highload, большому масштабированию • Тратим большие ресурсы без быстрой отдачи • Сложные вопросы не рассматриваются по причине того, что мало опыта или проблемы еще непонятны
  • 6. Масштабирование • Стартап тратит кучу сил и времени на «готовность» к highload, большому масштабированию • Тратим большие ресурсы без быстрой отдачи • Сложные вопросы не рассматриваются по причине того, что мало опыта или проблемы еще непонятны На самом деле, это предполагет, что ваши бизнес- метрики тоже вырастут в десятки и сотни раз, а архитектура сохранится
  • 7. Масштабирование Что имеем
  • 8. Масштабирование Что рассчитываем получить
  • 9. Масштабирование Способ масштабирования
  • 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, Solr, Lucene/ElasticSearch
  • 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[[:>:]]' http://www.slideshare.net/billkarwin/practical-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 часов, так и не дождавшись http://www.percona.com/files//presentations/ 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, лучше и не скажешь http://www.youtube.com/watch?v=zAbFRiyT3LU
  • 44. 7. Используйте хорошо изученные инструменты
  • 45. Используйте хорошо изученные инструменты • Неизвестность → опасность • Выше скорость разработки • Не поддавайтесь просто так на моду NoSQL
  • 46. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: • marketing hype • мало знаний в области SQL: ACID, CAP, 3 НФ, транзакции • пытается сделать вид, что БД-специалист не нужен
  • 47. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: Идеальная БД для программиста • хранит объекты классов приложения (сериализация) • работает быстро (чтобы можно было похвастаться друзьям) • обо всем остальном заботится сама
  • 48. Используйте хорошо изученные инструменты “Психологическая” популярность NoSQL: Выбор БД • техн. менеджмент спускает вопрос на тормозах, хотя это его задача • БД выбирает тот самый программист • Выбираете NoSQL — понимайте, почему вы это делаете К.  О.  предупреждает:  так  бывает  далеко  не  всегда
  • 49. Используйте хорошо изученные инструменты NoSQL: − запись в один поток − memory-mapped files, IO scheduling не для БД − один индекс на запрос − не очень гибкий шардинг − производительность тюнится только на уровне ОС − нет атомарности на уровне одного запроса − иногда скудный мониторинг, статистика
  • 50. Используйте хорошо изученные инструменты NoSQL: − зачастую, приходится писать кучу довольно скучного кода на уровне приложения + чаще всего быстрее SQL-баз + проще развертывать, особенно шардинг + нет схемы, ALTER TABLE забыто, как страшный сон
  • 51. Используйте хорошо изученные инструменты SQL: − медленнее − сложнее (−) много каверзных настроек − в редких случаях непредсказуемо работает (−) позволяет писать медленные/плохие запросы
  • 52. Используйте хорошо изученные инструменты SQL: + более популярно, язык у всех на 80% совпадает + хорошо изучено, стабильно + оптимизировано хранение данных + куча рычагов оптимизации + constraint'ы, триггеры, хранимые процедуры + ACID + B-Tree, R-Tree, GIN, GIST, hash-индексы
  • 53. Используйте хорошо изученные инструменты SQL: (+) Join'ы, которые зло, но иногда выручают + очень навороченный оптимизатор запросов + параллельное исполнение (под)запросов + многоуровневое кеширование + статистика, мониторинг + можно писать сложные запросы, не перенося логику в код приложения
  • 54. EVERYBODY LIES Выводов нет, думайте своей головой!
  • 55. Вопросы? We’re  hiring! Аверин Сергей, Badoo twitter.com/ryba_xek s@averin.ru averin.ru/slides/