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
-~----------~----~----~----~------~----~------~--~---

Reply via email to