【发布时间】:2015-01-16 05:33:16
【问题描述】:
我正在做一个小项目,该项目逐渐增加链接列表,然后通过队列处理它们。存在链接可能会两次进入队列的可能性,我想跟踪我的进度,以便我可以跳过已经处理的任何内容。我估计最多有大约 10k 个独立链接。
对于较大的项目,我会使用数据库,但这对于我正在处理的数据量来说似乎有点过头了,并且如果我想保存运行过程中的进度,我更喜欢某种形式的内存解决方案,这种解决方案可能会被序列化。
哪种数据结构最适合这种需求?
更新:我已经在使用哈希来跟踪我已完成处理的链接。这是最有效的方法吗?
def process_link(link)
return if @processed_links[link]
# ... processing logic
@processed_links[link] = Time.now # or other state
end
【问题讨论】:
-
使用散列或集合。您只能在哈希中拥有一个键的单个实例。一个 Set 是建立在 Hash 键之上的,所以你会得到类似的行为。
-
要考虑的另一件事是,您是否必须跟踪中断/崩溃/重启的进度?如果是这样,您根本不能使用内存跟踪,可能应该使用数据库。
标签: ruby performance data-structures