- 浏览: 22831 次
最新评论
文章列表
Mysql在线修改Scheme工具原理
- 博客分类:
- database
MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change、 Facebook的 OSC和 LHM 等,这些都是基于触发器(Trigger)的; gh-ost(这是目前快手dba使用的工具) 声称是github自己开源的不需要触发器(Triggerless)支持的在线更改表结构的工具
目前最常用的工具是pt-online-schema-change,大概原理
1)、如果修改表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行
2)、被修改表必须要有主键,否则报错:Cannot c ...
1. undo log
undo日志用于存放数据修改被修改前的值,是逻辑日志,比如delete sql 对应的undo log是一条insert sql。undo log作用有两个,一个是用于事务回滚操作,保证事务原子性,部分解决持久性;另一个是对MVCC实现,即MVCC实现是依赖于undo log的。
实现原子性和持久化的事务的简化过程
假设有A、B两个数据,值分别为1,2。
A.事务开始.
B.记录A=1到undolog.
C.修改A=3.
D.记录B=2到undol
1. 共享锁 排他锁
select * from xxx where a=10 lock in share mode //共享锁
其他事务中的普通select和共享select可以; 排他读以及增删改会阻塞
select * from xxx where a=10 for update //排他锁
其他事务中普通select读可以;共享读、排他读和增删改,都会阻塞
2. 快照读(snapshot read) 和 当前读
普通读,是snapshot读,在当前事务中第一次读是打版本号,当前事务后续所有的普通读,都会跟第一次普通读结果一样或者读取当前事务中对相关记录的 ...
1.《Mysql隔离级别》https://www.jianshu.com/p/4ba118333a19
Mysql innodb默认隔离级别 Repeatable Read,只是部分消除了 幻读问题,普通select语句是快照读(MVCC实现),不会读到其他事务新删改的记录,(但是share mode select 或者拍他锁的 select update insert delete 是当前读, 还是会出现幻读),标准的RR隔离级别定义,是可能出现幻读的,这不能算是mysql的bug,详细见 2的blog
RR隔离级别下的一致性读,不是以begin为开始建立的snapshot,而是 ...
《Mysql inner join left join》
http://justcode.ikeepstudying.com/2016/08/mysql-%E5%9B%BE%E8%A7%A3-inner-join%E3%80%81left-join%E3%80%81right-join%E3%80%81full-outer-join%E3%80%81union%E3%80%81union-all%E7%9A%84%E5%8C%BA%E5%88%AB/
《Mysql MyIsam引擎》http://hudeyong926.iteye.com/blog/1489929
https://www.qcloud.com/community/article/766331?fromSource=gwzcw.93748.93748.93748
《敏捷开发》
Redis 高并发原理
- 博客分类:
- Redis
1 单线程模型
Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中,然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。
2 单线程模型每秒万级别处理能力的原因
(1)纯内存访问。数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础。
(2)非阻塞I/O,Redis采用epoll做为I/O多路 ...
服务如何治理,服务治理的目标是什么
1. 服务注册与发现
2. 服务订阅
3. 服务变更通知
http://www.cnblogs.com/Zachary-Fan/p/service_manage_discovery.html
1. 基于行和列族的管理 每个列族是个map
http://blog.csdn.net/heyutao007/article/details/5766945
2. hbase一些特性,使用 row key获取的原子操作
http://www.uml.org.cn/zjjs/201211132.asp
1.《Thrift通信协议》
可支持二进制序列化方式,省空间效率高
https://qinzhaokun.github.io/2017/09/12/Thrift%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B/
《Mysql 索引原理》 http://blog.codinglabs.org/articles/theory-of-mysql-index.html
3. 《Mysql inner join left join》
http://justcode.ikeepstudying.com/2016/08/mysql-%E5%9B%BE%E8%A7%A3-inner-join%E3%80%81left-join%E3%80%81right-join%E3%80%81full-outer-join%E3%80%81union%E3%80%81union-all%E7%9A%84%E5%8C% ...
1. 操作系统 select poll epoll NIO AIO, 用户态,内核态https://segmentfault.com/a/1190000003063859 介绍IO多路复用的
http://blog.csdn.net/anxpp/article/details/51512200 介绍java nio bio2. Mysql 相关,B+树,乐观锁,悲观锁, ACID, GAP3. 系统设计,高并发系统架构,秒杀系统,唯一订单号,12306设计4. 软件设计原则,设计模式, DDD5. 数据结构与算法,分治 动态规划,leetcode,一致性hash,LRU6. 计算机 ...
Spring MVC(2) - DispatcherServlet运行流程
再次看一下类的继承结构
http请求在Servlet的业务处理流程
// Called by the servlet container to allow the servlet to respond to a request.
// javax.servlet.Servlet中定义的接口service,由 servlet container 调用
// 具体实现在HttpServlet类中
public void service(ServletRequest req, ServletR ...
本节主要讲Spring MVC的DispatcherServlet初始化, Servlet是不能自己启动,是由web容器(比如tomcat)启动和调用Servlet初始化的。DispatcherServlet实现和扩展了javax.Servlet,它是Spring MVC的核心。首先贴一下基础配置文件,web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ ...
本节讲 Spring bean初始化(3) - ApplicationContext
ApplicationContext和BeanFactory都是用于加载Bean的,但是项目中基本都是使用ApplicationContext,原因是它包括了BeanFactory的所有功能,并且进行了扩展,ApplicationContext初始化过程中会完成所有的单例( no-lazy-init) 的初始化
ApplicationContext ctx = new ClassPathXmlApplicationContext("/spring-code-test.xml");
...