0

我正在建设一个网站。它有用户可以加入的组。临时团体成员资格 - 任何聪明的方法来做到这一点?

这个和“正常”组的区别在于临时成员是 - 当用户加入一个组时,他决定了成员的长度:5天, 周,2周等等定义)。或者可能所有 成员资格可以设置为相同的长度 - 比如说一周 - 如果 使事情变得更简单。

我想有一个每个 组的成员数量的运行计数。这个数字不需要精确到最后一秒。 但它也不能已过时 - 比方说,应该每天更新一次 。

计算成员数量的“显而易见的”方式似乎是运行cron作业的 ,比如说每天一次,并逐个遍历每个 组的每个成员。如果成员资格已过期,请从该组中删除该成员 ,并将该组的成员资格计数减1。

该方法看起来非常低效且不具有可伸缩性。随着大量的团体,它可能需要永远。

你能想到一个更好的方法来做到这一点?最新的秒数不需要精确到会员数量 。它可以近似为 和(略)过时。此外,如果它有所作为,所有会员可以设置为相同的长度,比如一周。

回答

2

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

当一个人加入一个组时,在组总数上加1,并且在他/她的会员资格将到期的那一天为该组减去人数加1。

如果一个人的有效期限的变化,从人到减去从旧的有效期限(该组)删除1,加1到新的有效期限。

最后,当然,每天一次减去当天每组的正确数量。

1

如果所有成员资格都是相同的长度,只需保持成员资格即将到期的FIFO即可。每次获得新成员时,都会在列表末尾添加一个“过期”条目,并在1周后设置日期。

现在,只要您喜欢,请检查列表中的过期会员资格,并更新组的计数。当您到达尚未过期的第一个条目时停止。

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

1

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

存储空间的大小与最长成员资格的长度成正比。

相关问题