(51)Row Key 优化

Kylin通过有序的Rowkey优化查询性能,过滤维度置于前面,基数大维度领先基数小的。同时,通过调整kylin.hbase.region.cut等参数实现Cuboid数据分片,提升查询速度。并发粒度控制确保每个Segment分区数在预设范围内,优化并发读取。建议针对每个Cube定制并发控制参数以适应不同查询需求。
摘要由CSDN通过智能技术生成
Kylin 会把所有的维度按照顺序组合成一个完整的 Rowkey ,并且按照这个 Rowkey 升序
排列 Cuboid 中所有的行。
设计良好的 Rowkey 将更有效地完成数据的查询过滤和定位,减少 IO 次数,提高查询
速度,维度在 rowkey 中的次序,对查询性能有显著的影响。
Row key 的设计原则如下:
1 )被用作过滤的维度放在前边。

 2)基数大的维度放在基数小的维度前边。

 

4 并发粒度优化
Segment 中某一个 Cuboid 的大小超出一定的阈值时,系统会将该 Cuboid 的数据分片
到多个分区中,以实现 Cuboid 数据读取的并行化,从而优化 Cube 的查询速度。具体的实现
方式如下:构建引擎根据 Segment 估计的大小,以及参数 kylin.hbase.region.cut 的设置决定
Segment 在存储引擎中总共需要几个分区来存储,如果存储引擎是 HBase ,那么分区的数量
就对应于 HBase 中的 Region 数量。 kylin.hbase.region.cut 的默认值是 5.0 ,单位是 GB ,也就
是说对于一个大小估计是 50GB Segment ,构建引擎会给它分配 10 个分区。用户还可以
通过设置 kylin.hbase.region.count.min (默认为 1 )和 kylin.hbase.region.count.max (默认为 500
两个配置来决定每个 Segment 最少或最多被划分成多少个分区。

 

由于每个 Cube 的并发粒度控制不尽相同,因此建议在 Cube Designer Configuration
Overwrites (上图所示)中为每个 Cube 量身定制控制并发粒度的参数。假设将把当前 Cube
kylin.hbase.region.count.min 设置为 2 kylin.hbase.region.count.max 设置为 100 。这样无论
Segment 的大小如何变化,它的分区数量最小都不会低于 2 ,最大都不会超过 100 。相应地,
这个 Segment 背后的存储引擎( HBase )为了存储这个 Segment ,也不会使用小于两个或超
100 个的分区。我们还调整了默认的 kylin.hbase.region.cut ,这样 50GB Segment 基本上
会被分配到 50 个分区,相比默认设置,我们的 Cuboid 可能最多会获得 5 倍的并发量。
(注:相关优化,概念性描述,有一些抽象,不太容易理解,可以查阅相关kyline的资料)
51单片机矩阵按键映射通常使用二维数组来实现。 具体实现步骤如下: 1.确定矩阵按键的行和列数,通常为4行4列或者4行3列。 2.定义一个二维数组,用于保存按键的映射关系,数组的行数和列数分别为矩阵按键的行数和列数。 3.在程序中扫描矩阵按键,当检测到按键按下时,通过扫描行和列的方式确定按键的位置。 4.根据按键的位置在二维数组中查找对应的键值,同时进行相应的处理。 下面是一个简单的例子: 假设矩阵按键为4行4列,按键的编号从1到16,对应的键值存储在二维数组中。 ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code KeyMap[4][4] = { {1, 2, 3, 0xA}, {4, 5, 6, 0xB}, {7, 8, 9, 0xC}, {0xE, 0, 0xF, 0xD} }; void main() { uchar row, col, key; while (1) { for (row = 0; row < 4; row++) { P0 = 0x0F & ~(1 << row); // 针对行输入低电平 col = P0 & 0x0F; // 读取列的状态 if (col != 0x0F) { // 表示有按键按下 switch(col) { // 检查具体哪个列有按键按下 case 0x0E: key = KeyMap[row][0]; break; case 0x0D: key = KeyMap[row][1]; break; case 0x0B: key = KeyMap[row][2]; break; case 0x07: key = KeyMap[row][3]; break; default: break; } while (P0 != 0x0F); // 等待按键松开 // 处理按键事件 } } } } ``` 在这个例子中,我们通过按键的行和列来确定键值,同时对不同的键值进行相应的处理。可以根据实际情况进行调整和优化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据开发工程师-宋权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值