如何用不同优先级的条目轮询数据库
2017-1-6 9:30:54
收藏:0
阅读:123
评论:2
假设有一组优先级从1到4不等的条目,其中1是最重要的,4则是最不重要的。那么我该如何创建一个系统来轮询中央数据库以获取条目列表的更新,而更频繁地轮询优先级较高的条目呢?
例如: 我有优先级分别为1、2和3的条目a、b和c。
在一个完美运转的程序中,条目a应该比b和c更频繁地轮询更新,而b应该比c更频繁地轮询。
我的主要问题就是设计一个系统,使得所有条目仍然能定期轮询,但是最高优先级的条目会更频繁地轮询。
很抱歉我没有更多的细节,但我真的没有任何源代码或其他东西来构建,我现在有点一筹莫展。
另外,我正在使用Lua,但我只是在寻找想法的粗略伪代码版本,我想自己找出精细的实现。为了简单起见,可以用方法调用来表示轮询数据库:getDatabaseInfo(itemIndex);
所有答案都会受到赞赏,谢谢您的时间!
点赞
用户1847592
local items = { -- 所有的item都在这里
{name = "item #1", update_period = 1 },
{name = "item #2", update_period = 1.5}, -- item#2的更新频率比item#1低1.5倍
{name = "item #3", update_period = 2 }, -- item#3的更新频率比item#1低2倍
{name = "item #4", update_period = 3 }, -- item#4的更新频率比item#1低3倍
}
local function update_one_item()
local min_ctr, itemIndex = math.huge
for idx, item in ipairs(items) do
item.current_counter = item.current_counter or 0
if item.current_counter < min_ctr then
min_ctr = item.current_counter
itemIndex = idx
end
end
for idx, item in ipairs(items) do
item.current_counter = item.current_counter - min_ctr
end
items[itemIndex].current_counter = items[itemIndex].current_counter + items[itemIndex].update_period
getDatabaseInfo(itemIndex);
print(items[itemIndex].name.." updated")
end
for _ = 1, 20 do
update_one_item()
end
输出:
item #1 updated
item #2 updated
item #3 updated
item #4 updated
item #1 updated
item #2 updated
item #1 updated
item #3 updated
item #1 updated
item #2 updated
item #4 updated
item #1 updated
item #3 updated
item #2 updated
item #1 updated
item #1 updated
item #2 updated
item #3 updated
item #4 updated
item #1 updated
2017-01-06 11:40:58
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

根据您希望每个值更新的频率不同,像这样的循环可能有效。
代码:
for i = 1,math.huge do for ii = 1,#items do do if getPriority(ii) == 1 then items[ii] = getDatabaseInfo(ii) elseif i%2 == 0 and getPriority(ii) == 2 then items[ii] = getDatabaseInfo(ii) elseif i%3 == 0 and getPriority(ii) == 3 then items[ii] = getDatabaseInfo(ii) elseif i%4 == 0 and GetPriority(ii) == 4 then items[ii] = getDatabaseInfo(ii) end end sleep(interval) end它的工作原理是检查当前迭代次数是否可以被 1、2、3 或 4 整除。
您可以添加第三个嵌套循环,循环所有优先级,这样您可以拥有无限数量的优先级,但我把这个作为读者的练习 :)
正如 Piglet 在评论中指出的那样,您可以使用这个快捷方式使代码更有效:
if i % getPriority(ii) == 0 then ...