Doris的数据导入机制以及原子性保证## Doris 的数据导入事务及原子性保证 杨政国 百度资深研发工程师 Doris Committer  ## 01 ## Doris简介 ## 系统定位 • 基于MPP(大规模并行处理)架构的分析型数据库 • 性能卓越,PB级别数据毫秒/秒级响应 • label: 用来标示一次导入的一份数据 • status: 表示数据状态,是否已经生效 • txnId: Doris 内部事务id,用来唯一标示一次导入事务 ## Label • 为了保证At-Most-Once 语意,用户同一批次数据需要使用相同的Label 导入任务的标识 同一批次数据使用相同的label LABEL 查看对应导入任务的执行情况 防止用户重复导入 用户可以自定义 4259958fe4de89db4/p23_2.jpg) ## 总结 多版本机制解决读写冲突 • 写入带版本 · 查询带版本 两阶段导入保证多表原子生效 - 支持并行导入 - 有冲突时按导入顺序生效,无冲突导入时并行生效 事务能力保证  v1.21.a第37章:通道用例大全 。第38章:如何优雅地关闭通道 。第39章:其它并发同步技术 - 如何使用sync标准库包 。第40章:原子操作 - 如何使用sync/atomic标准库包 。第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 ## • 内存相关 。第43章:内存块 。第44章:关于Go值的内存布局 。第45章:一些可能的内存泄漏场景 ## • 一些总结 。第46章:一些简单的总结 e collection的缩写)。Go官方设计和开发团队也维护着另外一个编译器,gccgo。gccgo是gcc编译器项目的一个子项目。gccgo的使用广泛度大不如gc,它的主要作用是作为一个参考,来保证gc的实现正确性。目前两个编译器的开发都很活跃,尽管Go开发团队在gc的开发上花费的精力更多。 gc编译器是Go官方工具链中一个组件。Go官方工具链的使用将在下一篇文章中介绍。Go官方工具链1.0 2值占用4个字节。 uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。通常地,在64位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位的。编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。 一个complex64复数值的实部和虚部都是float32类型的值。一个complex128复数值的实部和虚部都是float64类型的值。0 码力 | 608 页 | 1.08 MB | 2 年前3
美团点评2018技术年货现上线后链接出错、视觉效果达不到预期等问题。 其次,在流程阶段,引入审核机制,通过视觉和内容两方面的审核,保证投放数据的准确性。 最后,在运营配置上线后,如果发现问题,可以通过快速回滚,最大限度地实现“止损”。 ||事前|事中|事后| |---|---|---|---| |机制保证|测试预览、穿越预览|多重审核|回滚| |解决问题|C端展示问题、链接异常、平台差异|敏感内容过审、图片质量|出错处理、排期问题、最大限度止损| 数据层作为最底层的数据存储,其保存了最基本的运营后台数据、流程数据和线上数据。对持久化的数据,我们采用MySQL进行存储;对于缓存数据,我们采用了Redis的解决方案。这样数据层形成基本的两级存储结构:MySQL保证了数据的持久性,Redis保证了数据获取的速度。 这里我们对底层数据划分为三个不同域:后台数据,相当于草稿数据,运营人员所有的操作都记录在这里;流程数据,运营人员操作完成后,提供发布流程,预览及审核都在流程数据里 SDK同时也解决了服务间调用的网络时延问题。所有同步数据的网络调用都是通过后台线程异步完成,不会影响业务线程的正常处理逻辑。 不过,SDK方案也引进了如下的新问题: 1. 数据时效性和一致性如何保证? 2. SDK本地缓存如何监控?过期数据如何删除? 3. SDK版本如何升级? 为了解决数据的时效性和一致性问题,我们引入了监听更新机制,如下图所示:  v1.21.a。第37章:通道用例大全 第38章:如何优雅地关闭通道 。第39章:其它并发同步技术-如何使用sync标准库包 。第40章:原子操作-如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 ## • 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 ## • 一些总结 。第46章:一些简单的总结 e collection的缩写)。Go官方设计和开发团队也维护着另外一个编译器,gccgo。gccgo是gcc编译器项目的一个子项目。gccgo的使用广泛度大不如gc,它的主要作用是作为一个参考,来保证gc的实现正确性。目前两个编译器的开发都很活跃,尽管Go开发团队在gc的开发上花费的精力更多。 gc 编译器是Go官方工具链中一个组件。Go官方工具链的使用将在下一篇文章中介绍。Go官方工具链1. 第6章:基本类型和它们的字面量表示 uintptr、int 以及 uint 类型的值的尺寸依赖于具体编译器实现。通常地,在64位的架构上,int 和 uint 类型的值是64位的;在32位的架构上,它们是32位的。编译器必须保证 uintptr 类型的值的尺寸能够存下任意一个内存地址。 一个 complex64 复数值的实部和虚部都是 float32 类型的值。一个 complex128 复数值的实部和虚部都是 float640 码力 | 591 页 | 21.40 MB | 2 年前3
Golang 101(Go语言101 中文版) v1.21.a第37章:通道用例大全 第38章:如何优雅地关闭通道 。第39章:其它并发同步技术 - 如何使用sync标准库包 。第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 ## • 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 ## • 一些总结 第46章:一些简单的总结 e collection的缩写)。Go官方设计和开发团队也维护着另外一个编译器,gccgo。gccgo是gcc编译器项目的一个子项目。gccgo的使用广泛度大不如gc,它的主要作用是作为一个参考,来保证gc的实现正确性。目前两个编译器的开发都很活跃,尽管Go开发团队在gc的开发上花费的精力更多。 gc 编译器是 Go 官方工具链中一个组件。Go 官方工具链的使用将在下一篇文章中介绍。Go 官方工具链 uintptr、int 以及 uint 类型的值的尺寸依赖于具体编译器实现。通常地,在 64 位的架构上,int 和 uint 类型的值是 64 位的;在 32 位的架构上,它们是 32 位的。编译器必须保证 uintptr 类型的值的尺寸能够存下任意一个内存地址。 一个complex64复数值的实部和虚部都是float32类型的值。一个complex128复数值的实部和虚部都是float64类型的值。0 码力 | 821 页 | 956.82 KB | 2 年前3
RocketMQ v3.2.4 开发指南普通顺序消息 顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker 重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。 如果业务能容忍在集群异常情况(如某个 Broker 宕机或者重启)下,消息短暂的乱序,使用普通顺序方式比较合适。 ## ☑ 严格顺序消息 顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式 Failover 消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了3条消息,分别是订单创建,订单付款,订单完成。消费时,要按照这个顺序消费才能有意义。但是同时订单之间是可以并行消费的。 RocketMQ 可以严格的保证消息有序。 ### 4.4 Message Filter ## ■ Broker 端消息过滤 在 Broker 中,按照 Consumer 的要求做过滤,优点是减少了对于 Consumer 无用消息的网络传输。 (1)、(2)、(3)、(4)四种情况都属于硬件资源可立即恢复情况,RocketMQ 在这四种情况下能保证消息不丢,或者丢失少量数据(依赖刷盘方式是同步还是异步)。 (5)、(6)属于单点故障,且无法恢复,一旦发生,在此单点上的消息全部丢失。RocketMQ在这两种情况下,通过异步复制,可保证99%的消息不丢,但是仍然会有极少量的消息可能丢失。通过同步双写技术可以完全避免单点,同步双写势必会影响0 码力 | 52 页 | 1.61 MB | 1 年前3
共 832 条
- 1
- 2
- 3
- 4
- 5
- 6
- 84













