Multi-DB, read replicas, connection pooling, transactions, isolation levels
Продвинутые техники работы с базами данных в Django.
💡 Правило: Оптимизируйте запросы, используйте правильные индексы.
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'main_db',
},
'analytics': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'analytics_db',
}
}
# Использование
User.objects.using('analytics').all()# Router
class ReadReplicaRouter:
def db_for_read(self, model, **hints):
return random.choice(['replica1', 'replica2'])
def db_for_write(self, model, **hints):
return 'default'# settings.py
DATABASES = {
'default': {
...
'CONN_MAX_AGE': 600, # Кэширование соединений
'OPTIONS': {
'pool_size': 10,
}
}
}from django.db import transaction
@transaction.atomic
def transfer(from_acc, to_acc, amount):
from_acc.balance -= amount
from_acc.save()
to_acc.balance += amount
to_acc.save()Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.