coprocessor 中的 Mvcc Read

How do coprocessor read tikv Questions Before Reading How do coprocessor read tikv with MVCC TiKV 数据组织之前已经讲过,本身是基于行的存储,Cop 做的一些处理是怎么转化这些数据类型的? 上一次我们有意淡化了ColumnRef,这次我们应该怎么处理它? coprocessor 新的 TiKVStorage 和 Storage trait 都是什么东西? How do Mvcc Readstorage/mvcc/reader/mod.rs: mod reader;mod scanner;pub

coprocessor阅读2

Coprocessor 和代码分析: rpn_expr/types我们可以看到,上一期中,我们找到了 coprocessor 接口,能够基本把 coprocessor 请求和 dag api 处理 新版本的 tiqb 有: 可以看到,这里有个神奇的 Runner: pub struct BatchExecutorsRunner<SS> { /// The deadline of this handler. For each check point (e.g. each iteration) we need to check /// whether or not

Memory Align

C#include <iostream>#include <tuple>struct Padding1 { char ch1; char ch2; int i_field; double d_field;};struct Padding2 { int i_field; char ch1; char ch2; double d_field;};struct Padding3 { char ch1; int i_field; char ch2; doub

Macro in Rust

编译第一步Rust 编译的第一步会把所有表达式拆成 token,构成一个 token tree. 比如: 标识符(identifiers):foo, Bambous, self, we_can_dance, LaCaravane, … 整数(integers):42, 72u32, 0_______0, … 关键词(keywords):_, fn, self, match, yield, macro, … 生命周期(lifetimes):'a, 'b, 'a_rare_long_lifetime_name, … 字符串(strings):"", &

程序性能优化入门

这两天在做一个 benchmark,但是这方面的东西弄得我脑阔剧痛。但是发现其实我都是很懒惰的没学啥东西,诡异的自己折腾来折腾去,发现其实自己所谓优化都是脑洞优化,没有真正去找到程序的瓶颈。这次好好反省一下: C++ 的混合特性为我们提供了多种实现方式,一方面可以实现性能管理的全自动化,另一 方面也可以对性能进行更加精准的控制。正是这些选择方式,使得优化 C++ 程序以满足性 能需求成为可能。 C++ 有一些热点代码是性能“惯犯”,其中包括函数调用、内存分配和循环。下面是一份 改善 C++ 程序性能的方法的总结,也是本书的大纲。这些优化建议简单得让人震惊,而且 所有这些建议都是曾经发表过的

Transaction In TiKV Read(1)

真实的逻辑我们的 Percolator Training 需要服务端实现四个接口: service! { service timestamp { rpc get_timestamp(TimestampRequest) returns (TimestampResponse); }}pub use timestamp::{add_service as add_tso_service, Client as TSOClient, Service};service! { service transact

npm 和 webpack

[WIP] Npm & Webpack对于前端而言,基于 Node 的工具,如 Webpack, Gulp, Grunk 在前端中变得必要 NPM下列命令可以拿到 npm 的 config : npm config get prefix 这里可以获得全局的 prefix ,也可以把这个所有的配置 list 出来: npm config list 对于一个 package, 可以有: npm install npm@latest -g -g 表示 global 下载的意思,等同于 --global. 同时对于你这些包,也可以 list npm list --global 可以看到: ho

Text and Bytes

人类使用文本,计算机使用字节序列。 字符、码位和字节表示 字符串是一个字符序列 这是一个很简单的东西,问题是字符是什么? Unicode 标准把字符的标识和具体的字节表述进行了如下的明确区分。 字符的标识,即码位,是 0~1 114 111 的数字(十进制),在 Unicode 标准中以 4~6 个十六进制数字表示,而且加前缀“U+”。例如,字母 A 的码位是 U+0041,欧元符号的码位是 U+20AC,高音谱号的码位是 U+1D11E。在 Unicode 6.3 中(这是 Python 3.4 使用的标准),约 10% 的有效码位有对应的字符。 字符的具体表述取决于所用的编码。编

Transaction & Distributed Transaction(2)

[WIP] 分布式事务原子提交: 在支持跨多节点或跨多分区事务的数据库中,一个事务可能在某些节点上失败,但在其他节点上成功。如果我们想要维护事务的原子性(就ACID而言,请参“原子性”),我们必须让所有节点对事务的结果达成一致:要么全部中止/回滚(如果出现任何错误),要么它们全部提交(如果没有出错)。这个共识的例子被称为原子提交(atomic commit)问题 2PC 确定提交大家都要提交 准备提交时: Coordinator 阶段1: 发送 Prepare, 询问是否提交 Coordinator 跟踪 参与者回答是: COMMIT 请求,等待发生 参与者否: 发送 ABO

Transaction & Distributed Transaction(1)

[WIP] 事务MySQL 并发控制 Shared Lock (read lock) Exclusive Lock (write lock) 提供锁的粒度 行锁 表锁 事务ACIDA:原子性,ddia中描述为更像可中断性,中断后还能保持事务的性质 C: 一致性,更像是客户端的保障,类似我们两个转账的时候不能有人钱白白增加了这种,感觉这玩很泛:数据库从你定义的一致状态走向另一个一致状态 I:隔离型,一个事务对别的事务正在读/写的东西读写的隔离 D:持久性,我总觉得这个很重要但是最没啥说的 串行事务操作分为读写的话,有 R(A), W(A), 那么可以得到串行化(和独立执行一样的)调度。 M