在couchdb文档中,自动生成id还是手动分配id更好?

在couchdb文档中,自动生成id还是手动分配id更好?,couchdb,Couchdb,我应该在CouchDB中生成文档的id,还是应该依赖CouchDB生成它?这些方法的优点或缺点是什么?这些选项中的任何一个都会影响性能吗?最重要的是,您应该主要使用顺序ID。正如本文所解释的,使用随机ID会导致内部结构的效率大大降低,无论是在速度方面还是在磁盘上使用的空间方面 如果您有两个或多个应用程序的独立实例,那么几乎不可能处理自生成的ID。因为不同实例之间的同步不是瞬时的。一个解决方案是让一台服务器专门生成(或检查可用性)ID,例如使用SQL数据库,并充当文档创建的入口 另一方面,如果您只

我应该在CouchDB中生成文档的id,还是应该依赖CouchDB生成它?这些方法的优点或缺点是什么?这些选项中的任何一个都会影响性能吗?

最重要的是,您应该主要使用顺序ID。正如本文所解释的,使用随机ID会导致内部结构的效率大大降低,无论是在速度方面还是在磁盘上使用的空间方面

如果您有两个或多个应用程序的独立实例,那么几乎不可能处理自生成的ID。因为不同实例之间的同步不是瞬时的。一个解决方案是让一台服务器专门生成(或检查可用性)ID,例如使用SQL数据库,并充当文档创建的入口

另一方面,如果您只有一台服务器,并且永远不会需要更多服务器,那么我发现自生成UID有一个有趣的优点:因为它们必须是唯一的,所以您可以在URL中使用它们。例如,将一篇博客文章标题的slug作为
\u id


就性能而言,CouchDB生成的ID相当长,因此如果您自己的ID较短,您将节省大量的磁盘空间(假设您有大量文档)。

CouchDB没有什么不同。弗雷德里克说得对,顺序ID稍微快一点。如果查询
/\u uuid?count=10
,您将注意到uuid是顺序的(默认情况下)


但是,即使使用随机ID,一旦运行压缩,它们在
.coach
文件中的内部顺序都是“正确”的,在这一点上没有区别。所以从长远来看,我通常不担心它。

以上两个答案都说明了顺序ID的优点。 下面是顺序ID引起的一个主要问题

使用单个ID的文档中其他ID的可预测性


因此,我们不能在应用程序url中使用顺序ID作为标识符,因为使用一个ID可以预测其他ID,并且使用as url身份验证也是不可能的。(由文件共享服务完成)。

如果使用CouchDB ID生成,则代表“顺序”算法。在我们的项目中,我们决定像这样独立地生成ID:sha1(uuid())来减少对CouchDBSir的GET请求,那么顺序ID引起的问题呢?我们不能在应用程序URL中使用顺序ID,因为使用一个ID可以预测其他ID,并且使用长ID作为身份验证是不可能的,您的意思是使用BigCoach(多个实例)?@DmitrySorin我的意思是通过双向复制。我对BigCoach了解不多,但从我刚读到的内容来看,它可能会解决问题……按顺序你的意思是“按顺序增加”,对吗?不加1或任何其他常数?对。ID是字符串,因此要获得性能提升,您需要使用字符串比较使每个ID比另一个“更大”。然而,正如我所说的,当您运行压缩时,CouchDB构建一个平衡的树,而不管您的ID如何,所以性能提升只是暂时的。