数据库
文章平均质量分 67
装睡的小5郎
爱生活,爱编程!
展开
-
模板模式实现分布式锁实战
分布式锁相信大家都有用过,常见的分布式锁实现方式例如redis、zookeeper、数据库都可以实现,而我们代码中强引用这些分布式锁的代码,那么当我们以后想替换分布式锁的实现方式时,需要修改代码的成本会很高,于是我们需要借鉴一些设计模式思想来设计,下面我介绍下这三个分布式锁的实现逻辑以及我们项目中是怎么实现。原创 2024-01-05 17:10:10 · 831 阅读 · 0 评论 -
优雅数据同步--canal实现mysql同步demo
当需要两张表数据同步的时候,我们会想到几种方案?最简单的一种方式就是触发器的方式。例如A同步到B,可以通过下面的sql来添加触发器但是这种方式有一定的弊端和局限性,首先就是只局限同库,并且会增大数据库开销,以及无法实现一些自定义的逻辑。canal是阿里推出的一个开源的中间件,它的原理类似于mysql主从的原理,它把自己伪装成mysql的从库,这样就可以从主库中获取binLog来复制数据接下来我们自己搭建一个canal同步mysql的一个demo。原创 2022-12-23 17:56:17 · 2201 阅读 · 0 评论 -
公司open api对接遇到的问题解决
之前在写开放平台的接口的时候,碰到了一些问题,记录一下api接口速度优化由于工期很赶,所以还没来得及自己测试,接口匆匆忙忙上线,当客户在用时,发现查询接口使用特别慢。然后分析原因,发现有慢sql引起的。首先,接口调用的是我们系统的一个现成接口,主表的数据量很大,又冗余了一些不需要的关联表,于是我决定用自己的sql来执行,其次我们接口给出的时间参数发现没有加索引,导致全表扫描。所以加了索引后接口从5s降低到1s,其次,我使用althas发现接口的时间一半多的时间都在请求count,而调用方只需要第原创 2021-10-31 12:11:21 · 740 阅读 · 0 评论 -
记一次长事务问题排查思路
今天早上dba群里抛出一个问题说,有一个长事务一直在重复执行我们的一个语句。于是问题抛给我们,我们开始排查。首先dba告知我们这句sql是重复在调用,然后还有这个事务的其他sql语句,还有开始的时间点。我的想法是先从请求入手,看看这个时间点有没有耗时特别长的,或者跟这些sql相关的请求,但是一开始并没有找到,原因后面再说。第一步失败后,就只能从代码找起了,先找到对应sql的位置,然后找到对应的接口,一步步找。这个过程是比较痛苦的,还好我运气不错,找到了跟这个长事务中的sql十分相似的代码,是订单导出。原创 2021-07-27 17:37:43 · 430 阅读 · 0 评论 -
通过数据库唯一索引实现分布式锁
伪代码// 需要加事务@Transactional@Overridepublic <T> T lock(XxxLock lock, ILockCallback<T> callback) { // 数据库加锁 lock(lock); // 加锁逻辑 T result = callback.callback(); //释放锁 try { lockDao.batchDelete(locks); } catch原创 2021-05-27 11:06:14 · 706 阅读 · 0 评论 -
事务隔离级别实现-行锁与MCCC
我们都知道数据库在并发同时执行的时候,就可能出现脏读、不可重复读、幻读的问题,为了解决这些问题,设置了四种事务的隔离级别,分别是读未提交:A事务【能】看到B事务【未提交】的修改读已提交:A事务【能】看到B事务【已提交】的修改可重复读:A事务【不能】看到B事务【已提交】的修改串行化:所有事务按顺序执行,不能并行我们以Mysql为例,Mysql是怎么实现这些隔离级别的呢?1. 通过数据库行锁实现Mysql的行锁有两种,【读锁】(共享锁)和【写锁】(排它锁)。如果有一行数据如果加了【读锁】,那么原创 2020-11-04 20:52:55 · 321 阅读 · 0 评论 -
为什么我两次sql查询,查出来的对象引用是同一个?
回答这个问题,我们需要掌握MyBatis的缓存概念,如果我们两次查询,一次是数据库查询,而第二次直接取得缓存中的数据,那么这两次查询查询的数据就是同一个对象一级缓存Mybatis的一级缓存是Session级别的缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并把对象放入缓存中,第二次以后是直接去缓存中取。当执行SQL查询中间发生了事务提交(增删改都会触发自动提交)的操作,都会把当前S原创 2020-07-22 17:42:39 · 1823 阅读 · 0 评论 -
MySQL中优化SQL语句的查询方法
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is nul...转载 2019-02-19 17:33:16 · 205 阅读 · 0 评论 -
某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么?
数据千万级别之多,占用的存储空间也比较大,可想而知它不会存储在一块连续的物理空间上,而是链式存储在多个碎片的物理空间上。可能对于长字符串的比较,就用更多的时间查找与比较,这就导致用更多的时间。可以做表拆分,减少单表字段数量,优化表结构。在保证主键有效的情况下,检查主键索引的字段顺序,使得查询语句中条件的字段顺序和主键索引的字段顺序保持一致。主要两种拆分 垂直拆分,水平拆分。垂直分表也就...原创 2019-02-19 10:53:03 · 1516 阅读 · 0 评论 -
超详细,从零开始搭建阿里云服务器(centos7)第五章 安装mysql
1.下载MySQL源安装包wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装MySql源yum -y install mysql57-community-release-el7-11.noarch.rpm查看一下安装效果yum repolist enabled | grep mysql...原创 2019-02-17 15:21:25 · 761 阅读 · 1 评论 -
MySql存储引擎和数据结构
数据库索引总结为什么要使用索引?通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快 数据的检索速度(大大减少的检索的数据量),这也是创建索引的最主要的原因。帮助服务器避免排序和临时表将随机IO变为顺序IO可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。索引这么多优点,为什么不对表中的每一个列创建一个索引呢?当对表中的数据进行增加、删除...原创 2018-11-13 15:49:59 · 316 阅读 · 0 评论 -
数据库之锁与事务
前言:我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。MySQL中锁的种类M...原创 2018-10-22 11:38:05 · 387 阅读 · 0 评论 -
MyCAT简单笔记
1.为什么要使用MyCAT?MyCAT是mysql中间件,一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群2.MyCAT中我的理解我们公司使用MyCAT作为mysql的中间件,起初一直不理解全局表和分片表的概念,后来在网上看了一些大牛的博客渐渐理解了一些.首先假设我们创建了两个数据库dn1,dn2通过MyCAT来管控这两个数据库,比如说我要建一张user表原创 2017-12-23 15:25:43 · 219 阅读 · 0 评论 -
数据库建立索引的优缺点
索引不能盲目加,具体如下:原创 2017-12-16 10:30:52 · 486 阅读 · 0 评论