- 博客(186)
- 收藏
- 关注
转载 MySQL索引-B+树(看完你就明白了)
索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引 Hash 索引 全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结
2020-08-25 15:27:35 3432 1
转载 InnoDB一棵B+树可以存放多少行数据?
一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己的最小储存单元——页(Page.
2020-08-24 15:53:19 207
转载 深入理解 mysql 索引 原理
索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(
2020-08-23 18:43:12 1042 1
转载 redis 缓存雪崩、缓存穿透、缓存更新
今天来分享一下Redis几道常见的面试题:如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题?一、缓存雪崩1.1什么是缓存雪崩?回顾一下我们为什么要用缓存(Redis):现在有个问题,如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了。在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redi...
2020-01-06 16:07:08 216
原创 原生php、 laravel、 thinkphp、 lumen、swoole 运行速度对比
在本地电脑上搭建了vm虚拟机,配置1核1G输出hello world ,不同框架的时间消耗情况:开启模拟100个用户,没用户发送10个请求,总1000请求量 项目 测试项 原生php laravel6.0 lumen5.3 thinkphp5.0 时间消耗(单位 s) 7 155 55...
2019-09-13 17:12:55 4171
原创 laravel中的数据迁移表结构整理
在没有专门的数据库管理人员的情况下,migration是laravel项目比较好用的数据库表结构管理方式。迁移表的字段类型如下: /* 表引擎 */ $table->engine = 'InnoDB'; /* 类型 */ // - 数字 $table->bigInteger('id'); $table->...
2019-07-21 13:27:46 1312
原创 laravel 自定义日志目录
laravel自带的Log::info日志功能有限,只能单个文件记录或者按照日期记录。实际开发过程中,经常需要按功能来记录日志。为了方便,使用Logger自定义封装一些日志功能。<?php/** * laravel的日志类不够用,根据项目日志习惯二次封装Monolog日志类 */namespace App\Utils;use Monolog\Logger;use M...
2019-05-04 16:21:16 2604
原创 laravel使用常见问题记录
laravel中使用env函数将会导致缓存配置文件或者路由无法使用,建议使用config替代以下为一些laravel中常见的坑,后续会整理更多
2019-04-13 00:46:57 613
转载 js混淆加密,通过混淆Js代码让别人(很难)还原,js代码加密
使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密,或者混淆js来达到代码保护。1、为什么需要js混淆在web系统发展早期,js在web系统中承担的职责并不多,只是简单的提交表单,js文件非常简单,也不需要任何的保护。随着js文件体积的增大,为了缩小js体积,加快http传输速度,开始出现了很多对js...
2019-03-15 16:13:55 26632 3
原创 Mysql分组查询每组最新的一条数据,查询用户的最新的一条记录
如果直接使用group by 去获取数据,获取到的是最旧的一条数据。有订单表和用户表,如何获取用户的最新的一条订单记录?可以搭配max函数来实现。
2023-10-11 15:47:52 772
原创 php 2次foreach循环的坑
$list = [[‘id’ => 1, ‘name’ => ‘AA’, ‘age’ => 10],[‘id’ => 2, ‘name’ => ‘BB’, ‘age’ => 20],[‘id’ => 3, ‘name’ => ‘CC’, ‘age’ => 30],[‘id’ => 4, ‘name’ => ‘DD’, ‘age’ => 40],];echo “”;echo “>>>>>>
2022-04-07 15:15:16 593
原创 使用PhpSpreadsheet 导入wps编辑过的excel文件内存溢出问题
问题:用 office excel新建了一个.xlsx文件,发给客户后,客户用wps编辑过,导入系统出现内存溢出,导致整个系统崩溃。注:一定要记得加 $reader->setReadDataOnly(TRUE);$upload_file = $_FILES['file']['tmp_name']; $ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)); if ($ext
2021-11-09 13:49:23 1103
原创 PHP 批量更新多个字段
有一张表users,存在字段id(主键)、name、age现需要一条sql批量更新不同的字段,也就是UPDATE `users` SET `name` = (CASE id WHEN '1' THEN '张三A' WHEN '3' THEN '王五A' WHEN '4' THEN '小明A' end), `age` = (CASE id WHEN '1' THEN '15' WHEN '3' THEN '16' WHEN '4' THEN '17' end) where id in(1,3,4)
2021-10-22 14:32:46 670
原创 laravel 8 自定义日志文件名、自定义目录
环境:laravel5 以上 ,新版的 laravel8 不支持laravel自带的Log::info日志功能有限,只能单个文件记录或者按照日期记录。实际开发过程中,经常需要按功能来记录日志。为了方便,使用Logger自定义封装一些日志功能。Logs日志类实际项目中使用了两三年了,还是相对稳定。<?php/** * laravel的日志类不够用,根据项目日志习惯二次封装Monolog日志类 */namespace App\Utils;use Illuminate\Support\
2021-04-15 11:53:05 1821
转载 PHP 设计模式系列 ——观察者模式
模式概述观察者模式定义了一种一对多的依赖关系,让多个观察者对象监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。应用场景:当一个对象的改变需要同事改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。 观察者模式所作的工作其实就是在接触耦合。让耦合的双方都依赖于抽象类,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。 举个栗子一家公司,用户A喜欢玩游戏,用户B喜欢看股票,上班不好好工作,经常被老板抓
2021-02-04 14:39:55 131 2
原创 Mysql 千万级表数据 导出导入
背景有:服务器A:有一张表A,单表1500万条数据(未来会更多)表占用的空间大小6G.服务器B:从服务器A把表A导过来,插入表B(服务器配置 2核8G)过程作为一个传统的有经验的老菜鸟,通过 mysqldump 命令整个表备份,上传到服务器B后再通过source命令还原,这条路首先放弃了。1、通过脚本,每次从表A查询1000条数据,插入表Bselect * from table_A limit 1000 offset 0;脚本写好了,耐心等待,两三个小时过去了,发现并没有多少数据导过来。一
2021-02-02 16:56:30 3416 2
原创 PHP 设计模式系列 —— 简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程缺点系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,同样破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。适用环境工厂类负责创建的对象比较少:由于创建的对象较少,不会
2021-01-18 16:09:43 268
转载 一口气搞懂MySQL索引所有知识点
一口气搞懂MySQL索引所有知识点转载于三太子敖丙https://mp.weixin.qq.com/s/faOaXRQM8p0kwseSHaMCbg保留文章做个备忘,三太子牛逼!前言国庆期间看了数据库的很多资料和书籍,这点我在总结的数据库文章里面也提过了,然后我发现我对索引的介绍不全,所以整理了一下自己的笔记,决定来个索引完整版,老规矩可能还是没我正常文章风格那么跳,但是干货一定也能让你有所收获。索引介绍索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗..
2021-01-06 17:54:05 287
原创 Laravel ORM 订单 分表
开发项目,经常碰到订单量暴增的问题,简单点处理,需要给订单表做分表。数据库表用户表DROP TABLE IF EXISTS `o_users`;CREATE TABLE `o_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
2020-12-29 15:25:18 1011 2
原创 mysql 查询优化器并非万能
作为一个“出色“的mysql程序员,大家都知道mysql 建立了索引,会大幅度提升查询速度。mysql 查询优化器会自动选择最有的查询方案,但有时候mysql的选择其实不是最优的。现有一张zeng_order表,created_date字段和store_id字段建立了索引现有查询条件select count(*) as aggregate from `zeng_order` where `created_date` between '2020-12-23' and '2020-12-23'查询结
2020-12-23 11:48:49 256
原创 window 修改composer 安装的 php 版本
开始安装composer 的时候,选定的php 版本为v7.2.1,随着时间的推移,很多composer包需要支持php v7.2.5以上才能安装cd 新版本的php安装路径:D:\phpstudy_pro\Extensions\php\php7.2.9nts>执行命令composer.phar update接着就可安装composer包了...
2020-12-04 23:37:15 3548
原创 mysql find_in_set() 使用
mysql 中 find_in_set() 方法:有时候我们在设计数据库时有以下情况,如:在视频表中有个字段week, 他存储的是视频在周几播放,如某视频只在周1,4,6播放,那么week字段对应的值以 1,4,6 的格式存储那们我们要用sql查找所有视频中周4可以播放的视频 (这个时候不是用like能解决的,使用like可能查到我们不想要的记录)这时就需要 find_in_set()mysql手册中find_in_set函数的语法:FIND_IN_SET(str,strlist)
2020-11-16 15:43:24 371
原创 1核2G 并发 2核4G 并发 、服务器并发测试
好奇1核1G ,2核4G 服务能抗多少并发, 上网一直没找到合适的答案,局限于经济问题,也无法实践。终于跟朋友借了几台服务器测试:压测工具 :ab工具注意:压测环境带宽要 >= 项目服务器带宽原生php 输出一串字符串:<?php$temp = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';$str = '';for ($i = 0; $i < 22; $i++) { $str .= $temp;}echo json_
2020-11-11 18:18:09 7561 3
原创 linux 安装 RabbitMQ 教程
安装Erlang由于RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。在本教程中我们将安装最新版本的Erlang到服务器中。 Erlang在默认的YUM存储库中不可用,因此您将需要安装EPEL存储库。 运行以下命令相同。yum -y install epel-release安装Erlangyum -y install erlang socat查看Erlang版本。erl -version输出:安装Rabbi.
2020-11-11 16:38:26 250
原创 谷歌浏览器域名缓存
域名A.com原来解析到服务器A,后来改到服务器B,访问不到网站。地址栏输入chrome://net-internals/#dns点击 Clear host cache按钮,清除缓存
2020-11-11 10:00:45 672
原创 PHP 独立使用 laravel ORM 数据库组件,PHP ORM数据库模型组件
以前年少无知,不知道laravel ORM的Illuminate Database数据库组件尽然可以独立使用,在维护公司老的CMS系统时,苦苦的自己拼接sql。简单使用过程:新增一个index.php<?phpuse Illuminate\Database\Capsule\Manager as DB;require 'vendor/autoload.php';require 'UserModel.php';$capsule = new DB;$capsule->add
2020-11-03 18:20:56 782 2
原创 php 手机号 正则表达式
php 最新正则表达式判断是否为手机号,网上大部分都漏了139开头的号码段 function isMobile($val) { return preg_match("/^1[3456789]{1}\d{9}$/", $val); }
2020-10-29 15:28:53 1789
原创 php 微信支付分 教程
微信支付分是比较新的一种支付方式,针对特殊场景,相关教程比较少。<?php/** * 微信支付分 */class WxPayscore{ private $wxConfig = [ 'appid' => '',//公众号appid 'appSecret' => '',//公众号秘钥 'mch_id' => '',//商户号 'service_id' => '',//商户号服务id
2020-10-28 10:03:53 1205
原创 mysql 深入 细节记录
mysql 区是由连续页组成的空间,在任何情况下每个区的大小都是1MB。为了保证区中页的连续性,INNODB存储引擎一次从磁盘申请4 - 5 个区。在默认情况下,INNODB存储引擎页的大小为16KB,即一个区一共有64个连续的页。...
2020-10-20 18:33:09 334
原创 全国号码段归属地文件数据
1300000,山东,济南,联通1300001,江苏,常州,联通1300002,安徽,巢湖,联通1300003,四川,宜宾,联通1300004,四川,自贡,联通1300005,陕西,西安,联通1300006,江苏,南京,联通1300007,陕西,西安,联通...下载地址添加链接描述...
2020-10-20 13:36:35 1080
原创 linux 定时任务 git 自动拉代码
#!/bin/bashstep=20 #间隔的秒数,不能大于60for (( i = 0; i < 60; i=(i+step) )); do cd /home/wwwroot/jueke-admin git pull origin feature/v1.0 sleep $stepdoneexit 0给脚本执行的权限新增一条定时任务/home/wwwroot/jueke-admin/git-dev.sh...
2020-10-15 09:02:13 661
原创 php curl 上传图片到服务器
php curl上传图片需要用到CURLFile 对象 $url = 'http://xxx.com'; $name = 'file'; if (!isset($_FILES[$name])) { return $this->error('请上传文件'); } // 创建一个 cURL 句柄 $ch = curl_init($url); // 创建一个 CURL
2020-10-14 13:32:44 447 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人