- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有大量对象。集合是动态的:对象可以随时添加或删除。我们称对象总数为 N。
每个对象都有两个属性:上次更新的质量 (M) 和时间 (T)。
每隔 X 分钟,应从中选择一小批进行处理,这会将它们的 T 更新为当前时间。批处理中所有对象的总 M 是有限的:不超过 L。
我希望在这里解决三个任务:
哪种模型最能描述这样的系统?
整个事情是关于按时间间隔处理“对象”的服务。每个对象应该每 N 小时“测量”一次。 N 可以在一定范围内变化。 X 是固定的。
对象是由人类添加/删除的。 N 呈指数增长,速度相当缓慢,其中一些峰值是由出版物引起的。当然预测不可能准确,只是一些估计。 M从0到1E7呈指数分布变化,大部分接近0。
我看到这里可以有几种策略:
A. 全力以赴 - 将每批包装尽可能接近 100%。随着 N 的增长,特定对象被击中的平均间隔也会增长。
B. 平均气质 :) - 尝试将平均间隔保持在某个值附近。批处理填充水平将从某个低水平增长。当它接近 100% 时 – 是时候获得更多服务器了。
C. - ?
最佳答案
这是针对您的问题的一个非常完整的设计。
您的问题与您对系统的描述不符。所以我假设描述是准确的。
当您安排测量时,您应该通过一个对象,第一次可以测量它,以及您希望测量发生的时间。该对象应该有一个 weight
属性和一个 measured
方法。当测量发生时,将调用 measured
方法,您的类之间的区别在于它们是否以及使用什么参数重新安排自己。
在内部,您将需要几个优先级队列。参见 http://en.wikipedia.org/wiki/Heap_(data_structure)有关如何实现的详细信息。
第一个队列是测量可以发生的时间,所有还不能测量的对象。每次安排批处理时,您都将使用它来查找可能发生的所有新测量。
第二个队列是现在准备进行的测量,并按它们应该发生的调度周期和权重进行组织。我会让他们都提升。您可以通过从队列中拉出项目来安排一批,直到您有足够的东西发送。
现在您需要知道每批要放多少。鉴于您所描述的系统,可以手动输入事件尖峰,但随着时间的推移,您希望这些尖峰逐渐消失。所以我推荐选项B,平均气质。因此,要做到这一点,当您将每个对象放入“现在就绪”队列时,您可以计算它的“平均工作重量”,即它的重量除以它应该发生之前的周期数。将其与对象一起存储,并保持您应该达到的运行速率的运行总计。每个时期我都建议您继续添加到批处理中,直到满足三个条件之一:
最后,容量规划。
为此,您需要使用一些启发式方法。这是一个合理的,可能需要对您的系统进行一些调整。维护您过去 10 次平均工作重量总计测量值的数组。保持“高水位线的指数衰减平均值”。通过根据公式每次更新来做到这一点:
average_high_water_mark = 0.95 * average_high_water_mark + 0.5 * max(最后 10 次运行的工作权重)
如果 average_high_water_mark
达到最大容量的 2 个服务器,则添加更多服务器。 (这个想法是服务器应该能够死掉而不会让你被淹死。)
关于algorithm - 考虑到 lastupdate,对动态集的部分进行装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433593/
我想使用Grails域的lastUpdated字段来实现“最近更改了哪些对象” View 。但是,我的域有一个“多方关联”,当添加某些内容时,该关联会导致lastUpdated值被更新。 例如。: c
我有一个带有 m2eclipse 和 subversive 的 Eclipse 设置。我从svn导入了maven2项目。但我收到错误消息,提示缺少一大堆工件(例如:缺少工件 org.springfra
我在 pom.xml 中有以下依赖项: 3.1.0 junit junit 3.8.1 test
有大量对象。集合是动态的:对象可以随时添加或删除。我们称对象总数为 N。 每个对象都有两个属性:上次更新的质量 (M) 和时间 (T)。 每隔 X 分钟,应从中选择一小批进行处理,这会将它们的 T 更
我已经将 com.spotify:dockerfile-maven-plugin:1.4.3 添加到我的 POM 中,它由于以下原因,无法完成 [INFO] --- dockerfile-maven-
我的 Elasticsearch 映射大致如下所示: { "myIndex": { "mappings": { "myType": { "_timestamp"
如何从表中选择最近更新的行。我的语法似乎有问题。 最佳答案 如果您需要最后更新的最新记录,那么您可以试试这个:: SELECT * FROM 'table' order by lastupdate
我有一个父域类,它有一个 hasMany另一个域类。父域和子域类都有 lastUpdated和 dateCreated领域。我的问题是,当我更新子域类时,我需要父域类来反射(reflect)该更改并更
据我所知,Database.Persist 不处理任何自动更新字段 ( Yesod Book Persistent )。 但存在一个特殊情况,它是相关的(至少对我来说:P),它是 lastUpdate
我一直在思考这个问题一段时间,想不出一个可以接受的解决方案。我有一个计划变得非常大的应用程序。因此,我试图将其模块化。它基于MVC4。我还没有决定自己使用 ORM 或映射所有内容。我想要以下结构: -
情况: 我有一个包含 10 个工作表和 15 个用户登录并修改它的电子表格。 脚本功能: 当有人修改任何列中的任何行时,此脚本将使用 DateTime 更新 lastcolumn 并插入带有进行该修改
当我尝试在本地存储库中安装 Maven 项目时,我注意到 pom 和 jar 文件具有 .lastUpdated 扩展名。由于这个问题,我无法构建依赖于它的项目。 您能解释一下为什么会发生这种情况吗?
我目前正在从事一个 Grails 项目,该项目以前是用其他语言编写的。所以我们有这个数据库,它的表名和列名,我们不应该改变。现在的问题是,用于时间戳的列名不是 date_created 或 last_
我定义了一个表(见下面的代码片段)。如何添加约束或其他任何内容,以便在行发生更改时自动更新 LastUpdate 列? CREATE TABLE dbo.Profiles ( User
我最近刚刚将我们的 Kentico CMS 升级到最新的修补程序。推送到生产服务器后,我在两台服务器上都收到以下错误。 有没有其他人解决过这个错误?我认为这与缓存有关,但我无法在此处指出问题所在。 我
我想在每次对该文档进行保存或更新操作时自动更新该文档上的 LastUpdatedOn 字段。 有没有某种方法可以自动执行此操作(我使用的是 C# 驱动程序),而不是将这种负担放在执行保存/更新的每一位
简短的问题: 怎么做 this在 MVC.NET 中? 长版问题: 我尝试使用 SQL 表中的 DateTime 列进行版本跟踪(这本身是作为在表的 editview 回传后重新附加 Linq2Sql
在这段代码中,我收到来自 PSScriptAnalyzer 的“UseDeclaredVarsMoreThanAssignments”警告 $lastUpdate = $false; $shouldU
我最近使用 grails-2.2.4 更新了我的 grails 应用程序,从使用 mysql 到 mariadb 版本 10.0.15-MariaDB-wsrep grails,我正在使用 galer
我是一名优秀的程序员,十分优秀!