一、概览
数据存储功能将满足平台开发者游戏数据存档的需求。该服务提供持久化存取游戏玩家数据的能力。比如游戏玩家的等级、经验、技能点等,不论何时(先后多次进出游戏)、何地(在游戏哪个房间)都能访问和修改已保存的玩家数据或游戏全局数据(如战力排行榜、竞速时间排行榜等)。
可以存取的数据分为普通数据集(表)和有序数据集(排行榜),每个游戏可以存在多个不同名称的数据集。
开发者可以通过新增的全局变量使用该功能:
也可通过Lua脚本直接调用有关接口来使用。
注意:
在联机或单机情况下,该功能只能实现当前地图当前房间数据的临时存储,且联机房间关闭后数据就会一起消失。
二、普通数据集(表)
数据存储中的每个值(value)都由一个独特的键(key)索引,可以往里面添加任意值,一个key只能对应一个value,value可以是数值,可以是字符串,也可以是json字符串等。例如玩家玩家相关数据可如下所示存取:
键(KEY) | 值(VALUE) |
level | 50 |
attr | { "flowers": 100, "level": 6, "vip": 3,"played_count": 13, "label": "超神"} |
coin | 78000 |
通过相同的数据集名称和键,就可以访问和修改特定的数据。
三、有序数据集(排行榜)
格式
仅能往里面添加数值(整数),且一个key仅对应一个value.
四、触发器(动作):
五、使用限制
数据存储是存在限制的,如果超出这些限制,服务就会自动限制游戏的数据存储使用量,从而导致数据保存失败。
服务器限制
每个游戏内的请求服务器会根据同时在线的玩家数量来允许一定数量的数据存储请求(更多的玩家意味有更高的配额更多的数据)。
请求类型 | 函数 | 每分钟请求数 |
获取 | getDataListByKey | 30 + numPlayers × 10 |
设置(限制与所有列出的函数共享) |
removeDataListByKey
|
30 + numPlayers × 10 |
有序数据集(排行榜) | getOrderDataByKey getOrderDataIndexValue getOrderDataIndexArea getOrderDataValueArea ClearOrderData | 5 + numPlayers × 2 |
请求类型 | 函数 | 冷却时间 |
设置(相同的键) | 所有设置修改数据类接口,对于同一个KEY的操作都有冷却时间 | 请求间隔6秒 |
体验限制
整个游戏/地图(其所有活跃的房间服务器)能够调用数据存储的频率也有限制。特别是在过多服务器同时请求特定键时,请求可能会被限制。为了避免超出限制,开发者应该只在两种情况下使用数据存储:
数据长度限制
除了请求频率,数据存储同时也会限制每个KEY-VALUE条目可使用的数据量。键、名称都需要在一定的字符长度内,存储的数据量也有限制。
由于键、名称是字符串,因此可以使用Lua脚本语言的 string.len() 检查它们的长度。数据也保存为数据存储中的字符串,而不管其初始类型如何。可以使用将 Lua 数据转换为序列化 JSON 表的 JSONEncode() 函数检查数据的大小。
组成部分 | 最大字符数 |
键 | 50 |
名称 | 50 |
数据 | 2,000,000 |
六、脚本API接口
Lua脚本提供更高的灵活性能实现更复杂的逻辑,具体接口参考:云服数据存储接口 CloudSever