In working with the data store, I've been able to solve all of my
"issues" (coming from a RDBMS background, had to rethink a few
things!), save for one.  In the application I'm working on, it's
necessary to "reserve" a record at a moment in time and then display
that record to the end user, ensuring that each user gets a single
record and no duplicates are issued.  Working with the record prior,
and using SQL as an engine, I was able to use the following query:

UPDATE CCode SET SessionID = '" + strSessionID + "', Assigned = 1
WHERE Assigned = 0 AND PartnerID = " + str(intPartnerID) + " AND
ExpireDate >= '" + str(dtCompareDate) + "' Limit 1"

This would update the record in one pass and effectively reserve the
record for the established session, with no time lost inbetween
issuing the update and recording the change while SQL handled any
conflict resolution should two people request a record at the same
time.

However, dealing with datastore, I seem to be running into some
problems with timing and wanted to know if anyone had any creative
ways around it.

I realize that I can run a standard GqlQuery to return the results I
need and then update based on the returned result and add the session
to the record without a problem.  What concerns me is the timing
factor.  During the time it takes for the query to execute and the
resulting put() statement, it would be possible for another user to
arrive and make the same basic query recalling the same record set.  I
know I could check for updates against the datastore before writing
back (used to do this years ago...), but this could potentially cause
a deadlock condition when the load on the system became greater and
multiple simultaneous users needed access to the records for selection
and updating.

Any thoughts on how to work around this?

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to