要求:
我们需要为商家分配一个随机的,足够长的数字/字符串,以便它们是唯一可识别的(不希望有人猜测标识符)。这是必需的,因为我们将此数字/字符串打印为QR码并将其提供给商家,以便我们的用户可以阅读QR码并获取有关商家的信息。
当前实施:
我们不能打印id,因为它们是顺序的,所以我们引入了一个新字段(externalId)来存储由JUG UUID生成器的TimeBasedGenerator生成的唯一id。随着我的研究越来越多,我发现UUID存在性能问题。所有文章都讨论了UUId作为主键,我没有使用UUID作为主键,而是作为辅助标识符。我并不担心插入和更新,因为与搜索相比它们会更少。由于用户将向我们发送从打印的QR码读取的UUID,我们将需要使用此UUID字段搜索商家,因此会对性能产生巨大影响。
此解决方案是否会显着提高性能,或者字符串操作所用的时间会使效果无效。
有没有更好的方法来做到这一点?
由于
答案 0 :(得分:1)
UUID以各种风格生成。您可能已经知道,RFC 4122概述了定义五个不同版本的变体(即UUID模式)。我建议您查看RFC 4122的版本1 。
版本1使用生成UUID的机器的MAC地址作为生成的UUID的最后12位数。
假设你去了二手电脑回收商并购买了一个过时的以太网适配器;启动并获取该适配器的MAC地址;然后销毁适配器(碎纸机,射击枪,酸等)。您现在可以放心,宇宙中没有其他计算机会使用该MAC地址生成V1 UUID。
现在您可以编写一个UUID(RFC 4122,V1)生成器,它将使用收集的MAC地址。
您可以为每个商家收集一个单独的MAC地址(来自附加卡),然后您就可以识别为每个商家生成的UUID。
奖金: 您可以使用Mahonri Moriancumer's UUID and GUID Generator and Forensics 试用V1 UUID。
答案 1 :(得分:0)
最佳实现取决于您的UUID&S字符分布,但是在遇到类似情况时我所做的只是为最终用户使用UUID。在数据库中,我添加了一个列,其中填充了UUID的前2个字符,并为该列编制索引。
无论是这个还是,如您所建议的,ID都可以用于同一目的。索引部分UDID的好处是
另一方面,整数索引可能使用更少的内存而不需要tweeking
性能方面,对于我的实施,我们面临的搜索查询为百万分之一,耗时7-8秒。使用此解决方案,我们降至几毫秒