![](https://img-blog.csdnimg.cn/1209e624813b425daf46023928430137.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据库
文章平均质量分 73
数据库
咦940
这个作者很懒,什么都没留下…
展开
-
MySQL分库分表知识总结
col_9、col_10,其中col_1 - col_5是热点列,而col_6 - col_10则用的比较少,于是将table_1拆分成两张表table_1和table_2,table_1包含col_1 - col_5,table_2包含col_6 - col_10。另外,使用一致性Hash算法来路由,在扩容或者缩容时,需要迁移的数据会更少。水平拆分需要配合水平分表来使用,例如db_1和db_2都有t_user表,通过路由规则来决定是访问db_1的t_user表还是访问db_2的t_user表。原创 2024-01-11 15:59:46 · 822 阅读 · 0 评论 -
MySQL索引下推
无索引下推时:name列使用模糊查询,会使查询无法使用索引中name右边的列。查询在二级索引中用name去匹配,拿到主键后回表(聚集索引)查询所有符合条件的列,上述步骤由存储引擎完成,存储引擎将查询到的数据返回给服务器层,服务器层在内存构建临时表,然后用age进行过滤并得到符合条件的数据。索引下推:即使name使用模糊查询,在二级索引匹配时也可以使用age,这样二级索引匹配到的主键可能会更少,回表的次数也会更少,提高了性能。场景:使用二级索引(非聚集索引)查询的时候。原创 2023-10-18 17:37:57 · 151 阅读 · 0 评论 -
深入理解Elasticsearch分片
了解分片的基本原理,对Elasticsearch性能调优有帮助。原创 2022-12-29 14:18:23 · 3503 阅读 · 0 评论 -
Elasticsearch性能优化实践
搜索的时候,时间作为一个必须的搜索条件(这其实跟时序数据库类似),根据时间跨度解析出涉及到的索引,这样能缩小搜索的范围,如果可以,我们可以对时间跨度进行限制,比如规定时间跨度不能超过3天,这样最多只会搜索4个索引。上文提到过,我们有3个data node,我决定再增加一个data node,一共4个,2个是存放热索引的热数据节点,2个是存放冷索引的冷数据节点,一开始数据写入到热节点,一天之后,从热节点迁移到冷节点。所以我将当天的索引定义为热数据索引,其他索引全部是冷数据索引,超过30天的索引会被删除。原创 2022-11-18 18:20:37 · 2001 阅读 · 5 评论 -
MySQL主从复制和读写分离的原理与实战
ROW格式虽然可以为数据库的恢复和复制带来更好的可靠性,但是不能忽略的一点是,这会带来二进制文件大小的增加,有些语句下的ROW格式可能需要更大的容量。InnoDB存储引擎的默认事务隔离级别是REPEATABLE READ,其实也是因为二进制日志文件格式的关系,如果使用READ COMMITTED事务隔离级别,会出现类似丢失更新的现象,从而出现主从数据库数据不一致。Mycat是一款用Java语言编写的MySQL数据库网络协议的开源中间件,利用它可以实现MySQL的读写分离。下面是它的部署和使用步骤。原创 2022-11-02 18:17:30 · 409 阅读 · 0 评论 -
B+树在MySQL InnoDB存储引擎中的应用
多路查找树,2-3树,2-3-4树,B树,B+树,InnoDB存储引擎,聚簇索引,回表,覆盖索引原创 2022-08-24 18:30:05 · 418 阅读 · 0 评论 -
单机版Apache Druid配置Ingestion Task数量,即middle manager的slots(插槽)数量
Apache Druid这个分析型数据库用起来真香,就是对机器配置要求挺高的。我用的是micro-quickstart版本,默认是两个插槽,我在测试的过程中配置了五个从Kafka摄取数据的任务,结果只有两个任务在运行,另外三个被挂起。如图,显示三个任务被挂起。经过对官网文档的研究发现是插槽数量不够,插槽数量在如下图所示界面可以看到:可以通过配置文件修改插槽数量,我用的是单机版micro-qu...原创 2020-04-23 10:36:34 · 865 阅读 · 0 评论 -
Redis高频面试题
缓存穿透场景说明恶意使用一些非法的key,key对应的数据在数据库不存在,由于不存在,故没有缓存起来,所以这些非法key的请求都到了数据库,可能会压垮数据库。解决方法一种简单粗暴的方法就是,如果从数据库返回的结果为空,任然缓存这个空结果,但它的过期时间要设置的短一些,比如三分钟,以防Redis中缓存的数据过多,占用太多的内存。采用布隆过滤器,将所有的合法结果散列到足够大的bitmap中,一个一定不存在的数据会被bitmap拦截掉,从而避免了对底层存储系统的查询压力缓存击穿场景说明key对原创 2020-12-29 11:45:49 · 42 阅读 · 0 评论 -
Redis事务以及Java demo
Redis事务以及RedisTemplate对Redis事务的支持概述错误处理语法错误运行错误WATCH命令介绍应用场景Spring的RedisTemplate使用Redis事务参考资料概述Redis中的事务是一组命令的集合。一个事务中的命令要么都执行,要么都不执行。Redis命令能保证一个事务内的命令依次执行而不被其他命令插入。Redis事务没有提供类似关系型数据库的回滚功能。MULTI:...原创 2020-02-14 12:12:06 · 1400 阅读 · 0 评论 -
Elasticsearch7.6.0单机和集群安装部署实践
elasticsearch集群安装部署实践单机部署单机部署首先需要去官网下载elasticsearch的压缩包,然后解压。elasticsearch是用Java开发的,所以需要Java的运行环境,我记得从某个版本开始elasticsearch的安装包自带JDK,如果启动时提示需要Java环境,则需要安装JDK或JRE。由于不能用root用户运行elasticsearch,所以需要切换一个其他...原创 2020-07-17 18:39:34 · 1289 阅读 · 0 评论 -
使用Docker部署单机版Elasticsearch
ES docker镜像列表选中自己需要的版本,拉取镜像:docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.0如果提示超时,就执行如下命令:docker pull elasticsearch:7.6.0创建一个网络名为es_work且driver为bridge的网络(默认创建的就是bridge):docker network create es_work启动容器:docker run -d --name elast原创 2021-09-29 19:03:10 · 340 阅读 · 0 评论 -
使用Docker部署MySQL
docker hub mysql官网地址安装指定版本镜像docker pull mysql:5.7运行docker容器docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7docker run:运行docker容器命令–name mysql :给容器设置别名为mysql-p 3307:3306:将容器的3306端口映射到宿主机的3307端口-e MYSQL_ROOT_PASSWORD=原创 2021-09-29 16:03:54 · 255 阅读 · 0 评论 -
MySQL只读事务到底有啥用?
很多人认为MySQL只读事务没啥用,有点鸡肋,以前我也这么认为,自从认真研究了事务的隔离级别和事务的并发问题后,发现这个只读事务其实并不是大家想象的那么无用。下面举一个实际开发中可能会遇到的例子来说明只读事务的作用。后台要查询用户列表给前端分页展示,分页通过后台实现,前端分页插件需要后台返回总共有多少条记录,以便渲染分页效果,后端返回的数据大概长这样:{ total:18, // 总共多少条记录 list: [...] // 只包含当前页的记录,比如每页显示10条,那么第一页就是10条,第二页就是8原创 2021-01-20 20:36:37 · 2579 阅读 · 9 评论 -
彻底搞懂MySQL InnoDB存储引擎的锁和事务的并发问题
彻底搞懂MySQL InnoDB存储引擎的锁和事务的并发问题两种标准的行级锁表级读写锁两种标准的行级锁共享锁(S Lock),SQL语句:SELECT … LOCK IN SHARE MODE排他锁(X Lock),SQL语句:SELECT … FOR UPDATEInnoDB存储引擎实现了以上两种标准的行级锁。他们的兼容性如下:对于以上两种标准的行级锁来说,有如下规律:只有处在事务中才会生效,事务结束后会自动释放锁;当只有一个事务A对记录1加了共享锁,事务A能修改记录1;当有多个事务对原创 2020-09-07 10:19:28 · 586 阅读 · 0 评论 -
MySQL实现有记录就忽略,没记录就插入以及有记录就更新,没记录就插入
前提MySQL版本 5.5.45,使用的引擎InnoDB.准备数据表现在我有张user表,看下表结构:主键是id,name是普通索引,mobile是唯一索引,其他是普通字段。insert ignore可以实现有数据就忽略,无数据就插入。有数据和无数据是以什么为判断标准?为了彻底搞清楚,我们可以做个实验。表里面有这些数据:当insert ignore的数据包含主键的时候,只要主键相同,就认为数据存在,插入会失败,验证如下:当insert ignore的数据包含唯一索引的时候,只要唯一索引原创 2020-06-25 18:08:30 · 2161 阅读 · 0 评论