zoukankan      html  css  js  c++  java
  • 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."自定义的类名称"']
  • 相关阅读:
    57. Insert Interval
    287. Find the Duplicate Number
    52. N-Queens II
    51. N-Queens
    151. Reverse Words in a String
    29. Divide Two Integers
    [POJ2104]K-th Number
    [JSOI2008]最大数
    [BZOJ3673&3674]可持久化并查集&加强版
    C++ STL rope介绍----可持久化平衡树
  • 原文地址:https://www.cnblogs.com/pythonz/p/10933927.html
Copyright © 2011-2022 走看看