我有一个问题,我不知道如何优雅地解决。
背景资料
我有一张小部件表。每个小部件都分配有一个数字范围内的 ID,假设在 1-999 之间。 1-999 的值作为“lower_range”和“upper_range”保存在我的数据库中名为“config”的表中。
当用户请求使用我的网络应用程序创建新的小部件时,我需要能够执行以下操作:
- 使用lua的math.random函数或者sqlite中的随机数生成器生成1到999之间的随机数(到目前为止,在我的测试中,lua的math.random总是返回相同的值......但这是一个不同的问题)
- 执行一个 select 语句来查看是否已经有一个分配了该编号的小部件...
- 如果没有,则创建新的小部件。
- 否则重复该过程,直到获得当前未使用的号码。
Problem
我认为上述逻辑的问题有两个:
- 该算法可能需要很长时间,因为我必须继续搜索,直到找到唯一值。
- 如何防止同时请求新的小部件编号生成相同的值?
任何建议,将不胜感激。
谢谢
提前生成随机数并将其存储在表中;确保数字是唯一的。然后,当您需要获取下一个号码时,只需检查已经分配了多少个号码,然后从表中获取下一个号码。所以,而不是
- 生成 1-999 之间的数字
- 检查是否已经分配
- 生成新号码,依此类推。
do this:
- 生成 999 个元素的数组,其值以某种随机顺序从 1 到 999
- Your
GetNextId
函数变成return ids[currentMaxId+1]
要管理并发请求,您需要拥有一些能够生成正确序列的资源。最简单的可能是使用小部件表中的键作为ids
大批。因此,添加一条记录widgets
首先获取表,获取其密钥,然后使用生成小部件 IDids[key]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)