Django資料庫的讀寫分離配置
阿新 • • 發佈:2018-12-22
讀寫分離
其基本原理就是讓主資料庫處理事務性增、改、刪操作(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']