i know counting objects, aka, distributed auto-increment in couch is consider bad form. but let me propose a scenario a feel out peoples thoughts on a specific topic, in the interest in solving what i think *must* be solvable problem when using couch for an actual, real, live distributed system..

so let's say we want to store something

  login: foo
  password: bar

in a couchdb system, to authenticate users. clearly, when given a login, we want to lookup a given login by said login and validate a password.

so consider this a bit - we could store docs using "account- #{ login }" or some other permutation of of the login name - the md5.. whatever...

this obviously isn't great - two user signing up on two different nodes will cause a collision at replication time, but not at sign up time, meaning it'd be nearly impossible to actually create a system with multi-master nodes that would allow something as simple as user signup without crazy after the fact email resolution requiring a user to re-signup iff their login was a dup.

okay, take two, let couch generate the uuid, and replication proceeds as planned. all is well. that is, until you want to authenticate a user... doing a search based on

  emit( doc.login, doc )

returns 14 results. two of them have the same password. which user *is* this client logging in?

so this seems like a real wart: replication is *useless* without a better mechanism for generating uuids. clearly we cannot expect a user to login via uuid, and clearly we cannot use the login, nor login:password combined as the uuid since that would create retro- active signup failures...

so, in a situation like this, requiring a unique set of data across all replicating systems, what would the 'couch way' be?

i think i'm stuck thinking inside a box and would love some insight to get out of it but, for now, i feel like the distributed and replicated nature of couch, while solving a host of issues, seems to open up vastly more complicated ones in the process.

kind regards.

a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama



Reply via email to