背景
之前策划是所有房间共存一个状态,但需求修改需要每个房间单独存一个状态,常规的解决方案是建表
- 建表加字段
优点:代码结构清晰,业务需要更多状态存储也可以容易扩展
缺点:需要建表,登陆需要多读一张表,多耗一些性能。业务扩展需要新建表字段。 - 通过进制在用一个数值存储多个房间状态
优点:不需要改表结构,性能消耗和之前相当,扩展不需要新建字段
缺点:需要对进制足够了解,且业务扩展受限,不能超过单个数的最大值。
具体用哪个方案需要根据业务场景,和扩展预期来选择,最后我选择了 2 方案通过 25 进制对六个房间数据存储,下面是对进制的公式做个记录
公式记录
初始化 n 进制的 ab 值为
1 | a * Math.pow(n, 1) + b * Math.pow(n, 0); |
将 n 进制的 p 的第 a 位数换为 c
1 | Math.floor(p / Math.pow(25, a)) * Math.pow(25, a) + |
获取 n 进制 p 的第 a 位
1 | Math.floor((p % Math.pow(n, a)) / Math.pow(25, a - 1)); |
总结
最后这个算法太骚了被禁止使用了。接手的人进制了解不够,代码就不好维护。