Class
GlobalDataStore
NotCreatableNotReplicated
An object that exposes methods to access a single data store.
A GlobalDataStore exposes functions for saving and loading data for the
DataStoreService.
See Data stores for an in-depth guide on data structure, management, error handling, limits, and more.
Ordered data stores do not support versioning and metadata, so
DataStoreKeyInfo is always nil for keys in an
OrderedDataStore. If you need versioning and metadata support, use a
DataStore.
Methods 7#
| BatchGetAsync | Returns the values of multiple keys from the data store in a single request.Yields |
| GetAsync | Returns the value of a key in a specified data store and a
DataStoreKeyInfo instance.Yields |
| IncrementAsync | Increments the value of a key by the provided amount (both must be integers).Yields |
| OnUpdate | Sets a callback function to be executed any time the value associated with a key is changed.Deprecated |
| RemoveAsync | Removes the specified key while also retaining an accessible version.Yields |
| SetAsync | Sets the value of the data store for the given key.Yields |
| UpdateAsync | Updates a key's value with a new value from the specified callback function.Yields |
BatchGetAsync(keys: Array, options: Dictionary = nil): Dictionary#
Yields
This function retrieves the values of multiple keys in a single request.
This method is currently only supported on OrderedDataStore.
Calling it on a standard GlobalDataStore or DataStore will
throw an error.
Unlike GlobalDataStore:GetAsync(), this method does not return
DataStoreKeyInfo since ordered data stores do not support
versioning or metadata.
The returned dictionary maps each key to a table with a value field. For
example, if you request keys {"coins", "gems"}, the result might look
like:
{
coins = { value = 100 },
gems = { value = 50 }
}Keys that do not exist in the data store or have empty values are omitted from the result rather than returning nil values.
Limits#
The keys array must contain at least one key and no more than the
server-configured maximum (default 100). Exceeding the limit will throw an
error. Each call counts against the ordered data store read budget based
on the number of keys requested.
| Name | Type | Default | Description |
|---|---|---|---|
keys | Array | An array of key name strings to retrieve. The maximum number of keys per request is determined by a server-side limit (default 100). | |
options | Dictionary | nil | (Optional) Unused; has no effect. |
Returns
Dictionary— A dictionary mapping each requested key (string) to a table containing avaluefield with the key's current value. Keys that don't exist or have no value are omitted from the result.
GetAsync(key: string, options: DataStoreGetOptions = nil): Tuple#
Yields
This function returns the latest value of the provided key and a
DataStoreKeyInfo instance. If the key does not exist or if the
latest version has been marked as deleted, both return values will be
nil.
Keys are cached locally for 4 seconds after the first read. A
GlobalDataStore:GetAsync() call within these 4 seconds returns a
value from the cache. Modifications to the key by
GlobalDataStore:SetAsync() or
GlobalDataStore:UpdateAsync() apply to the cache immediately and
restart the 4 second timer.
To get a specific version, such as a version before the latest, use
DataStore:GetVersionAsync().
| Name | Type | Default | Description |
|---|---|---|---|
key | string | The key name for which the value is requested. If
DataStoreOptions.AllScopes was set to true when accessing the
data store through DataStoreService:GetDataStore(), this key
name must be prepended with the original scope as in "scope/key". | |
options | DataStoreGetOptions | nil | (Optional) A DataStoreGetOptions instance that controls
aspects of the read, such as whether to bypass the locally cached
value via its DataStoreGetOptions.UseCache property. |
Returns
Tuple— The value of the entry in the data store with the given key and aDataStoreKeyInfoinstance that includes the version number, date and time the version was created, and functions to retrieveUserIdsand metadata.
IncrementAsync(key: string, delta: int = 1, userIds: Array = {}, options: DataStoreIncrementOptions = nil): Variant#
Yields
This function increments the value of a key by the provided amount (both must be integers).
Values in GlobalDataStores are versioned as
outlined in
versioning.
OrderedDataStores do not support versioning, so
calling this method on an ordered data store key will overwrite the
current value with the incremented value and make previous versions
inaccessible.
| Name | Type | Default | Description |
|---|---|---|---|
key | string | Key name for which the value should be updated. If
DataStoreOptions.AllScopes was set to true when accessing the
data store through DataStoreService:GetDataStore(), this key
name must be prepended with the original scope as in "scope/key". | |
delta | int | 1 | Amount to increment the current value by. |
userIds | Array | {} | (Optional) A table of UserIds to associate
with the key. |
options | DataStoreIncrementOptions | nil | (Optional) DataStoreIncrementOptions instance that
combines multiple additional parameters as custom metadata and allows
for future extensibility. |
Returns
Variant— The updated value of the entry in the data store with the given key.
OnUpdate(key: string, callback: Function): RBXScriptConnection#
DeprecatedDeprecated
Deprecated. This function has been deprecated and should not be used in new work. You
can use the Cross Server Messaging Service to
publish and subscribe to topics to receive near real-time updates,
completely replacing the need for this function.
This function sets callback as the function to be run any time the value
associated with the key changes. Once every minute, OnUpdate polls for
changes by other servers. Changes made on the same server will run the
function immediately. In other words, functions like
IncrementAsync(),
SetAsync(), and
UpdateAsync() change the key's value
in the data store and will cause the function to run.
It's recommended that you disconnect the connection when the subscription to the key is no longer needed.
| Name | Type | Default | Description |
|---|---|---|---|
key | string | The key identifying the entry being retrieved from the data store. | |
callback | Function | The function to be executed any time the value associated with key is changed. |
Returns
RBXScriptConnection— The connection to the key being tracked for updates.
RemoveAsync(key: string): Tuple#
Yields
This function marks the specified key as deleted by creating a new "tombstone" version of the key. Prior to this, it returns the latest version prior to the remove call.
After a key is removed via this function,
GlobalDataStore:GetAsync() calls for the key will return nil.
Older versions of the key remain accessible through
DataStore:ListVersionsAsync() and
DataStore:GetVersionAsync(), assuming they have not expired.
OrderedDataStore does not support versioning, so calling
RemoveAsync() on an
OrderedDataStore key will permanently delete it.
Removed objects will be deleted permanently after 30 days.
If the previous values were already deleted via
GlobalDataStore:RemoveAsync() or
DataStore:RemoveVersionAsync(), the function will return nil,
nil for value and DataStoreKeyInfo respectively.
| Name | Type | Default | Description |
|---|---|---|---|
key | string | Key name to be removed. If DataStoreOptions.AllScopes was set
to true when accessing the data store through
DataStoreService:GetDataStore(), this key name must be
prepended with the original scope as in "scope/key". |
Returns
Tuple— The value of the data store prior to deletion and aDataStoreKeyInfoinstance that includes the version number, date and time the version was created, and functions to retrieveUserIdsand metadata.
SetAsync(key: string, value: Variant, userIds: Array = {}, options: DataStoreSetOptions = nil): Variant#
Yields
This function sets the latest value, UserIds, and
metadata for the given key.
Values in GlobalDataStores are versioned as
outlined in
versioning.
OrderedDataStores do not support versioning, so
calling this method on an ordered data store key will overwrite the
current value and make previous versions inaccessible.
Metadata definitions must always be updated with a value, even if there are no changes to the current value; otherwise the current value will be lost.
Any string being stored in a data store must be valid
UTF-8. In UTF-8, values greater than 127 are used
exclusively for encoding multi-byte codepoints, so a single byte greater
than 127 will not be valid UTF-8 and the
GlobalDataStore:SetAsync() attempt will fail.
Set vs. Update#
GlobalDataStore:SetAsync() is best for a quick update of a
specific key, and it only counts against the write limit. However, it may
cause data inconsistency if two servers attempt to set the same key at the
same time. GlobalDataStore:UpdateAsync() is safer for handling
multi-server attempts because it reads the current key value (from
whatever server last updated it) before making any changes. However, it's
somewhat slower because it reads before it writes, and it also counts
against both the read and write limit.
| Name | Type | Default | Description |
|---|---|---|---|
key | string | Key name for which the value should be set. If
DataStoreOptions.AllScopes was set to true when accessing the
data store through DataStoreService:GetDataStore(), this key
name must be prepended with the original scope as in "scope/key". | |
value | Variant | The value that the data store key will be set to. | |
userIds | Array | {} | Table of UserIds, highly recommended to assist
with GDPR tracking/removal. |
options | DataStoreSetOptions | nil | (Optional) DataStoreSetOptions instance that allows for
metadata specification on the key. |
Returns
Variant— The version identifier of the newly created version. It can be used to retrieve key info usingGetVersionAsync()or to remove it usingRemoveVersionAsync().
UpdateAsync(key: string, transformFunction: Function): Tuple#
Yields
This function retrieves the value and metadata of a key from the data
store and updates it with a new value determined by the callback function
specified through the second parameter. If the callback returns nil, the
write operation is cancelled and the value remains unchanged.
Values in GlobalDataStores are versioned as
outlined in
versioning.
OrderedDataStores do not support versioning, so
calling this method on an ordered data store key will overwrite the
current value and make previous versions inaccessible.
In cases where another game server updated the key in the short timespan
between retrieving the key's current value and setting the key's value,
GlobalDataStore:UpdateAsync() will call the function again,
discarding the result of the previous call. The function will be called as
many times as needed until the data is saved or until the callback
function returns nil. This can be used to ensure that no data is
overwritten.
Any string being stored in a data store must be valid
UTF-8. In UTF-8, values greater than 127 are used
exclusively for encoding multi-byte codepoints, so a single byte greater
than 127 will not be valid UTF-8 and the
GlobalDataStore:UpdateAsync() attempt will fail.
Set vs. Update#
GlobalDataStore:SetAsync() is best for a quick update of a
specific key, and it only counts against the write limit. However, it may
cause data inconsistency if two servers attempt to set the same key at the
same time. GlobalDataStore:UpdateAsync() is safer for handling
multi-server attempts because it reads the current key value (from
whatever server last updated it) before making any changes. However, it's
somewhat slower because it reads before it writes, and it also counts
against both the read and write limit.
Callback Function#
The callback function accepts two arguments:
- Current value of the key prior to the update.
DataStoreKeyInfoinstance that contains the latest version information (this argument can be ignored if metadata is not being used).
In turn, the callback function returns up to three values:
- The new value to set for the key.
- An array of
UserIdsto associate with the key.DataStoreKeyInfo:GetUserIds()should be returned unless the existing IDs are being changed; otherwise all existing IDs will be cleared. - A Luau table containing metadata to associate with the key.
DataStoreKeyInfo:GetMetadata()should be returned unless the existing metadata is being changed; otherwise all existing metadata will be cleared.
If the callback returns nil instead, the current server will stop
attempting to update the key.
The callback function cannot yield, so do not include calls like
task.wait().
| Name | Type | Default | Description |
|---|---|---|---|
key | string | Key name for which the value should be updated. If
DataStoreOptions.AllScopes was set to true when accessing the
data store through DataStoreService:GetDataStore(), this key
name must be prepended with the original scope as in "scope/key". | |
transformFunction | Function | Transform function that takes the current value and
DataStoreKeyInfo as parameters and returns the new value along
with optional UserIds and metadata. |
Returns
Tuple— The updated value of the entry in the data store with the given key and aDataStoreKeyInfoinstance that includes the version number, date and time the version was created, and functions to retrieveUserIdsand metadata.
Inherited members#
Inherited from Instance 58
Properties (10)
Archivable, archivable, Capabilities, IsInSandbox, Name, Parent, PredictionMode, RobloxLocked, Sandboxed, UniqueId
Methods (39)
AddTag, children, ClearAllChildren, Clone, clone, Destroy, destroy, FindFirstAncestor, FindFirstAncestorOfClass, FindFirstAncestorWhichIsA, FindFirstChild, findFirstChild, FindFirstChildOfClass, FindFirstChildWhichIsA, FindFirstDescendant, GetActor, GetAttribute, GetAttributeChangedSignal, GetAttributes, GetChildren, getChildren, GetDebugId, GetDescendants, GetFullName, GetStyled, GetStyledPropertyChangedSignal, GetTags, HasTag, IsAncestorOf, IsDescendantOf, isDescendantOf, IsPropertyModified, QueryDescendants, Remove, remove, RemoveTag, ResetPropertyToDefault, SetAttribute, WaitForChild