개발 이야기/Django
[Django] Replica DB 사용 시 읽기전용/쓰기전용 Database 분리하기
_ppuing
2022. 9. 6. 09:50
반응형
DB replica 를 사용할 때 읽기전용으로 replica를 사용하고, 쓰기전용으로 main(master) DB를 사용하도록 하는설정
replica_1, replica_2 를 settings.py의 DATABSES 에 선언했다고 가정
import random
class DBRouter(object):
def db_for_read(self, model, **hints):
return random.choice(["replica_1", "replica_2"])
def db_for_write(self, model, **hints):
return "default"
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
settings.py 에서
DATABSE_ROUTERS = ['path.to.DBRouter']
테스트할 때 replica_1, replica_2 의 데이터 싱크가 되지 않으므로 BaseTest 에서 아래와 같이 설정
from django.db import databases
class BaseTestCase(TransactionTestCase):
databases = ["default", "replica_1", "replica_2"]
@classmethod
def setUpClass(cls):
connections["replica_1"]._orig_cursor = connections["replica_1"].cursor
connections["replica_1"].cursor = connections["default"].cursor
connections["replica_2"]._orig_cursor = connections["replica_2"].cursor
connections["replica_2"].cursor = connections["default"].cursor
super().setUpClass()
@classmethod
def tearDownClass(cls):
connections["replica_1"].cursor = connections["replica_1"]._orig_cursor
connections["replica_2"].cursor = connections["replica_2"]._orig_cursor
super().tearDownClass()
....
반응형