当前位置: 首页 > 编程日记 > 正文

swoole实现数据库连接池

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

原生 PHP CURD

让我们来回顾一下PHP中数据库的使用

<?php
# curd.php$id   = 1;$dbh  = new PDO();
$stmt = $dbh->prepare('SELECT * FROM  `user` WHERE `id`=:id');
$stmt ->bindValue(':id', $id);
$user = $stmt->fetch();var_dump($user);

上述代码, 本身是没有任何问题。这里我们也不是来挑出问题的,只是以一位多年PHPer的经验与大家交流下。

上面程序执行过程是什么样子的呢?

                 _______________________|                       |[浏览器请求] ==>   [mod_php/php-fpm]  ||           ||          ||           ||          ||           \/          ||       [curd.php]      ||           ||          ||           ||          ||           \/          ||    [PDO::_construct]  | <== 请求的开销|           ||          ||           ||          ||           \/          |[Response] <==      [PDO::CURD]     ||           ||          ||           ||          ||           \/          ||       [PDO::close]    ||_______________________|

Swoole PHP CURD

Java应用中,大家在进行数据库CURD的时候,会维护一个数据库连接池。在PHP的世界中,要想做连接池挺困难的:

  • PHP web应用不可长驻运行

  • 不可借助第三方服务如KV转存句柄

而在Swoole中我们就可以实现连接池了!

<?php
$http = new swoole_http_server('0.0.0.0', 80, SWOOLE_BASE);
$http->db->dbh = new PDO();$http->on('request', function(swoole_http_request $req, swoole_http_response $res) use($http) {$id = 1;$stmt = $http->db->dbh->prepare('SELECT * FROM  `user` WHERE `id`=:id');$stmt ->bindValue(':id', $id);$user = $stmt->fetch();$res->end(var_export($user, true));unset($stmt);
});

执行流程

                      [php app.php]||||\/[PDO::__construct]||____________||________________|            \/                |[浏览器请求] ==>   [ ->onRequest(\Closure) ] ||            ||                ||            ||                | <== 请求开销|            \/                |[Response] <==      [PDO::CURD]            ||____________||________________|||\/[PDO::close]

分析上面流程, Swoole不用再每次请求时去建立数据库连接, 既避免了给数据库过多压力, 也更迅速的处理核心业务逻辑. 也许你觉得这优势不明显, 但是在c10k问题(Connections over 10,000)场景中, 优势就非常明显了吧?当然, 上面的demo只是抛砖引玉, 没有实现multi connections pool, 如果大家要做生产化代码, 务必实现连接池, idle连接数按照业务需要, 比如80%的时间连接数200, 设置200个idle的连接池是最优的.

PHP有了连接池,我们的应用就可以不用再在收到请求时去创建数据库连接了。
试试上面的代码,与曾经碰到过3000+数据库连接的烦恼bye bye吧~

[本节完, 文字未校对, 程序未测试]

转载于:https://my.oschina.net/u/1762916/blog/777536

相关文章:

bats-Bash自动化测试工具

本文分析了bats--Bash自动化测试工具的安装、语法、常用指令及常用函数等内容。上篇文章回顾&#xff1a;学习RAID 01/10/10E的区别bats 是一个符合 TAP 标准 的 Bash 版测试框架&#xff0c;它使用了一种极为简便的方法来验证命令行程序是否正常运行。bats 要求 Bash 的最低版…

ORB + OPENCV

一、介绍 假如有两张人物图片&#xff0c;我们的目标是要确认这两张图片中的人物是否是同一个人。如果人来判断&#xff0c;这太简单了。但是让计算机来完成这个功能就困难重重。一种可行的方法是&#xff1a; 分别找出两张图片中的特征点描述这些特征点的属性&#xff0c;比较…

【Codeforces】967C Stairs and Elevators (二分)。

http://codeforces.com/contest/967/problem/C 从一个地方到另一个地方&#xff0c;可以选择爬楼梯或者坐电梯 &#xff0c;前提是楼梯或者电梯存在。 n 楼层数 m 每一层的房间数 s 楼梯的数量 e 电梯的数量 v 电梯的速度 第2行是s个楼梯的位置 第3行是e个电梯的位置 …

webpack 最简打包结果分析

原文链接&#xff1a;https://ssshooter.com/2019-02... 现在的 webpack 不再是入门噩梦,过去 webpack 最让人心塞的莫过于配置文件&#xff0c;而 webpack4 诞生随之而来的是无配置 webpack。 使用 webpack4&#xff0c;至少只需要安装 webpack 和 webpack cli。所以大家完全可…

orb-slam2(学习笔记)+相机

单目&#xff08;Monocular&#xff09;、双目&#xff08;Stereo&#xff09;、深度相机&#xff08;RGB-D&#xff09; 深度相机能够读取每个像素离相机的距离 &#xff0c;单目相机 只使用一个摄像头进行SLAM的做法叫做单目SLAM&#xff08;Monocular SLAM&#xff09;,结构…

如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)

运维相关&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#iis 先注册一个nuget账号https://www.nuget.org/ 下载并安装一下NuGetPackageExplorer&#xff1a;https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 创建一个包&#xff08;vs其实也是可以…

【Codeforces】1080C Masha and two friends (棋盘染色)

http://codeforces.com/problemset/problem/1080/C 给定一个棋盘&#xff0c;&#xff08;1&#xff0c;1&#xff09;的位置是白色&#xff0c;观察可以知道&#xff0c;如果横纵坐标之和是偶数&#xff0c;那么是白色&#xff0c;奇数的话就是黑色。 只要算出染色以后白色方…

Java多线程001——一图读懂线程与进程

本博客 猫叔的博客&#xff0c;转载请申明出处前言 本系列将由浅入深&#xff0c;学习Java并发多线程。 一图读懂线程与进程 1、一个进程可以包含一个或多个线程。&#xff08;其实你经常听到“多线程”&#xff0c;没有听过“多进程”嘛&#xff09;2、进程存在堆和方法区 3、…

TermCriteria模板类

学习写vo过程中遇到的 类功能&#xff1a;模板类&#xff0c;作为迭代算法的终止条件。 构造函数&#xff1a; TermCriteria(int type,int maxCount,double epsilon); 参数说明&#xff1a; type 迭代终止条件类型 typeTermCriteria::MAX_ITER/TermCrite…

SQL优化快速入门

最近遇到一个专门进行SQL技术优化的项目&#xff0c;对很多既有的老存储过程进行调优&#xff08;现在已经不再新增任何存储过程&#xff09;&#xff0c;因此系统的对SQL语句编写进行一次科学的学习变得很有必要。这儿将基于黄德承大神的Oracle SQL语句优化一书&#xff0c;选…

【HDU】4509 湫湫系列故事——减肥记II (区间覆盖 暴力)

http://acm.hdu.edu.cn/showproblem.php?pid4509 给出的时间段是被占用的时间&#xff0c;24h 1440 min&#xff0c;求出这些区间以外的区间长度 把00&#xff1a;00 - 23&#xff1a;59 变成0-1440 1-5都是被占用的区域&#xff0c;暴力很好理解 #include <iostream>…

Java并发编程71道面试题及答案

Java并发编程71道面试题及答案 1、在java中守护线程和本地线程区别&#xff1f; java中的线程分为两种&#xff1a;守护线程&#xff08;Daemon&#xff09;和用户线程&#xff08;User&#xff09;。 任何线程都可以设置为守护线程和用户线程&#xff0c;通过方法Thread.setDa…

USB获取图像实时处理

手写&#xff36;&#xff2f;的准备工作&#xff0c;调用&#xff35;&#xff21;&#xff22;或者本地相机获取视频图像&#xff0c;读取并保存视频。 #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "openc…

常见数据库 性能

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/582827/blog/778908

【Codeforces】1093C Mishka and the Last Exam

http://codeforces.com/problemset/problem/1093/C 已知b[i]求a[i]和a[n-i1]&#xff0c;n是a数组中元素的个数&#xff0c;a数组的下标从1开始 输出b[1]的时候&#xff0c;直接让a[1] 0&#xff0c;a[n] b[0] 接下来的每一组&#xff0c;先让a[i] b[i]&#xff0c;然后求…

PHP面试常考内容之Memcache和Redis(2)

你好&#xff0c;是我琉忆。继周一&#xff08;2019.2-18&#xff09;发布的“PHP面试常考内容之Memcache和Redis&#xff08;1&#xff09;”后&#xff0c;这是第二篇&#xff0c;感谢你的支持和阅读。本周&#xff08;2019.2-18至2-22&#xff09;的文章内容点为以下几点&am…

毫米波雷达、ADAS中的应用以及毫米波雷达的检测、测距、测速和角度测量

毫米波雷达的检测、测距、测速和角度测量 毫米波(Millimeter-Wave&#xff0c;缩写&#xff1a;MMW)&#xff0c;是指长度在1~10mm的电磁波&#xff0c;对应的频率范围为30~300GHz&#xff0e;根据波的传播理论&#xff0c;频率越高&#xff0c;波长越短&#xff0c;分辨率越高…

【VMC实验室】在QCloud上创建您的SQL Cluster(1)

在国内公有云厂商上搭建一套SQL Cluster的难度相信做Windows的童鞋都会很清楚&#xff0c;并非它的搭建有多少难度&#xff0c;只是很多细节需要注意。腾讯云&#xff0c;QCloud&#xff0c;为什么选择QCloud来做这个实验&#xff0c;除了QCloud是我的东家&#xff08;啊呸&…

【Codeforces】808D Array Division(前后两部分和相等)

http://codeforces.com/contest/808/problem/D 给你一个数组&#xff0c;问&#xff1a;是否可以通过移动一个数字的位置&#xff0c;求只能移动一次&#xff0c;使得这个数组前后部分的和相等&#xff0c;前后部分不一定等长 一个a数组储存数据&#xff0c;另一个b数组b[i]表…

想要确保架构目标达成?适合度函数了解一下

Paula Paul和Rosemary Wang撰写的一篇博文中介绍了适应度函数&#xff08;fitness function&#xff09;的基本概念、入门方法&#xff0c;并给出了如何验证各种架构质量的一些实例。文中提出&#xff0c;适应度函数驱动开发的方法可用于编写测定系统符合架构目标的测试&#x…

标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)

16个相机参数&#xff1a; Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multiple camera calibration: intrinsic and extrinsic calibration of a camera-systems with non-globally shared overlapping fields of view Cam…

【Codeforces】659B Qualifying Contest (sort)

http://codeforces.com/problemset/problem/659/B n个人&#xff0c;m个地区&#xff0c;选出每个地区分数最高的两个人 下面有n行&#xff0c;每一行的第一个数表示姓名&#xff0c;第二个数是地区的序号&#xff0c;第三个数是分数 It is guaranteed that all surnames of…

Protractor测试环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 安装node.js.然后&#xff0c;在cmd下&#xff0c;进入E盘下的&#xff0c;我们自己新建的protractor文件夹下&#xff0c; npm install -g protractor 这样就会在本地安装好两个命令行工具&#xff1a;protractor和webd…

Promise和Promise的方法

&#xff08;Promise和Promise的方法&#xff09; Promise是ES6一个伟大的发明&#xff0c;他使我们从回调地狱中能够走出来。 什么是Promise 从字面上来看&#xff0c;Promise就是一个承诺。那么&#xff0c;在ES6当中&#xff0c;Promise通常用来控制异步操作。当一个异步操作…

镜头评价指标及测试方法(三)--------测量原理及3D相机调查

1.测量原理&#xff1a; 1.1、通过红外结构光(Structured Light)来测量像素距离&#xff0c;如Kinect1、Project Tango1、Intel Realsense等&#xff1b; 通过近红外激光器&#xff0c;将具有一定结构特征的光&#xff08;比如离散光斑、条纹光、编码结构光等&#xff09;投射到…

Android--Retrofit的简单使用(一)

1&#xff0c;如果不太了解retrofit的同学可以先去官网学习一下简单使用&#xff1a;http://square.github.io/retrofit/&#xff0c;这里我们以一个简单的Get请求的例子来练习一下 2&#xff0c;https://api.douban.com/v2/movie/top250?start0&count10 目标地址&#xf…

【Codeforces】920A Water The Garden(浇花)

http://codeforces.com/problemset/problem/920/A 给你花坛的数目&#xff0c;花坛都是连续的&#xff0c;某一些花坛里有水龙头&#xff0c;给出了这些有水龙头的位置 The garden from test 1. White colour denotes a garden bed without a tap, red colour — a garden be…

Work with Alexa :Echo匹配连接到Alexa

背景&#xff1a; 通过蓝牙可以让你的智能家居设备和Echo设备连接起来&#xff0c;从而达到Echo通过语音控制智能家居设备。 什么事Alexa Gadgets&#xff1f; 我的理解Alexa Gadgets是智能家居设备的一部分&#xff0c;包含硬件和软件。硬件&#xff1a;蓝牙模块&#xff1b;软…

Maven 学习Tips

2019独角兽企业重金招聘Python工程师标准>>> 使用 deploy 应该注意的地方 在项目的pom文件中增加如下节点&#xff1a;<project><distributionManagement><repository><id>releases</id><url>http://192.168.1.99:8081/nexus/c…

【Codeforces】1015B Obtaining the String(字符串 交换)

http://codeforces.com/contest/1015/problem/B n 表示 字符串的长度 然后是两个字符串&#xff0c;每一次只能交换相邻的两个&#xff0c;如果选择第i个字符的话&#xff0c;只能交换第i个和第i1个 然后输出每一次交换选定的位置 暴力&#xff0c;模拟&#xff0c;queue&am…