从头开始学分库分表
从头开始学分库分表
小大宇
能与优秀的人为伍自然就会变优秀
展开
-
从头开始学分库分表-------事务
事务的四个特性原子性:要么全做,要么全不做。一致性:要么全部成功,要么全部失败隔离性:一个事务在操作的时候,不受其它事务的干扰,各个事务之间是独立的永久性:事务提交对数据库的影响是永久的并发事务带来的问题脏读:一个事务访问数据并修改了数据,但是还没有提交。另外一个事务就读到了修改后的数据幻读:事务1(T1)第一次读到了几条数据,事务2(T2)又提交了几条数据。随后,T1又读取数据库的时候,发现了之前不存在的数据,好像发生了幻觉一样不可重复读:T1在一个事务内多次读相同的.原创 2020-12-21 15:26:31 · 221 阅读 · 0 评论 -
从头开始学分库分表-------补偿事务TCC
补偿事务TCC 补偿事务TCC,全称Try-Confirm-Cancel。 TCC的核心思想:针对每个操作都要注册一个与其对应的确认(Try)和补偿(Cancel)。 Try阶段:做一些业务检查以及一些资源预留。它需要后续的Confirm一起才能构成一个完成的业务逻辑。 Comfirm阶段:确认提交。Try阶段所有分支事务执行成功后开始执行Confirm。 Cancel阶段:业务执行出错需要回滚 ...原创 2020-12-18 16:22:29 · 318 阅读 · 2 评论 -
从头开始学分库分表-------三阶段提交协议
三阶段提交协议 三阶段提交主要解决了二阶段提交的缺点。 (1)【事务管理器】及【数据库事务参与者】都增加了超时机制。在二阶段提交协议中,会出现无限期等待阻塞的情况。 (2)增加了一个新阶段。相当于把之前的准备阶段拆分成两个新的阶段--------CanCommit阶段与PreCommit阶段。 优点:三阶段提交协议可以有效避免阻塞情况的出现,因为不管是协调者也好,还是参与者也好,都增加了超时机制。 缺点:相对于2PC,3P...原创 2020-12-18 14:58:13 · 195 阅读 · 0 评论 -
从头开始学分库分表-------二阶段提交协议
两阶段提交协议 为了解决分布式事务一致性,常见的方法之一就是2PC两阶段提交协议。 两阶段提交有两个角色,第一个角色是:【事务管理器】。第二个角色是:【数据库事务参与者】。 准备阶段(prepare):【事务管理器】在第一阶段发起消息,每个【数据库事务参与者】在本地执行事务, 但是这个时候事务没有提交。 提交阶段(commit):...原创 2020-12-17 16:25:35 · 234 阅读 · 0 评论 -
从头开始学分库分表-------跨库分页、连接、统计
分库分表带来的问题之 跨节点分页、排序、函数 需要在各个数据库中查询出来需要得数据,然后到内存中进行汇总、排序、分页。 比如某学生的四年的成绩数据分布在四个不同的数据库上,现需求是要求查出学生这四年考试成绩最好的10门课程。 实现思路是:(1)从每个数据库中取出一部分成绩数据。 (2)对所有从数据库中查询出来的数据进行汇总,并排序 (3)排序...原创 2020-12-16 16:47:16 · 728 阅读 · 2 评论 -
从头开始学分库分表-------全局主键避重
一、雪花算法 雪花算法由【符号位】 + 【时间戳】 + 【机器码】 + 【序列号】 符号位只占1位,表示正数。 时间戳占41位,毫秒级别。2^41次方,这个数字也是一个庞大的数字,保证不会重复。 机器码占10位,由硬件决定。 序列号占12位,标志生成的第多少个ID,计数用。 雪花算法的优点: (1)雪花算法生成的ID可用使用Long类型来接收,是纯数字类型...原创 2020-12-15 15:28:07 · 337 阅读 · 0 评论 -
从头开始学分库分表-------基本概念
目录一、水平分表二、垂直分表三、水平分库四、垂直分库一、水平分表 把表拆分为表1、表2、表3、......、表N。解决单表数据量过大问题。 拆分原则:一般单张表的数据量达到百万级别,则适用水平分表。例如【学生成绩表】,学生成绩的记录往往都超过百万。所以适用于水平分表,按照学期进行分表。 二、垂直分表 垂直分表是按照表的字段进行拆分,按照热门、冷门字段把原来的表拆分开来,每张表存储其中一部分字段。 ...原创 2020-12-14 14:37:57 · 307 阅读 · 1 评论