App Engine is a pretty dramatic thought departure for lots of programmers who are used to writing an app that runs on a single server and access a single database. Case in point, there has been a recurring topic of auto-increment fields on the App Engine list — people trying to implement their own version of it since it is not a native datastore type.
Using an auto-increment field is not the way to go. It is viable when you only have 1 database but the datastore for your app is going to/can be replicated out to other machines. This would mean that their exists times, when datastore’ != datastore” — over time datastore’ would be sync’d with datastore” so that datastore’ == datastore” — this would lead one to believe that there will be times when the idea of an auto-increment field will not be synchronizable or that the result of the synchronization would be less than satisfactory. My belief that auto-increment fields are the wrong idea in this environment is strengthened by the fact that they are not offered as an intrinsic datatype.
Other Thoughts on the topic:
- data access is very expensive, using a UUID should be faster
- UUID1 or UUID4 would be the types to consider
- UUID1 is preferable as it would introduce some machine significance which should make the chances for a collision to be even more remote than for a UUID4 (random)