盘数量 = N
记录大小 = X
记录数量 = C
实体(KEY)数量 = K
记录时间跨度 = S
压缩比 = Z
磁盘顺序读速度约为60M/s
?
给定时间段D内检索单key耗时T(即在单盘上扫描出该key在该时段的所有记录耗时)
= (D/S * C/K * X ) / Z / (60*1024*1024)
给定时间段D内统计耗时T(即多盘并发扫描出该时段所有数据耗时)
= (D/S * C *X)/ Z / (60*1024*1024) / (M*N)
?
举例说明:集群机器数量为10,每个机器8个磁盘;记录大小100字节,记录数量100亿,key数量1万,时间跨度1年,压缩比是3,那么可推断出如下结果:
检索一天内的给定key时间约为 = (1/365 * 10,000,000,000/10,000 * 100) / 3 / (60 * 1024*1024) =0.002秒
统计一天内的数据时间约为= 1/365 * 10,000,000,000 * 100 / 3 / (60 * 1024*1024) /(10*8) = 0.4秒
注意,上述查询耗时是扫描数据理论速度,实际在集群环境下执行查询的总耗时必然要高于其。因为除了扫描磁盘外,执行过程还要包含“语法解析”、“任务调度”、“结果返回”、“结果解析”等环节,但是即便如此,以上操作的也能达到亚秒返回(所谓的“秒出”)。
?
10.3性能优化
相比传统关系数据库,蜂鸟系统的优化相对简单。从性能预测给出的公式就能看出,优化方向是:
1. 缩减记录大小;
2. 提高处理并发度;
3. 增加磁盘顺序读写速。
缩减记录大小的最简单办法是将记录中离散度不高的字段进行码表化,进而减少记录大小。比如卡口送出的原始过车记录中含有车品牌、方向等信息(如“大众”、“西向东”)就属于离散度低的字段,完全可以以数字代替,而使用码表来维护数字和实际品牌或方向间的对应关系,查询时将过车时序表和码表做Join即可。提高并发度最简单、经济的办法是增加单机所带磁盘数目,然后是增加机器。增加磁盘顺序读写速度常用办法有:使用前先格式化一次磁盘;采用“轻量”磁盘挂载方法(如ext4格式磁盘采用noatime,data=writeback,barrier=0,nobh,errors=remount-ro方式挂载);使用更对读友好的调度器DeadLine;其它内核参数微调,如增加磁盘队列长度的内核参数(sudo sh -c'echo 1024 > /sys/block/sdx/queue/nr_requests)。
11. 最佳实践(实例介绍)
11.1 电力-智能电表相关业务:
用户用电量查询:给定用户单日查询或多日查询等。
低电压异常判断:电压位于 198-205V,则认为该电表低电压异常。
电能量异常判断:当前时间点的电能量值小于前一个时间点电能量值,但中间电表并没有过零的情况发生,则认为该电表电能量异常。
电量/电费计算:计算一段时间内电量的消耗和电费(分时计算)。
线损计算:根据各供电点 ( 电量流入 ) 和受电点 ( 电量流出 ) 的电能量数据的差值为线损。
三相不平衡分析:计算电表24(整点)电流不平很曲线。计算方法三相电中最大电流减去最小电流,再除以最大电流。
分析整箱有功电量曲线中相邻两个整点的跳数。相邻两点之差大鱼该亮点中最大值的%80则为跳跃。
环比增长率计算:本月比上月增长情况。一般环比增长率可使用如下公式计算:(本月电量消耗值– 上月电量消耗值)/ 上月电量消耗值。
11.2 交通-卡口监控相关业务:
车辆轨迹抽取:按照给定时段检索给定车辆的行车轨迹(经过卡口的记录)。
嫌疑套牌车分析:在选定的行政区划、卡口范围内利用卡口位置信息、路段时段的平均车速信息、以及车辆经过相邻卡口的耗时。当发现耗时明显过小,则可推断出现了相同号牌号码和号牌种类的车辆,即套牌车。
伴随车分析:根据用户输入参数查询出指定车辆(主车)的轨迹,并根据查询出的轨迹结果分析出车辆经过相应卡口时(要求同方向)在伴随时间偏差范围出现的车辆,如果这些车辆的累计出现次数达到用户输入的伴随车轨迹次数,该车列为伴随车。
碰撞车分析:在明确时间和地点,不明确车辆信息的情况下,分析在多个不相关的地点同时出现的车辆信息。
11.3 刑侦:通讯记录检索相关业务
查询给定时间范围嫌疑号码的呼入呼出记录。
查询给定时间范围嫌疑邮箱的发件和收件记录。
根据嫌疑人的电话、短信、邮件记录,分析嫌疑人的社会关系网。
?