我正在使用Twitter API的网站上工作,专门用于跟踪各个关键字。我需要在多个worker之间分配这个负载,但为了最大化我可以进行的请求数量,我需要确保每次运行赋值函数时都会发生以下情况(大约每小时一次):
我有两个定义关键字和工人的对象。请参阅下面的示例。出于错误测试的缘故,正如您所看到的那样,我有多个工作人员跟踪同一个广告系列,这种活动永远不应该发生,但即使有,也需要重新分配。
// Topics
[{
topics: ['marathon', 'education', 'computing', 'schools'],
campaign: 'Some random campaign 1'
},
{
topics: ['education', 'sport', 'tourism', 'london'],
campaign: 'Some random campaign 2'
},
{
topics: ['ict', 'sport', 'fintech'],
campaign: 'Some random campaign 3'
}]
// Workers
{
"9779959f-2e99-4083-b578-eb9f31c60b46":{
"worker":"9779959f-2e99-4083-b578-eb9f31c60b46",
"topics":["marathon","digitaljersey","fintech", "sport", "education", "ict"]
},
"129a5e00-0d77-4156-98df-e1795ac2bccc":{
"worker":"129a5e00-0d77-4156-98df-e1795ac2bccc",
"topics":["education","sport","marathon"]
},
"3240f648-522a-4eb3-befb-b03f0181f329":{
"worker":"3240f648-522a-4eb3-befb-b03f0181f329",
"topics":["ict","computing","utilities"]
}
}
如您所见,主题是一个对象数组,每个对象都有要跟踪的关键字。这些可以具有任意数字,并且可以在广告系列中重复关键字。
我有自己的工作人员对象,详细说明了他们当前分配的主题。这些都提供给我的功能。
我采用的方法是通过迭代主题来创建主题图。然后我迭代了工作者,检查它的主题是否出现在主题图中。如果不是,那么就不需要跟踪它。如果是,则我将主题图中的worker
值设置为作业的worker
值。在接下来的迭代中,它检查是否存在这种情况,如果它存在,那么它已被考虑,并被忽略。
然后我遍历主题图,找到没有任务的任何内容,并将它们添加到重新分配数组中。然后,我计算重新分配数组中的数字,并计算总数,并确定每个工作人员的数量。任何超过30%或更多的任何一个随机获取并推送到重新分配数组,直到它们在30%的边界内。
然后我为每个工作者分配一个,并继续直到数组为空。但是,它根本不起作用。我最终得到了重复,未分配的主题等等。
以下是上述输出:
9779959f-2e99-4083-b578-eb9f31c60b46
-> fintech
-> sport
-> education
-> ict
129a5e00-0d77-4156-98df-e1795ac2bccc
-> sport
-> computing
-> marathon
3240f648-522a-4eb3-befb-b03f0181f329
-> computing
-> london
-> fintech
这是我的代码:https://jsfiddle.net/BenedictLewis/6q29m9y9/
有人可以帮我解决这个问题,还是建议一个更好的方法呢?