Tuesday, December 21, 2010

Google App Engine Hurdles

Google App Engine has become quite a buzz around the web. I gave it a try and I want to share some experience here. My task was to run Solr search system on GAE/java. After two days of implementing index storage for the DAE datastore I finally gave up.

There are two major considerations against using Google App Engine as a hosting for your applications:

1. The Datastore does not find records you just added to it until you commit the current transaction. This transaction semantics differs from any other database system in the world. You may think this is not a problem: why ever fetch records you just saved? But if you try to develop a real application, with real complex transactions, you will find very soon that this is not an option. For example, consider importing large amounts of data: you can't access the data you have imported so far in a transaction (e.g. for checking uniqueness of the sku field). There are work-arounds for this problem, of course, like importing in a separate parent entity without using transactions. Which complicates your application a lot.

2. Eclipse plugin does not update the server when you change the code. The only way to update the server with the new changes is to stop and then start the server, but that can take a while. This little glitch makes the development environment almost unusable.

I'm gonna use Amazon EC2 for this application. Scalability is not a problem for me, and everything else is far better (at least I can write to files, which is not possible under GAE).