The usage limit is global and scales by daily concurrent players.
The maximum expiration time is 45 days (3,888,000 seconds).
When users leave the experience, the quota doesn’t reduce immediately. There’s a grace period of 24 hours before the quota reevaluates to a lower value.
The problem here is not immediately obvious, so developers are likely to run headfirst into a brick wall they didn’t see coming. Allow me to walk you through a scenario.
Builderman wants to make a game system that utilizes MemoryStoreService. The expiration max is 45 days, so to play it very safe Builderman sets his data to expire in just 3 days, using only 6% of the allowed time. Very cautious and mindful, this Builderman! Well, his game is released and everything is running smoothly. Great! Then, Builderman runs an event. A large influx of players join, and they do activities that create some MemoryStoreService usage. No problems so far. Then the event ends, and the concurrent count drops back down to normal. One day later, the limit drops dramatically. Now, Builderman is way over the limit! All requests to MemoryStoreService are now failing and his game is suffering from an outage. He did nothing wrong, but the service ruined his game anyway, punishing him for having a spike in players.
Oh, you say to yourself, that’s not a likely situation. Well, it happens every single weekend! Player counts are high on Saturday, leaving behind a lot of MemoryStoreService usage, and by Monday that limit is now lower again and the data is still there eating up quota.
Why is the limit reduced 24 hours after a player leaves if data from that player is permitted to stick around for 1,080 hours??? That is a disaster waiting to happen. The limit declines after 24 hours, making it extremely easy to go over the limit after a player surge.
The limit should decline after 45 days, so that it is impossible for player spikes to create data at the higher limit that remains after the limit is lowered.
Issue Area: Engine
Issue Type: Other
Impact: High