跳转至

如何使用数据存储

数据存储 使用 NoSQL 云数据库来同步和存储客户端使用的数据,例如游戏的组件和设置信息。使用此服务是基于客户端的游戏或需要客户端之间实时更新的良好解决方案。

数据存储 具有以下功能:

  • 数据在每个游戏的存储中单独存储。
  • 所有数据都经过加密并安全传输。
  • SQL数据库不同,NoSQL云数据库没有表和行,数据存储在由集合组成的文档中。
  • -对的形式存储和记录数据。
  • 优化存储由多个文档组成的集合。
  • 有关设计-的注意事项,请参阅来自Hive开发者的操作 > 游戏 数据存储指南。

 


添加数据

您可以一次以一对键值对或多个映射格式将数据添加到数据存储中。请求后,将返回truefalse

Warning

键值需要在一个一维 JSON 字符串中设置,该字符串包括一个简单字符串或反斜杠(\)。

以下是添加键值对数据的示例代码。

API 参考: DataStore .set

using hive;    
    string key = "your data key";    
    string value = "your data value";    
    DataStore.set(key, value, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"

FString Key = TEXT("你的数据键");
FString Value = TEXT("你的数据值");

FHiveDataStore::Set(Key, Value, FHiveDataStoreOnSetDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API 调用成功 
        } else {
                // 调用失败。请参见下面的错误代码
        }
}));

API 参考: DataStore ::set

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    string key = "your data key";    
    string value = "your data value";    

    DataStore::set(key, value, [=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStore.set

import com.hive.DataStore    
    import com.hive.ResultAPI    
    val key = "your data key"    
    val value = "your data value"    
    DataStore.set(key, value, object : DataStore.DataStoreSetListener {    
         override fun onDataStoreSet(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})

API 参考: DataStore.INSTANCE .set

import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    String key = "your data key";    
    String value = "your data value";    
    DataStore.INSTANCE.set(key, value, result -> {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStoreInterface.set

import HIVEService    
    let key = "your data key"    
    let value = "your data value"    
    DataStoreInterface.set(key, value: value) { result in    
        if result.isSuccess() {    
        // call successful    
        }    
        else {    
        // Call failed. See error code below    
        }    
}

API 参考: HIVEDataStore set

#import <HIVEService/HIVEService-Swift.h>    
    NSString *key = @"your data key";    
    NSString *value = @"your data value";    

    [HIVEDataStore set: key value: value handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
}];

以下是添加Map格式数据的示例代码。

API 参考: DataStore .set

using hive;    
    Dictionary<string, string> map = new Dictionary<string, string> {    
         {"key1", "value1"},    
         {"key2", "value2"},    
         {"key3", "value3"}    
    };    

    DataStore.set(map, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successfull    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"

TMap<FString, FString> 数据;
数据.Emplace(TEXT("key1"), TEXT("value1"));
数据.Emplace(TEXT("key2"), TEXT("value2"));
数据.Emplace(TEXT("key3"), TEXT("value3"));

FHiveDataStore::Set(Data, FHiveDataStoreOnSetDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successfull
        } else {
                // Call failed. See error code below
        }
}));

API 参考: DataStore ::set

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    map<string, string> map = {    
         {"key1", "value1"},    
         {"key2", "value2"},    
         {"key3", "value3"}    
    };    

    DataStore::set(map, [=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStore.set

import com.hive.DataStore    
    import com.hive.ResultAPI    
    val map = mapOf(    
         "key1" to "value1",    
         "key2" to "value2",    
         "key3" to "value3",    
    )    
    DataStore.set(map, object : DataStore.DataStoreSetListener {    
         override fun onDataStoreSet(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})

API 参考: DataStore.INSTANCE .set

import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    Map<String, String> map = new HashMap<>();    
    map.put("key1", "value1");    
    map.put("key2", "value2");    
    map.put("key3", "value3");    
    DataStore.INSTANCE.set(map, result -> {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStoreInterface.set

import HIVEService    
    let map: [String: String] = [    
    "key1" : "value1",    
    "key2" : "value2",    
    "key3" : "value3"    
    ]    
    DataStoreInterface.set(map) { result in    
        if result.isSuccess() {    
        // call successful    
        } else {    
        // Call failed. See error code below    
        }    
}

API 参考: HIVEDataStore set

#import <HIVEService/HIVEService-Swift.h>    
    NSDictionary<NSString *, NSString *> *map = @{    
         @"key1" : @"value1",    
         @"key2" : @"value2",    
         @"key3" : @"value3"    
    };    

    [HIVEDataStore set: map handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
}];

获取数据

获取数据有两种方式,一次获取一个或一次获取全部,您还可以获取与您请求的键对应的所有用户数据。获取数据的三种方式如下:

  • 获取我的一条数据
    • 获取我的所有数据
    • 使用密钥获取所有数据

查看以下每种方式的示例代码。

以下是获取我数据的示例代码。

API 参考: DataStore .get

using hive;    
    string key = "your data key";    

    DataStore.get(key, (ResultAPI result, string data) => {    
         if (result.isSuccess()) {    
             // call successfull    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"

FString Key = TEXT("your data key");
FHiveDataStore::Get(Key, FHiveDataStoreOnGetDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Data) {
        if (Result.IsSuccess()) {
                // API 调用成功
        } else {
                // 调用失败。请参阅下面的错误代码
        }
}));

API 参考: DataStore ::get

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    string key = "your data key";    

    DataStore::get(key, [=](ResultAPI const & result, string data) {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStore.get

import com.hive.DataStore    
    import com.hive.ResultAPI    
    val key = "your data key"    
    DataStore.get(key, object : DataStore.DataStoreGetListener {    
         override fun onDataStoreGet(result: ResultAPI, data: String?) {    
             if (result.isSuccess) {    
                 // call successful    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})

API 参考: DataStore.INSTANCE .get

import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    String key = "your data key";    
    DataStore.INSTANCE.get(key, (result, data) -> {    
         if (result.isSuccess()) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStoreInterface.get

import HIVEService    
    let key = "your data key"    
    DataStoreInterface.get(key) { result, data in    
        if result.isSuccess() {    
        // call successful    
        } else {    
        // Call failed. See error code below    
        }    
}

API 参考: HIVEDataStore get

#import <HIVEService/HIVEService-Swift.h>    
    NSString* key = @"your data key";    

    [HIVEDataStore get: key handler: ^(HIVEResultAPI *result, NSString *data) {    
         if ([result isSuccess]) {    
             // call successful    
         } else {    
             // Call failed. See error code below    
         }    
}];

以下是获取我所有数据的示例代码。

API 参考: DataStore .getMyData

using hive;    
    DataStore.getMyData((ResultAPI result, Dictionary<string, string> myData) => {    
         if (result.isSuccess()) {    
             // call successfull    
             // myData: the added key-value map    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"

FHiveDataStore::GetMyData(FHiveDataStoreOnMyDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const DataStoreData& MyData) {

        if (Result.IsSuccess()) {
                // API  调用成功
                // myData: 添加的键值映射  
        } else {
                // 调用失败。请查看下面的错误代码
        }
}));

API 参考: DataStore .getMyData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    DataStore.getMyData([=](ResultAPI const & result, map<string, string> const & myData) {    
         if (result.isSuccess()) {    
             // call successful    
             // myData: the added key-value map    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStore.getMyData

import com.hive.DataStore    
    import com.hive.ResultAPI    
    DataStore.getMyData(object : DataStore.DataStoreMyDataListener {    
         override fun onDataStoreMyData(result: ResultAPI, myData: Map<String, String>) {    
             if (result.isSuccess) {    
                 // call successful    
                 // myData: the added key-value map    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})

API 参考: DataStore.INSTANCE .getMyData

import com.hive.DataStore    
    import com.hive.ResultAPI    
    DataStore.INSTANCE.getMyData((result, myData) -> {    
         if (result.isSuccess()) {    
             // call successful    
             // myData: the added key-value map    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStoreInterface .getMyData

import HIVEService    
    DataStoreInterface.getMyData() { result, myData in    
        if result.isSuccess() {    
        // call successful    
                // myData: the added key-value map    
        } else {    
        // Call failed. See error code below    
        }    
}

API 参考: HIVEDataStore getMyData

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEDataStore getMyData: ^(HIVEResultAPI *result, NSDictionary<NSString *, NSString *> *myData) {    
         if ([result isSuccess]) {    
             // 调用成功    
             // myData: 添加的键值映射    
         } else {    
             // 调用失败。请参见下面的错误代码    
         }    
}];

以下是使用键获取所有数据的示例代码。

API 参考: DataStore .getUsersData

using hive;    
    string key = "your data key";    
    DataStore.getUsersData(key, (ResultAPI result, string key, Dictionary<long, string> usersData) => {    
         if (result.isSuccess()) {    
             // call successful    
             // key: Entered key    
             // usersData: Map in PlayerId-value format. Be careful about the long key type.    
         } else {    
             // Call failed. See error code below    
         }    
});
#include "HiveDataStore.h"

FString Key = TEXT("your data key");
FHiveDataStore::GetUsersData(Key, FHiveDataStoreOnUsersDataDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& Key, const DataStoreUsersData& UsersData) {
        if (Result.IsSuccess()) {
                // call successful    
      // key: Entered key    
      // usersData: Map in PlayerId-value format. Be careful about the long key type.的
        } else {
                // Call failed. See error code below
        }
}));

API 参考: DataStore ::getUsersData

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    string key = "your data key";    

    DataStore::getUsersData(key, [=](ResultAPI const & result, string key, map const & usersData) {    
         if (result.isSuccess()) {    
             // 调用成功    
             // key: 输入的键    
             // usersData: 玩家ID-值格式的映射。请注意,键是长整型。    
         } else {    
             // 调用失败。请参见下面的错误代码    
         }    
});

API 参考: DataStore.getUsersData

import com.hive.DataStore    
    import com.hive.ResultAPI    
    val key = "your data key"    
    DataStore.getUsersData(key, object : DataStore.DataStoreUsersDataListener {    
         override fun onDataStoreUsersData(result: ResultAPI, key: String?, usersData: Map<Long, String>) {    
             if (result.isSuccess) {    
                 // call successful    
                 // key: Entered key    
                 // usersData: Map in PlayerId-value format. Be careful about the long type.    
             } else {    
                 // Call failed. See error code below    
             }    
         }    
})

API 参考: DataStore.INSTANCE .getUsersData

import com.hive.DataStore;    
    import com.hive.ResultAPI;    
    String key = "your data key";    
    DataStore.INSTANCE.getUsersData(key, (result, key1, usersData) -> {    
         if (result.isSuccess()) {    
             // call successful    
             // key: Entered key    
             // usersData: Map in PlayerId-value format. Be careful about the long type.    
         } else {    
             // Call failed. See error code below    
         }    
});

API 参考: DataStoreInterface.getUsersData

import HIVEService    
    let key = "your data key"    
    DataStoreInterface.getUsersData(key) { result, key, usersData in    
        if result.isSuccess() {    
        // call successful    
        // key: Entered key    
        // usersData: Map in PlayerId-value format. Note that the key is of type Int64.    
        } else {    
        // Call failed. See error code below    
        }    
}

API 参考: HIVEDataStore getUsersData

#import <HIVEService/HIVEService-Swift.h>    
    NSString* key = @"your data key";    
    [HIVEDataStore getUsersData: key handler: ^(HIVEResultAPI *result, NSString *key, NSDictionary<NSNumber *, NSString *> *usersData) {    
         if ([result isSuccess]) {    
             // success    
             // key: Entered key    
             // usersData: Map in PlayerId-value format. Note that the key is of type NSNumber *.    
         } else {    
             // Call failed. See error code below    
         }    
}];

错误代码

错误代码 消息 描述
RESPONSE_FAIL DataStoreNotExistKey 服务器上不存在该键
RESPONSE_FAIL DataStoreNotExistColumn 服务器上不存在列族(表)
RESPONSE_FAIL DataStoreGameIsBeingInspected 游戏的数据存储正在维护中
DEVELOPER_ERROR DataStoreNotExistPublicKey 不存在公共密钥。需要检查 Hive 控制台上的设置。
NEED_INITIALIZE DataStoreNotInitialized SDK 设置(AuthV4.setup)未完成
INVALID_SESSION DataStoreNeedSignIn 未登录。需要登录。
DEVELOPER_ERROR DataStoreDisabled 数据存储 设置为 未使用。需要检查 Hive 控制台上的设置。
RESPONSE_FAIL DataStoreResponseError 成功连接到服务器但返回错误。需要检查错误消息。
INVALID_PARAM DataStoreInvalidParam 由于无效参数,调用 set() API 失败