Though less technical solution, seems working for a single
application.
generate guid and save, query back the same by guid and read id.
=====================
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Long id;
@javax.jdo.annotations.Persistent
private String guid;
========================
On Dec 31 2010, 11:27 am, MG <[email protected]> wrote:
> OK, so here is our solution:http://bit.ly/ec3Yyw
>
> The main idea: we are combining Datastore sharding counters with atomic
> counters in Memcache to implement sequences. Our Sequence class has one
> (overloaded) static method: long Sequence.next(String sSequenceName). The
> method itself performs three simple steps:
>
> Step 1. Increment both the datastore counter (sharding) and the memcache
> counter (atomic), if the latter is present. If it is, return its new value.
> This step is scalable.
>
> Step 2. If the memcache counter is not present, “serially” synchronize it
> with the datastore counter. This step can be viewed as an analog of
> lock(Sequence);
> synchronize counters; unlock(Sequence);
>
> Step 3. Repeat step 1.
>
> Our resulting sequence is "growing" and unique because:
>
> 1. The value of the DB counter is always equal to, or larger, than the
> value of the memcache counter, because the DB (sharding) counter is always
> incremented before the memcache counter.
> 2. We return only atomic increments of the memcache counter.
> 3. When the memcache counter is initialized, it is set to a value that is
> greater than any possible previous memcache value.
>
> Full source code is available here:http://bit.ly/ec3Yyw
>
> Any feedback?
>
> MG
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.