目前打算降低服务器成本,首先的阻碍不是内存和CPU,而是数据库容量过大。主库、从库、备份库有关联影响。
数据库瘦身,有以下思路:
一、删除旧数据,
a、根据下面数据看到的是邮件数据,这个已经补充了定周期删除操作。
b、一些超过一年以上未登录的低等级玩家(游戏时间估计不足1小时),应该删除其关联数据。
在删除旧数据时遇到一个问题,删除淘汰玩家时可能使其他表的某些记录失去实际上的主人。这暴露了设计表的错误思路。没有确保与主键相关的数据在同一个表中(尽量不要让表太分散)。
二、采用线性压缩算法(复杂度小于等于o(n)),
这一点是针对erlang的tuple数据结构来说,其他语言可能不适用。
代码中有一些erlang数据结构,这些结构可以通过proto3的协议进行快速线性压缩。测试可以减少百分之30左右的空间占用。
三、最后是考虑从架构上把一些业务移动到廉价的服务器设备上。本文不展开讨论。
总结,数据库表尽量遵守一下原则:
a、二进制尽量使用线性压缩算法处理一下。
b、与主键相关的数据尽量放在一个表中。(注意和是否回档有关的数据,要区分开)
c、行为记录表中不要加描述性的汉字。
d、不要加不必要的索引。
额外说明,加新字段速度是比较快的,修改字段却非常的慢。
通常数据区:
最大数据区(邮件表历史邮件没有删完,特殊情况):