SlideShare a Scribd company logo
Я не люблю MongoDB
Алексей Кирпичников
Разработчик Яндекс.Такси



ekb.py, Екатеринбург, 10 февраля 2012 года
Новые технологии — это ужасно




2
Яндекс.Такси

— нужна доступность 24 / 7 / 365
— из 3 серверов гарантированно работают только 2
— мягкая деградация невозможна




   3
Мастер-мастер в MySQL



           Не бывает.




4
Мастер-мастер в MySQL


      taxi_master       taxi_slave




    session_master1   session_master2




5
Мастер-мастер в MySQL


     Чем сложнее структура базы, тем больше
    вероятность фатального сбоя репликации.




6
Мастер-мастер в SQLAlchemy

    bind_layout = {
        ‘taxi’: {
            ‘read’: [connect(taxi_master), connect(taxi_slave)],
            ‘write’: [connect(taxi_master)]
        },
        ‘session’: {
            ‘read’: [connect(session_m1), connect(session_m2)],
            ‘write’: [connect(session_m1), connect(session_m2)]
        }
    }




7
Мастер-мастер в SQLAlchemy

— каждая модель заранее знает, где она хранится
— в read-only попадают только запросы select
    def shard_chooser(self, mapper, clause):
        shard = mapper.class_.__shard__

        if str(clause).lower().startswith('select'):
            op = 'read'
        else:
            op = 'write'

        return self.choose_db(self.__bind_layout[shard][op])


8
Мастер-мастер в SQLAlchemy
Нельзя просто так выбирать из двух мастеров, иначе
рано или поздно возникнет проблема с репликацией.


def choose_db(self, connections):
    available = filter(self.check_db, connections)

    if not available:
        raise SQLAlchemyError

    return available[ ? ]




9
Мастер-мастер в SQLAlchemy

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




   10
MySQL ➝ MongoDB

— админы согласны поддерживать
— язык запросов близок к SQL
— есть полноценная схема работы с мультимастером




   11
MongoDB replica sets

                 hostB




       hostC
                         клиент
     (primary)




                 hostA




12
MongoDB replica sets
                hostB
              (primary)




      hostC
                          клиент
     (dead)




               hostA




13
Алексей Кирпичников
Яндекс.Такси

Вопросы?

More Related Content

What's hot

особенности использования Times Ten In Memory Database в высоконагруженной среде
особенности использования Times Ten In Memory Database в высоконагруженной средеособенности использования Times Ten In Memory Database в высоконагруженной среде
особенности использования Times Ten In Memory Database в высоконагруженной средеHighLoad2009
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
Модули на C для Ruby
Модули на C для RubyМодули на C для Ruby
Модули на C для Rubyracoons
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.FDConf
 
Высокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comВысокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comAlexandr Yatsuk
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 

What's hot (9)

Chef
ChefChef
Chef
 
особенности использования Times Ten In Memory Database в высоконагруженной среде
особенности использования Times Ten In Memory Database в высоконагруженной средеособенности использования Times Ten In Memory Database в высоконагруженной среде
особенности использования Times Ten In Memory Database в высоконагруженной среде
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Модули на C для Ruby
Модули на C для RubyМодули на C для Ruby
Модули на C для Ruby
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
 
Devcamp nodejs-2010
Devcamp nodejs-2010Devcamp nodejs-2010
Devcamp nodejs-2010
 
Высокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.comВысокая доступность web приложений. SHALB.com
Высокая доступность web приложений. SHALB.com
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Viewers also liked

Letters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionLetters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionRick Warren
 
Conf2014_SplunkSearchOptimization
Conf2014_SplunkSearchOptimizationConf2014_SplunkSearchOptimization
Conf2014_SplunkSearchOptimizationSplunk
 
NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)zfconfua
 
NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)zfconfua
 
Gov & Education Day 2015 - User Behavior Analytics
Gov & Education Day 2015 - User Behavior AnalyticsGov & Education Day 2015 - User Behavior Analytics
Gov & Education Day 2015 - User Behavior AnalyticsSplunk
 
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest
 
Splunk Enterprise for Information Security Hands-On Breakout Session
Splunk Enterprise for Information Security Hands-On Breakout SessionSplunk Enterprise for Information Security Hands-On Breakout Session
Splunk Enterprise for Information Security Hands-On Breakout SessionSplunk
 
Using Splunk for Information Security
Using Splunk for Information SecurityUsing Splunk for Information Security
Using Splunk for Information SecuritySplunk
 
Социальные сети в России, зима 2014-2015
 Социальные сети в России, зима 2014-2015 Социальные сети в России, зима 2014-2015
Социальные сети в России, зима 2014-2015Natalie Sokolova
 
Модель зрелости процесса (мониторинг и оценка ИБ)
Модель зрелости процесса (мониторинг и оценка ИБ) Модель зрелости процесса (мониторинг и оценка ИБ)
Модель зрелости процесса (мониторинг и оценка ИБ) Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
пр Инструменты Тайм-менеджмента, которые работают
пр Инструменты Тайм-менеджмента, которые работаютпр Инструменты Тайм-менеджмента, которые работают
пр Инструменты Тайм-менеджмента, которые работаютAndrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
пр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистовпр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистовAndrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 

Viewers also liked (20)

Letters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to ProductionLetters from the Trenches: Lessons Learned Taking MongoDB to Production
Letters from the Trenches: Lessons Learned Taking MongoDB to Production
 
Attacking MongoDB
Attacking MongoDBAttacking MongoDB
Attacking MongoDB
 
Conf2014_SplunkSearchOptimization
Conf2014_SplunkSearchOptimizationConf2014_SplunkSearchOptimization
Conf2014_SplunkSearchOptimization
 
NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)
 
NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)
 
Gov & Education Day 2015 - User Behavior Analytics
Gov & Education Day 2015 - User Behavior AnalyticsGov & Education Day 2015 - User Behavior Analytics
Gov & Education Day 2015 - User Behavior Analytics
 
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
 
Splunk Enterprise for Information Security Hands-On Breakout Session
Splunk Enterprise for Information Security Hands-On Breakout SessionSplunk Enterprise for Information Security Hands-On Breakout Session
Splunk Enterprise for Information Security Hands-On Breakout Session
 
пр Про интегральные метрики ИБ
пр Про интегральные метрики ИБпр Про интегральные метрики ИБ
пр Про интегральные метрики ИБ
 
Using Splunk for Information Security
Using Splunk for Information SecurityUsing Splunk for Information Security
Using Splunk for Information Security
 
пр Модель зрелости Dlp
пр Модель зрелости Dlpпр Модель зрелости Dlp
пр Модель зрелости Dlp
 
Комплект документов по ISO 27001-2013
Комплект документов по ISO 27001-2013Комплект документов по ISO 27001-2013
Комплект документов по ISO 27001-2013
 
Социальные сети в России, зима 2014-2015
 Социальные сети в России, зима 2014-2015 Социальные сети в России, зима 2014-2015
Социальные сети в России, зима 2014-2015
 
пр Тренды ИБ в России 2016 (Прозоров)
пр Тренды ИБ в России 2016 (Прозоров)пр Тренды ИБ в России 2016 (Прозоров)
пр Тренды ИБ в России 2016 (Прозоров)
 
Модель зрелости процесса (мониторинг и оценка ИБ)
Модель зрелости процесса (мониторинг и оценка ИБ) Модель зрелости процесса (мониторинг и оценка ИБ)
Модель зрелости процесса (мониторинг и оценка ИБ)
 
пр Инструменты Тайм-менеджмента, которые работают
пр Инструменты Тайм-менеджмента, которые работаютпр Инструменты Тайм-менеджмента, которые работают
пр Инструменты Тайм-менеджмента, которые работают
 
пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016пр Сколько зарабатывают специалисты по ИБ в России 2016
пр Сколько зарабатывают специалисты по ИБ в России 2016
 
пр После внедрения Dlp (прозоров)
пр После внедрения Dlp (прозоров)пр После внедрения Dlp (прозоров)
пр После внедрения Dlp (прозоров)
 
пр 5 почему аутсорсинга ИБ
пр 5 почему аутсорсинга ИБпр 5 почему аутсорсинга ИБ
пр 5 почему аутсорсинга ИБ
 
пр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистовпр Что ожидают работодатели от молодых специалистов
пр Что ожидают работодатели от молодых специалистов
 

Similar to ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo

IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azuremourhoon
 
Scala EE: Myth or Reality?
Scala EE: Myth or Reality?Scala EE: Myth or Reality?
Scala EE: Myth or Reality?Marat Akhin
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Архитектура растущего проекта, на примере ВКонтакте
Архитектура растущего проекта, на примере ВКонтактеАрхитектура растущего проекта, на примере ВКонтакте
Архитектура растущего проекта, на примере ВКонтактеTKConf
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraSveta Smirnova
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Ontico
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Продвинутое использование Celery
Продвинутое использование CeleryПродвинутое использование Celery
Продвинутое использование CeleryAlexander Koshelev
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 

Similar to ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo (20)

IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Catalyst and Rose::DB
Catalyst and Rose::DBCatalyst and Rose::DB
Catalyst and Rose::DB
 
Scala EE: Myth or Reality?
Scala EE: Myth or Reality?Scala EE: Myth or Reality?
Scala EE: Myth or Reality?
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Архитектура растущего проекта, на примере ВКонтакте
Архитектура растущего проекта, на примере ВКонтактеАрхитектура растущего проекта, на примере ВКонтакте
Архитектура растущего проекта, на примере ВКонтакте
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second Era
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
MySQL 101
MySQL 101MySQL 101
MySQL 101
 
Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008Smirnov Memcached Highload 2008
Smirnov Memcached Highload 2008
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Продвинутое использование Celery
Продвинутое использование CeleryПродвинутое использование Celery
Продвинутое использование Celery
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo

  • 1. Я не люблю MongoDB Алексей Кирпичников Разработчик Яндекс.Такси ekb.py, Екатеринбург, 10 февраля 2012 года
  • 2. Новые технологии — это ужасно 2
  • 3. Яндекс.Такси — нужна доступность 24 / 7 / 365 — из 3 серверов гарантированно работают только 2 — мягкая деградация невозможна 3
  • 4. Мастер-мастер в MySQL Не бывает. 4
  • 5. Мастер-мастер в MySQL taxi_master taxi_slave session_master1 session_master2 5
  • 6. Мастер-мастер в MySQL Чем сложнее структура базы, тем больше вероятность фатального сбоя репликации. 6
  • 7. Мастер-мастер в SQLAlchemy bind_layout = { ‘taxi’: { ‘read’: [connect(taxi_master), connect(taxi_slave)], ‘write’: [connect(taxi_master)] }, ‘session’: { ‘read’: [connect(session_m1), connect(session_m2)], ‘write’: [connect(session_m1), connect(session_m2)] } } 7
  • 8. Мастер-мастер в SQLAlchemy — каждая модель заранее знает, где она хранится — в read-only попадают только запросы select def shard_chooser(self, mapper, clause): shard = mapper.class_.__shard__ if str(clause).lower().startswith('select'): op = 'read' else: op = 'write' return self.choose_db(self.__bind_layout[shard][op]) 8
  • 9. Мастер-мастер в SQLAlchemy Нельзя просто так выбирать из двух мастеров, иначе рано или поздно возникнет проблема с репликацией. def choose_db(self, connections): available = filter(self.check_db, connections) if not available: raise SQLAlchemyError return available[ ? ] 9
  • 10. Мастер-мастер в SQLAlchemy — подсказка должна быть связана с идентификатором записи — подсказка должна быть одной и той же для каждого набора связанных данных — подсказка не должна меняться во время транзакции 10
  • 11. MySQL ➝ MongoDB — админы согласны поддерживать — язык запросов близок к SQL — есть полноценная схема работы с мультимастером 11
  • 12. MongoDB replica sets hostB hostC клиент (primary) hostA 12
  • 13. MongoDB replica sets hostB (primary) hostC клиент (dead) hostA 13