数据库
文章平均质量分 81
乐乐Java路漫漫
热衷于互联网JAVA开发,对新技术的探索孜孜不倦,对问题的研究废寝忘食,希望大家一起探索
展开
-
秒杀活动系统简单分析
问题点:1.高并发:时间短,瞬间并发量大,考虑缓存雪崩,缓存击穿,缓存穿透。2.超卖:3.恶意请求:搞很多服务器脚本疯狂请求。4.链接暴露:相信是个开发同学都对这个画面一点都不陌生吧,懂点行的仔都可以打开谷歌的开发者模式,然后看看你的网页代码,有的就有URL,但是我写VUE的时候是事件触发然后去调用文件里面的接口看源码看不到,但是我可以点击一下查看你的请求地址啊,不过你好像可以对按钮在秒杀前置灰。不管怎么样子都有危险,撇开外面的所有的东西你都挡住了,你卖这个东西实在便宜得过分,有诱惑力,你能原创 2021-08-31 16:57:04 · 251 阅读 · 0 评论 -
分库分表要注意选型和流程
数据库到了需要分库分表的时候,那么公司的数据也是发展到了一定的量了,需要考虑高可用了。但是分库分表需要考虑哪些因素,拆分过程是复杂的,提前计划,不要等真正开工,各种意外的工作接踵而至,以至失控。本文介绍数据库中间件的广度而不是深度。切入层次,一下范围限定在mysql和java中,我们先说下分库分表切入的层次1.编码层在同一个项目中创建多个数据源,采用if else的方式,直接根据条件在代码中路由。Spring中有动态切换数据源的抽象类,具体参见AbstractRoutingDataSource原创 2021-08-26 08:34:41 · 405 阅读 · 1 评论 -
shardingjdbc源码之结果合并
1.首先入口是这行代码result = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());org.apache.shardingsphere.core.merge.dql.DQLMergeEngine#merge 方法如下所示@Override public MergedResult merge() th原创 2021-08-24 17:36:30 · 463 阅读 · 0 评论 -
shardingjdbc源码解析
入口分析:org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement#executeorg.apache.shardingsphere.core.BaseShardingEngine#shard3. org.apache.shardingsphere.core.PreparedQueryShardingEngine#route4. org.apache.shardingspher原创 2021-08-24 11:29:10 · 1362 阅读 · 0 评论 -
mysql在扫描情况下会选择全表扫描而不是走索引
1.有一张表t_accountCREATE TABLE `t_account` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT '', `age` int DEFAULT '0', `phone` varchar(20) DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `goods` int DEFAULT '0', `update_time` d原创 2021-08-22 23:06:20 · 3849 阅读 · 3 评论 -
索引下推ICP详解
using index conditionICP只能针对二级索引进行使用。不需要针对主键索引MySQL5.6之前,查询的时候,只会根据Index Key去存储引擎层,确定索引的范围,然后将该范围内的 记录取出来,返回到Sql Server层,SqlServer层,再根据where中其他的过滤条件进行过滤。有也 就是说IndexFilter和TableFilter都是在SqlServer层进行...原创 2020-04-29 07:57:17 · 1019 阅读 · 0 评论 -
mysql之explain分析
在这里对explain的各个字段进行详细的分析,来帮助大家分析自己所写的sql是否最佳的使用了索引。首先是select_type:将select查询分为简单(simple)和复杂两种类型复杂类型又分为子查询(subquery)和from列表中包含子查询(drived)simple:SELECT * FROM tp_lifecircle_consume WHERE order_sn = ...原创 2020-04-20 11:45:03 · 1114 阅读 · 1 评论 -
mysql死锁发生和排查
mysql死锁排查死锁产生四个必要条件(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。发现死锁:可以用show engine innodb status;命令来查看最...原创 2020-03-15 12:18:56 · 429 阅读 · 0 评论 -
mysql order by索引分析
这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用。B-Tree索引主要作用于WHERE和ORDER BY子句。这里讨论的均在MySQL-Server-5.7.23测试CREATE TABLE `friends` ( `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uid`bigint(20) UNSIGNED NOT NU...转载 2018-10-09 00:34:46 · 2546 阅读 · 0 评论 -
避免商品超卖的4种方案
避免商品超卖的4中方案(以下是一些核心思路)第一种方案:在每次下订单前我们判断促销商品的数量够不够,不够不允许下订单,更改库存量时加上一个条件,只更改商品库存大于0的商品的库存,当时我们使用ab进行压力测试,当并发超过500,访问量超过2000时,还是会出现超卖现象。public function buyOne() { $shop = Shop::find(1); if (...原创 2018-08-02 18:20:55 · 16869 阅读 · 5 评论 -
mysql索引实现(索引树结构)
MYSQL索引实现在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则图8是一个MyISAM表的...原创 2018-04-13 14:51:55 · 270 阅读 · 0 评论 -
mysql优化顺序
mysql优化顺序:优化你的sql和索引添加缓存,memcached,redis主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以使用第三方工具,如atlas使用mysql的自带分区表,自己的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量地分区上,否则就会扫描全部分区。做垂直拆分,其实就是根据你模块的...原创 2018-04-13 14:05:10 · 501 阅读 · 1 评论 -
数据库查询索引(单个索引和复合索引)
当一条sql语句的查询涉及到多个字段,这个时候给每个字段加索引,数据库也只能够使用其中的一个索引,这个时候使用复合索引就比较好了。这是为什么呢?这是因为:全表扫描/只使用一个索引的速度比起来,去分析两个索引二叉树更加耗费时间,所以绝大多数情况下数据库都是是用一个索引。 如这条语句:select count(1) from table1 where column1 = 1 and colu...原创 2018-04-13 11:18:03 · 3690 阅读 · 0 评论 -
php代码实现mysql连接池效果
循环从mysql连接池中获取连接,不需要重复创建新的连接。 参考配置修改:http://www.thinkphp.cn/topic/26541.html 防止访问量过大,把连接数占满了<?php/** * @author xuleyan * @title mysql类 */class DbHelper{ //连接池 private $_pools = []; //连接原创 2017-07-09 18:15:05 · 3499 阅读 · 4 评论 -
mysql体系结构分析
了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的1 Connectors指的是不同语言中与SQL的交互2 Management Serveices & Utilities: 系统管理和控制工具3 Connection Pool: 连接池。管理缓冲用户连接,线程处理等需要缓存的需求4 SQL Interface: SQL接口。接受用户的SQL命令,转载 2017-07-02 22:09:47 · 291 阅读 · 0 评论 -
使用数据库保存session的方法
使用数据库保存session的方法,阅读使用数据库保存session的方法,php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie,程序中的session相关操作将无法执行。因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键原创 2016-06-12 18:54:05 · 4255 阅读 · 0 评论 -
mysql学习总结
1.选择优化的数据类型MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。不管选择何种类型,下面的简单原则都会有助于做出更好的选择:(1).更小通常更好一般来说,要试着使用正确地存储和表示数据的最小类型。更小的数据类型通常更快,因为它们使用了更少的磁盘空间、内存和CPU缓存,而且需要的CPU周期也更少。但是要确保不人低估需要保存的值,在转载 2016-05-22 14:09:30 · 363 阅读 · 0 评论 -
mysql之explain详解(分析索引的最佳使用)
在这里对explain的各个字段进行详细的分析,来帮助大家分析自己所写的sql是否最佳的使用了索引。原创 2016-04-17 18:45:08 · 33350 阅读 · 1 评论