GameDataStorage 数据存储空间
这是一个服务端API
该API仅在服务端脚本使用
Arena独有
该API仅在Arena编辑器使用
- 查阅官方文档(Arena)
查阅社区文档(Arena) - 代表数据存储空间的类
其操作类似于,使用键值对储存数据,一个键只能对应一个值,同一数据储存空间不允许存在两个相同的键
操作频率限制
- 对于每一张地图,数据储存空间的操作存在频率限制
- 根据2024/8/7的官方API文档,
- \(每分钟写入频率限制 = 60 + (玩家数 \times 10)\)
\(每分钟读取频率限制 = 120 + (玩家数 \times 20)\) - 当前版本下,\(玩家数\)固定取\(70\),也就是说,
- \(每分钟写入频率限制 = 60 + (70 \times 10) = 760\)1
\(每分钟读取频率限制 = 120 + (70 \times 20) = 1520\)2 - 同时,对于每一个键值对,也有频率限制
- 根据2024/8/7的官方API文档,
- \(每分钟每键值对写入数据量频率限制 = 4MiB/min\)3
\(每分钟每键值对读取数据量频率限制 = 25MiB/min\)4
若在编辑端,重启地图并不会重置限制(也就是说你超限了重新运行地图是不行的)
要是真是这样,一般使用一般不会超过限制吧
测试代码如下:
// 测试同一键值对可写入数据量频率
var s = storage.getDataStorage('test');
(async () => {
for(let i = 0; i < 757; i++){
s.set('a', 'a'.repeat(5526)).catch((reason) => {
console.error(reason);
});
console.log("写入", i);
}
console.log('写入完成');
})();
// 测试读取频率,测试时不考虑同一键值对可读取数据量频率
// 测试数据量为3601条数据
var s = storage.getDataStorage('test');
(async () => {
let cnt = 0;
for(let i = 1; i <= 600; i++){
s.get('a').catch((reason) => {
console.error(++cnt, reason);
});
}
console.log("读取", 600);
await sleep(2e3);
for(let i = 1; i <= 3001; i++){
s.get('a').catch((reason) => {
console.error(++cnt, reason);
});
if(i % 100 === 0) {
console.log("读取", i);
await sleep(500);
}
}
console.log('读取完成', cnt);
})();
属性¶
- key:
- 只读,当前数据储存空间名称
方法¶
- set(key: , value: ): <>
- 设置该数据储存空间中指定键的值
- update(key: , handler: (prevValue: ) => ): <>
- 使用回调函数,设置该数据储存空间中指定键的值
- get(key: ): <>
- 获取该数据储存空间中指定键的值
- list(options: ): <>
- 批量列出该数据储存空间的值
- remove(key: ): <>
- 移除该数据储存空间中指定键的值
- destroy(): <>
- 销毁该数据储存空间
错误码¶
错误码 | 状态 | 信息 | 说明 |
---|---|---|---|
400 | DB_NAME_INVALID | Invalid data storage name. | 数据储存空间名称无效 |
400 | KEY_INVALID | Invalid data key. | 数据键无效 |
400 | VALUE_INVALID | Invalid data value. | 数据值无效 |
400 | PARAMS_INVALID | Invalid parameters. | 参数无效 |
429 | REQUEST_THROTTLED | Too Many Requests | 操作频率超过限制 |
500 | SERVER_FETCH_ERROR | Server network error. | 服务器网络错误 |
500 | SERVER_FETCH_ERROR | 写频率过高,触发限流 | 键值对写入频率过高 |
500 | SERVER_FETCH_ERROR | 读数据量超限,触发限流 | 读取频率过高 |
500 | UNKNOWN | Unknown server error. | 未知错误 |
未知,待补充 | CONSTRAINT_TARGET_INVALID | 未知,待补充 | 约束目标无效 |
未知,待补充 | DB_NAME_INVALID | 未知,待补充 | 数据库名称无效 |