As a Roblox developer, I would like to see more documentation on the somewhat recently implemented Throughput Limits. These limits are not currently described very well and while their calculation “trivia” (‘requests always round up to the nearest KB’) is mentioned, other facts are not mentioned such as the following:
Is the limit applied per server or per experience?
Is the limit refreshed after every UNIX minute, after every server-time minute, after 60 seconds, after the first request to the key or refreshed over-time?
Does RemoveAsync count towards the Read limit since it returns the value of the key?
Does UpdateAsync and IncrementAsync count against both limits?
If an UpdateAsync request has to be re-run (due to data changing mid-request), am I counted for double my quota?
Is metadata counted against the limit?
When using IncrementAsync, is the total bytes stored in the key charged to my Write quota or just the amount of bytes in the number I wish to increase by?
Do methods such as GetVersionAsync also count towards the limit?
Is there a flush of this limit on BindToClose? This is a bit of a stretch of a question, yet the “Server Limits” have allegedly (at least seemingly in the past) been given the undocumented ability to increase request allowance during a server shut down phase, this is critical for unfortunate scenarios in where a player may save their data using the last bit of the server limit, updates that data and then the server shuts down. Also, if this is still the case for server limits (and I haven’t just been gaslighted this whole time or it’s been removed) this behaviour should also be documented.
As a side note, I am very against the existence of this limit, it heavily restricts many innovative projects I wish to create and has led me to actually using multiple keys as backup data storage in-case a key is throttled on server shutdown, leading to very inefficient data structures. Yet this separate feedback is more suited for a separate topic altogether.
Coming back to this because I still can’t figure out how these limits are applied (per server or per experience), I’ve had hold off multiple projects indefinitely until this can be answered because if it is an experience-wide limit, my experience will break, really fast- (It relies on a datastore GetAsync request to get up to date configuration data)
Clarity on this topic would be greatly appreciated, if anyone in staff knows the answer. The answer to the first question would be especially appreciated: “Is the limit applied per server or per experience?”
I’ve actually since got in contact with staff elsewhere over this and the answer to this question is unfortunately “per experience”. None of the other questions were answered.
Hello @Abcreator , I was able to track down some answer for you from our engineers:
Is the limit applied per server or per experience?
Per experience. The limit applies to every single key across all servers in the experience.
Is the limit refreshed after every UNIX minute, after every server-time minute, after 60 seconds, after the first request to the key or refreshed over-time?
The limit is refreshed over-time. For every request, we examine the usage of quota associated with the key over the last 60 seconds. If the usage (including current request) is within the throughput limit, the request is approved.If the usage exceeds the limit, the request is denied.
Does RemoveAsync count towards the Read limit since it returns the value of the key?
It counts towards the Write limit.
Does UpdateAsync and IncrementAsync count against both limits?
UpdateAsync counts towards both the Read and Write limits. IncrementAsync only counts towards Write limits.
If an UpdateAsync request has to be re-run (due to data changing mid-request), am I counted for double my quota?
Yes.
Is metadata counted against the limit? When using IncrementAsync, is the total bytes stored in the key charged to my Write quota or just the amount of bytes in the number I wish to increase by?
For both questions: we only count the value length for throughput limits.
Do methods such as GetVersionAsync also count towards the limit?
Yes.
Is there a flush of this limit on BindToClose?
No, this limit is per experience, and we don’t flush it on game server BindToClose.
I’ll work on getting our documentation to reflect this information too, but I wanted you to have the answers ASAP. Thank you for flagging this gap in our docs!