My monkeypatching solution (see my recent post in the -python group), which Guido says I shouldn't use, but which is just so darned pretty I can't help it, has gotten me through the first challenge of switching to HR, which is dealing with google search results containing keys into my old app's data store.
So now I'm looking at the big Kahuna problem of consistency. Here's my first messy challenge there: My app puts a list of boards on the home page for a town, along with the list of meetings. Generating that list of boards was taking a lot of CPU, but they hardly ever change, so I put in a memcache system that built the HTML when it wasn't in the cache, and then cached it before serving. I clear the cache whenever the list of boards changes in some way. Well that ain't gonna work in HR. It's quite possible that I update a board, clear the cache, and someone comes and hits that page before "eventually consistent" comes to pass. So now I've got a cached copy of the stale data. (Note that I cannot use entity groups to solve this because some boards are municipal agencies, and therefore cannot be parented to the town that is building its list. I could parent all boards to some global parent, but, well, yuck.) I have some different ideas about how to fix this, but I'm wondering if anyone else who's done the port to HR has come up with a solution they find particularly elegant? I assume this is a pretty common problem, so there must be a design pattern out there⦠somewhere. Here are my ideas: - Clear the cache with a periodic task that re-clears it several times. I'm thinking a recurring geometric retry would be prudent (1, 2, 4, 8, 16, 32, 64, 128, 256, 512 seconds, and then pray that we have consistency) - Checksum the modified or new board, and put that sum into memcache. When generating the new board, confirm that any checksums are good. This seems more deterministic, except I don't trust memache not to squelch the checksum record. So perhaps I should do something in the datastore. This feels like it's be about 10x as much code as the stupid geometric flush. Any suggestions? -Joshua -- You received this message because you are subscribed to the Google Groups "Google App Engine" 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?hl=en.
