就不再长篇大论了…   我相信很多朋友都在使用ORM库来代替繁杂的原生的sql语句。 但如果有特需一点的需求,比如要主从分离?  我们以前的做法很是暴力,直接修改peewee的源码,当他在调用select相关函数的时候,会重置一个mysql db连接,当然是改成从库。   近期才发现peewee的BaseModel有read_slaves参数….


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新.

http://xiaorui.cc/?p=3729

除了上面乱改代码之外,还有这些….. 因为业务有大量的分库分表存在,这样导致一个现象,我们要输出N个表对象,我不能忍这个,所以改代码。 我们是在python peewee里加了一个patch组件,绕过了几个逻辑。 原理倒是简单,其实主要难度在于读懂peewee的源码。 当每次初始化程序的时候会从redis获取最新的分库分表配置信息,大多是通过id和时间区间来分表。 这peewee的改造工程是不小的, 找个时间专门给大家讲述一下。按我的经验来说,每个语言的web框架都是该语言的精华,里面有各种的语法糖,黑魔法的使用 。

言归正传 我们还是继续聊peewee的读写分离。   直接看源码…   这个是peewee实现主从读写分离的主要功能类,原理就是继承modol,重写了select和raw函数…. 另外通过_get_read_database来RR轮训的方式来获取从mysql连接对象。 

这个peewee的主从使用方法很简单,毕竟都封装差不多了,对于你我来说,只管用就可以了。  也就我是我闲着没事总想看看人家源码是怎么实现的,O(∩_∩)O~….

这样就完事了…   peewee的select都会从 从mysql 取数据。 如果你有一些原因导致你要从master取数据,那么可以使用SelectQuery方法。 

现在mysql分库分表的读写逻辑,大多数公司都是放在proxy层面来实现的,因为能更好的统一入库,对于大多数程序来说,他只关心纯业务就可以了。  但也有些公司例外,比如唯品会, 蘑菇街,他们是在本程序里面实现的分库分表。   作为程序员我更喜欢第一种,因为我省事了。  

但我也知道当前开源的mysql代理没几个太靠谱的,像mycat,功能很丰富,但性能不咋地….  像mysql proxy ,性能和功能都是个渣,   像陈非的kingshard,我暂时还不敢用,虽然我曾经给kingshard捐过钱….      



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

关于python peewee的事务回滚用法

发现python peewee的资料相比sqlalchemy来说真心少呀,于是乎为了让这两个orm有竞争产生发展,我决定多写点peewee的文档.    还有一方面...

阅读全文

代码分析peewee ForeignKeyField外键的用法

这是新年后的第一篇文章,上班第一天还在恢复上下文的状态.   就又看了下peewee的代码。 正题开始,Mysql外键的作用我想大家都知道,外键是为了更...

阅读全文

聊聊python的轻量级orm peewee及对比SQLAlchemy

其实我是打算自己写个简单的python mysql orm数据库模型,虽然基本功能都实现了,但是bug也不少….   还有这两天正在忙电商数据的导入,因为...

阅读全文

1则回应给“源码分析peewee orm的读写分离”

  1. 卓修武说道:

    peewee 跟 django 的orm框架部分 是不是差不多

发表评论