local HttpService = game:GetService("HttpService")
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("DataStore")
local Random = Random.new()
for i = 1,20,1 do
local Tbl = {}
for i = 1,200_000 + math.random(1,10),1 do
Tbl[i] = Random:NextInteger(1,20_000_000_000_000_000)
end
DataStore:UpdateAsync("Something", function()
return Tbl
end)
local Result = DataStore:GetAsync("Something")
table.sort(Result,function(v1,v2)
return v1 < v2
end)
print(#HttpService:JSONEncode(Result))
end
Not sure why you don’t exceed the limits but yes they have changed: DataStores Access and Storage Updates
I don’t think you’re writing THAT much data. Only a few megabytes or so?
The documented limits for Roblox DataStores still officially exist…about 260,000 characters per key, 60 requests per minute per user, and too frequent writes risk throttling. But here’s the twist: those limits aren’t always enforced in a super hard way until you hit production scale or do it from multiple servers/users. In Studio or small tests, you can often exceed size or frequency without errors, just like in your example. So it seems to “work,” but it’s risky — you could get throttled or blocked unpredictably in live servers. If your data is pushing 200K+ characters, consider using compression or chunking strategies to stay safe.
I like your line of thinking, I haven’t once taken the time to see if these limitations are actually true. I know that a lot of the documentation related to Datastores is outdated, like Metadata having key/value limits of 50/250 when instead it just has an overall length limit of 300 (after JSONEncode and it must be a dictionary).
Approach and case results
Read per iteration on one key: ~ 7 MB (GetAsync AND UpdateAsync)
Write per iteration on one key: ~ 3.5 MB
We are looking for BEST cases throughputs
Key Amount - 50 (per server)
Iterations - 1 (per server)
Total Read - 700 MB
Total Write - 350 MB
Duration - 55 s
Read Throughput - 760 MB / minute
Write Throughput - 380 MB / minute
Code:
Used Code
--[[
This script is cloned, enabled, and renamed N times, where N is the key amount.
Intention is to perform as FAST as possible (with different data), not as safe.
This code is modified from:
https://devforum.roblox.com/t/have-roblox-datastore-key-write-and-read-limits-changed/3608749
]]
local HttpService = game:GetService("HttpService")
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("DataStore")
local GetOptions = Instance.new("DataStoreGetOptions")
GetOptions.UseCache = false
local Random = Random.new()
local id = game.JobId..script.Name
local count = 20 -- Iterations, changed based on case
local throughput = 0
print(os.time())
for i = 1, count do
local Tbl = {}
for i = 1,200_000 + math.random(1,10),1 do
Tbl[i] = Random:NextInteger(1,20_000_000_000_000_000)
end
DataStore:UpdateAsync(id, function()
return Tbl
end)
local Result = DataStore:GetAsync(id, GetOptions)
if Tbl[0] ~= Result[0] then
error("Data did not save")
end
-- For verifying size
--throughput += #HttpService:JSONEncode(Result)
end
print(os.time(), throughput)
Findings (Best-case) [As of 4/22/2025]
The results accurately find the write throughput for the key, since if we swap UpdateAsync with SetAsync we will get the same results. The results do NOT accurately find the read throughput, as we can remove UpdateAsync and use multiple scripts and we will get up to the servers bandwidth, one script is 350 MB / min. For server write throughput, I believe the maximum is 210 MB / minute, but it COULD rely on other servers.
Server
Read Throughput - Limited by server bandwidth
Write Throughput - 210 MB / minute
Per-Key
Read Throughput - Limited by server bandwidth
Write Throughput - 105 MB / minute
Maybe throughput has changed from per-key to global and they haven’t updated the documentation? Or there is a built-in cache that, should you send requests too fast, it will not actually write/read? I have not seen any indication, whether here or on create that the limits have changed, but even then we should be greatly exceeding the throughput limits.
This is unrelated, OP is talking about throughput limits, there is no indication in that thread that throughput limits have changed.
This is outdated by a few years, it has changed to 4MB per key and will become ~40 requests per minute per user in early 2026. Also Roblox uses Base64 encoding by default, so you may record that you are storing 4MB, but it could be much less, especially since this case uses purely numbers.