バージョン管理、リスト、キャッシュを使用してデータを管理します。
バージョン管理
バージョンは、set、update、およびincrementデータを設定すると発生します。2> Class.GlobalDataStore:SetAsync()|SetAsync()2>、5> Class.GlobalData
バージョン付きのバックアップは、新しい書き込みが上書きすると 30 日後に期限切れになります。最新バージョンは常に期限切れではありません。
次の関数はバージョン操作を実装しています:
機能 | 説明 |
---|---|
すべてのバージョンをリストするには、DataStoreVersionPages インスタンスを返して、すべてのバージョン番号をカウントすることができるクエリーを使用してください。バージョンをフィルターできます。 | |
キーのバージョン番号を使用して、特定のバージョンのキーを取得します。 | |
特定のキーのバージョンを削除します。 この関数は、以前のバージョンを保持しながら、RemoveAsync("User_1234") を呼び出し、GetAsync("User_1234") を呼び出します。たとえば、 Class |
ユーザーのリクエストを処理するためにバージョン管理を使用できます。ユーザーが 2020-10-09T01:42 に問題が発生したと報告した場合は、次の例を使用してデータを以前のバージョンに戻すことができます:
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local DATA_STORE_KEY = "User_1234"
local maxDate = DateTime.fromUniversalTime(2020, 10, 09, 01, 42)
-- 指定された時間に最も近いバージョンを取得します
local listSuccess, pages = pcall(function()
return experienceStore:ListVersionsAsync(DATA_STORE_KEY, Enum.SortDirection.Descending, nil, maxDate.UnixTimestampMillis)
end)
if listSuccess then
local items = pages:GetCurrentPage()
if #items > 0 then
-- 最も近いバージョンを読み取ります
local closestEntry = items[1]
local success, value, info = pcall(function()
return experienceStore:GetVersionAsync(DATA_STORE_KEY, closestEntry.Version)
end)
-- 最も近いバージョンで上書きして、現在の値を戻します
if success then
local setOptions = Instance.new("DataStoreSetOptions")
setOptions:SetMetadata(info:GetMetadata())
experienceStore:SetAsync(DATA_STORE_KEY, value, nil, setOptions)
end
else
-- エントリが見つかりません
end
end
スナップショット
スナップショットデータストアオープンクラウド API では、毎日エクスペリエンスのスナップショットを取得できます。エクスペリエンスのストレージロジックを変更するエクスペリエンス更新を公開する前に、スナップショットを取得してください。スナップショットを取得することで、最新のデータがエクスペリエンスの前の
たとえ、スナップショットがない場合、3:30 UTC に更新を公開し、データの破損を引き起こすと、3:00-3:30 UTC の間に書き込まれたデータはすべて上書きされます。ただし、3:29 UTC でスナップショットを取ると、最新のデータが書き込まれるため、3:0
リストとプレフィックス
データストアでは、プレフィックスでリストすることができます。たとえば、「d」、「do」、または「dog」の名前の 1 つ目の n 文字をリストするなど、プレフィックスの「dog」のすべてのキーまたはデータストアにプレフィックスの「dog」を持つようにリストできます。
すべてのデータストアまたはキーをリストするときにプレフィックスを指定でき、プレフィックスに一致するオブジェクトのみを取り戻すことができます。ListDataStoresAsync() および ListKeysAsync() 機能は、
機能 | 説明 |
---|---|
ListDataStoresAsync() | すべてのデータストアをリストします。 |
ListKeysAsync() | データストアにあるすべてのキーをリストします。 |
スコープ
データストアのすべてのキーにはデフォルトのグローバルスコープがあります。ユニークな文字列をGetDataStore() のスコープとして設定して、キーをさらに整理できます。これにより、スコープがすべてのオペレーションの開始に自動的にスコー保管を設定します。
キー | スコープ |
---|---|
houses/User_1234 | 住宅 |
pets/User_1234 | ペット |
inventory/User_1234 | インベントリ |
データストア名、スコープ、キーの組み合わせは、ユニークにキーを識別します。全ての 3つの値は、スコープを持つキーを識別するために必要です。たとえば、 User_1234 のグローバルキーとして、次のように読み取ることができます:
local DataStoreService = game:GetService("DataStoreService")
local inventoryStore = DataStoreService:GetDataStore("PlayerInventory")
local success, currentGold = pcall(function()
return inventoryStore:GetAsync("User_1234")
end)
しかし、キー User_1234 には金のスコープがある場合、あなたは次のように読むことができます:
local DataStoreService = game:GetService("DataStoreService")
local inventoryStore = DataStoreService:GetDataStore("PlayerInventory", "gold")
local success, currentGold = pcall(function()
return inventoryStore:GetAsync("User_1234")
end)
すべてのスコーププロパティ
DataStoreOptions には、AllScopes プロパティが含まれています。これ
AllScopes プロパティを使用すると、GetDataStore() の 2番目のパラメーターが空の文字列でなければなりません ("")。
local DataStoreService = game:GetService("DataStoreService")local options = Instance.new("DataStoreOptions")options.AllScopes = truelocal ds = DataStoreService:GetDataStore("DS1", "", options)
Class.DataStoreOptions.AllScopes|AllScopes プロパティを有効にし、データストアに新しいキーを作成する場合、あなたは常にスコープのフォーマットのスコープ/キー名でそのスコープを指定する必要があります。如果しないと、API がエ
global/K1 | house/K1 |
global/L2 | house/L2 |
global/M3 | house/M3 |
キャッシュ
一時的にデータストアからデータを保存して、パフォーマンスを向上させ、サーバーに対するリクエストを減少するためにキャッシングを使用します。たとえば、エクスペリエンスはデータストアのコピーをキャッシュして、データストアからそのデータにアクセスできるようになります。これにより、別のコールをすることなくサーバーにアクセ保管できます。
キャッシュは、データストアのキーを使用して変更する内容に適用されます:
- GetAsync() を データを読む に。
- SetAsync() を データを作成する に。
- UpdateAsync() を データを更新する に。
- IncrementAsync() を データを減算する に。
- RemoveAsync() を データを削除する に。
GetVersionAsync() 、 ListVersionsAsync() 、 ListKeysAsync() 、 0> Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()0> はキャッシング
デフォルトでは、エンジンは GetAsync() を使用して、バックエンドからの値を 4秒間のローカルキャッシュに格納します。また、デフォルトでは
バックエンドの更新から値を取得しない GetAsync() のすべての呼び出しは、すぐにキャッシュを更新し、4秒のタイマーを再起動します。
キャッシュを無効にする
キャッシュを無効にし、サーバーから最新の値を取得するためにキャッシュを使用することをオプトアウトするには、DataStoreGetOptions パラメータを Class.GlobalDataStore:GetAsync()|GetAsync() 呼び出しに追加し、Class.DataStoreGetOptions.UseCache
キャッシュを無効にすると、高い周波数のキーに複数のサーバーが書き込む場合、最新の値をサーバーから取得する必要があります。しかし、キャッシュを無効にすると、データストアの制限とクワットを超えるため、通常の Class.GlobalDataStore:GetAsync()|GetAsync() リクエストをカウントします。
シリアル化
Class.DataStoreService は、JSON 形式でデータを保存します。Roblox は、Studio で Lua データを保存すると、Roblox はジョンソン化というプロセスを使用して、そのデータをJSON に変換してデータストアに保存します。Roblox は、データを Lua に変換し、デシリアル化というプロセスを使用して、そのデータをデ
シリアル化とデシリアル化は、次の Lua データタイプをサポートしています:
- 数値
- 特別な数値を inf 、 -inf 、および nan を保存しないでください 、これらの値は JSON 標準に準拠していません。Open Cloud でこれらの値を含むキーにアクセスすることはできません。
- テーブル
- テーブルには、サポートされている他のデータタイプのみを含める必要があります。
- テーブルの長さが 0 の場合、数値のキーは文字列に翻訳されます
シリアライズでサポートされていないデータタイプを保存しようとしますと、次のいずれかが発生します:
- データタイプを保存できませんでした。エラーメッセージを受信しました。
- データタイプを nil として保存することに成功しました。
データのタイプが nil として保存されている理由をデバッグするには、JSONEncode 関数を使用できます。Lua データタイプをこの関数に入力すると、Roblox のデータストアと同じ形式で返されます。これにより、データのプレビューと調査を行うことができます。