Doris的数据导入机制以及原子性保证## Doris 的数据导入事务及原子性保证 杨政国 百度资深研发工程师 Doris Committer  ## 01 ## Doris简介 ## 系统定位 • 基于MPP(大规模并行处理)架构的分析型数据库 • 性能卓越,PB级别数据毫秒/秒级响应 • label: 用来标示一次导入的一份数据 • status: 表示数据状态,是否已经生效 • txnId: Doris 内部事务id,用来唯一标示一次导入事务 ## Label • 为了保证At-Most-Once 语意,用户同一批次数据需要使用相同的Label 导入任务的标识 同一批次数据使用相同的label LABEL 查看对应导入任务的执行情况 防止用户重复导入 用户可以自定义 4259958fe4de89db4/p23_2.jpg) ## 总结 多版本机制解决读写冲突 • 写入带版本 · 查询带版本 两阶段导入保证多表原子生效 - 支持并行导入 - 有冲突时按导入顺序生效,无冲突导入时并行生效 事务能力保证 、可扩展性、容错能力等属性 劣: 很多做不到ACID特性,不支持事务 不支持SQL Cluster 同步带宽占用过多的问题 ## TiDB and TiKV  ## TokuDB特点 - 支持事务(ACID)的MySQL存储引擎 • 插入性能大大高于InnoDB(分形树vs B+树) • 查询性能略低于InnoDB - 在线执行DDL操作(不阻塞写操作) • 超高压缩率(TokuDB 4M vs 66e5bbeea85b/p16_2.jpg) ## 总结(二) ||InnoDB(B+树)|TokuDB(分形树)|LevelDB(LSM树)| |---|---|---|---| |事务ACID|支持|支持|不支持| |随机写|慢|快|非常快| |随机读|慢|\-|\-| |顺序写|最快|\-|\-| |顺序读|最快|\-|\-| |是否支持在线DDL|5.5之前不支持,5.6~5.7之后开始支持大部分的在线DDL0 码力 | 19 页 | 1.97 MB | 2 年前3
参与ServiceComb的经验分享
• 红帽 Narayana LRA (Long Running Action) • ServiceComb Saga • 我们需要解决相同的问题 • 如何在微服务环境中实现事务管理 • 传统ACID在分布式环境中的局限性 • 基于Saga模型的最终一致性 ## 在Saga项目中的一些贡献 • 利用Byteman工具完善了异常和超时测试场景 与Narayana LRA在定义规范方面进行合作0 码力 | 9 页 | 2.27 MB | 2 年前3
Real world Rust
- Why and how we use Rust in TiKVSync,那么可以安全的在线程间共享 - Rust 的类型推导系统和编译检查跨线程传递和共享的对象是否满足 Send + Sync ## TiKV - 大规模分布式 Key-Value 数据库 支持 ACID 跨行事务支持 支持 MVCC 无锁的快照读 构建于 Raft 之上,不依赖分布式文件系统 ☐ 更少的第三方依赖 ☐ 更高的性能(低延迟) - 配合 TiDB 使用, 需要有健全的逻辑实现 /9/a5b9889263a7524a38d84f884bac0694/p24_1.jpg) ## Rust 和 C - Rust 对 C 的调用没有任何 overhead C 区域的调用没法保证安全 • TiKV 场景的特殊性 ☐ RocksDB 












