1) Is having a large # of objects in a bucket and trying to query them going to be slow. For example, if I created a 100k objects in a single bucket. How does this affect query performance? Is there any type of indexing in this storage system.
Answer: The best-performing design is the one in which you maximize use of buckets and minimize number of objects in each bucket, as much as it makes sense for your app design. If you take advantage of scopes to store single-user-data together with the user, and group-data together with the group, it also helps. The objects are automatically indexed and all queries that you perform will be, in general, indexed queries.
As for the actual number, we roughly estimated more than 100k objects in the bucket will have performance issue with complex queries.
Please see post on the community what's complex and what's not:
2) Are there any performance limits or associated cost with a large number of users?
Answer: Not really, as long as those user's data is spread in different buckets (possibly user-scoped) instead of in one-big-bucket, it will perform well. If you re-use tokens between sessions instead of asking for a new one all the time it also helps with performance.
3) Are there performance issues or other considerations with a large number of buckets?
Answer: No, large number of buckets is a good design pattern. It minimizes cardinality of each query and gives the Kii Cloud insight about the data access patterns that your game/app performs, increasing optimization opportunities.
4) What are the size limitations of the data store itself – how much can it store?
Answer: The limit depends on the plan you have. Please refer to
5) Can I create buckets under buckets? Hierarchical buckets?
Answer: Hierarchical buckets are not supported.
6) Are you using a NOSQL database on the backend?
7) If I query for 1000 objects – is that considered one call? Or are there multiple round trips that add up? Is there a way to track the number of calls?
Answer: Multiple round trips actually happen. When the query result contains large number of data, the result will be divided in several responses. A response contains the 'key' to obtain the next page of the query. You can get the next result with this key. In the unity SDK, please use NextKiiQuery
You can also set the maximum number of records in one response when you execute query, but this is a best effort limit (meaning that you will get "at most" that number of records). See:
As for the number of calls, you can check the usage from developer console:
- Choose your application
- Click 'Usage' button placed on the upper right side.
8) Is all the data in the storage backed up nightly?
Answer: There are redundant and high-availability systems in-place to ensure data is never lost because of hardware failures, server bugs or network problems - and, of course, we backup them also as a last resort. However, we don't provide on-demand backup/recovery for user data, meaning that if you delete some of your data, we can't help you recover it from the back-ups.
9) When logging into the system – is all the data passed over the wire in a way it can easily be sniffed. I don’t’ want any particular user to be able to sniff out the app id, keys, etc and then gain access to the shared storage?
Answer: Our SDK uses https connections and our cloud installs valid certificates. Credentials and private information is secured by SSL (Please use https when you use REST API directly)
The App ID and App Key can be sniffed if the user reverse engineers your application binary.
But that doesn't mean that the user can gain the full control of your application.
In fact the access is very limited only with App ID and App Key (equivalent to anonymous user.
(Please be sure not to expose Client ID and Client Secret. If stolen an attacker will have full control of your application.)
10) Are there any batch-oriented calls – I noticed that if I wanted to delete 10,000 items in a bucket – it seems I have to call Delete 10,000 times on each object – which translates to 10,000 calls and a lot of round trips? Can I just put together a batch of ID’s to be deleted – and send a command to the server to delete them?
Answer: Batch operation is not supported yet. However bucket deletion is available.
11) Is there a way to develop a server side REST service that runs on the server – where my client can place calls?
Answer: You could use our server code execution. You can define new endpoints, pass arbitrary key-value data to the endpoint and retrieve result with the arbitrary key-value data (more info below).
Answer: Currently it can be invoked from the client. (though the feature is not available on the Unity SDK yet). From the Unity SDK, please use the REST API directly.
An example project that shows how to do this on Unity can be found here (this workaround only applies to Unity)
About scheduled execution, event basis, we're in the process of implementing the feature.
As for the cost, If you access Kii Cloud api from server side js code, it counts as usage of API. (regardless of using JS SDK or using REST API directly)
13) What's your api call burst rate (max operations per second)?
Answer: We officially support up to 150 requests per second per bucket