我正在建一个网站。它有用户可以加入的组。

这个和“正常”组之间的差异是成员资格 临时 - 当用户加入一组时,他决定会员的长度:5天,a 周,2周等(选择预定义)。或潜在的全部 会员资格可以设置为相同的长度 - 说一周 - 如果 这使得更简单。

我想在每个成员人数上运行 团体。该号码不需要准确到最后一秒。 但它不能超过,所以 - 例如,应该更新一次 一天。

计算成员数量的“显而易见”方式 跑到Cron工作,每天都说,并经过每个人的每个成员 一个接一个地。如果会员资格已过期,请删除该成员 从集团递交,将集团的会员数减少1。

这种方法似乎非常效率,而不是非常可扩展。与A. 大量的群体,它可以永远采取。

你能想到更好的方法吗?会员计数 不需要准确到最近的第二秒。它可以是近似的 (略微)过时。还有如果它有所作为 会员资格可以设置为相同的长度,比如一周。

有帮助吗?

解决方案

存储每组目前有多少人的清单。还存储一天的清单。每一天都将包含一组组列表,以及当天有多少人从该组中减去。

当一个人加入一个组时,将1添加到组总数,并在他/她的会员资格到期时向该组的人员添加1,将到期。

如果一个人的到期日期更改,请从旧的止境日期(对于该组)中的人员删除1,并将1添加到新的到期日期。

最终,当然,每天一天从每组中减去正确的金额。

其他提示

如果所有成员资格长度相同,只需维持由于到期而维持会员资格的FIFO。每次收到新成员时,每次添加一个“到期”条目列表的末尾,日期为1周后。

现在,正如您所说,检查列表的前面是否到期成员资格,并更新组的计数。当您到达尚未过期的第一个条目时停止。

这也可以用于可变长度成员资格,但您必须维护一个排序的列表。

当一个成员加入时,您知道他们的会员资格是否会过期。因此,而不是搜索每天去激活的成员列表(或经常),您可以将每个成员添加到同一天过期的适当成员身份列表中。然后,您每天都会通过并删除当天过期的成员资格。这几乎是你所说的,除了不是搜索,你存储结果。

存储的大小与您最长的成员资格的长度成比例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top