是否可以将couchdb配置为生成除UUID方式之外的ID? 我在单个节点上使用couchdb,我理解不在分布式环境中使用UUID的缺点。
我需要像自动增量或更短的ID。我有FK参考 像userIds:[“16011a5704ffe78e6de2afa4b3001d10”,“55464a5704ffe78e6de2afa4b3001d10”,...] 如果我使用UUIDS,这可能太长了。
答案 0 :(得分:0)
使用UUID而不是简单的自动增量值的原因是为了减少使用多个节点时发生冲突的可能性。 CouchDB确实有3 different algorithms,您可以选择生成UUID。
如果您需要其他ID格式,您始终可以定义自己的_id
字段,因为只有_id
未定义时才会调用uuid生成器。
答案 1 :(得分:0)
你可以自己提供你的身份证,即使生成的UUID不是非保证,它只是最小化冲突的机会,但由于你关心长度,我们可以将它缩短为16。首先4确定用户,接下来8确定时间戳,最后4个可以是随机的。
使用this多基转换器,您可以使用0-9a-zA-Z
打破这一点非常困难。根据您正在构建的系统类型和您正在考虑的最大用户数量,您可以将其减少到10(3前缀,7次)或甚至为您的(-_)
添加更多字符characterlist。
修改强> 这是我自己的实现 在我的解决方案中,每个用户在管理员添加后都已经拥有唯一的前缀,并且管理员创建的用户不超过10个。根据创建的数据类型,将使用唯一字符作为前缀。 Thenafter这是我转换当前时间基准的方法62。最后,我追加一个随机字符。 `
base62 (val) {
const SYMBOLS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
let digs = ''
while (val) {
digs = SYMBOLS.charAt(val % SYMBOLS.length) + digs
val /= SYMBOLS.length
val = parseInt(val)
}
return digs
}
单个用户不能同时在同一类别下创建两个记录,即使他这样做,也很少生成相同的随机附加字符。