zoukankan      html  css  js  c++  java
  • Django中MySQL读写分离技术

    最近需要用到DjangoMySQL读写分离技术,查了一些资料,把方法整理了下来。

    Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类型的数据库),我们需要做的就是,定义不同的数据库,定义不同的路由规则。

    首先定义我们的主从数据库:

    DATABASES = {

        'default': {

            'ENGINE': 'django.db.backends.mysql',

            'NAME': sae.const.MYSQL_DB,

            'USER': sae.const.MYSQL_USER,

            'PASSWORD': sae.const.MYSQL_PASS,

            'HOST': sae.const.MYSQL_HOST,

            'PORT': sae.const.MYSQL_PORT,

        },

          

        'slave': {

            'ENGINE': 'django.db.backends.mysql',

            'NAME': sae.const.MYSQL_DB,

            'USER': sae.const.MYSQL_USER,

            'PASSWORD': sae.const.MYSQL_PASS,

            'HOST': sae.const.MYSQL_HOST_S,

            'PORT': sae.const.MYSQL_PORT,

        },       

    }

    定义我们的路由规则,路由规则可以有好多个,每个规则是一个类。如下所示:

    # -*- coding:utf-8 -*-

    class DBRouter(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 None

        def allow_syncdb(self, db, model):

            return None

    最后在setting.py中加上这个路由规则:

    DATABASE_ROUTERS = ['opensound.models.DBRouter']

    因为Django不负责主从数据库之间的同步,所以如果在读取完数据后马上要对数据进行操作,可以显式地使用主数据库来读取并修改数据。

    >>> Author.objects.using('other').all()
    >>> my_object.save(using='legacy_users')

    参考资料:https://docs.djangoproject.com/en/dev/topics/db/multi-db/

    http://www.truease.com/thread-262-1-1.html

  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/linkenpark/p/7607675.html
Copyright © 2011-2022 走看看