配置Django实现数据库读写分离
继上一篇配置了centos服务器上的mysql主从同步后(如何配置请移步在阿里云Centos7配置Mysql主从同步的那些事儿),发现只是配置了但是没有在Django项目中真正的使用,那么下面的操作就是在Django中设置读写分离,真正的降低数据库压力。
django在进行数据库操作的时候,读取数据与写数据(增、删、改)可以分别从不同的数据库进行操作。
1. 在配置文件中增加slave数据库的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '39.106.222.541',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
'NAME': 'test_123'
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '172.36.166.214',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
'NAME': 'test_123'
}
}
2. 创建数据库操作的路由分发类
在meiduo_mall/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 = ['test_123.utils.db_router.MasterSlaveDBRouter']