CNode

关于游戏频繁数据更新问题

问答
Iim-here发布于10 年前最后回复10 年前12 回复6695 浏览0 收藏

游戏里玩家数据(资产等级等等),这些数据在玩家游戏的过程中随时在变(改变的频率很高),对应这种数据一般怎么处理? 1.实时写到数据库?这种方式肯定对数据库压力很大。 2.只更新内存,通过定时任务写到数据库?

该怎么做呢?

查看回复

回复 (12)

C
captainblue2013#1·10 年前

2

J
jiangliqin#2·10 年前

第二种,先redis再数据库

I
im-here#3·10 年前
引用 jiangliqin第二种,先redis再数据库

@jiangliqin @captainblue2013 谢谢。 那如果用redis ,我在定时写数据的时候如何判断哪些字段需要更新?或者是全部更新。这块应该如何设计呢?

Y
yunheli#4·10 年前

个人认为,游戏里的玩家数据(资产等级等等)肯定是频繁调用的,在Mongo里面肯定是热数据,热数据的update也是在内存中操作的,个人感觉Mongo值得一试

Y
yunheli#5·10 年前

资产 等级肯定是不可丢失的数据,假如使用redis,使用快照的持久化策的话redis遇到瓶颈就会丢失数据,使用AOF持久化策略会严重影响性能,可以尝试下mongo

J
jiangliqin#7·10 年前
引用 im-here@jiangliqin @captainblue2013 谢谢。 那如果用redis ,我在定时写数据的时候如何判断哪些字段需要更新?或者是全部更新。这块应该如何设计呢?

@imhered 不明白判断更新哪些字段指的什么意思?如果随着一个完整的业务流量结束后,就可以定时批量写入数据库,在业务处理的各个环节中,需要更新哪些字段,直接在redis取出-更新操作。

I
im-here#8·10 年前
引用 jiangliqin@imhered 不明白判断更新哪些字段指的什么意思?如果随着一个完整的业务流量结束后,就可以定时批量写入数据库,在业务处理的各个环节中,需要更新哪些字段,直接在redis取出 更新操作。

@jiangliqin 例如一张表包含gold和diamond两个字段,玩家在游戏的过程中,gold和diamond都可能发生变化,也可能不发生变化,最优的做法肯定是我在定时往数据库里写的时候只写变化了的字段。实际业务中字段肯定很多,我在定时往数据库里写的时候如何知道哪些是变化了的呢(即我要更新的字段)

I
im-here#10·10 年前
引用 jiangliqin@imhered 如果你实在不知道更新了哪些字段,可以用upsert啊

@jiangliqin 好的谢谢,我用的是mysql,我研究下这个upsert。

H
haozxuan#11·10 年前

针对玩家数据(个人信息、资产、装备等)由于数据量相对较大,不建议使用redis存储;对于mongodb如果数据设计合理的情况下,更新并不会很慢,而且可以省略由内存到mysql等数据同步的问题;

参与回复
登录后即可参与回复。登录