Search code examples
javamysqlgoogle-app-enginegoogle-cloud-datastore

Where is allocateIds in the Google Cloud Datastore java library?


I moving some data from Mysql to the Datastore and for this data migaration I want to keep the old Ids from Mysql.

I found this note here

Instead of using key name strings or generating numeric IDs automatically, advanced applications may sometimes wish to assign their own numeric IDs manually to the entities they create. Be aware, however, that there is nothing to prevent Datastore from assigning one of your manual numeric IDs to another entity. The only way to avoid such conflicts is to have your application obtain a block of IDs with the allocateIds() method. Cloud Datastore's automatic ID generator will keep track of IDs that have been allocated with these methods and will avoid reusing them for another entity, so you can safely use such IDs without conflict.

So allocateIds seems perfect for what I am trying to do. I want to use the method to allocate all the auto incremented ids from Mysql so that I can then use the datastore Id generator without worrying about collision.

However I can't find this method anywhere. I am using the cloud datastore java library as a standalone library, without using the app engine.


Solution

  • The Cloud Datastore API does not expose a method for reserving a user-specified ID. The AllocateIds method picks IDs for you.

    One possible approach would be to assign the MySQL-generated IDs to the name (string) field in your keys. Cloud Datastore never auto-assigns the name field. The downside is that your application code would be responsible for generating future values.