使用dynamoDB时,是否需要为客户,产品或其他东西生成独特的ID,以便用户接触正确的方法?
当然UUID很棒,但它不是你可以期待客户使用的东西,如果我想在我的服务器上自己创建,我必须做出相当笨拙的数据库调用,以确保我按照某种顺序使用下一个,保存一些奇怪的额外场地或在黑暗中随机刺伤。
那么我该如何解决这个问题?
答案 0 :(得分:0)
您可以在进程缓存中使用计数器(或缓存 - 如memcache或redis),并在此计数器上使用锁定以获取下一个值。
psaudo代码:
function get_next_value():
lock:
counter+=1
return counter
答案 1 :(得分:0)
我认为UUID仍然是要走的路。特别是如果您正在寻求构建可扩展的解决方案,那么您就不能依赖单一的“故障点”和#34;生成某种顺序的唯一标识符 - 任何类似的东西都需要同步和可用性,这是分布式系统中性能的敌人。
但是,如果您想生成一些更人性化的标识符,您可以选择以下几种方法:
你可以从UUID开始并将它们分成两半(取前8个字节,xor和最后8个字节),然后取得结果的64位数字并使用base 62编码进行编码(0中的数字) -9加上大写和小写字母)生成一个11字符的字符串,比典型的UUID更人性化;如果您使用较少的熵,则可以将UUID折叠两次,获得一个32位数字,您可以将其编码为6个字符的基本62表示,或者一个7字符的基本32编码,它只使用数字和大写字母
您可以采用的第二种方法是使用mac地址,时间戳和伪随机数生成器的组合来生成您自己的ID,遵循一定的规则,类似于UUID的生成方式但具有较少的熵,再次,以便您可以对ID进行编码,使其具有用户友好性
您可以防止在两个不同地方意外生成相同ID的情况下可能出现的问题,您可以利用conditional writes to DynamoDB。