Hi,
What about turning the problem on it's head. It sounds like a document can have one author and the author can have one name. What about storing the _id of the author doc in each document they write/ own then use a view that emits the document _id and the author _id. Querying that with include_docs=true will pull in both documents (if I understand http://blog.couch.io/post/446015664/whats-new-in-apache-couchdb-0-11-part-two-views correctly) so you'd see the document the author wrote and the author document. That means if the authors name changes you have one place (one document) to update, which is trivial. Of course, the above breaks if the author actually changes (a new name because the author _id has changed) but you already have a solution for that problem with _changes et. al. ;) If changing a document author is global (e.g. all docs authored by Joe are all now authored by Fred) the above should work, you could even have a view that emits doc id by author that you query with ?key and have your external process reduce to zero, you could even take that view result and push a bulk update (though that might not be ideal if a document is large...).
Cheers
Simon

On 10 Apr 2010, at 00:56, faust 1111 wrote:

In my case
change of author name is exceptional situation.
its happen rarely.


I think  i can do like this:
 when author change name
 i create doc mark that i begin update all related contents
 then  try update
 then remove mark

if update is fail(mark not reomve), i will know about and can continue.

And i think i don't need  run backend process listen
_changes feed i can  catch changes in my app model Author.


2010/4/10 Michael Ludwig <[email protected]>:
Andrew Melo schrieb am 09.04.2010 um 15:04:59 (-0500)
[Re: About denormalization and keep consistent]:

Are there scenarios where writing happens to an SQL server, from
where NoSQL replicas are fed and used to serve readers?

Possibly. But, if you're writing to a single SQL master, then you lose two benefits of Couch: horizontally scalable writes and not having to be restricted by SQL's data model. You could do (for instance) single master writes and many-slave reads on a stock SQL server in that case.

Thanks, Andrew. It appears Faust is concerned about data consistency
which is usually and easily ensured by suitable SQL data modeling. That does not happen to be the forte of a system designed for scalability at
the expense of consistency.

Faust, there are many places and cases where data can be copied and held
redundantly in hundreds or thousands of places, and it simply doesn't
matter. Think email, for example. If you changed the name belonging to your email address to "Johann Faust", it wouldn't matter that there are
mails with the older version of your name in the archive, and they
wouldn't have to be updated, and they even shouldn't be updated. That
seems to be an excellent use case for a system like CouchDB.

If, on the other hand, you care about consistency in the way you
described, you might want to consider using a system that supports
you in guaranteeing such consistency.

--
Michael Ludwig


Reply via email to