Nine reasons not to use Google App Engine for your production application

We’re using Google App Engine since version 1.2.2 for our product. Now version 1.2.8 is used. The number of problems make work with the GAE application far from user-friendly:

  1. It’s impossible to drop/create application with the same name. Sometimes when the application feels very bad you would like to recreate it from scratch. But it’s impossible. You won’t be able to use the same name for the second time. The possible workaround here is not to rely on the URL like http://test.appspot.com but to have a separate domain name which you can reconfigure in case if you need to recreate application
  2. Datastore limitations. They’re incredibly huge. No usable foreign keys, no aggregate functions. So if your knowledge of SQL is good, forget about it on you GAE project.
  3. Sometimes you want to clean datastore fully to reinitialize your database. It’s possible to delete records via application management UI, but I haven’t found a way to do this via scripts. So you have to go through all data kinds and remove records by 200 at a time. Not very convenient.
  4. Dump/Restore operation are not very usable. You can’t dump or restore the full database, just data of a specific kind. You’ll need to write either your custom configuration or use some external library
  5. It’s not possible to upload a single file to the application. Let’s say you’re developer and need to deploy a sort of hot fix or small request from the customer to the production server. You’ll need to have a full copy of the production server application to deploy this hot fix.
  6. Some operations can be done only by application administrator. For example dumping datastore. Usually the application is created by a management person. So if you want to dump datastore – you’ll need to ask this management person to run scripts which requires installed Google App Engine SDK. You can’t do this as a simple developer. Not very convinient. It would be really nice if it would be possible to change application administrator, but it’s not possible
  7. Index creation is not a very quick operation. In our case(about 200 records in the initial datastore) index building took about 30 minutes. Until all indexes are build – queries fail to run and throw an exception
  8. Several times we got an exception about required index when the index was in the serving state according to the application management UI
  9. The product is rather young and rapidly growing which usually has the following disadvantages: state of the documentation and number of issues, which require patching.

Based on all these moments I won’t recommend using GAE for any more or less complex real-world application. The idea is nice and I hope that its implementation will become more user-friendly and easy to use in the future.

UPDATE

Tomorrow evening we were doing several things and two additional problems appeared.

  1. Sometimes datastore fails to select data from table which has three records(!). The part of Django code looks like: site = Site.all().filter(‘domain =’, domain).get(). This code periodically causes google.appengine.api.datastore_errors.Timeout. And this problem seems to be rather common
  2. Trying to dump datastore information via bulkupload.py causes “‘NoneType’ object has no attribute ‘exc_info'” on one application, but works perfectly for the other.