如何统计一个新玩家在60天内的登录情况----std::bitset
2016-02-16 13:57
267 查看
业务需求:
需要知道一个新建的账号在60天内登录的情况。
机智的程序猿们都会想到用stl的各种关联容器去记录而后分析。
经过仔细考量,本猿想到另外一种办法可以简单的实现该需求,并且可以使数据存储尽可能小。
废话不多少,上代码:
void Player::updateLoginStatistics()
{
time_t now = Timestamp::now();
int32_t distance_days = (now - create_time_) / 86400;
if (distance_days > 60) {
return;
}
std::bitset<64> info(login_statistics_);
if (false == info.test(distance_days)) {
info.set(distance_days);
login_statistics_ = info.to_ulong();
}
}
该函数完美解决问题。
记得在玩家登录的地方调用updateLoginStatistics();
大致思路,建号时间和当前时间差值大于60天的不予处理。距离建号n天,那么我们就设置第n位为1。
我们用一个8字节的变量login_statistics_来存储记录。
玩家首次登陆,打印日志如下:
(updateLoginStatistics) before 0 0000000000000000000000000000000000000000000000000000000000000000
(updateLoginStatistics) after 1 0000000000000000000000000000000000000000000000000000000000000001
数据分析:
只需要统计login_statistics_中的2进制中1的分布,就可以查看玩家的登录情况了!!!
是不是猴赛雷
需要知道一个新建的账号在60天内登录的情况。
机智的程序猿们都会想到用stl的各种关联容器去记录而后分析。
经过仔细考量,本猿想到另外一种办法可以简单的实现该需求,并且可以使数据存储尽可能小。
废话不多少,上代码:
void Player::updateLoginStatistics()
{
time_t now = Timestamp::now();
int32_t distance_days = (now - create_time_) / 86400;
if (distance_days > 60) {
return;
}
std::bitset<64> info(login_statistics_);
if (false == info.test(distance_days)) {
info.set(distance_days);
login_statistics_ = info.to_ulong();
}
}
该函数完美解决问题。
记得在玩家登录的地方调用updateLoginStatistics();
大致思路,建号时间和当前时间差值大于60天的不予处理。距离建号n天,那么我们就设置第n位为1。
我们用一个8字节的变量login_statistics_来存储记录。
玩家首次登陆,打印日志如下:
(updateLoginStatistics) before 0 0000000000000000000000000000000000000000000000000000000000000000
(updateLoginStatistics) after 1 0000000000000000000000000000000000000000000000000000000000000001
数据分析:
只需要统计login_statistics_中的2进制中1的分布,就可以查看玩家的登录情况了!!!
是不是猴赛雷
相关文章推荐
- Jenkins和maven自动化构建java程序
- Ubuntu apparmor何方神圣
- 梆梆SDKs详细分析 - 防界面劫持SDK 推荐
- android中adapter.clear()引起的错误
- HDU 5627 Clarke and MST 求&的最大生成树 贪心
- 用Xmanager+SSH使远程Linux安装图形界面本地化显示的方法
- java判断字符串是否包含中文
- 贝叶斯分类(一)-机器学习实战
- web工程引入Spring
- 关于mysql存储过程的definer的问题
- CXF的三种发布方式和客户端调用方法
- javascript 函数声明与函数表达式的区别
- ImageView.ScaleType 属性详解
- 6种方法实现asp.net返回上一页
- 服务器负载均衡
- Day2 CSE101 L2
- Java系统程序员修炼之道
- HQL 简单的几种带条件查询方法
- java基础总结(一)
- 优化memcache占用CPU太高