New datastore API budgets can't be measured in-game

As a Roblox developer, it is currently impossible to check the request budget of any of the new datastore APIs. The GetRequestBudgetForRequestType method accepts a DataStoreRequestType enum item, but the enum does not have items for the recently added functions.

These are the missing functions:
ListDataStoresAsync
ListKeysAsync
ListVersionsAsync
RemoveVersionAsync
GetVersionAsync

If Roblox is able to address this issue, it would improve my development experience because I’d be able to measure and stay within my API budget.

27 Likes

Thanks for the feedback chipio — we are looking into this.

11 Likes

Hi, is this roadmapped for this year?

5 Likes

I need this.

Trying to make a plugin to navigate a DataStore as a simple explorer, however, I cant respect the rate limit budget because these methods are not declared in the Enum

1 Like

@metatablecatmaid @MrChickenRocket @ChipioIndustries

I’d like to gather some info from you folks on the nature of the problem so I can address it best:

  1. Are you running these newer Data Stores API endpoints in Game Servers or is this code you run from Studio out of band from games for cleanup and maintenance?
  2. Is the issue with these new API endpoints really about checking the limits or is it about the limits being too low? If we could raise the limits, would that alleviate the problem? If so, what rate of querying are you trying to reach?
  3. Is GetSortedAsync() also an issue, because it has a low limit as well?

Regarding API endpoints, I’m referring to:

  • GetVersionAsync
  • ListDataStoresAsync
  • ListKeysAsync
  • ListVersionsAsync
  • RemoveVersionAsync
4 Likes

My usecase is just making sure that I have budget to work with (so that I dont accidentally spit out a too many requests error) when navigating my plugin.

It’s nicer to have it quickly throw up a warning showing “You’re sending too many requests, wait a moment” in a dockwidget than have it complain in the console.

I’ve never really found a usecase for this method in-game, but for data management tools inside Studio, its useful for UX purposes

My use-case is in a game here:

I use ListKeysAsync for presenting a player with a list of all the levels they have created.

I have wrappers over all of my datastore access, where I will not even attempt to access a given datastore API if there is currently no budget for it.

It would make it possible to give feedback to users that a given request will not work (eg: refresh my level list)

I also have operations that are composites of many datastore operations, and I would not want to attempt these in a somewhat atomic manner if I knew there was no budget available.

Obviously having higher limits would be nicer, but some of the API no having visible budgets is my primary concern.

1 Like

I don’t remember my specific use case when I wrote this post, but I would definitely take advantage of this both in plugins and in-game, primarily in bulk actions where I’m making large volumes of requests and I just want to get through them as fast as the rate limit will allow me. It’s not a problem that would be solved by raising the limits (although naturally, I’d never turn down a higher rate limit :stuck_out_tongue:).

Thanks for following up on this!

As well as altering behaviour at runtime, observability into quota usage would be a life saver for developers. Currently, by the time you know you’ve hit a datastore quota, it’s too late and your game is breaking. Allowing developers to view current quota usage would allow us to preemptively react to quota exhaustion, saving a lot of headache.

4 Likes

Hi everyone! Thanks for your patience. We’re excited to let you know that all Data Store endpoints can now be queried using GetRequestBudgetForRequestType.

If you have any issues with the new request types (ListAsync, GetVersionAsync, and RemoveVersionAsync), please let us know! As a reminder,
request limits are documented here.

Enjoy!

3 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.