有大量的物体。设置是动态的:可以随时添加或删除对象。让我们调用对象的总数 N 。
每个对象都有两个属性:上次更新的质量( M )和时间( T )。
每个 X 分钟应选择一小部分 X 分钟进行处理,将 T 更新为当前时间。批次中所有对象的总 M 是有限的:不超过 L 。
我希望在这里解决三个任务:
什么样的模型能最好地描述这样一个系统?
整个事情是关于以时间间隔处理“对象”的服务。每N个小时应对每个物体进行“测量”。 N可以在一定范围内变化。 X 已修复。
人类添加/删除对象。 N 呈指数增长,相当缓慢,出版物引起一些高峰。当然预测不能准确,只是估计一些。 M 从0到1E7变化,呈指数分布,大多数接近0。
我看到这里可以有几种策略:
A。全油门 - 将每批货打包至接近100%。随着 N 的增长,特定对象获得命中的平均间隔将会增长。
B。平等的气质:) - 尽量保持一些值的平均间隔。批量填充水平将从一些低水平增长。当它接近100%时 - 获得更多服务器的时间。
C。 - ?
答案 0 :(得分:3)
这是一个非常完整的问题设计。
您的问题与此系统的描述不符合最佳匹配。所以我假设描述是准确的。
当您计划测量时,您应该传递一个物体,第一次可以测量它,以及何时需要测量。该对象应具有weight
属性和measured
方法。当测量发生时,将调用measured
方法,并且您的类之间的区别在于它们是否以及使用什么参数重新安排自己。
在内部,您将需要几个优先级队列。有关如何实施的详细信息,请参阅http://en.wikipedia.org/wiki/Heap_(data_structure)。
第一个队列是时间可以进行测量,所有的物体都无法测量。每次安排批处理时,您都会使用它来查找可能发生的所有新测量。
第二个队列是现在可以进行的测量,并且按照它们应该发生的调度周期进行组织,然后是权重。我会让他们两个提升。您可以通过从该队列中提取项目来安排批处理,直到您有足够的资金来发送。
现在你需要知道每批中要放多少钱。鉴于您所描述的系统,可以手动添加一系列事件,但随着时间的推移,您希望这些峰值能够平滑。所以我会推荐选项B,平等的气质。所以要做到这一点,当你把每个对象放入"现在就准备好了#34;排队,你可以计算出它的平均工作重量"因为它的重量除以它应该发生的周期数。将该存储与对象一起存储,并保持您应该处于的运行速率的总计。每个时期我都建议您继续添加批次,直到满足以下三个条件之一:
最后,进行容量规划。
为此你需要使用一些启发式方法。这是一个合理的,可能需要对您的系统进行一些调整。保持过去10次运行总体平均工作重量的数组。保持高水位的指数阻尼平均值。"通过根据公式更新每次来做到这一点:
average_high_water_mark = 0.95 * average_high_water_mark 最大+ 0.5 *(最后10个工作重量)
如果average_high_water_mark
进入最大容量的2台服务器,则添加更多服务器。 (这个想法是服务器应该能够死而不会让你受伤。)
答案 1 :(得分:0)
我认为答案A很好。箱包装是最大化或最小化,您只有一批。按m和n排序对象。