2009/10/15 Adam Kocoloski <[email protected]>: > On Oct 15, 2009, at 10:28 AM, Matt Goodall wrote: > >> Hi, >> >> I think this is more of a dev question given that it needs some >> knowledge of the deterministic rev algorithm ... >> >> I was just wondering if CouchDB could use the deterministic rev stuff >> to avoid writing changes to the database if nothing has actually >> changed in the doc that is PUT back (or bulk updated, of course). >> >> The most obvious use case is that it's horrifyingly common for users >> to click an HTML form's submit button, instead of using the back >> button, when they haven't changed anything. I suspect most >> applications do not check if the user made any changes and therefore >> end up sending exactly the same data back as an update ... >> unnecessarily creating a new document rev, growing the database, >> invalidating views, and triggering _changes updates. >> >> CouchDB obviously has to calculate the hash for the new rev anyway, so >> perhaps it could compare the new value to the current value, skip it >> if it's unchanged and return the current _rev in the response. >> >> Is that feasible? If so, I'll create a ticket for it. >> >> - Matt > > Hi Matt, it would easily be possible except for the fact that the old > revision of the document is part of the content used to generate the hash > that becomes the new revision. So even if the body didn't change, the hash > won't match the old rev.
Yeah, I suspected something like that was happening from the revs I was seeing. The bit after the numerically increasing bit would have been the same otherwise. > > I think it would be a nice improvement, and I honestly don't remember off > the top of my head the argument _why_ the old revision had to be included. I'm guessing it's something to do with tracking a document's revision ancestry. But anyway, if the old rev is included that would mean calculating two hashes per update ... which would likely slow real updates down. > So yeah, a JIRA ticket seems like a good idea. Best, Will do. > > Adam >
