1 回答
TA贡献1828条经验 获得超6个赞
这在某种程度上是一种范式转变,但我不会对这个问题使用嵌套的 for 循环。在许多情况下,您正在考虑对整个结果集进行迭代,通常可以在不损失太多或任何有效性的情况下大幅削减覆盖率。缓存、修剪、确定优先级……这些是您需要的:不是 for 循环。
完全切开部分 - 也许你可以忽略海洋,也许你可以忽略南极和北极(因为那里的人无论如何都有更好的方法来检查天气)
根据人口密度更改搜索频率。也许加拿大北部不需要像洛杉矶或芝加哥那样彻底检查。
依靠低使用率区域的缓存 - 大概您可以跟踪实际使用的区域,然后可以更频繁地刷新这些部分。
所以你最终得到的是某种加权缓存系统,它考虑了人口密度、使用模式和其他优先级,以确定要检查的纬度/经度坐标以及检查频率。高级代码可能如下所示:
void executeUpdateSweep(List<CoordinateCacheItem> cacheItems)
{
for(CoordinateCacheItem item : cacheItems)
{
if(shouldRefreshCache(item))
{
//call api with lat = item.y , lng = item.x
}
}
}
boolean shouldRefreshCache(item)
{
long ageWeight = calculateAgeWeight(item);//how long since last update?
long basePopulationWeight = item.getBasePopulationWeight();//how many people (users and non-users) live here?
long usageWeight = calculateUsageWeight(item);//how much is this item requested?
return ageWeight + basePopulationWeight + usageWeight > someArbitraryThreshold;
}
添加回答
举报