SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
О Баду и о докладчике


                                         Расскажу истории из собственного
                                         опыта

                          Введение       Доклад на роль истины в последней
                                         инстанции не претендует

                                         Зато весело и задорно



                          Расчет на большие нагрузки в
                          стартапах



                          Отказоустойчивость, которая не
                          совсем



                          Выбирается БД без запаса «на
Распространенные ошибки   вырост»
применения баз данных


                          БД как хранилище/движок
                          событий



                          Поиск



                          Сильная консистентность



                          Используйте инструменты,
                          которые вы хорошо изучили


                                                Выводы

                          Заключение       Контакты (о докладчике)

                                                Про нашу open-source деятельность
Лого

                                        Концепция           Социальная сеть для знакомств с новыми людьми

                                                       на 115-м месте Alexa.com. Google
                                                       TOP 1000 — на 59-м месте

                                                       10 млн пользователей заходят на сайт в течение дня

                        Для юзеров                     140+ миллионов пользователей в 180 странах
                                        Метрики
                                                       153+ тысячи новых пользователей ежедневно
О Баду и о докладчике
                                                       3+ миллиона фото и видео загружается каждый день

                                                       200+ сотрудников, которые говорят на 39 языках

                                        Быстрорастущая компания

                                                                 30 тыс. запросов/с к PHP бекендам в пике
                                                  Метрики
                                                                 Пользователей/разработчиков > 1 000 000
                        Для разработчиков
                                                                       MySQL, PHP, C/C++, Linux, nginx,
                                                  Мы используем          PHP_FPM, memcached и много
                                                                         своего
Зачастую в стартапе изначально проектируется архитектура вокруг БД, рассчитанная на
                       огромные нагрузки, на большое масштабирование, которые потом в реальной жизни никогда не
                       понадобится

                       И на это тратятся огромные ресурсы, которые по сути не дадут результата

                             Например, часто используется такой паттерн,
                             как разбиение приложения на сервисы


                                                                    вынесение БД на отдельный сервер

                                                                    клонирование бекендов

                                                                    клонирование баз данных

                                                                    SPOF нет

                                                                    Все данные аккуратно нарезаются на
                                                                    шарды и не имеют зависимостей
                                                                    между шардами

                                                                    шарды работают магически, их
                                                                    никогда не надо будет нарезать/
                       Как, большей частью, молодая команда         сливать/переносить
                       представляет себе масштабируемость?

                                                                    Сложные вопросы не
                                                                    рассматриваются по причине того,
                                                                    что слишком рано/мало опыта/
                                                                    проблемы еще непонятны

                             Закладываются возможности быстрого и
                             большого роста кластера БД


                                                                                                                Вот, что есть (избушка)


                                                                                       История про дома
                                                                                                                Вот, что видится в грезах (empire
                                                                                                                state building)

                                                                                                                А вот, как собираемся это
                                                                                                                масштабировать (много избушек)

                                                                                                                                   вы столкнетесь с целым классом новых
                                                                                                                                   уникальных для вашего проекта
                                                                                                                                   проблем
                                                                                       поскольку «серебряной пули»
                                                                                       масштабирования нет                         которые требуют творческого
                       на самом деле, это предполагет, что ваши бизнес-метрики
                                                                                                                                   решения
                       тоже вырастут в десятки и сотни раз, а архитектура
                       сохранится
                                                                                                                                   что все равно придется многое переделывать

                                                                                                                                      но на самом деле все это вершина айсберга
                                                                                                                                      проблем под названием highload
                                                                                       само по себе ‘mongodb is web scale‘ — это
                                                                                       хорошо                                         Которые все равно надо будет
                                                                                                                                      решать

                                                                           а вы зачастую, получается, идете вопреки
                                                                           этим ценностям

                       Для стартапа главными ценностями являются
                                                                           Мешая стартапу, отъедая ресурсы
                       быстрый старт и дешевизна изменений

                                                                           Правильную архитектуру вы сможете
                                                                           сделать, когда найдете нужную
                                                                           бизнес-модель, определитесь с
                                                                           объемами рынка и т. д.

                                                                        Начните с простых решений «по
Расчет на большие                                                       рецепту», быстрых и несложных
нагрузки в стартапах
                                                                        Одна БД скорее всего вас устроит
                       Поэтому, на мой взгляд, если вы начинаете
                       делать старт-ап                                  К моменту, когда вы перестанете
                                                                        влезать в один сервер, вы будете
                                                                        гораздо четче представлять, что вам
                                                                        нужно и какие специфичные
                                                                        проблемы вас преследуют
Например, используется full ACID БД,
                                                                       включается журнал, делается
                                                                       реплика

                                                                                                                                                                      волшебный raid-5 вопрос: что
                                                                                                                  насколько отказоустойчиво железо, что в нем         происходит при отказе? можно ли
                                                                                                                  дублировано                                         дальше быстро и стабильно
                                                                                                                                                                      работать?

                                                                                                                  Прошлогодняя история: а может ли
                                                                                                                  сгореть ваш ДЦ вместе со всем
                                                                                                                  содержимым?

                                                                                                                  насколько сильное влияние на вас может
                                                                                                                  иметь human factor

                                                                                                                  насколько отказоустойчива ваша сеть. Будут
                                                                       но при этом проблемы нижних уровней во     ли у вас проблемы, если сеть ляжет или
                                                                       внимание не принимаются, а именно:         отвалится часть сети?

                      Проектируется архитектура, которая якобы
                      дает отказоустойчивость                                                                     Насколько вероятно возникновение
                                                                                                                  нескольких проблем одновременно

                                                                                                                  от каких внешних рисков еще вы зависите


                                                                                                                  Самая мешающая мне проблема: есть
                                                                                                                  ли какая-то взаимосвязанность. Что
                                                                                                                  будет, если, например, начнутся
                                                                                                                  проблемы со скоростью работы БД,
                                                                                                                  не ляжет ли все остальное?

                                                                       Не все проблемы можно
                                                                       предотвратить полностью

                                                                                                                  в первую очередь надо работать над железом           ломайте сами, смотрите, что
                                                                                                                  (серверами, сетью)                                   получается
                                                                       Но парой вещей нужно поработать
                                                                                                                  и потом конечно же над архитектурой           В рамках одного сервера на практике
                                                                                                                  приложения                                    отказоустойчивости не бывает


                           Следующая известная проблема, связанная с
                           отказоустойчивостью


                                                       для самых важных данных              юзерских данных

                                                       Специфика: данных очень много

                                                       Никакой магии

                                                                                      проверенного вендора с мировым
                                                                                      именем

                                                       Выделенные сервера
                                                                                      резервирование по питанию

                                                                                      raid 1+0

                                                                                                     минимум пакетов

                                                                                                     фаерволл

Отказоустойчивость,                                                                                  коммерчески поддерживаемая и
которая не совсем                                                                                    протестированная сборка mySQL от
                                                                                                     Percona
                                                       Самосборный линукс на базе SLES
                                                                                                     несколько разных пользователей в
                                                                                                     базе, имеющих разные права доступа
                      Как это сделано в Баду

                                                                                                     chrooted environment

                                                                                                         Но очень быстро попадают в общую
                                                                                                         очередь
                                                       Новые данные изначально пишутся на
                                                       один сервер в транзакции
                                                                                                         и синхронизируется через нее с
                                                                                                         другим ДЦ
На начальном этапе у вас всегда есть
                                                                                                        итеративный процесс поиска
                                                                                                        решения/бизнес-модели/рынка

                                                                                                        Всегда есть ситуация
                                                                                                        неопределенности и с техническими
                                                                                                        средствами, и отсутствие опыта
                                                                                                        команды, да и сама задача ясна лишь
                                                                    Ни один стартап не становился       на 10%
                                                                    огромным в один день
                                                                                                        Стартап должен решать проблемы              Если вы хотите решить техническую
                                                                                                        рынка, а не технические или свои            проблему, соберите группу и создайте
                                                                                                        собственные проблемы и задачи               проект с открытым кодом

                                                                                                        Поэтому всегда в таких условиях                А больших нагрузок не бывает
                           В стартапе при выборе основной БД для                                        неопределенности бывают изменения
Выбирается БД без запаса   проекта выбирается БД, которая не дает                                       и «повороты курса»
«на вырост»                большого запаса фич которые могут
                           понадобиться в будущем
                                                                                                                                             теряется гибкость
                                                                                                            Не ройте яму, используя
                                                                                                            узкоспециализированные БД        то есть появляется дороговизна и сложность
                                                                                                                                             изменения


                                                                                                                                 Нет многих полезных фич,
                                                                                                                                 позволяющие делать сложные вещи
                                                                                                                                 худо-бедно, но ценой малых затрат
                                                                    Подложите себе соломки на будущее                            на кодирование

                                                                                                            Проблемы NoSQL              нет рычагов оптимизации


                                                                                                                                        нет какого-то ручного контроля шардинга


                                                                                                                                        скудный или отсутствующий мониторинг
                                                                                                                                        (основа основ оптимизации)
события, порожденные транзакциями — 100%
                                                                                                     consistency

                                                                                                     события, которые должны надежно
                                                                       Существует на мой взгляд 3
                                                                                                     доставляться - может прийти 2 раза, порядок
                                                                       распростарненных use case'а
                                                                                                     не важен, главное не потерять


                                                                                                     события, можно потерять - вообще ничего не
                                                                                                     важно

                          Использование БД как хранилища/движка
                          обработки событий чаще всего не оправдано                                  в 2х сценариях из трех       кроме первого


                                                                                                                                        скорости

                                                                       Вполне можно использовать                                        простоте и понятности
                                                                       специализированный движок
                                                                                                     Что обычно дает бенефиты в
                                                                                                                                        масштабируемости

                                                                                                                                        доп. фичах, которые не надо реализовывать
                                                                                                                                        ручками и они могут понадобиться в будущем
БД как хранилище/движок
событий                                                                 Своя обертка с агрегацией данных,
                                                                        вставкой в БД


                                                                        Sсribe-демон можно поставить на
                                                                        каждую машину — меньше
                                                                        соединений по сети

                                                                        Отлично настраивается, как хранить
                          Для некоторых задач мы используем систему,
                          построенную вокруг Scribe
                                                                        пришедшие сообщения


                                                                        При сбоях в точке сборки Scribe
                                                                        умеет сохранять пришедшие данные
                                                                        локально, пока не восстановится
                                                                        точка сборки

                                                                        Очень быстро, в отличии от БД,
                                                                        потому что все основано на push а
                                                                        не poll
либо быстро, просто, плохо

                                     либо используя сложный фреймворк
                Поиск в базе
                                     для организации поиска в базе

                                     либо делаем сами такой фреймворк

                                                             Отсылаю к http://www.percona.com/
                                                             files//presentations/
                                                             opensql2008_sphinx.pdf

                                                                                                         SELECT id, body FROM entries WHERE
                                                             начинается все как комбинация из:
                                                                                                         body LIKE '%one%'

                                                                                                            SELECT id, body FROM entries WHERE
                                                                                                            body RLIKE '[[:<:]]one[[:>:]]'
                                                             Потом быстро надоедает, и делается
                                                                                                            Some people, when confronted with a
                                                             так:
                                                                                                            problem, think “I know, I’ll use regular
                                                                                                            expressions.” Now they have two problems.
                                                                                                            — Jamie Zawinsky

                                                             Потом используем встроенный в
                                                             MySQL FULLTEXT Index
                Быстро, просто, плохо — 99%
                                                                                                           В принципе, прекрасно работает
                                                                                                           поиск в базе через LIKE или
                                                                                                           обратный индекс

                                                                                                           Но с полноценным поиском по тексту               мало фич
                                                                                                           проблема даже не в скорости
                                                                                                           работы, скудности фич и плохом                   медленно
                                                                                                           масштабировании — просто плохо
                                                             К чему это я — для простых                    ищет =)                                          хуже масштабируется
Поиск   Поиск                                                решений, типа поиска по тегам или
                                                             городов/улиц по первым буквам                                                                                                      Sphinx: 20 минут
                                                                                                                                                  Percona test: 2,5 млн записей, 15 Гб
                                                                                                                                                  текста на одном сервере                       MySQL: админ уснул через 6 часов,
                                                                                                                                                                                                так и не дождавшись
                                                                                                           А для каких-то задач просто
                                                                                                           неприменимо
                                                                                                                                                  По сравнению скорости работы
                                                                                                                                                  отсылаю к http://www.slideshare.net/
                                                                                                                                                  billkarwin/practical-full-text-search-with-
                                                                                                                                                  my-sql

                                                               готовых, в open-source и извеcтных я
                                                               не знаю

                                                               написать свой, чтобы искал хорошо
                Что касается больших и сложных
                                                               — из области rocket science
                фреймворков

                                                               В данном случае БД отходит на
                                                               второй план и ее использование
                                                               скорее всего не оправдано (выглядит
                                                               велосипедом)


                Поиск в тексте — сильно специфичная задача
                                                                   к БД относящаяся постольку-
                                                                   поскольку

                                                                   Это и дешевле в разработке

                                                                   быстрее работает

                                                                   больше фич
                Используйте специализированные поисковые
                БД/движки                                          отлично масштабируется

                                                                   а главное — лучше ищет

                                                                        Часто, наоборот, поисковый движок можно
                                                                        использовать как БД для своих задач
Что очень хорошо и правильно при обучении основам
                                                                       БД


                                                                                                                     Это очень хорошо, но можно и
                                                                                                                     надорваться
                                                                       То есть повсеместный ACID,
                                                                       транзакции, «не потерять каждую
                                                                       кроху данных»                                 особенно, когда данные в один
                                                                                                                     сервер не помещаются и надо что-то
                                                                                                                     придумывать

                                                                                                                                                                                         хотя на самом деле это постоянное
                                                                                                                                     Существует такой зачастую неправильный              обновление одних и тех же значений
                                                                                                                                     подход сохранять большой поток однородных
                                                                                                                                     данных в базу                                       или сами данные нам не нужны, а нужно что-   типа подсчета статистики
                                                                                                                                                                                         то от них производное

                                                                       eventual consistency рулит     выборочная запись/аггрегация   Для этих целей при большом кол-ве записей/
                                                                                                                                     модификаций чаще всего eventual consistency
                                                                                                                                     нас устраивает

                          Зачастую в вебе превалирует «классический»
Сильная консистентность   подход иметь сильную consistency
                                                                                                                                     Поэтому не нужно все потоком писать в базу,        Не надо почем зря грузить базу
                                                                                                                                     группировка нескольких записей в одну или
                                                                                                                                     выборочная пикировка рулит


                                                                                                                    Но тут важно знать меру, и что мы
                                                                                                                    теряем, а что приобретаем

                                                                                                                                                               из SQL DB = "A consistent transactional
                                                                                                                                                               datastore with schema guarantees that uses
                                                                                                                                                               relational algebra to access normalized
                                                                                                                                                               tables."

                                                                       Поэтому денормализация и разнесение                                                     В "A consistent transactional datastore with
                                                                       данных — зачастую это хорошее и
                                                                       правильное дело, которое зачастую дает
                                                                                                                                                               schema guarantees that uses relational algebra
                                                                                                                    Иначе, цитируя лучший доклад по            to access normalized tables." = datastore with
                                                                       большой прирост производительности
                                                                                                                    MySQL Марка Этвуда, мы рискуем             access to data, лучше и не скажешь
                                                                                                                    докатиться
                                                                                                                                                               http://www.youtube.com/watch?
                                                                                                                                                               v=zAbFRiyT3LU

                                                                                                                                                               http://www.slideshare.net/
                                                                                                                                                               fallenpegasus/your-guide-to-mysql-no-
                                                                                                                                                               nosql-stuff
неизвестное таит в себе опасности


                                                                Знакомая БД — скорость разработки выше

                                                                                                                                                             И обусловлена она тем, что


                                                                                                                                                             Возьмем «программиста-серднячка»

                                                                                                                                                                                            не знает SQL БД хорошо


                                                                                                                                                                                            где-то что-то слышал про крутость NoSQL
                                                                                                                                                                                            (marketing hype)

                                                                                                                                                                                            не понимает ACID, CAP, 3НФ, транзакции

                                                                                                                                                                                                                                         чтобы хранилище хранило объекты близко к
                                                                                                                                                             Программист-середнячок                                                      классам, с которыми работаем в приложении,
                                                                                                                                                                                                                                         в идеале прям загружало, искало и сохраняло
                                                                                                                                                                                                                                         эти классы (что-то типа сериализации)


                                                                                                                                                                                            Идеальная БД — это только 3 требования:      Чтобы работало быстро (в идеале очень
                                                                                                                                                                                                                                         быстро, чтобы можно было похвастаться
                                                                                                                                                                                                                                         перед друзьями)
                                                                                                             На мой взгляд, существует “психологическая”
                                                                Не поддавайтесь просто так на моду NoSQL
                                                                                                             популярность NoSQL
                                                                                                                                                                                                                                         Чтобы все остальное делало само, без немора
                                                                                                                                                                                                                                         и быстро

                                                                                                                                                                                                          Взрослые БД предполагают БД-специалиста
                                                                                                                                                                                                          помимо менеджера и архитектора
                                                                                                                                                                                                          +разработчика
                                                                                                                                                             А DB-специальиста в команде просто нет

                                                                                                                                                                                                          NoSQL же пытается сделать вид, что БД-
                                                                                                                                                                                                          специалист не нужен

                                                                                                                                                             Менеджмент спускает вопрос на тормозах и
                                                                                                                                                             «авось, как-то само решится»

                                                                                                                                                             В итоге БД выбирает непосредственно
                                                                                                                                                             программист со всеми проблемами,
                                                                                                                                                             описанными выше

                                                                                                                                                             Выбираете NoSQL — понимайте, почему вы
                                                                                                                                                             это делаете


                                                                                                                                                                                      Запросы сразу на 2-х разных языках
                                                                                                                                                                                      программирования

                                                                                                                                                                               Ух, ты! Какие-то важные части БД
                                                                                                                                                                               исполняет в один поток. Ну надо
                                                                                                                                                                               же...

                                                                                                                                                                                      Какая-то часть БД построена на
                                                                                                                                                                                      монструозно-большом языке
                                                                                                                                                                                      программирования общего
                                                                                                                                                                                      назначения со своими проблемами

                                                                                                                                                                               БД полагается на memory-map
                                                                                                                                                                               функционал системы, который на
                                                                                                                                                                               базы данных не рассчитан

                                                                                                                                                                               IO ОС в отличие от IO БД не
                                                                                                                                                                               способно оптимизировать с учетом
                                                                                                                                                                               специфики работы и используя
                                                                                                                                                                               статистику по данным

                                                                                                                                                                                      Глобальный write lock на ВСЕ базы
                                                                                                                                                                                      разом

                                                                                                                                                                               Только один индекс для запроса

                                                                                                                                                                                      Жесткая wite-optimized FIFO-очередь

                                                                                                                                                               NoSQL                  Шардинг ниче не знает про data
                                                                                                                                                                                      center awareness

                                                                                                                                                                               только автошардинг

Используйте                                                                                                                                                                           По дефолту журнал не включен,
инструменты, которые вы   Используйте инструменты, которые вы                                                                                                                         сохранности данных нет
                          хорошо изучили
хорошо изучили
                                                                                                                                                                                                                                                   скудный или отсутствующий
                                                                                                                                                                                      Вообще, все эти дядьки DBA и                                 мониторинг (вообще основа основ
                                                                                                                                                                                      Percona непонятно откуда взялись и                           оптимизации)
                                                                                                                                                                                      просто сосут деньги, обманывая всех
                                                                                                                                                                                      нас. Они нам не нужны. У нас все
                                                                                                                                                                                                                                           настраивать производительность
                                                                                                                                                                                      работает. (До тех пор, пока все не
                                                                                                                                                                                                                                           можно только на уровне ОС
                                                                                                                                                                                      стало совсем плохо)
                                                                                                                                                                                                                                           (отсутствие рычагов оптимизации)

                                                                                                                                                                               атомарности нет даже на уровне
                                                                                                                                                                               одного запроса

                                                                                                                                                                               Зачастую быстрее MySQL

                                                                                                                                                                               Выше скорость развертывания              Примитивный шардинг быстрее
                                                                                                                                                                                                                        развертывается и проще

                                                                                                                                                                               ALTER TABLE забыто, как страшный
                                                                                                                                                                               сон
                                                                                                               На мой взгляд, если сравнить NoSQL vs. SQL,
                                                                изучите хорошо БД, с которой вы планируете
                                                                                                               стоит выделить следующие характерные
                                                                работать                                                                                                       Зачастую, приходится писать кучу
                                                                                                               достоинства и недостатки
                                                                                                                                                                               довольно скучного кода на уровне
                                                                                                                                                                               приложения

                                                                                                                                                                                  отвязывает способ хранения (БД,
                                                                                                                                                                                  движок внутри БД) от приложения и
                                                                                                                                                                                  от предметной области

                                                                                                                                                                                  Более понятный синтаксис


                                                                                                                                                                           Оптимизированное хранение

                                                                                                                                                                           Наличие настроек, рычагов
                                                                                                                                                                           оптимизации

                                                                                                                                                                                  Несколько вариантов хранения и
                                                                                                                                                                                  обработки данных в одной БД

                                                                                                                                                                           Constraint'ы, триггеры, хранимые
                                                                                                                                                                           процедуры

                                                                                                                                                                           несколько индексов на таблицу

                                                                                                                                                                           ACID внезапно

                                                                                                                                                                           B-Tree, R-Tree, GIN, GIST, hash-
                                                                                                                                                                           индексы

                                                                                                                                                                           Join'ы, которые зло, но иногда
                                                                                                                                                               SQL         спасают

                                                                                                                                                                                  Декомпозиция запросов


                                                                                                                                                                           Параллельное исполнение

                                                                                                                                                                           Очень навороченный оптимизатор
                                                                                                                                                                           запросов

                                                                                                                                                                           Многоуровневое кеширование

                                                                                                                                                                           Статистика, мониторинг

                                                                                                                                                                                  Эффективное управление ресурсами
                                                                                                                                                                                  с учетом специфики данных

                                                                                                                                                                                  Гораздо более понятная
                                                                                                                                                                                  масштабируемость

                                                                                                                                                                                  полноценные запросы с
                                                                                                                                                                                  вложеностью, переменными итд

                                                                                                                                                                           Скорость разработки

                                                                                                                                                                           выбор, писать сложные или простые
                                                                                                                                                                           запросы (перенося часть логики в
                                                                                                                                                                           код приложения)

Contenu connexe

En vedette

Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...
Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...
Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...Christiaan Roca Catala
 
www.tex4future.net: el sector tèxtil 2.0 - Iuris.doc
www.tex4future.net: el sector tèxtil 2.0 - Iuris.docwww.tex4future.net: el sector tèxtil 2.0 - Iuris.doc
www.tex4future.net: el sector tèxtil 2.0 - Iuris.doctex4future
 
Slides from SoMeT Presentation-Shoestring Video
Slides from SoMeT Presentation-Shoestring VideoSlides from SoMeT Presentation-Shoestring Video
Slides from SoMeT Presentation-Shoestring VideoBrian Matson
 
Future grps0-1226583494014006-9
Future grps0-1226583494014006-9Future grps0-1226583494014006-9
Future grps0-1226583494014006-9Neha Suman
 
5 Steps to Knock-out Workshops
5 Steps to Knock-out Workshops5 Steps to Knock-out Workshops
5 Steps to Knock-out WorkshopsCraig Skipsey
 
облачные сервисы учителю математики
облачные сервисы учителю математикиоблачные сервисы учителю математики
облачные сервисы учителю математикиFordzon Putilovez
 
Cara Set Up FTP server di ubuntu
Cara Set Up FTP server di ubuntuCara Set Up FTP server di ubuntu
Cara Set Up FTP server di ubuntuRobby Firmansyah
 
Frl annual report_2011_12
Frl annual report_2011_12Frl annual report_2011_12
Frl annual report_2011_12Neha Suman
 
絕了,能把漢字寫成這樣
絕了,能把漢字寫成這樣絕了,能把漢字寫成這樣
絕了,能把漢字寫成這樣Danny Lin
 
IM Club: Do You Trust Social Media Automation?
IM Club: Do You Trust Social Media Automation?IM Club: Do You Trust Social Media Automation?
IM Club: Do You Trust Social Media Automation?Rather Inventive
 
Software product development services company creative technosoft systems
Software product development services company creative technosoft systemsSoftware product development services company creative technosoft systems
Software product development services company creative technosoft systemsCreative Technosoft Systems
 
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014Awards Ceremony: Top Awards, Romain Rolland FLS, 2014
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014Tanya Madjarova
 
Film industry work
Film industry workFilm industry work
Film industry workNShuttle
 
Server Monitoring as a Service
Server Monitoring as a ServiceServer Monitoring as a Service
Server Monitoring as a ServiceCopperEgg
 
Beyond Beads n Trinkets - CIM 1999
Beyond Beads n Trinkets - CIM 1999Beyond Beads n Trinkets - CIM 1999
Beyond Beads n Trinkets - CIM 1999Wayne Dunn
 

En vedette (19)

Aol baku address
Aol baku addressAol baku address
Aol baku address
 
Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...
Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...
Trabajo Final de Grado Física(UV): Angular distribution and energy spectrum o...
 
www.tex4future.net: el sector tèxtil 2.0 - Iuris.doc
www.tex4future.net: el sector tèxtil 2.0 - Iuris.docwww.tex4future.net: el sector tèxtil 2.0 - Iuris.doc
www.tex4future.net: el sector tèxtil 2.0 - Iuris.doc
 
Slides from SoMeT Presentation-Shoestring Video
Slides from SoMeT Presentation-Shoestring VideoSlides from SoMeT Presentation-Shoestring Video
Slides from SoMeT Presentation-Shoestring Video
 
Future grps0-1226583494014006-9
Future grps0-1226583494014006-9Future grps0-1226583494014006-9
Future grps0-1226583494014006-9
 
5 Steps to Knock-out Workshops
5 Steps to Knock-out Workshops5 Steps to Knock-out Workshops
5 Steps to Knock-out Workshops
 
งานนำเสนอเศรษฐิจพอเพียง
งานนำเสนอเศรษฐิจพอเพียงงานนำเสนอเศรษฐิจพอเพียง
งานนำเสนอเศรษฐิจพอเพียง
 
облачные сервисы учителю математики
облачные сервисы учителю математикиоблачные сервисы учителю математики
облачные сервисы учителю математики
 
Cara Set Up FTP server di ubuntu
Cara Set Up FTP server di ubuntuCara Set Up FTP server di ubuntu
Cara Set Up FTP server di ubuntu
 
Frl annual report_2011_12
Frl annual report_2011_12Frl annual report_2011_12
Frl annual report_2011_12
 
絕了,能把漢字寫成這樣
絕了,能把漢字寫成這樣絕了,能把漢字寫成這樣
絕了,能把漢字寫成這樣
 
Bs work
Bs workBs work
Bs work
 
IM Club: Do You Trust Social Media Automation?
IM Club: Do You Trust Social Media Automation?IM Club: Do You Trust Social Media Automation?
IM Club: Do You Trust Social Media Automation?
 
Software product development services company creative technosoft systems
Software product development services company creative technosoft systemsSoftware product development services company creative technosoft systems
Software product development services company creative technosoft systems
 
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014Awards Ceremony: Top Awards, Romain Rolland FLS, 2014
Awards Ceremony: Top Awards, Romain Rolland FLS, 2014
 
Film industry work
Film industry workFilm industry work
Film industry work
 
Server Monitoring as a Service
Server Monitoring as a ServiceServer Monitoring as a Service
Server Monitoring as a Service
 
How to be the employee your company can not do without
How to be the employee your company can not do withoutHow to be the employee your company can not do without
How to be the employee your company can not do without
 
Beyond Beads n Trinkets - CIM 1999
Beyond Beads n Trinkets - CIM 1999Beyond Beads n Trinkets - CIM 1999
Beyond Beads n Trinkets - CIM 1999
 

Plus de 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
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных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
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey 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
 

Plus de Sergey Xek (19)

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте
 
Путь к 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...
 

Mind map от «Не все базы данных одинаково полезны»

  • 1. О Баду и о докладчике Расскажу истории из собственного опыта Введение Доклад на роль истины в последней инстанции не претендует Зато весело и задорно Расчет на большие нагрузки в стартапах Отказоустойчивость, которая не совсем Выбирается БД без запаса «на Распространенные ошибки вырост» применения баз данных БД как хранилище/движок событий Поиск Сильная консистентность Используйте инструменты, которые вы хорошо изучили Выводы Заключение Контакты (о докладчике) Про нашу open-source деятельность
  • 2. Лого Концепция Социальная сеть для знакомств с новыми людьми на 115-м месте Alexa.com. Google TOP 1000 — на 59-м месте 10 млн пользователей заходят на сайт в течение дня Для юзеров 140+ миллионов пользователей в 180 странах Метрики 153+ тысячи новых пользователей ежедневно О Баду и о докладчике 3+ миллиона фото и видео загружается каждый день 200+ сотрудников, которые говорят на 39 языках Быстрорастущая компания 30 тыс. запросов/с к PHP бекендам в пике Метрики Пользователей/разработчиков > 1 000 000 Для разработчиков MySQL, PHP, C/C++, Linux, nginx, Мы используем PHP_FPM, memcached и много своего
  • 3. Зачастую в стартапе изначально проектируется архитектура вокруг БД, рассчитанная на огромные нагрузки, на большое масштабирование, которые потом в реальной жизни никогда не понадобится И на это тратятся огромные ресурсы, которые по сути не дадут результата Например, часто используется такой паттерн, как разбиение приложения на сервисы вынесение БД на отдельный сервер клонирование бекендов клонирование баз данных SPOF нет Все данные аккуратно нарезаются на шарды и не имеют зависимостей между шардами шарды работают магически, их никогда не надо будет нарезать/ Как, большей частью, молодая команда сливать/переносить представляет себе масштабируемость? Сложные вопросы не рассматриваются по причине того, что слишком рано/мало опыта/ проблемы еще непонятны Закладываются возможности быстрого и большого роста кластера БД Вот, что есть (избушка) История про дома Вот, что видится в грезах (empire state building) А вот, как собираемся это масштабировать (много избушек) вы столкнетесь с целым классом новых уникальных для вашего проекта проблем поскольку «серебряной пули» масштабирования нет которые требуют творческого на самом деле, это предполагет, что ваши бизнес-метрики решения тоже вырастут в десятки и сотни раз, а архитектура сохранится что все равно придется многое переделывать но на самом деле все это вершина айсберга проблем под названием highload само по себе ‘mongodb is web scale‘ — это хорошо Которые все равно надо будет решать а вы зачастую, получается, идете вопреки этим ценностям Для стартапа главными ценностями являются Мешая стартапу, отъедая ресурсы быстрый старт и дешевизна изменений Правильную архитектуру вы сможете сделать, когда найдете нужную бизнес-модель, определитесь с объемами рынка и т. д. Начните с простых решений «по Расчет на большие рецепту», быстрых и несложных нагрузки в стартапах Одна БД скорее всего вас устроит Поэтому, на мой взгляд, если вы начинаете делать старт-ап К моменту, когда вы перестанете влезать в один сервер, вы будете гораздо четче представлять, что вам нужно и какие специфичные проблемы вас преследуют
  • 4. Например, используется full ACID БД, включается журнал, делается реплика волшебный raid-5 вопрос: что насколько отказоустойчиво железо, что в нем происходит при отказе? можно ли дублировано дальше быстро и стабильно работать? Прошлогодняя история: а может ли сгореть ваш ДЦ вместе со всем содержимым? насколько сильное влияние на вас может иметь human factor насколько отказоустойчива ваша сеть. Будут но при этом проблемы нижних уровней во ли у вас проблемы, если сеть ляжет или внимание не принимаются, а именно: отвалится часть сети? Проектируется архитектура, которая якобы дает отказоустойчивость Насколько вероятно возникновение нескольких проблем одновременно от каких внешних рисков еще вы зависите Самая мешающая мне проблема: есть ли какая-то взаимосвязанность. Что будет, если, например, начнутся проблемы со скоростью работы БД, не ляжет ли все остальное? Не все проблемы можно предотвратить полностью в первую очередь надо работать над железом ломайте сами, смотрите, что (серверами, сетью) получается Но парой вещей нужно поработать и потом конечно же над архитектурой В рамках одного сервера на практике приложения отказоустойчивости не бывает Следующая известная проблема, связанная с отказоустойчивостью для самых важных данных юзерских данных Специфика: данных очень много Никакой магии проверенного вендора с мировым именем Выделенные сервера резервирование по питанию raid 1+0 минимум пакетов фаерволл Отказоустойчивость, коммерчески поддерживаемая и которая не совсем протестированная сборка mySQL от Percona Самосборный линукс на базе SLES несколько разных пользователей в базе, имеющих разные права доступа Как это сделано в Баду chrooted environment Но очень быстро попадают в общую очередь Новые данные изначально пишутся на один сервер в транзакции и синхронизируется через нее с другим ДЦ
  • 5. На начальном этапе у вас всегда есть итеративный процесс поиска решения/бизнес-модели/рынка Всегда есть ситуация неопределенности и с техническими средствами, и отсутствие опыта команды, да и сама задача ясна лишь Ни один стартап не становился на 10% огромным в один день Стартап должен решать проблемы Если вы хотите решить техническую рынка, а не технические или свои проблему, соберите группу и создайте собственные проблемы и задачи проект с открытым кодом Поэтому всегда в таких условиях А больших нагрузок не бывает В стартапе при выборе основной БД для неопределенности бывают изменения Выбирается БД без запаса проекта выбирается БД, которая не дает и «повороты курса» «на вырост» большого запаса фич которые могут понадобиться в будущем теряется гибкость Не ройте яму, используя узкоспециализированные БД то есть появляется дороговизна и сложность изменения Нет многих полезных фич, позволяющие делать сложные вещи худо-бедно, но ценой малых затрат Подложите себе соломки на будущее на кодирование Проблемы NoSQL нет рычагов оптимизации нет какого-то ручного контроля шардинга скудный или отсутствующий мониторинг (основа основ оптимизации)
  • 6. события, порожденные транзакциями — 100% consistency события, которые должны надежно Существует на мой взгляд 3 доставляться - может прийти 2 раза, порядок распростарненных use case'а не важен, главное не потерять события, можно потерять - вообще ничего не важно Использование БД как хранилища/движка обработки событий чаще всего не оправдано в 2х сценариях из трех кроме первого скорости Вполне можно использовать простоте и понятности специализированный движок Что обычно дает бенефиты в масштабируемости доп. фичах, которые не надо реализовывать ручками и они могут понадобиться в будущем БД как хранилище/движок событий Своя обертка с агрегацией данных, вставкой в БД Sсribe-демон можно поставить на каждую машину — меньше соединений по сети Отлично настраивается, как хранить Для некоторых задач мы используем систему, построенную вокруг Scribe пришедшие сообщения При сбоях в точке сборки Scribe умеет сохранять пришедшие данные локально, пока не восстановится точка сборки Очень быстро, в отличии от БД, потому что все основано на push а не poll
  • 7. либо быстро, просто, плохо либо используя сложный фреймворк Поиск в базе для организации поиска в базе либо делаем сами такой фреймворк Отсылаю к http://www.percona.com/ files//presentations/ opensql2008_sphinx.pdf SELECT id, body FROM entries WHERE начинается все как комбинация из: body LIKE '%one%' SELECT id, body FROM entries WHERE body RLIKE '[[:<:]]one[[:>:]]' Потом быстро надоедает, и делается Some people, when confronted with a так: problem, think “I know, I’ll use regular expressions.” Now they have two problems. — Jamie Zawinsky Потом используем встроенный в MySQL FULLTEXT Index Быстро, просто, плохо — 99% В принципе, прекрасно работает поиск в базе через LIKE или обратный индекс Но с полноценным поиском по тексту мало фич проблема даже не в скорости работы, скудности фич и плохом медленно масштабировании — просто плохо К чему это я — для простых ищет =) хуже масштабируется Поиск Поиск решений, типа поиска по тегам или городов/улиц по первым буквам Sphinx: 20 минут Percona test: 2,5 млн записей, 15 Гб текста на одном сервере MySQL: админ уснул через 6 часов, так и не дождавшись А для каких-то задач просто неприменимо По сравнению скорости работы отсылаю к http://www.slideshare.net/ billkarwin/practical-full-text-search-with- my-sql готовых, в open-source и извеcтных я не знаю написать свой, чтобы искал хорошо Что касается больших и сложных — из области rocket science фреймворков В данном случае БД отходит на второй план и ее использование скорее всего не оправдано (выглядит велосипедом) Поиск в тексте — сильно специфичная задача к БД относящаяся постольку- поскольку Это и дешевле в разработке быстрее работает больше фич Используйте специализированные поисковые БД/движки отлично масштабируется а главное — лучше ищет Часто, наоборот, поисковый движок можно использовать как БД для своих задач
  • 8. Что очень хорошо и правильно при обучении основам БД Это очень хорошо, но можно и надорваться То есть повсеместный ACID, транзакции, «не потерять каждую кроху данных» особенно, когда данные в один сервер не помещаются и надо что-то придумывать хотя на самом деле это постоянное Существует такой зачастую неправильный обновление одних и тех же значений подход сохранять большой поток однородных данных в базу или сами данные нам не нужны, а нужно что- типа подсчета статистики то от них производное eventual consistency рулит выборочная запись/аггрегация Для этих целей при большом кол-ве записей/ модификаций чаще всего eventual consistency нас устраивает Зачастую в вебе превалирует «классический» Сильная консистентность подход иметь сильную consistency Поэтому не нужно все потоком писать в базу, Не надо почем зря грузить базу группировка нескольких записей в одну или выборочная пикировка рулит Но тут важно знать меру, и что мы теряем, а что приобретаем из SQL DB = "A consistent transactional datastore with schema guarantees that uses relational algebra to access normalized tables." Поэтому денормализация и разнесение В "A consistent transactional datastore with данных — зачастую это хорошее и правильное дело, которое зачастую дает schema guarantees that uses relational algebra Иначе, цитируя лучший доклад по to access normalized tables." = datastore with большой прирост производительности MySQL Марка Этвуда, мы рискуем access to data, лучше и не скажешь докатиться http://www.youtube.com/watch? v=zAbFRiyT3LU http://www.slideshare.net/ fallenpegasus/your-guide-to-mysql-no- nosql-stuff
  • 9. неизвестное таит в себе опасности Знакомая БД — скорость разработки выше И обусловлена она тем, что Возьмем «программиста-серднячка» не знает SQL БД хорошо где-то что-то слышал про крутость NoSQL (marketing hype) не понимает ACID, CAP, 3НФ, транзакции чтобы хранилище хранило объекты близко к Программист-середнячок классам, с которыми работаем в приложении, в идеале прям загружало, искало и сохраняло эти классы (что-то типа сериализации) Идеальная БД — это только 3 требования: Чтобы работало быстро (в идеале очень быстро, чтобы можно было похвастаться перед друзьями) На мой взгляд, существует “психологическая” Не поддавайтесь просто так на моду NoSQL популярность NoSQL Чтобы все остальное делало само, без немора и быстро Взрослые БД предполагают БД-специалиста помимо менеджера и архитектора +разработчика А DB-специальиста в команде просто нет NoSQL же пытается сделать вид, что БД- специалист не нужен Менеджмент спускает вопрос на тормозах и «авось, как-то само решится» В итоге БД выбирает непосредственно программист со всеми проблемами, описанными выше Выбираете NoSQL — понимайте, почему вы это делаете Запросы сразу на 2-х разных языках программирования Ух, ты! Какие-то важные части БД исполняет в один поток. Ну надо же... Какая-то часть БД построена на монструозно-большом языке программирования общего назначения со своими проблемами БД полагается на memory-map функционал системы, который на базы данных не рассчитан IO ОС в отличие от IO БД не способно оптимизировать с учетом специфики работы и используя статистику по данным Глобальный write lock на ВСЕ базы разом Только один индекс для запроса Жесткая wite-optimized FIFO-очередь NoSQL Шардинг ниче не знает про data center awareness только автошардинг Используйте По дефолту журнал не включен, инструменты, которые вы Используйте инструменты, которые вы сохранности данных нет хорошо изучили хорошо изучили скудный или отсутствующий Вообще, все эти дядьки DBA и мониторинг (вообще основа основ Percona непонятно откуда взялись и оптимизации) просто сосут деньги, обманывая всех нас. Они нам не нужны. У нас все настраивать производительность работает. (До тех пор, пока все не можно только на уровне ОС стало совсем плохо) (отсутствие рычагов оптимизации) атомарности нет даже на уровне одного запроса Зачастую быстрее MySQL Выше скорость развертывания Примитивный шардинг быстрее развертывается и проще ALTER TABLE забыто, как страшный сон На мой взгляд, если сравнить NoSQL vs. SQL, изучите хорошо БД, с которой вы планируете стоит выделить следующие характерные работать Зачастую, приходится писать кучу достоинства и недостатки довольно скучного кода на уровне приложения отвязывает способ хранения (БД, движок внутри БД) от приложения и от предметной области Более понятный синтаксис Оптимизированное хранение Наличие настроек, рычагов оптимизации Несколько вариантов хранения и обработки данных в одной БД Constraint'ы, триггеры, хранимые процедуры несколько индексов на таблицу ACID внезапно B-Tree, R-Tree, GIN, GIST, hash- индексы Join'ы, которые зло, но иногда SQL спасают Декомпозиция запросов Параллельное исполнение Очень навороченный оптимизатор запросов Многоуровневое кеширование Статистика, мониторинг Эффективное управление ресурсами с учетом специфики данных Гораздо более понятная масштабируемость полноценные запросы с вложеностью, переменными итд Скорость разработки выбор, писать сложные или простые запросы (перенося часть логики в код приложения)