CloudKit private database costs

I know this has been asked multiple times, but posts are really old, some links are missing and official documentation is not clear about this.

I dont understand the 40 request per second thing. At some post I've read it scales up per user, does this apply for private databases too? I simply dont get it, And how does it scale up ? Is it linear or how is the formula?
And what's exactly a request? Any operation of querying, fetching, updating or saving?

I simply can't get it because 40 requests per second seems extremely low, I mean just with a few thousands of users saving his progress (even if its just a 50K string) would end up being extremely expensive. (Overage Fee: $100 per 10 requests )
So what do you do then if you need more requests per second, you simply pay the overage?

There must be something I'm not understanding. Thats why I'm asking.
Thanks a lot

EDIT: is maybe 40 request / user ? that would make more sense

Accepted Reply

I'm finding this confusing too! The CloudKit page seems to split the usage quota into whether you are using the private or public database. Here's where I've got to.

Private Database per user quota:

As far as I can tell, this is all billed/calculated on a per user basis. As a developer, you will never be billed for usage of a user's private database. Also, If there is a group of users with crazy usage patterns, they shouldn't affect any of your other users quotas – just their own.
  • 10GB Asset Storage (Photos, Videos, etc.)

  • 100MB Data storage (Structured data in the CloudKit key-value store)

  • 2GB Data Transfer (This is unclear, but I'm assuming it's calculated per month.)

  • 40 Requests per second (I'm assuming a user will get throttled if they perform more than 3 requests in a 2 second period.)

Public Database all user quota:

Whilst Apple does provide an average 'per user' calculation in their calculator on their CloudKit page, I think this actually confuses matters.

This is because the 'per user' quota on the public database is an average based on Apple's definition of an active user – someone who has accessed your public database container within the last 16 months – rather than your typical Monthly Active Users (MAUs). This is actually a good thing, as those users that aren't retained bump up the shared allocation for your remaining users – for 16 months after they last used the app!

However, now when you create a 'per user' average of the quotas – they look more conservative than they actually are.

The truth is that for most apps usage patterns are going to vary wildly between super-engaged contributing users, casual users, and users that have churned never to return again.

With this in mind the quotas look pretty good:
  • 1PB (1000TB) Asset Storage (Photos, Videos, etc.)

  • 10TB Database Storage (Structured data in the CloudKit key-value store)

  • 200TB data transfer

  • 400 requests per second.

So, to summarise, I'd ignore the per-user average figures for the public database – they're a red herring. Do some calculations for your own app's usage patterns based on Apple's 16-month Active Users definition from the overall quota.
Add a Comment

Replies

Private databases have 40 request / second limit each.
This means if you use private database , each user will have it's own database,
so each user will have 40 requests / second.

Please correct me if I'm wrong.
I'm finding this confusing too! The CloudKit page seems to split the usage quota into whether you are using the private or public database. Here's where I've got to.

Private Database per user quota:

As far as I can tell, this is all billed/calculated on a per user basis. As a developer, you will never be billed for usage of a user's private database. Also, If there is a group of users with crazy usage patterns, they shouldn't affect any of your other users quotas – just their own.
  • 10GB Asset Storage (Photos, Videos, etc.)

  • 100MB Data storage (Structured data in the CloudKit key-value store)

  • 2GB Data Transfer (This is unclear, but I'm assuming it's calculated per month.)

  • 40 Requests per second (I'm assuming a user will get throttled if they perform more than 3 requests in a 2 second period.)

Public Database all user quota:

Whilst Apple does provide an average 'per user' calculation in their calculator on their CloudKit page, I think this actually confuses matters.

This is because the 'per user' quota on the public database is an average based on Apple's definition of an active user – someone who has accessed your public database container within the last 16 months – rather than your typical Monthly Active Users (MAUs). This is actually a good thing, as those users that aren't retained bump up the shared allocation for your remaining users – for 16 months after they last used the app!

However, now when you create a 'per user' average of the quotas – they look more conservative than they actually are.

The truth is that for most apps usage patterns are going to vary wildly between super-engaged contributing users, casual users, and users that have churned never to return again.

With this in mind the quotas look pretty good:
  • 1PB (1000TB) Asset Storage (Photos, Videos, etc.)

  • 10TB Database Storage (Structured data in the CloudKit key-value store)

  • 200TB data transfer

  • 400 requests per second.

So, to summarise, I'd ignore the per-user average figures for the public database – they're a red herring. Do some calculations for your own app's usage patterns based on Apple's 16-month Active Users definition from the overall quota.
Add a Comment