是否可以配置couchdb以生成除UUID方式之外的ID?

时间:2013-08-08 19:08:09

标签: couchdb couchdb-futon

是否可以将couchdb配置为生成除UUID方式之外的ID? 我在单个节点上使用couchdb,我理解不在分布式环境中使用UUID的缺点。

我需要像自动增量或更短的ID。我有FK参考 像userIds:[“16011a5704ffe78e6de2afa4b3001d10”,“55464a5704ffe78e6de2afa4b3001d10”,...] 如果我使用UUIDS,这可能太长了。

2 个答案:

答案 0 :(得分:0)

使用UUID而不是简单的自动增量值的原因是为了减少使用多个节点时发生冲突的可能性。 CouchDB确实有3 different algorithms,您可以选择生成UUID。

如果您需要其他ID格式,您始终可以定义自己的_id字段,因为只有_id未定义时才会调用uuid生成器。

答案 1 :(得分:0)

你可以自己提供你的身份证,即使生成的UUID不是非保证,它只是最小化冲突的机会,但由于你关心长度,我们可以将它缩短为16。首先4确定用户,接下来8确定时间戳,最后4个可以是随机的。 使用this多基转换器,您可以使用0-9a-zA-Z

的字符范围
  1. 一旦新用户使用该系统,他将被分配一个由4个字符组成的唯一字母数字(超过1400万个可能的前缀)
  2. 接下来,我们以毫秒为单位获取当前时间并使用上面提供的多基转换器进行转换(应该适用于8888年的时间)
  3. 最后4个字符是随机生成的字符串,只是为了填充。
  4. 打破这一点非常困难。根据您正在构建的系统类型和您正在考虑的最大用户数量,您可以将其减少到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
    }
    

    单个用户不能同时在同一类别下创建两个记录,即使他这样做,也很少生成相同的随机附加字符。