I built a couple of applications using Google Appengine. The google appengine was marketed as highly scalable with high-availability. Google Appengine looked like an ideal choice for “salary search” application that I was planning to build for a while. The data-set that I was looking at was more than 2 Million records to begin with and felt that Appengine could scale well. Two weeks after releasing it, I am frustrated with how little Google Appengine delivers on its promises.
- Abrupt time-out errors: This is the single biggest issue with Google Appengine. Nobody including Google has explained what causes this and how to avoid these abrupt “Google Appengine is Over Quota” errors. We are not talking “Digg” effect, but something like 3K page views and 100 users per hour. Google appengine couldn’t scale to handle that kind of load.
- Not doing any writes to the datastore which are more expensive.
- Every request is memcached
- Not more than 100 entities are being retrieved per request.
- 1000 Entity retrieval limit: There is a limit on how many entities of a particular type can be retrieved. For example, when I try to list all the jobs offered by Infosys, the results cannot go beyond a count of 1000. There is a offset parameter but that offset works within this 1000 entities limit. So if the offset exceeds 1000, the query bombs.
- SDK is broken: The SDk and the production versions are out of synch. What works in the SDK does not necessarily works in PROD version.
- Indexes: Building Indexes takes more than 24 hours if it is successful.
- Updating Data is cumbersome: Once the data is uploaded, its very difficult to update that data. There are no “bulk” update operations that can be performed on the data. The only way I am aware of is creating a page and set it to “auto-refresh” using Meta-tag. The data operations functions are so rudimentary that no serious iterative development can be done on app-engine. Small changes to the data-model can take fore ever to implement.
- Documentation and Support: Documentation is limited. For support one has to be active on google appengine group. Though the engineers on the group try their best, the support needs are lot of improvement
- CRON/Batch jobs not supported: There is no support for CRON jobs or batch processing.
In conclusion, Appengine is Work in Progress and it has a long way to go before it can live up to its expectations. It is definitely not suited for iterative development, where companies want to release incremental functionality regularly. If the data-model is not well thought out , then Appengine framework will lock all your data or not scale at all, which defeats the purpose.