ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

整数二进制充当统计模型

2020-06-18 11:38:39  阅读:238  来源: 互联网

标签:0000 在线 记录 二进制 离线 整数 最近 充当


最近项目中需要统计APP的最近几次的在线离线情况,因为有些商家的网络信号很差,需要根据最近的心跳在线离线情况做一些事情,例如统计商户APP最近10次的在线离线记录,如果最近10次有8次离线那就认识商家是网络比较差的商家,那么就去对这部分商家去做一些其他事情,那么怎么统计好呢?因为统计与计算是要同时记录的。


传统的方式是新建一个在线离线状态记录表,然后从表里面就可以获取最近几次在线离线记录,这个方法比较简单,但是表以后的数据量会越来越大,查询也越来越慢,无用的数据也越来越多。


那么先理清楚需求,只记录最近N次的情况,历史情况无需记录,记录的时候得实时统计最近N次的情况得出一些结论,记录的qps很高。

如果能对每个商户app的最近在线离线情况以一个整数记录就好了,一个app对应一个整数,这个整数实质上是最近在线离线的记录


5这个数值,表面看上去就是一个数字5,但是在计算机的世界里,它其实是0000 0000 0000 0111,那么这32位二进制刚好可以充当最近32次的在线离线情况,1代表在线,0代表离线。由于需求是记录最近10次,但便于扩展,取二进制低20次用作记录在线离线情况

代码如下:

//初始化的二进制值 0
private static final long START_DATA = ~-1;

//二进制的记录的位数
private static final long SIGN_POSITION = ~(-1 << 20);


public void sign(boolean online){
   Long record = getLastNum();
   if(online){
     //在线情况对二进制整体左移一位,然后最低位补1,高12位归零
     record = ((data << 1) + 1) & SIGN_POSITION;
   }else{
     //离线情况对二进制整体左移一位,然后高12位归零
     record = ((data << 1) & SIGN_POSITION;
   }
   setLastNum(record)
}

例如一个整数25,可以看成是

0000 0000 0000 0000 0000 0000 0001 1001

表示最近20次3次在线,17次离线

标签:0000,在线,记录,二进制,离线,整数,最近,充当
来源: https://blog.csdn.net/CSDNzhangtao5/article/details/106794829

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有