数据库技术
文章平均质量分 88
菠萝-琪琪
这个作者很懒,什么都没留下…
展开
-
常用SQL优化总结
然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。14)并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。11)在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。原创 2022-10-08 22:20:04 · 132 阅读 · 0 评论 -
Hbase 深度使用分析
循环put...那是不可能的..可以使用put(List puts) 需要注意的是当一部分数据插入成功后,此时某个RegionServer出现异常,之前的数据是不会回滚的,对于插入失败的数据hbase默认会进行重试直到到达最大重试次数还是失败即会结束重试(失败数据在写缓冲区),不过如果列族错误了,那么不会进行重试,直接抛出异常get(List gets) 返回一个Result数组,如果一部分数据失败,一部分数据查询成功,最终hbase还是会返回异常,如果你希望不要抛出异常而是返回成功部分......原创 2022-06-21 00:08:29 · 1094 阅读 · 0 评论 -
用Java设计实现多实例多库查询
服务的边界职责:大数据层取数统一实现入口(数据源的路由,ADB/CK/HBASE... 大数据操作层数据源的路由) 支持多实例、多库、多表的异构数据查询通过 查询 语义分析+元信息解析,拆解 查询输入 中的异构数据源处理,所有异构数据处理采用异步 Callback 方式解决的问题:多个数据来源写入到不同实例、不同库中,并且一个圈选可以支持圈多个实例(不同库)中的标签、事件数据 单表数据量过大,目前只能通过压缩保留时间解决,需要可以进行按时间段拆表分表查询数据单实例配置上限问题,实例升级..原创 2022-03-08 21:04:14 · 4194 阅读 · 0 评论 -
SQL 解析原理和使用场景
Github 地址:https://github.com/j-easy/easy-ruleshttps://github.com/j-easy/easy-rules原创 2022-01-09 16:27:23 · 4324 阅读 · 0 评论 -
ClickHouse 结构以及使用场景
大多数公司的日志系统检索使用的都是 ELK+Kafka+ES 的架构,在日志数据量不是特别庞大的时候其实这种架构还是挺好的,简单并且也很高效,但是当你的公司日志数据量非常庞大每分钟生产1亿条数据的场景下,这种架构的问题就很明显了,主要会出现下面几个问题:延迟很高,kafka收集push 的延迟变高 ES 插入性能迅速下降,大量插入请求只能排队不然 ES 会被打挂,限流排队也就意味着延迟变得更加高我们这边文章只讨论数据存储层进行提效,那么就是 CK 来替代 ES 了CK 高性能的4个特点上图.原创 2021-12-02 13:53:21 · 3005 阅读 · 0 评论 -
Elasticsearch断路器相关知识及使用
背景在使用elasticsearch时,如果使用了高基数的聚合查询,有可能导致内存溢出OOM,导致elasticsearch的节点问题,进一步引发该节点上的分片漂移,从而影响线上的查询问题。原因Elasticsearch在执行高基数查询时,会默认为每组数据生成一个桶,并且存放在内存中,当基数很大也就是分组数据的重复性不高时,就会生成很多的桶,从而占用大量的内存。内存使用介绍ES的JVM heap按使用场景分为可GC部分和常驻部分。 可GC部分内存会随着GC操作而被回收;...原创 2021-08-14 22:24:18 · 2055 阅读 · 1 评论 -
Redis 间歇性抖动<集群下mget的性能问题>
redis问题在最近公司内部使用redis的时候,在部分场景中发现redis经常会间歇性的抖动,具体表现为在短时间内redis rt上涨明显,RedisCommandTimeoutException异常陡增,如下图:监控面板是按照分钟级别进行统计,所以rt上涨看起来不是很明显。这种情况肯定不太正常,并且在近期出现的频率有上升趋势。定位原因遇到这种问题,首先会想到是不是redis本身抖动造成的,看表象其实很像,无规律,间歇性,影响时间很短,所以第一时间找了DBA确认当时是不是r原创 2021-07-11 14:29:23 · 2114 阅读 · 3 评论 -
SpringBoot事务不起作用问题的解决方案
背景在做业务开发时,遇到了一个事务不起作用的问题。大概流程是这样的,方法内部的方法调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。场景在一个UserService里面,一个内部方法callSaveUser调用该service里面的saveUser方法 @Override @Transactional(rollbackFor = RuntimeException.class) public void saveUser(User use.原创 2021-07-04 09:52:59 · 916 阅读 · 0 评论 -
大数据生态家族重要产物:HBase 生态圈
提到大数据的存储,大多数人首先联想到的是 Hadoop 和 Hadoop 中的 HDFS 模块。大家熟知的 Spark、以及 Hadoop 的 MapReduce,可以理解为一种计算框架。而 HDFS,我们可以认为是为计算框架服务的存储层。因此不管是 Spark 还是 MapReduce,都需要使用 HDFS 作为默认的持久化存储层。那么 HBase 又是什么,可以用在哪里,解决什么样的问题?简单地,我们可以认为 HBase 是一种类似于数据库的存储层,也就是说 HBase 适用于结构化的存储。并且 HBa原创 2021-03-12 23:00:24 · 304 阅读 · 0 评论 -
Redis-Mysql 数据一致性问题解决框架:Canal 设计详解
前言redis和mysql如何保证数据一致?其实这个问题是个伪命题,因为不可能做到100%场景的绝对实时一致性,只能做到软一致或者最终一致性,基本上比较靠谱的就是利用Canal来做最终一致性一. canal概述canal是Alibaba旗下的一款开源项目,纯Java开发.它是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql。应用场景:1.数据同步,比如:做在线、离线数据库之间的数据同步操作; 2.数据消费,比如:需要根据关注的数据库表的变化,做搜.原创 2021-02-19 20:04:49 · 2034 阅读 · 3 评论 -
MySQL MVCC 原理及实现
什么是MVCCMultiversion Concurrency Control:多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题(提高并发读写性能)。MVCC主要适用于Mysql的RC(读已提交),RR(可重复读)隔离级别问题(痛点)A正在读数据库中某些内容,而B正在给这些内容做修改(A,B为两个单独的事务),A可能看到一个不一致的数据,在B没有提交前,如何让A能够一直读到的数据都是一致的或读到的数据一直是最新的呢?每个用户连接原创 2021-02-08 20:51:06 · 401 阅读 · 0 评论 -
理解分布式事务
分布式事务分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。对于分布式事务而言几乎满足不了 ACID,其实对于单机事务而言大部分情况下也没有满足 ACID,不然怎么会有四种隔离级别呢?所以更别说分布在不同数据库或者不同应用上的分布式事务了。2PC2PC(Two-phase commit protocol),中文叫二阶段提交。二阶段提交是一种强一致性设计,2PC 引入一个事务协调者的角色来协调管理各参与者(也可称之为各本地资源)的提交和回滚,二阶段分别指的..原创 2021-01-31 20:22:33 · 130 阅读 · 0 评论 -
MongoDB 4.2 分片集群搭建
1 部署结构1.1 集群结构典型的三分片Mongo集群如下图所示,包含三类组件:查询路由、配置服务器、分片。其中查询路由为mongos进程,配置服务器和分片都是mongod进程。配置服务器和分片都采取副本集(replica set)来确保可用性和健壮性,每个副本集最少包含三个节点。查询路由都是单实例运行,没有副本集机制,可根据需要增加实例数量,也可以在外部添加负载均衡。上图中每个方框仅代表功能集合,不代表物理位置。实际部署时,为了避免单点故障,同一个副本集中的成员,应该部署在不同主机上...原创 2021-01-29 00:01:31 · 1928 阅读 · 0 评论 -
聊聊JNDI
概念JNDI(Java Naming and Directory Interface ),类似于在一个注册中心注册一个东西,以后要用的时候,只需要根据名字去注册中心查找,注册中心返回你要的东西。web程序,我们可以将一些东西(比如数据库相关的)交给服务器软件去配置和管理(有全局配置和单个web程序的配置),在程序代码中只要通过名称查找就能得到我们注册的东西,而且如果注册的东西有变,比如更换了数据库,我们只需要修改注册信息,名称不改,因此代码也不需要修改。String jndiName= ...;原创 2021-01-17 22:37:36 · 102 阅读 · 0 评论 -
Mysql中order by 排序原理
在实际开发中经常会使用order by这样的排序关键字,然后也会经常遇到DBA找上你和你说『你的order by 有问题,数据量太大了执行太慢了,需要优化你的sql』,那么我们应该怎么优化我们的order by呢再要对某一件事情进行改变之前,我们首先要了解这件事情产生的原因以及本质,这样才能准确的解决问题案例:假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄我们的查询语句一般是这样的select city,name,age from t wh.原创 2021-01-13 00:41:23 · 1138 阅读 · 1 评论 -
Mysql-Innodb引擎索引存储深度解析
索引定义和一些概念:我们知道,数据库查询是数据库的最主要功能之一。但每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。InnoDB索引原理:索引实现: MyIS.原创 2021-01-13 00:29:00 · 183 阅读 · 0 评论 -
什么是Redis NUMA陷阱!
NUMA陷阱的概述:我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小。然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理机,如果不考虑CPU资源的的浪费,我是否可以开一个50G的Redis实例?于是我在Google上各种搜索,讨论这个问题的人似乎不多。找到唯一感觉靠谱点的答案,那就是单进程分配的内存最好不要超过一个node里的内存总量,否则linux当该node里的内存分配光了的时候,会在自己node转载 2021-01-10 21:54:14 · 562 阅读 · 0 评论 -
Redis6 新特性多线程解析
众所周知,Redis 之前的版本一直都是典型的单线程模型(注意:这里不是指 Redis 单实例中只有一个线程,而是表示 核心操作模块由单线程完成,当然另外还有一些 辅助线程 从旁协助,比如 LRU 的淘汰过程),为什么不使用多线程呢,其实原因很简单(官方解释)简单说来就是:根据以往的场景,普通 KV 存储 瓶颈压根不在 CPU,而往往可能受到内存和网络I/O的制约 Redis 中有各种类型的数据操作,甚至包括一些事务处理,如果采用多线程,则会被多线程产生的切换问题而困扰,也可能因为加锁...原创 2021-01-10 21:41:04 · 460 阅读 · 1 评论 -
mysql覆盖索引与回表
回表查询要说回表查询,先要从InnoDB的索引实现说起。InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Secondary Index)。InnoDB的聚集索引InnoDB聚集索引的叶子节点存储行记录,因此InnoDB必须要有且只有一个聚集索引。1.如果表定义了PK(Primary Key,主键),那么PK就是聚集索引。2.如果表没有定义PK,则第一个NOT NULL UNIQUE的列就是聚集索引。3.否则InnoDB会另外创建一个隐藏的R原创 2021-01-10 21:08:49 · 171 阅读 · 0 评论 -
Shardingjdbc的深度定制化过程
公司原先使用的数据库中间件是mycat,但是mycat由于很早就开始不维护了,所以我们再使用过程中出现了很多问题都无法的到解决,如果各位同学有兴趣可以再压测时观察下mycat的堆栈活动,ygc是非常频繁的,并且很不稳定,当时考虑切换到Sharding-Proxy上面去,同样是数据库中间件这种方案我们内部认为是改动最小的。可是事实证明我们错了,Sharding-Proxy由于也是刚开源不久的东西,其实也存在不少BUG,虽然社区活跃但是官方文档实在太不全了,导致我们遇到每一个问题都需要花很大的精力去排查、定原创 2020-05-26 14:47:47 · 561 阅读 · 0 评论 -
高性能Mysql中间组件Mycat安装配置
由于公司项目需要使用到读写分离,但是官方版本的Mysql-proxy读写分离组件太不稳定且有很多BUG,最终决定使用Mycat作为中间组件,其实读写分离只是Mycat中的一个功能,Mycat中还有分区分表等功能特性非常实用,并且还能通过Mycat-WEB进行各种监控,还是非常方便的,下面是具体的安装配置步骤。 首先去Mycat的官网:http://www.mycat.io/ 下载最...原创 2018-04-27 07:11:18 · 1735 阅读 · 0 评论 -
Mongo 3.2 新增用户及权限设置
MongoDB常用命令[root@snails ~]# ps -ef|grep mongod[root@snails ~]# mongo --host=127.0.0.1 --port=27017MongoDB shell version: 3.2.7connecting to: 127.0.0.1:27017/test> show dbs #显示数据库列表 > show coll转载 2016-10-28 11:45:49 · 1274 阅读 · 0 评论 -
深入理解 MySQL—锁、事务与并发控制
1. MySQL 服务器逻辑架构(图片来源MySQL官网)每个连接都会在 MySQL 服务端产生一个线程(内部通过线程池管理线程),比如一个 select 语句进入,MySQL 首先会在查询缓存中查找是否缓存了这个 select 的结果集,如果没有则继续执行解析、优化、执行的过程;否则会之间从缓存中获取结果集。2. MySQL锁2.1、Shared and Exclusive ...转载 2019-05-05 22:13:13 · 267 阅读 · 0 评论 -
MySQL 5.7 优化InnoDB配置
InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它My...转载 2018-07-01 13:14:08 · 3712 阅读 · 0 评论 -
Mysql 日志表定时归档处理
数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档。1 - 创建一个新表,表结构和索引与旧表一模一样create table table_new like table_old;2 - 新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除delimiter $create pr转载 2017-01-10 10:10:20 · 3581 阅读 · 0 评论 -
Mysql 使用UUID和自增主键ID性能对比测试
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说MySQL不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 测试过程转载 2016-11-22 16:05:53 · 7406 阅读 · 3 评论 -
Mysql 优化讨论
随着公司业务的快速扩展,数据日益增多,对于性能要求也被慢慢的提上了日程,谈下我在Mysql优化上面进行的方向吧。截止优化前,公司几张数据量较大的表如下:1.场次关联商品表 73万条记录2.场次时间表 21万条记录3.LBS上报记录表 37万条记录4.用户登录记录表 178万条记录5.用户手机通讯录存储表 42万条记录一.之前主键ID使用了UUID类原创 2016-11-21 21:13:01 · 327 阅读 · 0 评论 -
Mysql GTID 模式详解
一、GTID的概述:1、全局事物标识:global transaction identifieds。2、GTID事物是全局唯一性的,且一个事务对应一个GTID。3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。4、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_posti转载 2016-11-14 16:11:19 · 19619 阅读 · 2 评论 -
Mysql 分页加速
select * from table LIMIT 5,10; #返回第6-15行数据select * from table LIMIT 5; #返回前5行select * from table LIMIT 0,5; #返回前5行我们来写分页物理分页select * from table LIMIT (当前页-1)*每页显示条数,每页显示条数;原创 2016-09-26 20:15:11 · 444 阅读 · 0 评论 -
Mysql 子查询效率优化
一、MySQL子查询的位置 当一个查询是另一个查询的子部分是,称之为子查询(查询语句中嵌套含有查询语句)。子查询也是使用频率比较高的一种查询类型。因此,优化子查询,对于整个系统的性能也有直接的影响。 从查询出现在SQL语句的位置来看,它可以出现在目标列中,也可以出现在from子句中,还可以出现在JOIN/ON子句、GROUPBY子句、HAVING子句、ORD转载 2016-10-11 14:39:57 · 18350 阅读 · 0 评论 -
Mysql 面试宝典
1, mysql的复制原理以及流程。(1)先问基本原理流程,3个线程以及之间的关联。 答:Mysql复制的三个线程:主库线程,从库I/O线程,从库sql线程; 复制流程:(1)I/O线程向主库发出请求 (2)主库线程响应请求,并推binlog日志到从库 (3)I/O线程收到线程并记入中继日志 (原创 2016-10-10 13:44:32 · 2693 阅读 · 1 评论 -
Mysql Innodb锁分析
说明:前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理; 在InnoDB Plugin之前,一般通过show full processlist和show engine innodb status命令查看当前的数据库请求,然后再判断当前事转载 2016-09-11 17:52:43 · 3877 阅读 · 0 评论 -
MongoDB 开启安全认证及创建用户
1.打开./mongo 脚本2.use admin; 创建管理员账号db.addUser('tank','test'); //添加一个管理员账号 3.将账号认证db.auth('tank','test');4.配置mongodb支持auth认证并重启打开mongo.conf文件中auth = true./mongod -f /etc/mongo.conf原创 2017-01-17 19:46:27 · 543 阅读 · 0 评论 -
SpringBoot 配置Mysql多数据源DataSource以及各种工作环境切换
公司内部项目从SpringMVC转型至SpringBoot,期间遇到不少小挫折,现记录下来方便其他小伙伴能够少走坑。通常我们一个项目可能存在开发、联调、测试、线上等环境,那么我们使用SpringBoot的工作环境切换配置会很方便,首先新建一个application-dev.properties开发环境文件,然后再application.properties主文件中使用spring.profil原创 2017-07-18 22:39:34 · 4699 阅读 · 1 评论 -
创建MySQL用户 赋予某指定库表的权限
MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* ...原创 2018-06-06 10:16:29 · 6752 阅读 · 1 评论 -
Mysql QPS和TPS计算
(1)QPS(每秒Query量)QPS = Questions(or Queries) / secondsmysql > show global status like 'Question%';(2)TPS(每秒事务量)TPS = (Com_commit + Com_rollback) / secondsmysql > show global status like 'Com_co...原创 2018-05-28 21:07:11 · 2120 阅读 · 0 评论 -
MySQL中删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断SELECT *FROM peopleWHERE peopleId IN ( SELECT peopleId FROM ...原创 2018-05-21 15:14:36 · 2893 阅读 · 1 评论 -
Mysql Join语法解析与性能分析
一.Join语法概述join 用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionatable1:左表;table2:右表。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。LEFT JOIN(左连接):取得左表(table1)完全记录...原创 2018-05-21 15:12:41 · 171 阅读 · 0 评论 -
Mysql-Proxy 读写分离的各种坑,特别是复制延迟时
延迟问题读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSyncReplicationDesign补丁。端口问题MySQL-Proxy缺省使用的是4040端口,如果你想透明的把3306端口的请求转发给4040的话,那么可以:iptables -t nat -I PREROUTING -s ! 127.0.0.1 -p tcp --dport 3306 -j REDIRECT ...原创 2018-03-20 00:37:27 · 4051 阅读 · 0 评论 -
Linux 安装配置Mysql-Proxy 读写分离
场景描述:数据库Master主服务器:192.168.10.130数据库Slave从服务器:192.168.10.131MySQL-Proxy调度服务器:192.168.10.132以下操作,均是在192.168.10.132即MySQL-Proxy调度服务器 上进行的。3.1 MySQL的安装与配置具体的安装过程与上文相同。3.2 检查系统所需软件包通过 rpm -qa | grep name ...原创 2018-03-03 15:14:02 · 1462 阅读 · 0 评论