关于DataCenter 10秒save一次的疑问

[复制链接]
993 |10
雪中观狐 发表于 2023-12-29 23:05:23 | 显示全部楼层 |阅读模式
本帖最后由 雪中观狐 于 2024-1-1 18:17 编辑


2024.1.1:
有一个subdata数据我确保客户端在一定逻辑条件限制下不会走服务器的ModuleS的save(true)去保存更新,
然后在这个时候我通过asyncSetData去修改了这个数据
1.数据中心DataCenter的10秒规则,会覆盖我的asyncSetData的数据吗?(没触发save还会主动save导致我的数据丢失吗?)
2.如果不会那后续ModuleS上this.currentData拿到的是我直接修改kv的数据吗?(DataCenter会主动去KVget刷新自己吗?)





下面第一次发帖的问题,没解决换了个方式,现有有一个新的疑惑,上面的
第1秒. 玩家1 在 房间A 通过 ModuleS.save(true) 存了 MegSubData 某个信息到 DataCenter
第2秒. 房间B 触发了某个全局奖励的发放,影响到了 房间A 的 玩家1
第3秒. 房间B 尝试通过 asyncSetData("userid_SubData_MegSubData") 修改了玩家1的个人数据
第10秒. DataCenter中的10秒存储规则触发,以10秒前的玩家1的数据去修改覆盖KV上的内容,导致房间B对于玩家1的全局奖励发放失败


回复

使用道具 举报

汽水 发表于 2023-12-29 23:54:19 来自手机 | 显示全部楼层
不会的,首先玩家不会同时存在于两个房间内。
10秒保存也只是10秒写入一次,并不是数据不更新,10秒这个只存在于模块管理中。你直接调用存储是马上存的
回复

使用道具 举报

雪中观狐楼主 发表于 2023-12-30 00:04:52 | 显示全部楼层
汽水 发表于 2023-12-29 23:54
不会的,首先玩家不会同时存在于两个房间内。
10秒保存也只是10秒写入一次,并不是数据不更新,10秒这个只 ...

不是玩家存在于2个房间,而是玩家在房间A或者是离线状态,房间B在次日刚开启,触发了类似于昨天的排行榜奖励,通过邮件只发送一次,这时候玩家在房间A或者离线;修改玩家的邮件数据;如果玩家离线状态直接改没问题,如果玩家在其他房间游玩中并且在频繁操作邮件功能为已读或删除或领奖,就会出现上面说的情况
回复

使用道具 举报

雪中观狐楼主 发表于 2023-12-30 00:09:21 | 显示全部楼层
汽水 发表于 2023-12-29 23:54
不会的,首先玩家不会同时存在于两个房间内。
10秒保存也只是10秒写入一次,并不是数据不更新,10秒这个只 ...

刚才回复的第一行,现在回复第2行;
并不是数据不更新是什么意思呢?
第1秒:假设玩家在房间A,通过this.getPlayerData拿到了数据为1;
第2秒:房间B通过asyncSetData修改数据为2;
第3秒:这个所说的更新,是指房间A在服务器能拿到数据为2的值吗?
第10秒:如果不能读到2,那第10秒的写入不就把2给覆盖了,变成1了,奖励发放失败
回复

使用道具 举报

汽水 发表于 2023-12-30 01:11:53 来自手机 | 显示全部楼层
雪中观狐 发表于 2023-12-30 00:09
刚才回复的第一行,现在回复第2行;
并不是数据不更新是什么意思呢?
第1秒:假设玩家在房间A,通过this. ...

没理解为什么会有在b房间全局奖励到在a房间的玩家,如果是上线礼包,玩家在a房间领取即可。一个数据key确实有访问频率限制,但是不是十秒钟一次
回复

使用道具 举报

雪中观狐楼主 发表于 2023-12-30 10:13:12 | 显示全部楼层
汽水 发表于 2023-12-30 01:11
没理解为什么会有在b房间全局奖励到在a房间的玩家,如果是上线礼包,玩家在a房间领取即可。一个数据key确 ...

排行榜前10的话发每日奖励,为了把这个奖励发放并且存在邮件里,A房间是29号创建的,B房间是30号创建的,触发了检查日期更新刷新排行榜逻辑,给每个人发奖励
回复

使用道具 举报

雪中观狐楼主 发表于 2023-12-30 10:14:52 | 显示全部楼层
汽水 发表于 2023-12-30 01:11
没理解为什么会有在b房间全局奖励到在a房间的玩家,如果是上线礼包,玩家在a房间领取即可。一个数据key确 ...

我看了直接操作KV是6秒一次,DataCenter10秒一次,但是也是间接操作的KV
回复

使用道具 举报

复读机读复读机 发表于 2024-1-3 11:42:27 | 显示全部楼层
雪中观狐 发表于 2023-12-30 00:09
刚才回复的第一行,现在回复第2行;
并不是数据不更新是什么意思呢?
第1秒:假设玩家在房间A,通过this. ...

同时修改一份Data是会导致数据覆盖的,像这种会出现同时修改的数据最好加一个操作符判断当前数据是否处于修改状态
回复

使用道具 举报

雪中观狐楼主 发表于 2024-1-3 11:52:32 | 显示全部楼层
复读机读复读机 发表于 2024-1-3 11:42
同时修改一份Data是会导致数据覆盖的,像这种会出现同时修改的数据最好加一个操作符判断当前数据是否处于 ...

没有,主要是括号里的2个问题,我在其他房间主动通过kv直接修改玩家的数据,但是玩家在自己的房间自己不去修改,我不知道数据中心会不会自动不去读取我改的数据,从而自动save把我改的数据覆盖了

有一个subdata数据我确保客户端在一定逻辑条件限制下不会走服务器的ModuleS的save(true)去保存更新,
然后在这个时候我通过asyncSetData去修改了这个数据
1.数据中心DataCenter的10秒规则,会覆盖我的asyncSetData的数据吗?【没触发save还会主动save导致我的数据丢失吗?】
2.如果不会那后续ModuleS上this.currentData拿到的是我直接修改kv的数据吗?【DataCenter会主动去KVget刷新自己吗?】
回复

使用道具 举报

复读机读复读机 发表于 2024-1-3 13:38:03 | 显示全部楼层
雪中观狐 发表于 2024-1-3 11:52
没有,主要是括号里的2个问题,我在其他房间主动通过kv直接修改玩家的数据,但是玩家在自己的房间自己不 ...

如果用的是subdata做存储,只要玩家上线了就会被一直覆盖。可以试试用DataStorage.asyncSetData自定义数据做存储。
回复

使用道具 举报

72小时热榜
热门版块
快速回复 返回顶部 返回列表