数据库
bohu83
微信:niuzai873442
展开
-
《redis设计与实现 》15复制-源码部分
一 序 上一篇整理了redis复制的概念性流程 ,本篇结合复制的实现来看下源码。 复制的建立方法有三种: 在redis.conf文件中配置slaveof <masterip> <masterport>选项,然后指定该配置文件启动Redis生效。 在redis-server启动命令后加上--slaveof <masterip> <m...原创 2018-12-21 00:01:17 · 389 阅读 · 0 评论 -
《redis设计与实现》-15复制
一 序 书上本章内容很丰富,分为新旧版复制来讲解。其中旧复制的实现、旧复制的缺陷、侧重部分重同步实现。 具体的复制的实现:(这部分本篇不展开,下一篇结合源码去看)主从关系的建立 主从网络连接建立 发送PING命令 认证权限 发送端口号 发送 IP 地址 发送能力capability 发送PSYNC命令 发送输出缓冲区数据 命令传播部分重同步实现心跳机制...原创 2018-12-18 19:43:37 · 304 阅读 · 1 评论 -
阿里云Redis短连接性能优化
一 序 前一阵,阿里云的专家来公司分享阿里云的自研数据库polarDB,号称性能是MySQL 的 6 倍,当然抛去一开介绍的硬件、网络的顶配外,主要是数据底层是分布式存储的,天然的适合多读。这些都没大规模商用,好吧,听到阿里云的专家提了一句,包括redis都有自研的版本,做了很多底层的优化,举例子是短连接优化跟AOF的类似mysql的binlog化。正好网上看到一篇介绍Redis短连接性...原创 2018-12-25 00:17:18 · 976 阅读 · 0 评论 -
一次线上数据库死锁问题的排查
一 背景: 数据库 阿里云RDS mysql 5.6 隔离级别: RC 听小伙伴说系统最近在报死锁。奇怪的是update 还执行了。二 相关准备 看表,主要是看表的所以。数据脱敏处理下,我们称为log表。 发现有索引userid,orderid. 两个单独索引。再看下 数据量 count下。真大 已经1亿多条了。看日志,SHOW ENGINE INNOD...原创 2019-07-29 21:02:20 · 912 阅读 · 0 评论 -
SQL语句添加删除修改字段及其他基本操作(33条)转
http://hi.baidu.com/echofish/blog/item/dce70cf35b946ac90b46e02e.html 用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP原创 2016-04-11 18:22:32 · 395 阅读 · 0 评论 -
分库分表及shardingjdbc
一 序关于分库分表,网上有很多文章了,沈剑老师也有专门的文章介绍。数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。 从理论到自己动手写demo还是有差别的。尤其是调研后发现shardingjdbc的官网例子不能直接用。有点错位的感觉:官网的文档是基于java的。实际上以yaml或者spri...原创 2018-05-11 19:11:29 · 1055 阅读 · 0 评论 -
shardingjdbc 2.0.3分库分表demo
shardingjdbc简介上一篇介绍了分库分表的理论,本篇基于官网的example整理下分库分表的demo。能跑起来,满足业务需求。官网地址:https://github.com/sharding-sphere/sharding-sphere-example下面是架构图,可见分库分表涉及的有分库路由,分库规则,分库关键字等。其余的框架给我们实现了。二 demo整合只需添加三个地方(pom.xml...原创 2018-05-12 15:12:34 · 2712 阅读 · 0 评论 -
一种orderID生成策略:
之前沈剑老师介绍过,从订单中心到多对多业务模式设计。常见两种方案:1 维护映射关系查询表。2. 基因分库法:orderid包含userid。有个类似的业务场景。贴个demo来验证下。整体算法类似于snowflake方法,有所调整,加入分库基因。public class Test { static Charset charset = Charset.forName("utf-8"); p...原创 2018-05-14 20:23:11 · 5247 阅读 · 0 评论 -
shardingjdbc(三)-JDBC实现
一 序 看源码的过程,有两个维度,主要是根据执行过程去看。好处是可以有个大的流程图。对于有遗漏的点,可以按照宝结构再扫一遍,查漏补缺。上一篇主要整理了分库分表及主要暴露的API。本边继续从jdbc规范整理,从jdbc的实现,柔性事务,读写分离,路由,结果合并。最后整理模块最多也是核心的SQL解析。感谢芋道源码。http://www.iocoder.cn/Sharding-JDBC/jdb...原创 2018-06-03 22:14:52 · 1636 阅读 · 0 评论 -
沈老师讲课-一致性(上)
一 序: 本文是公司技术学院讲课的笔记,有沈剑老师主讲。欢迎扫一扫关注沈老师公众号:架构师之路 一致性是互联网公司的常见话题,是业务架构中必须考虑的点之一。二 session一致性 因为数据存在冗余会引发一致性问题。 业务场景:session信息不存在,会要求用户登录。 单节点:不存在session一致性问题。 多节点情况: 1.数据互相同步(优点不改代码,缺点:扩容难 ,不推荐) ...原创 2018-05-16 22:06:58 · 400 阅读 · 2 评论 -
shardingjdbc 学习(四)-SQL路由实现
一 序上一篇整理了jdbc的过程 ,update大概分两步,route跟执行。查询还有结果集归并。上面本篇继续从路由开始整理。大概分为:分库分表整体,route包源码分析。本文主要基于shardingjdbc 2.0.3版本整理。感谢芋道源码:http://www.iocoder.cn/Sharding-JDBC/sql-route-2/二 分库分表:这一部分算是第二篇API的补充吧。假设你阅读本...原创 2018-06-04 21:26:51 · 6698 阅读 · 0 评论 -
shardingjdbc分表后分页排序问题
通常的分页: select * from table order by ** limit offset,pagesize ;一 问题部分测试代码,模拟取3页的。 List<PaymentPay> plist =paymentPayService.selectByPage(queryPayDto); System.out.println(plist.size()); for...原创 2018-05-29 10:24:21 · 10709 阅读 · 0 评论 -
shardingjdbc (九)-最大努力型事务
一 序:Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。目前支持的:Best efforts delivery transaction (已经实现).Try confirm cancel transaction (待定).最大努力送达型:在分布式数据库的场景下,相信对于该数据库的操作最终一定可以成功,所以通过最大努力反复尝试送达操作。实际上可以看看图上的流程,不管执行结...原创 2018-06-12 12:11:38 · 5063 阅读 · 5 评论 -
shardingjdbc (五)-SQL改写
一 序 上一篇在《SQL路由实现》 提了SQL改写。这里跟路由紧密结合,是在路由之后的步骤。路由解决了分库分表去查那些,改写负责一些如查询结果需要聚合,对SQL进行调整,生成分库分表后的执行SQL。二 sqltokenSQL改写的源码在core模块的io.shardingjdbc.core.rewrite目录下,分为SQLBuilder和SQLRewriteEngine。SQLToken,SQL...原创 2018-06-06 13:15:52 · 2256 阅读 · 0 评论 -
druid 数据连接getConnection学习
上一篇看了druid的初始化方法。本篇继续看连接获取的源码。基于1.1.6版本 public DruidPooledConnection getConnection(long maxWaitMillis) throws SQLException { init(); //先初始化,已经初始化的跳过 if (filters.size() > 0) { //判断过...原创 2018-03-02 16:38:31 · 13528 阅读 · 0 评论 -
druid 数据库连接池init
一 序: 因为一个偶发的线上数据库报警,使用的mybatis+druidCaused by: java.sql.SQLException: No operations allowed after statement closed. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) at com.mysql.jdbc....原创 2018-03-01 19:24:09 · 2871 阅读 · 0 评论 -
MySQL的deocode,与not in的关联查询实现
一 decode在Oracle中使用decode方法可以轻松实现代码和值之间的转换,MySQL没有这个函数,可以换种方式实现:if表里面存放数据,状态用有效1与无效2来区分,一个用户可能有多条记录。要求查询全部数据都无效的用户。SELECT custom_id,sum(if(status='2', 0, 1 ) )score from position GROUP BY c原创 2016-07-24 09:54:32 · 1184 阅读 · 0 评论 -
MySql模糊查询like通配符使用详细介绍
今天查线上数据问题的时候。遇到一个问题。从一个表查询like‘%type%’的时候。结果太多,不准确.改成这种: msg_content like '%:204,______:2%'。转载一篇文章,以备记录。%代表任意多个字符 _代表一个字符 在 MySQL中,SQL的模式缺省是忽略大小写的正则模式使用REGEXP和NOT REGEXP操作符。“.”匹配任何单个的转载 2016-07-13 19:49:11 · 804 阅读 · 0 评论 -
mysql单表自关联查询
好久没写sql了,这个系统居然要求是全栈类型。从后到前都要做(我的js都忘光了),先记录下一个sql这块吧。一需求:现在有个表crm,里面存放着:id,recommended_id,其中recommended_id属于id范围,就是推荐人的id。现在的需求是,查询全部的数据,过滤条件是符合某个分类,返回时id,及其所推荐id,若果没有,则返回null,如果推荐多条,和合并为一条用“”,原创 2016-07-06 17:52:51 · 10459 阅读 · 0 评论 -
mysql单表多次自关联查询
坏消息:还是上次那一个表,要加上条件,推荐人被推荐人都得符合条件。这个sql写了3小时。要求一条sql查询出所有符合条件的id及其对应的推荐id,推荐id也有脏数据得去过滤。感到一个表查了查去,绕晕了。好消息:大家对此sql没有啥好优化的建议。我提议废了这个接口。改成多次遍历去查,用代码实现就简单多了。于是废了。原创 2016-07-07 20:38:06 · 5299 阅读 · 0 评论 -
MYSQL '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
在使用MySql 时, 数据库中的字段类型是timestamp的,默认为0000-00-00, 会发生异常:java.sql.SQLException: Value ‘0000-00-00 ’ can not be represented as java.sql.Timestamp.数据库里面默认值是这一串0,但是JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java原创 2016-07-31 11:04:03 · 581 阅读 · 0 评论 -
导致kettle脚本异常的sql:FIELDS TERMINATED BY ';'
一背景:接手一个系统,包含定时任务JOB工程,其中一个重要模块依赖于kettle脚本。但是偏偏这个模块报错了,导致只能手工屏蔽该脚本,人工在两个库之间执行sql导数据。还都是半夜之后跑任务,十分折磨人。决心修复这个bug。二分析:TRUNCATE TABLE crm_custom_status_history;LOAD DATA LOCAL INFILE '/opt/data/et原创 2016-07-31 23:50:01 · 7179 阅读 · 0 评论 -
mysql常见问答
1.mysam与innodb区别: InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。 以下是一原创 2016-04-17 11:05:11 · 598 阅读 · 0 评论 -
mysql LImit 慢查询报警优化
1 问题:收到慢sql报警;原创 2017-08-08 10:24:47 · 940 阅读 · 0 评论 -
mysql 慢sql之index_merge
收到超时报警:Receive data timeout or error!timeout:5700ms。。。。。看了下,实际执行花了20多S,超出dsf框架的超时时间,不等返回数据,直接就抛异常了。*********************************************************************************************看下原创 2018-01-13 19:40:55 · 4791 阅读 · 0 评论 -
shardingjdbc 学习(一):源码总体结构
本文基于shardingjdbc 2.0.3版本。主要是整理sharding-jdbc-core。原创 2018-05-30 14:18:39 · 587 阅读 · 0 评论 -
shardingjdbc (六)-SQL执行
一 序之前整理了SQL的路由,SQL的改写,按照jdbc的过程,接下来就是SQL执行了。SQL执行的源码在core模块下,下图所示。下图是查询流程,绿框是SQL执行过程。二 ExecutorEngine2.1 ListeningExecutorServiceSQL执行引擎,基于guava工具类提供的继承自 ExecutorService 的线程服务接口,提供创建 ListenableFuture ...原创 2018-06-06 20:17:06 · 3719 阅读 · 0 评论 -
INNODB记录格式
一 序 本文是基于《MYSQL运维内参》第9章整理而成。源码太复杂,看一遍没有懂,先整理下来。 之前的文章已经整理过索引及页面格式,查找物理记录的过程。本篇介绍物理记录的存储格式。 用命令 show table status like 'XX' 可以看到,row_format就是当前表使用的行存储格式。 InnoDB存储引擎提供了compact(5.1后的默认...原创 2018-07-27 13:25:54 · 788 阅读 · 0 评论 -
MySQL · 引擎特性 · InnoDB Buffer Pool
一序 上一篇在介绍innodb的双写特性时,提到了Buffer Pool,知识点很多本文专门整理。《MYSQL运维内参的》的第11章第一节介绍了这部分。 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入了这一中间层,数据库对内存...原创 2018-08-01 15:01:25 · 1239 阅读 · 0 评论 -
MySQL · 引擎特性 · InnoDB undo log
一 序 本文根据《MYSQL运维内参》第11章整理。上一篇整理了Innodb redo log, 本篇继续整理undo log,崩溃恢复下一篇整理。 Undo log是InnoDB MVCC事务特性的重要组成部分。当我们对记录做了变更操作时就会产生undo记录,Undo记录默认被记录到系统表空间(ibdata)中,但从5.6开始,也可以使用独立的Undo 表空间。 ...原创 2018-08-12 23:19:04 · 17051 阅读 · 7 评论 -
MySQL · 引擎特性 · InnoDB redo log
一 序 本文根据《MYSQL运维内参》第11章INNODB日志管理机制整理,本篇书上侧重于原理说明日志的生成、格式、工作原理、刷盘机制等。限于篇幅,崩溃恢复的需要单独整理。InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性。解释下redolog与事务持久性:redo l...原创 2018-08-08 13:34:31 · 4985 阅读 · 0 评论 -
MySQL · 引擎特性 · InnoDB 崩溃恢复过程
一 序 之前整理了 InnoDB redo log 和 undo log 的相关知识,本文整理 InnoDB 在崩溃恢复时的主要流程。在《MYSQL运维内参》第11章是穿插着讲,在redo log跟undo log.总体上还是taobao.mysql 介绍的全面,本文主要以taobao.mysql为主。 Crash Recovery流程 innobase_init ...原创 2018-08-17 12:02:21 · 5040 阅读 · 0 评论 -
MySQL · 引擎特性 · Innodb change buffer介绍
一 序 之前整理了undo log、redo log以及InnoDB如何崩溃恢复来实现数据ACID的相关知识。本篇继续整理InnoDB change buffer。 Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。 官网的解释比较详细了。5.7版本的截取如下: Change BufferThe ch...原创 2018-08-20 13:58:40 · 4532 阅读 · 1 评论 -
MySQL · 引擎特性 · InnoDB Adaptive hash index介绍
一 序先看官网上的介绍(翻译来自MK提丰 )The adaptive hash index (AHI) lets InnoDB perform more like an in-memory database on systems with appropriate combinations of workload and ample memory for the buffer pool, w...原创 2018-08-30 19:20:46 · 5128 阅读 · 0 评论 -
MySQL · 引擎特性 · InnoDB 事务子系统整理(上)
一 序 本文基于mysql.taobao的月报《MySQL · 引擎特性 · InnoDB 事务子系统介绍》。这里牵扯的知识点很多,本篇整理上半部分,主要包含mdl,事务开启,事务提交,savepoint.二 事务开启 InnoDB 提供了多种方式来开启一个事务,最简单的就是以一条 BEGIN 语句开始,也可以以 START TRANSACTION 开启事务,你还可以...原创 2018-09-09 23:29:50 · 553 阅读 · 0 评论 -
MySQL的MDL元数据锁
一 序 本来在看mysql.taobao介绍InnoDB 事务子系统介绍 ,真的头大,名词都看不懂,还是分开来学习的好,本文主要整理MDL(metadata locking)锁。作为尝试学习人新人,发现困惑很多,应该是没有买本书系统的去看的事,只是突然的去看技术博客。官网的文档介绍的比较少,英语不好。所以我自己觉得有几个层次,:有个功能干啥的,怎么配置参数或者使用,能看源码明白怎么实...原创 2018-09-07 16:38:13 · 5486 阅读 · 1 评论 -
MYSQL INNODB 三大特性之双写
一 序 本文属于《MYSQL运维内参》第九章读书笔记,因为INNODB的三大特性:插入缓存,两次写,自适应hash,还是觉得作者先介绍插入缓存会更有助于理解。 为啥会有两次写?必要了解partial page write 问题 : InnoDB 的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进...原创 2018-07-30 16:30:12 · 15499 阅读 · 0 评论 -
INNODB 数据页
一 序 上一篇我们整理了INNODB的索引的原理,再加上之前介绍的段、簇(extent),页管理,应该是能串起来了。还有单个的页面管理没有介绍。本文基于《MYSQL运维内参》第八章部分整理。 背景知识: 数据库采用数据页的形式组织数据。MySQL默认的非压缩数据页为16KB。在ibd中间中,0-16KB偏移量即为0号数据页,16KB-32KB的为1号数据页,依次类推。数据...原创 2018-07-20 18:22:54 · 3932 阅读 · 0 评论 -
shardingjdbc 入门概念
官网:http://shardingjdbc.io/document/legacy/2.x/cn/02-guide/concepts/LogicTable数据分片的逻辑表,对于水平拆分的数据库(表),同一类表的总称。例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order。ActualTable在分片的数据库中真实存在的物理表。即上个示例...原创 2018-06-01 17:28:37 · 2293 阅读 · 0 评论 -
shardingjdbc 学习(二)-API与分库分表
本文从官网的配置的 数据源入门,介绍支持的分库分表及与对应的API源码一 官网分库分表数据源配置1.1 核心概念: shardingjdbc 对数据分为yaml,spring,spring boot等多种方式。可以结合实际项目使用,我们实际采用spring,但是为了节省篇幅,把官网的yaml带注释的贴过来。dataSources: 数据源配置 <data_source_name> ...原创 2018-06-01 19:09:10 · 8062 阅读 · 1 评论