二维表n*m转一维表n*1
来源:互联网 发布:网络被动攻击 编辑:程序博客网 时间:2024/05/21 14:07
在工作中遇到这样一个问题:我要存贮玩家以及他们所关注的boss到公共表,现在公共表行数受限,一般会保持在1024行以下,而现在的情况是一个服承载800人,boss数量在40个左右,一个人关注的boss无上限,那么极限情况下要存下这些数据需要800*40=32000行,很明显这样存储无法达到要求。
我想了以下几种方案
1. 列1: playerid ,列2:boss1,boss2.... 这样可以解决行的问题,但是增加和取消关注都将面临字符串查找和解析等问题,且效率低下,字段长度也成问题。
2.列1:bossid , 列2:player1,player2... 问题同1
3.分表法,即一个boss一张表,这样基本可以满足需求,唯一的缺点就是表太多
最后在回家的路上想到了一个比较完美的解决方案,那就是位操作。
4.列1:playerid 列2:64位整数。 一个boss占用一位,那么就可以记录64个boss。
关注boss使用‘|’操作cur=cur | target。
取消关注 cur = cur & (~target)
此方法只在扩展boss数量上存在问题,但是基本解决了工作需求。如果boss数量较多可以采用多段的方式,即再增加一列扩展64个boss。
这种方式将n*m结构转换成了n*1的结构,对于同类问题都可使用该方法处理。
该文章同步新浪博客:
柒-步的博客
http://blog.sina.com.cn/u/6385996086
阅读全文
0 0
- 二维表n*m转一维表n*1
- 找出二维数组 n*m中的“鞍点”
- 二维数组m*n的鞍点
- 二维数组m*n的鞍点
- 二维数组m*n的鞍点
- 1!+2!+...+m!<n
- 输出n-m-n
- ibaits-- 避免n+1 select (1:m;m:n)
- 1!+2!+3!+。。。+m!<n
- 在CUDA如何使用二维数组(**[M][N])
- 在CUDA如何使用二维数组(**[M][N])
- VB实验报告“找出二维数组n×m中的鞍点”
- 求出二维数组中m*n的鞍点
- 二维数组指针、vector,实现m*n矩阵代码
- C(n,m)=C(n-1,m-1)+C(n-1,m)
- 计算题 f(m,n)= f(m-1,n)+ f(m,n-1)
- poj 1036 n!/(n-m)!*m!
- 用Java转换n行m列的二维数组转换为m行n列的数组输出
- 关于.getClass()和.class的区别
- 强制刷新组策略
- 通过(Node Js||.Net)基于HTML5的WebSocket实现实时视频文字传输1
- 单链表的简单冒泡排序
- C代码笔记(一)
- 二维表n*m转一维表n*1
- Android Notification 总结
- android 五大布局(2)帧布局和表格布局
- window.location.hash
- 2017-10-19校内训练题题解
- 九度OJ——1447最短路
- 在Fragment控件的匿名内部类中使用运行时权限及相关问题
- struts2配置全局的结果集和包之间的继承
- 【51Nod1295】XOR key