2019年8月3日

摘要: 本章涉及的内容是TiDB的计算层代码,就是我们编译完 TiDB 后在bin目录下生成的 tidb-server 的可执行文件,它是用 go 实现的,里面对 TiPD 和 TiKV实现了Mock,可以单独运行; 用explain语句可以看到一条sql在TiDB中生成的最终执行计划,例如:我们有一条关联 阅读全文
posted @ 2019-08-03 11:38 聆听风琴的巴赫 阅读(1173) 评论(0) 推荐(0)

2019年6月1日

摘要: TiDB是Google F1的开源实现; TiDB实现了基于mvcc的乐观锁,在线表结构变更,基于时间戳的数据线性一致性,等等; 为了可靠性,TiDB和Oracle一样,维护了百万级别的自动化测试用例,跑在k8s搭建的集群之上; 自 Google F1开始,数据库被分成了两类: 一类是传统sql,代 阅读全文
posted @ 2019-06-01 18:54 聆听风琴的巴赫 阅读(1390) 评论(0) 推荐(0)

2019年5月19日

摘要: 这里主要介绍 tidb server 的编译, ti kv 和 ti pd 的编译不在本文范围内; go 语言 1.11 版本之后支持 go.mod, 依赖包在 go.mod 里生成, 如果 go.mod 中某个依赖包在 golang.org 上, 下载和编译依赖包会出错,因为 go 语言的官网 g 阅读全文
posted @ 2019-05-19 18:46 聆听风琴的巴赫 阅读(476) 评论(0) 推荐(0)

2019年3月17日

摘要: 在朴素Paxos算法中, 各个节点经过 Prepare 和 Accept 阶段, 会达成一个值, 这个值一旦达成, 就不能被修改, 如下例子: 图示1 上面的操作几乎没有任何实用价值, 于是演变成下面这种操作, 多个"实例(Instance)", 每个Instance负责一轮Paxos投票, 这样可 阅读全文
posted @ 2019-03-17 16:34 聆听风琴的巴赫 阅读(733) 评论(0) 推荐(0)

2019年3月3日

摘要: Google关于BigTable的论文中分布式事务的实现 Google在BigTable相关的论文中详细的解释了Percolator分布式事务的实现方式, 而且用简洁的伪代码示例怎么实现分布式事务; Percolator算法在分布式数据库中运用广泛, 国内著名的开源分布式数据库TiDB的事务实现来源 阅读全文
posted @ 2019-03-03 15:17 聆听风琴的巴赫 阅读(1092) 评论(0) 推荐(0)

2019年1月12日

摘要: 腾讯开源的 Paxos库 PhxPaxos 代码解读 Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1. Basic Paxos 算法是为了使集群中的Acceptor们达成一个最终的值, 或者不能达成一个最终的值; 就是说, 要么达成一个最终的 阅读全文
posted @ 2019-01-12 18:24 聆听风琴的巴赫 阅读(435) 评论(0) 推荐(0)

2018年12月23日

摘要: 简单的画了一下PhxPaxos在Prepare阶段的逻辑,主要是正常的逻辑,异常逻辑和超时后面再写了; 熟悉PhxPaxos代码最好的方法是编译运行sample目录下的三个例子,编译方法在另一篇博客已经写了,这里忽略; 一: Proposor在Prepare阶段发送Prepare请求的代码: 二: 阅读全文
posted @ 2018-12-23 21:43 聆听风琴的巴赫 阅读(866) 评论(0) 推荐(0)

2018年12月15日

摘要: 分布式一致性的基石 Paxos算法(1) Paxos算法是由微软的工程师Lamport提出,Lamport依靠Paxos算法获得图灵奖; Paxos算法旨在解决相互信任的分布式系统中,多个节点能快速达成一个一致的值; 目前,google的Chubby, 雅虎的Zookeeper, Oracle的My 阅读全文
posted @ 2018-12-15 22:05 聆听风琴的巴赫 阅读(467) 评论(0) 推荐(0)

2018年12月8日

摘要: #paxos的一般编译流程在项目文档《中文详细编译手册》里面已经有介绍,这里重点介绍一下编译samples目录下的代码; #我的环境是ubuntu; #设置paxos根目录 phx_dir=~/code/tencent/phxpaxos/ #编译leveldb cd $phx_dir/third_p 阅读全文
posted @ 2018-12-08 22:06 聆听风琴的巴赫 阅读(839) 评论(0) 推荐(0)

2018年11月17日

摘要: 严格的来说,微信开源的phxsql不是数据库,而是一个数据库的插件; 传统的互联网数据库结构一般是这样的: 服务访问数据库是通过分片来的: 除了这种基于hash的分片,还有一种基于range的分片方式 通常,基于range的分片场景下会引入一个新的服务来保存range分片的元信息,列如etcd: 数 阅读全文
posted @ 2018-11-17 23:23 聆听风琴的巴赫 阅读(1561) 评论(0) 推荐(0)

导航