游戏服务端双缓冲队列数据落地

本文介绍一种游戏服务端利用双缓冲队列数据落地的技术,这种技术既能保证高响应速度又能降低数据丢失的风险。 首先介绍了游戏服务端数据模型和数据生命周期,然后介绍双缓冲队列的具体设计。 数据模型 玩家数据的落地存储使用的是MySQL,但不适合用关系模型来构建玩家数据。 因为玩家数据是一种树形结构,关系模型是一种二维结构。 Player = { id = 123456, name = "Winston", level = 1, gold = 2000, gem = 300, vip = 4, items = { {id=101, count=20}, {id=102, count=30}, }, heroes = { {id=1001, level=1}, {id=1002, level=2}, }, quests = { {id=10001, condition={type=1, number=10}}, {id=10002, condition={type=2, number=20}}, }, ... } 以上代码是我们游戏服务端玩家数据的部分片段。 可以看出id,name之类的字段对应MySQL中的一列还说的过去,但像items,heroes这类复合数据结构如果非要用关系模型建模 的话可能需要几十张表。 我们用一张MySQL表来存储玩家数据,表定义如下: CREATE TABLE players ( id INT NOT NULL, name VARCHAR(64) NOT NULL, level INT NOT NULL, gold BIGINT NOT NULL, gem BIGINT NOT NULL, vip INT NOT NULL, items TEXT NOT NULL, heroes TEXT NOT NULL, quests TEXT NOT NULL, ... PRIMARY KEY (id) ); Player树形结构中的第一层对应MySQL的一列,基本数据类型可以跟MySQL列数据类型一一对应,复合类型用TEXT或BLOB存储。 ...

December 1, 2022 · 2 min · Jee