【发布时间】:2013-05-03 01:43:23
【问题描述】:
我有一个问题,我不知道如何优雅地解决。
背景信息
我有一个小部件表。每个小部件都从一系列数字中分配了一个 ID,比如说 1-999。 1-999 的值在我的数据库中保存为名为“config”的表中的“lower_range”和“upper_range”。 当用户请求使用我的网络应用创建新小部件时,我需要能够执行以下操作:
- 使用 lua 的 math.random 函数或 sqlite 中的随机数生成器生成 1 到 999 之间的随机数(到目前为止,在我的测试中,lua 的 math.random 总是返回相同的值...但这是一个不同的问题)
- 执行一个选择语句以查看是否已经有一个分配了此编号的小部件...
- 如果没有,请创建新的小部件。
- 否则重复此过程,直到您获得当前未使用的号码。
问题
我看到上述逻辑的问题有两个:
- 该算法可能需要很长时间,因为我必须不断搜索,直到找到唯一值。
- 如何防止同时请求生成相同值的新小部件编号?
任何建议将不胜感激。 谢谢
【问题讨论】:
-
为什么你的ID不能是一个系列?为什么它们必须是随机的?
-
这是最终用户的要求。如果按顺序排列会容易很多。然后我可以跟踪配置表中的下一个可用数字。但他们想要随机。
-
那么你可以使用 GUID 吗?如果你继续在同一台机器上生成它们,我认为你不会在宇宙热寂之前发生关键碰撞。它们不是数字,但嘿,问题解决了。