Django 中实现连接多个数据库并实现读写分离
读写分离
其基本原理就是让主数据库处理事务性增,改,删操作(INSERT,UPDATE,DELETE)操作,而从数据库处理SELECT查询操作,数据库复制被用来把事物性操作导致的变更同步到其他从数据库,以SQL为例,主数据库负责写数据,读数据,读库仅负责读数据,每次有写库操作,同步更新到读库,写库就一个,读库可以有多个,采用日志同步的方式实现主库和多个数据库的数据同步
具体配置如下
在配置文件中增加slave数据库的配置
在Django的配置文件settings.py中,DATABASES中添加代码如下:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
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'    }}   | 
创建数据库操作的路由分类
在项目的utils中创建db_router.py文件,并在该文件中定义一个db类,用来进行读写分离
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
 | 
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   | 
配置读写分离路由
在配置文件中增加
| 
 1 
2 
 | 
#配置读写分离DATABASE_ROUTERS = ['项目名.utils.db_router."自定义的类名称"'] | 
                    
                
                
            
        
浙公网安备 33010602011771号