对于很多 PHP 开发者来说,连贯数据库始终是个让人头疼的问题,那么明天 Gitee 为大家介绍的就是一款一个 基于 MySQL 协定,Swoole 开发的 MySQL 数据库连接池。
项目名称: SMProxy
我的项目作者: louislivi
开源许可协定: MIT
我的项目地址:https://gitee.com/louislivi/smproxy
设计初衷
PHP 没有连接池,所以高并发时数据库会呈现连贯打满的状况,Mycat 等数据库中间件会呈现局部 SQL 无奈应用,例如不反对批量增加等,而且过于臃肿。所以就本人编写了这个仅反对连接池和读写拆散的轻量级中间件,应用 Swoole 协程调度 HandshakeV10 协定转发使程序更加稳固,不必像 Mycat 一样解析所有 SQL 包体,减少复杂度。
我的项目原理
将数据库连贯作为对象存储在内存中,当用户须要拜访数据库时,首次会建设连贯,前面并非建设一个新的连贯,而是从连接池中取出一个已建设的闲暇连贯对象。应用结束后,用户也并非将连贯敞开,而是将连贯放回连接池中,以供下一个申请拜访应用。而连贯的建设、断开都由连接池本身来治理。
同时,还能够通过设置连接池的参数来管制连接池中的初始连接数、连贯的上上限数以及每个连贯的最大应用次数、最大闲暇工夫等等。也能够通过其本身的管理机制来监督数据库连贯的数量、应用状况等。超出最大连接数会采纳协程挂起,等到有连贯敞开再复原协程持续操作。
个性
- 反对读写拆散
- 反对数据库连接池,可能无效解决 PHP 带来的数据库连贯瓶颈
- 反对 SQL92 规范
- 采纳协程调度
- 反对多个数据库连贯,多个数据库,多个用户,灵便搭配
- 恪守 MySQL 原生协定,跨语言,跨平台的通用中间件代理
- 反对 MySQL 事务
- 反对 HandshakeV10 协定版本
- 完满兼容 MySQL5.5 – 8.0
- 兼容各大框架,无缝晋升性能
性能测试
介绍了这么多,那么这个我的项目的性能到底如何呢?咱们能够看一下作者进行的性能测试。
没用框架的 PHP 7.2.6
未应用连接池:
应用连接池:
ThinkPHP 5.0
未应用连接池:
应用连接池:
Laravel 5.7
未应用连接池:
应用连接池:
MySQL
未应用连接池:
应用连接池:
当然,作者提供的测试后果只是一个参考,各位开发者在亲自应用的时候,因为数据量,网络环境,数据库配置的不同,以理论压测的后果为准。
如果你想理解 SMProxy 具体的运行和配置办法,那么就点击前面的链接返回我的项目主页看看吧,记得给它一个 Star 哦:https://gitee.com/louislivi/smproxy
如果你正在寻找 PHP 的开源我的项目学习,Gitee 上也有很多:https://gitee.com/explore/all?lang=PHP