Hash CouchDB使用顺序ID';s、 但能够根据内容即时确定ID

Hash CouchDB使用顺序ID';s、 但能够根据内容即时确定ID,hash,couchdb,Hash,Couchdb,Couchdb通过使用顺序ID表现出非常有益的性能增益。然而,仅仅通过查看内容(例如,将用户名散列到ID中),就可以瞬间“知道”对象的ID,这是值得一提的。 我怎样才能或多或少地实现散列ID的便利性,同时又能获得顺序ID的性能提升。我认为解决方法是不可能的 查看键查找只比文档id查找慢一点点。(请参阅。)我的理解是,在视图查找的情况下,文档的类型\u id不会影响性能,因为它依赖于自己独立的B树结构。因此,对于实际查找用户信息,查看顺序标识文档的查找是完全正确的 但我知道您希望能够注册用户并保证

Couchdb通过使用顺序ID表现出非常有益的性能增益。然而,仅仅通过查看内容(例如,将用户名散列到ID中),就可以瞬间“知道”对象的ID,这是值得一提的。
我怎样才能或多或少地实现散列ID的便利性,同时又能获得顺序ID的性能提升。

我认为解决方法是不可能的

查看键查找只比文档id查找慢一点点。(请参阅。)我的理解是,在视图查找的情况下,文档的类型
\u id
不会影响性能,因为它依赖于自己独立的B树结构。因此,对于实际查找用户信息,查看顺序标识文档的查找是完全正确的

但我知道您希望能够注册用户并保证不会出现用户名冲突。因此,您必须在文档id中包含用户名

如果您决定反对CouchDB的最终一致性方法,那么这是适当的做法

另外,我的理解是,除非您每秒大量插入随机用户名或处理大量新用户注册,否则性能不太可能降低


这与其他数据库进行的性能权衡是一样的。没有锁/事务,插入数据的速度比使用锁/事务更快。

我刚才的一个疯狂想法可能也会奏效,但如果不尝试,很难说出实际性能会如何。您可以将用户名存储在单个文档中(甚至分为a-doc、b-doc等),而不是存储在它们自己的文档中,并使用文档更新处理程序来保证新注册的用户名被自动添加/拒绝。这自然会引出另一个想法……保存一个包含用户名->顺序文档id映射日志的文档。如果无法将其插入日记账文档,则不继续添加用户。