Thank you Chris, I think it's good for creating, but not for editing. For now, I'll try to use memcache.
Before my operation, I'll create a memcache to store current time and editing entity's key, and timeout is about 1 minute. If this key already existing in memcache, simply cancel this operation. After the db operation, I'll check its value. If time has been changed, I'll raise a rollback exception. So I can only use one model to store all of a blog's data now. Only hope I won't get two requests which set the same memcache in the same time. If incr() can be called for non-existing data, that would be more helpful. 2009/5/21 Chris Tan <[email protected]> > > You could add a property to your BlogName model which would link to > the canonical BlogName. However, you'd also have to take this into > account when editing blog names, since there is always a trade off > between features and complexity. > > Chris > > On May 20, 8:59 pm, keakon <[email protected]> wrote: > > Anyone knows how to define unique constraint in datastore? > > > > See I have a Blog model, and it has these properties: > > name, content, title, keywords, description and so on. > > > > I need provide a URL to get this blog like this: > > http://<domain>/blog/<name>.html > > > > So user cannot have two blogs that share the same name, otherwise one > > of them cannot be gotten via URL. > > > > I also need provide a way to change blogs' names. > > > > It seems I need to define a BlogName model to store Blog's name as > > keyname, and start a transaction to store the 2 entities: > > > > Creating: > > 1. Get BlogName entity by keyname, if not exsit, create one, else exit > > as failed. > > 2. Create a Blog entity which parent and name is this BlogName entity. > > > > Editing: > > 1. Get BlogName entity by keyname, if not exsit, create one, else exit > > as failed. > > 2. Get the old Blog entity and old BlogName entity by keyname. > > 3. Create a Blog entity which parent and name is this BlogName entity, > > and rest the same to the old one. > > 4. Delete the old 2 ones. > > > > Well, it seems can work, but how terrible it is! > > > > And if I want a blog can have multiple names, so the two URLs can get > > the same blog: > > http://<domain>/blog/hello.html > > http://<domain>/blog/你好.html > > > > I don't think I can get them by keyname since they are in a list > > property now, so it can't be done in a transaction. > > And if I keep them in two Blog entities, I need change both of them > > when I edit one of its properties. > > So it seems I need define BlogContent model, BlogTitle model, > > BlogKeywords model, BlogDescription model for referece from Blog > > model. > > > > Any better idea for me? > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
