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

Post on 05-Dec-2014

2.717 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

ekb.py, Екатеринбург, 10 февраля 2012 года

Разработчик Яндекс.ТаксиАлексей Кирпичников

Я не люблю MongoDB

Новые технологии — это ужасно

2

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

3

— нужна доступность 24 / 7 / 365

— из 3 серверов гарантированно работают только 2

— мягкая деградация невозможна

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

Не бывает.

4

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

5

taxi_master taxi_slave

session_master1 session_master2

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

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

6

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)] }}

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

7

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])

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

8

— каждая модель заранее знает, где она хранится

— в read-only попадают только запросы select

def choose_db(self, connections): available = filter(self.check_db, connections) if not available: raise SQLAlchemyError return available[ ? ]

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

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

9

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

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

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

— подсказка не должна меняться во время транзакции

10

MySQL ➝ MongoDB

— админы согласны поддерживать

— язык запросов близок к SQL

— есть полноценная схема работы с мультимастером

11

MongoDB replica sets

12

hostA

hostB

hostC(primary)

клиент

MongoDB replica sets

13

hostA

hostB(primary)

hostC(dead)

клиент

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

Вопросы?

top related