【愚公系列】2022年02月 Python教学课程 60-Django框架之数据库读写分离的配置

2022-02-07 08:11:03 浏览数 (1)

文章目录

  • 前言
    • 1.读写分离的概念
    • 2.读写分离的优点
  • 一、Django配置读写分离
    • 1.在配置文件中增加slave数据库的配置
    • 2.创建数据库操作的路由分发类
    • 3.配置读写分离路由

前言

1.读写分离的概念

为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。

2.读写分离的优点

提高读写性能

数据写入和读取是在不同的服务器上进行的,而且可以通过增加从服务器来提高数据库的读取性能

提高数据安全

因为数据已复制到从服务器,可以在从服务器上备份而不破坏主服务器相应数据

一、Django配置读写分离

1.在配置文件中增加slave数据库的配置

在Django的配置文件settings.py中,DATABASES中添加代码如下:

代码语言:javascript复制
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,并进行定义

代码语言:javascript复制
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.配置读写分离路由

在配置文件中增加

代码语言:javascript复制
 # 配置读写分离
DATABASE_ROUTERS = ['项目名.utils.db_router.MasterSlaveDBRouter']

0 人点赞