Skip to content

LittleFall/tidb-hackathon-2020

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

以下内容为早期内容,需要被修改。

DDDD

编程

语言:C++ 17

环境:Clion

语言指导:Cpp reference

代码规范:ClickHouse 编码建议

编码流程:在主仓库上创建 branch 或 fork,通过 pr 合并,至少需 1 人 review。请勿直接提交到主分支(main)。

项目结构

  • src/ 源码目录
    • preagg/ 与预聚合有关的实现
      • TxnSolver 解决单 Region 的事务问题

Todo queue

产品侧

  • 实现 apply 逻辑,包括常用的聚合函数(@qizhi)

  • 实现预聚合的多版本控制 (@qizhi)

  • 实现 learner (@小虎,@liqi)

  • 实现 schema 相关的逻辑(@小虎,@liqi)

  • 启动时做 snapshot

  • 完成 tidb 的查询导引(放在)

项目结构侧

  • 整理 cmake,实现 include 尖括号
  • 添加一些基础支持,如日志,单元测试,format,CI

实现原理

事务处理

处理单 region 的事务。

数据结构:

  • 一个堆,存放所有锁的 key 和 ts,堆顶的 ts 最小
  • 一个哈希表,存放所有的 commit 事件,key 为键,ts 为值.

算法:

  • 每当一个 prewrite 事件到达时,将锁放入堆中。
  • 每当一个 commit 事件到达时,将其放入哈希表中。 然后从堆顶开始循环尝试,如果一个锁已经被解开了,就 apply 它的事件。 直到碰到第一个未解开的锁,或者所有锁都被解开了。

多版本读

维护多个版本的状态,并支持对应版本的读。

现在有若干个版本的状态,每当一个 apply 事件过来时,需要创建一个新版本。

聚合函数

每个聚合函数维护一个状态。

count/sum/avg: 维护数量/和
max/min: 维护最小/最大值

distinct

cout/sum/avg: 加一个map<key, occur_time> max/min: 不用

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published