How Streak Tracks Down App Engine Datastore Bugs
developer.streak.com
developer.streak.com
This is not true. A feature in app engine called entity groups were added to work around exactly this type of problem. The Dog entities should have their entity group (parent) set to The DogWalker. This will ensure full read/write consistency among that group of entities.
Combine this with transactions, and cross-entity-group-transactions, and you can ensure that you don't have dangling or incorrect pointers like what you describe.
You have to remember set the pointers between the two entities correctly and to do the write in a transaction. Granted this should be easy but mistakes can be made.
Compare this to a tradition relational DB where this consistency is enforced at the database engine level (if you've setup your schema in that way) and it won't let you write inconsistent data.
Also, even with relational databases, there are many times when you need to use transactions to prevent certain types of inconsistencies, they don't protect against everything.
Any transaction on an entity in a group will cause any other writes to the same 'entity group' to fail. Therefore, if you have a large entity group with lots of writes, this causes lots of contention, and your app then has to handle the expected write failures - which is a pain!
But beyond that, there are other app engine tools like task queues, which can make dealing with contention pretty easy.
An unrelated query: does anyone know of companies (like Streak.com) using app engine datastore in production? We are newbie programmers, and developing our app on app engine (because it was easy to learn) - but it feels a bit lonely sometimes :)
And our website has a list of some of our customers at cloud.google.com/customers.