1. 程式人生 > >Django資料庫的讀寫分離配置

Django資料庫的讀寫分離配置

讀寫分離

其基本原理就是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE)操作,而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到其他從資料庫。以SQL為例,主庫負責寫資料、讀資料。讀庫僅負責讀資料。每次有寫庫操作,同步更新到讀庫。寫庫就一個,讀庫可以有多個,採用日誌同步的方式實現主庫和多個讀庫的資料同步。
mysql資料庫的主從配置可參考:
mysql讀寫分離詳解

1.在配置檔案中增加slave資料庫的配置

在Django的配置檔案settings.py中,DATABASES中新增程式碼如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 主伺服器的執行ip
        'PORT': 3306,   # 主伺服器的執行port
        'USER': 'django',  # 主伺服器的使用者名稱
        'PASSWORD': 'django',  # 主伺服器的密碼
        'NAME': 'djangobase'   #  資料表名
    },
    'slave': {
        'ENGINE': 'django.db.backends.mysql',  
        'HOST': '127.0.0.1',
        'PORT': 8306,
        'USER': 'django_slave',
        'PASSWORD': 'django_slave',
        'NAME': 'djangobase_slave'
    }
}

2.建立資料庫操作的路由分發類

在專案的utils中建立db_router.py,並進行定義

class MasterSlaveDBRouter(object):
    """資料庫主從讀寫分離路由"""

    def db_for_read(self, model, **hints):
        """讀資料庫"""
        return "slave"

    def db_for_write(self, model, **hints):
        """寫資料庫"""
        return "default"

    def allow_relation(self, obj1, obj2, **hints):
        """是否執行關聯操作"""
        return True

3.配置讀寫分離路由

在配置檔案中增加

 # 配置讀寫分離
DATABASE_ROUTERS = ['專案名.utils.db_router.MasterSlaveDBRouter']