When Google App Engine (GAE) has been launched in 2008, everybody get excited about this cloud platform. Initially GAE has supported the Python programming language for building scalable web application (;-)). Python enthusiast has taken this move on high spirit. Well but after going through the documentation, there excitement has been changed into frustration. Everybody know the reason :
- We can't upload file on the web application, we have to save the uploaded stuff in blob, max size of the blob was 1 MB. (quantitative data may be not correct sometime,..beware..)
- Lack Of RDBMS feature on Google Patent Data Store Known as BIG TABLE.
Well apart from these frustration there were some benefits also, like :
- No Worry About Infra..
- Good Deployment Process...
- Loads Of Free CPU hours, Band Width, Data Space etc..
Due to these surprised pack, Python Developers got shocked and none of the blog or article I found on the net who had given there better experience with GAE.
Meanwhile, A large Community Of Developers Which is known as Java Community (Lost in Buffer.) demanded the Google App Engine Team (Or this was reflection..) to introduce the War Deployment On The Mighty GAE. So In 2009 (some time) they had introduced Google App Engine For Java (GAE-J).
I was always wondering Why the GAE team is not try to improve the core GAE on immediate basis, But they are always keep on commenting on their community forum regarding : "They have hell lot of important things to do".
As a Java Programmer I also get spell bounded with the initial buzz of Mighty GAE-J. I was very excited to know that, now we can test our web application on internet very easily. Well GAE-J publishing, deployment process is very quick. But there are several fundamental bottleneck which restrict it to be become useful cloud platform for the JAVA.
- We can't program Thread. So all the framework or java component which are using Threads can't be reuse on GAE-J.
- We can't use Struts 2 without work around.
- We can't use Struts 2 File upload without tweaking.
- For keeping our app alive we need to have request every 5-30 sec on to server, otherwise it will be reinitialized. And reinitialize is time consuming. There is no reserved memory for the application all the time.
- We can't use select statement on more than 1 data type (table or classes).
- We can't run the query on table direct, we need to have proper index for each query.
- When we are not having join on tables, scope of complex query get eliminated.
- When we are querying on a Table, If we would like to get records from 20-40 offset, without fetching 1-19 records, It is not possible.
- Later they had introduced concept of cursor but that is also useless, we need to do a loads of work around to use that.
- When we can't fetch the chunk of records without fetching the others. This is tough to implement Pagination effectively. And for any good Application this is not practical to place the tricks and tweaks based on criteria and other work around.
- Even with the restriction on querying on one table, If we wanted to live happy, still this is not possible as:
- We can't use inequality (> < >= <=) operator on more than one column (property). I know they are querying on indexes, and this is complicated situation, so they bared the user to use it (easier then finding a work around on data store level). In this situation we can filter the data in proper fashion and we have to do extra work at application layer, even on client side.
- We can't do full text search. We are boasting on scalable big table but due to not indexing kind for text and other larger data type, we can't use our favorite like operator. I try to do some hack by putting tags etc., but all the solution get collapse due to other restriction.
- We will never know how many records are there in one table If we will not keep track of it in another table. We can't run aggregate functions on the table.
- There are some time limit (30 sec I guess) set on to any request to carry out the operation otherwise that will be terminated.
- We are not having scope of using Apache Lucene or compass and there is no any Google Datastore based indexing component available. I am really surprised by this behavior Of G(Google Search Giant)AE team.
Well I had listed various lacked feature in GAE which is baring it from even being a small web application. I had seen people using GAE for very tiny small sites with minimal data source usage in GAE site.
I will advice GAE team to work around for the above missing feature otherwise developer like me will love to invest the time in configuring his own ORDBMS server and other infra.. to host the applications.
Nice Time... :-)