是否可以将couchdb配置为以UUID方式以外的方式生成ID?
是否可以将couchdb配置为以UUID方式以外的方式生成ID? 我在单个节点上使用couchdb,我理解在分布式环境中不使用UUID的缺点 我需要一些像自动递增或更短的id。我有FK参考 类似用户ID:[“16011a5704ffe78e6de2afa4b3001d10”、“55464a5704ffe78e6de2afa4b3001d10”,…]是否可以将couchdb配置为以UUID方式以外的方式生成ID?,couchdb,couchdb-futon,Couchdb,Couchdb Futon,是否可以将couchdb配置为以UUID方式以外的方式生成ID? 我在单个节点上使用couchdb,我理解在分布式环境中不使用UUID的缺点 我需要一些像自动递增或更短的id。我有FK参考 类似用户ID:[“16011a5704ffe78e6de2afa4b3001d10”、“55464a5704ffe78e6de2afa4b3001d10”,…] 如果我使用UUID,这可能会太长。使用UUID而不是简单的自动增量值的原因是,在使用多个节点时,减少冲突的可能性。CouchDB确实有适当的位置,您
如果我使用UUID,这可能会太长。使用UUID而不是简单的自动增量值的原因是,在使用多个节点时,减少冲突的可能性。CouchDB确实有适当的位置,您可以从中选择生成UUID
如果您需要其他id格式,则始终可以定义自己的
\u id
字段,因为只有在\u id
未定义时才会调用uuid生成器。您可以自己提供id,即使生成的uuid也不保证是确定的,它只是最小化了冲突的可能性,但由于您关心长度,我们可以将其缩短到16。前4个确定用户,后8个确定时间戳,最后4个可以是随机的。
使用多基转换器,可以使用字符范围0-9a-zA-Z
编辑 这是我自己的实现 在我的解决方案中,一旦管理员添加了每个用户,每个用户都有一个唯一的前缀,并且管理员创建的用户不超过10个。根据创建的数据类型,将使用唯一字符作为前缀。然后,这里是我转换当前时基62的方法。最后,我附加了一个随机字符。 `
单个用户不能同时在同一类别下创建两个记录,即使他创建了,也很少会生成相同的随机附加字符。为什么不创建自己的ID并使用它呢?ID为空时默认为UUID。不同的服务(项目)同时使用My couchdb api。所以我没有原子检查之类的东西,并设置为查找特定id是否已经存在于数据库中。好的,所以答案是否定的。您需要找到一种方法来生成id作为应用程序基础结构的一部分,或者接受生成的id。老实说,如果您允许客户端/服务直接影响DB,那么它就不是什么API了。客户端服务调用my API(这是一个库,比如internalDBClient.jar)与CouchDB对话……所有3种算法都产生32个字符,这无法解决我的问题。我无法生成自己的id,因为不同的服务(项目)同时使用我的couchdb api。因此,我没有进行原子检查,并设置查找特定id是否已存在于数据库中。您只需调用一个HTTP
HEAD
请求,对您试图创建的具有\u id
的文档执行请求即可。它是测试\u id
是否存在的最快、开销最小的方法。您使用的节点是否超过1个?你使用过复制吗?我只使用一个节点,没有复制我们可以在验证文档更新中做一些事情来获得自动增量ID吗?
base62 (val) {
const SYMBOLS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
let digs = ''
while (val) {
digs = SYMBOLS.charAt(val % SYMBOLS.length) + digs
val /= SYMBOLS.length
val = parseInt(val)
}
return digs
}