Django中MySQL读写分离技术

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

在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

时间: 2024-11-05 21:44:34

Django中MySQL读写分离技术的相关文章

django mysql 读写分离

最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类型的数据库),我们需要做的就是,定义不同的数据库,定义不同的路由规则.当然前提是你需要手动实现MySQL的主从同步.. 首先定义我们的主从数据库: DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',

MySQL主从复制技术与读写分离技术amoeba应用

前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-proxy,阿里巴巴的Amoeba.Amoeba能在阿里巴巴这么大流量的平台投入使用并且执行稳定,Amoeba的性能是非常优越的.相信眼前事实,所以选择了Amoeba. 一.名词解析 1. 主从复制. 将主server上的数据拷贝到从server上,保护数据免受意外的损失. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u

使用Amoeba实现mysql读写分离机制

Amoeba的实用指南 http://docs.hexnova.com/amoeba/ 如何实现mysql读写分离 : 通常来说有两种方式: 1,应用程序层实现 2,中间件层实现 应用层实现 应用层实现是指在应用程序内部及连接器中实现读写分离. 例如: com.mysql.jdbc.replicationdriver mysqlnd_ms 优点: 程序内部实现读写分离,安装即可使用 减少部署难度. 访问压力在一定级别以下,性能很好. 缺点: 架构一旦调整,代码要更这变, 不够灵活. 难以实现高级

mysql读写分离

mysql读写分离  静态分离:直接将服务器地址写入程序  动态分离:通过代理服务器对数据进行读写操作,由代理服务器判定读写操作,在主服务器上写数据,在          从服务器上读数据.    1.使用mysql-proxy实现读写分离  # ./mysql-proxy --proxy-backend-addresses=10.0.5.150:3306 --proxy-read-only-backend-addresses=10.0.5.151:3306 --proxy-lua-script

MySQL学习笔记之十:使用mysql-proxy实现MySQL读写分离

MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力. 本文使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是读操作还是写操作,然后分发至对应的mysql服务器上.对于多节点slave集群,还可以起到负载均衡的效果. 一.准备实验环境 MySQL的主从复制架构搭建详见http://9124573.bl

Mysql-Proxy实现mysql读写分离、负载均衡 (转)

在mysql中实现读写分离.负载均衡,用Mysql-Proxy是很容易的事,不过大型处理对于性能方面还有待提高,主要配置步骤如下: 1.1. mysql-proxy安装 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可.当

mysql读写分离 mysql-proxy

一.介绍 MySQL代理是一个介于MySQL客户端和MySQL服务器之间的简单程序,可用来监视.分析或者传输他们之间的通讯.他的灵活性允许你最大限度的使用它,这些包括负载平衡.容错 .分析查询和修正等等: MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡.对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MyS

mysql 读写分离

mysql-proxy:简称mysql读写分离:主要目的是为了提高web站点的访问速度. 首先搭建mysql主从,参考:http://syklinux.blog.51cto.com/9631548/1737317 下载mysql-proxy: cd /usr/local/src wget http://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz tar zxvf mysq

构建高性能web之路------mysql读写分离实战

一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database proxy.database proxy负责管理client实际访问database的路由策略,采用开源框架amoeba.database集群采用mysql的master-slave的replication方案.整个环境的结构图如下所示: 实战步骤与详解 一.搭建mysql的master-slave