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