分布式请求查询
Data centric分布式查询优化
- 客户端的路由优化:能根据分布式执行计划以及请求数据优化路由节点的选取策略
- 服务端的执行优化:根据数据(窗口数据分布特性)在尽可能优的节点(local)执行。(未来可能可以考虑在同机房等因素)
- 任务并行调度优化:没有依赖关系的节点可以并行执行。
分布式请求查询
Data centric分布式查询优化
18w的债务。。。
加油
采用 Flink+Kudu 的方案主要思想是借鉴了 Kylin 的思路,Kylin 可以指定很多维度和指标进行离线的预计算然后将预计算结果存储到 Hbase 中;快手的方案是通过 Flink 实时计算指标,再实时地写到 Kudu 里面。
这块关于统计的降级维度是?
因此快手设计了两层降维计算模型,分为全维度层和剩余维度层,这样既利用了全维度层的聚合结果又简化了 DAG 作业图。
全维度部分,通过bitmap的引入,将相关string转为为long,量级大了之后,再辅以bitmapstate进行拆分
Kudu 里面,其本身具有低延迟随机读写以及快速列扫描等特点,很适合实时交互分析场景;
在存储方式上,首先对维度进行编码,然后按时间+维度组合+维度值组合作为主键,
最终按维度组合、维度值组合、时间进行分区,这样有利于提高查询的效率快速获取到数据。
面临着磁盘 IO 开销70%,其中50%开销来自于 Compaction;在 Checkpoint 期间,磁盘 IO 开销达到了100%,耗时在1~5分钟,甚至会长于 Checkpoint 间隔,业务能明显感觉到反压。
利用hbase来替代rockdb,一则是共享存储部分,同时,可以支持多种campaction策略,
HBase 瘦身,主要从减肥和增瘦两个步骤,在减肥方面:
目前用的 Compaction 策略是 SizeTieredCompaction,后期要实现基于 OldestUnexpiredTime 的 FiFOCompaction 策略,目标是做到无磁盘 IO 开销。
FiFOCompaction 是一种基于 TTL 的无 IO 的 Compaction 策略;OldestUnexpiredTime 是指例如设置 OldestUnexpiredTime=t2,表示 t2 时刻前的数据全部过期,可以被 Compaction 清理,基于时间点的 FIFOCompaction 理论上可以做到无磁盘 IO 开销。
与MySQL相比具有以下优势:
从memsql5开始使用llvm来做code generation
关于code generation的主流部分?
一个MemSQL包含两种组件:
aggregator部分,也有master和slave节点的区别,
reference tables的概念,类似spark broadcast部分?
分片的层级部分,partition部分切分,如何进行,如何更好通过使用的方式来优化策略
Implicit type conversion
一些规则:
TIMESTAMP
或 DATETIME
,并且另外一个参数是常量
,常量会被转换为 timestamp
1 | mysql> select '55aaa' = 55; |
可以登录系统
1 | SELECT * FROM users WHERE username = 'a' OR 1='1' AND password = 'anyvalue' |
主要是针对字符串部分
隐式转化把字符串转为了double类型。但是因为字符串是非数字型的,所以就会被转换为0,因此最终计算的是0+1=1
1 | mysql> select 'a'+'b'='c'; |
这样当进行select,update或者delete的时候就可能会多操作一些数据。所以应该加引号的地方别忘记了。
当把字符串转为数字的时候,其实是从左边开始处理的。