views:

150

answers:

2

I am thinking of making an (initially) small Web Application, which would eventually have a potential to grow. All things considered Google App Engine seems like a very attractive option. Say, user base and complexity grows and for one or other reason I needed to leave GAE behind. How difficult would it be to migrate away?

1) Does GAE provide a way to export the database? What format would it be? Would it be difficult to put it under MySQL (or similar)?

2) In which areas (ex. database access, others?) would I have to use GAE API? I.e. which parts of implementation would have to be abstracted away / interfaced?

Edit: 3) Alternatively, is it even worth to abstract away GAE API?

+2  A: 

For question #1: I don't know if GAE specifically supports exports of a database but you can always roll your own, worst case scenario. If you are in a position where you need to, you'll probably have the resources to do it, too.

For question #2: You can and should always encapsulate those kinds of outside dependencies anyway. It doesn't matter whether or not they provide interfaces. Coupling to those interfaces should be kept to an absolute minimum.

For question #3: This question is not really super-clear so I cannot answer it.

A: 

I'm speaking strictly from a java webapp point of view...

Google App Engine for python has a backup/restore utility: http://code.google.com/appengine/articles/gae_backup_and_restore.html

There is a huge interested in porting this to the java flavor.

You can use the higher level standard database apis (JDO/JPS) to allow you to move your app away from google's database services. I suggest purchasing the data nucleus tools in order to smooth the transition from big tables to something like mysql or oracle.

The packaged services GAE provides are enumerated at http://code.google.com/appengine/docs/java/javadoc/

The stock JRE should handle porting of the urlfetch, mail, and memcache api packages. You'll have to find a substitute technology for the users, blobstore, xmpp, and taskqueue packages.

Stevko