CouchDB 中的短键和唯一键

Posted

技术标签:

【中文标题】CouchDB 中的短键和唯一键【英文标题】:Short and unique keys in CouchDB 【发布时间】:2010-12-07 11:21:31 【问题描述】:

我想编写一个 URL 缩短器作为独立的 CouchApp,但我想知道这是否可能。 显然,URL 缩短器的核心要求是具有短且唯一的键。

我想要的是向 CouchDB 发布一个长 URL 并获得一个缩短的 URL。我考虑过使用更新处理程序,但它必须查询数据库以检查密钥是否唯一,这似乎是不可能的。

有没有办法用 CouchDB 生成短且唯一的键?还是我需要一个围绕 CouchDB 的薄包装器?

【问题讨论】:

【参考方案1】:

我会选择一个薄包装,基于具有以下结构的文档:

 _id : short_url , url : long_url 

插入新的长 URL 只需一步:让包装器生成新的 _id,尝试 PUT,然后使用新的 _id 再次尝试,直到成功。这将保证每个短 URL 只使用一次。

恐怕这种“生成、尝试、重试”的方法是确保唯一性的唯一策略,如果没有包装器,它就无法使用。

如果您希望相同的长 URL 重复使用相同的短 URL,您还可以添加一个 echo(doc.url,null) 的视图,并为您的 URL 获取 _id(如果它确实存在)。这意味着,除非多个客户端尝试同时添加相同的长 URL,否则该长 URL 只会使用一个短 URL。

【讨论】:

我发现通过外部进程实现“生成、尝试、重试”策略是可能的,但它并不漂亮。 wiki.apache.org/couchdb/ExternalProcesses 您还必须确保您的文档_id 在节点之间是唯一的,以便您可以安全地复制!一种方法是为每个节点添加一个唯一的前缀。尽管这不是无限可扩展的,因为您只能有 n*64 个节点,其中 n 是您允许每个节点前缀的字符数(64 是您可以在 _ids 中使用的 url 安全字符数)。此外,如果您有几百万个网址,您可能需要多次重试 PUT 才能获得唯一的短 id...

以上是关于CouchDB 中的短键和唯一键的主要内容,如果未能解决你的问题,请参考以下文章

如何在CouchDB中实现唯一键约束

CouchDB学习-介绍

CouchDB:使用 Reduce 时如何在 Map 函数中使用数组键?

Hyperledger Fabric CouchDB as the State Database——使用CouchDB

在 couchdb 上部署应用程序

couchdb 日期格式自动更新