如何在流条件下有效地打印具有时间跨度的字符串?
How to efficiently print strings with time span in a stream conditions?
假设我们得到一个数据结构清晰的流字符串输入:
content:arrive time
示例如下:
AAA : 12:00:00
ABC : 12:00:01
ABB : 12:00:02
ABM : 12:00:11
我们有一个程序来检查这个流输入,如果
1)此内容之前不存在,打印此内容;
2)如果此内容早于到达且时间跨度小于10秒,则打印空;
3)如果此内容早于到达且时间跨度超过10秒,则打印内容;
Hashtable(String, Date) 可以,我们可以在新的进来的时候更新日期。
我的问题是:
如果字符串数字很大并且无法存储在哈希表中怎么办?考虑到我们正在设计一个程序,运行 24*7 和 hashtable 变得越来越大。
我们还有其他办法可以解决这个问题吗?我们可以用多个服务器解决这个问题吗?
您可以使用 Hashtable(String -> Date)
和简单的 Queue([Date, String])
,每次将新项目添加到哈希表时,也将其添加到队列中。
每隔几分钟从队列中弹出项目并将它们从哈希表中删除,直到日期不够旧(<10 秒)。
这样您就可以只保留最近几分钟的数据,哈希表和队列都不会增长太多。
假设我们得到一个数据结构清晰的流字符串输入:
content:arrive time
示例如下:
AAA : 12:00:00
ABC : 12:00:01
ABB : 12:00:02
ABM : 12:00:11
我们有一个程序来检查这个流输入,如果
1)此内容之前不存在,打印此内容;
2)如果此内容早于到达且时间跨度小于10秒,则打印空;
3)如果此内容早于到达且时间跨度超过10秒,则打印内容;
Hashtable(String, Date) 可以,我们可以在新的进来的时候更新日期。
我的问题是:
如果字符串数字很大并且无法存储在哈希表中怎么办?考虑到我们正在设计一个程序,运行 24*7 和 hashtable 变得越来越大。
我们还有其他办法可以解决这个问题吗?我们可以用多个服务器解决这个问题吗?
您可以使用 Hashtable(String -> Date)
和简单的 Queue([Date, String])
,每次将新项目添加到哈希表时,也将其添加到队列中。
每隔几分钟从队列中弹出项目并将它们从哈希表中删除,直到日期不够旧(<10 秒)。
这样您就可以只保留最近几分钟的数据,哈希表和队列都不会增长太多。