【发布时间】:2018-11-07 11:24:45
【问题描述】:
我需要根据两个标准聚合大量记录。举个例子,记录说一个人每天在哪个城市。
我需要在硬件非常有限且没有云的情况下进行此聚合。我不想为此将原始数据上传到数据库,原始数据确实很大(想想数十亿条记录)
我最初的想法是用一个人的ID来构建一个地图,它会是几百万,价值是一个地图,其中关键是城市,价值是他们在那个城市度过的天数。这是一个包含数百万个键的映射,每个值具有映射十分之几(少于 100 个)条目。
我想运行一些基准测试,并且我需要一些帮助来列出我可以使用的映射类型:可变/不可变、哈希/树...我还需要平衡性能和内存使用量。 任何帮助将不胜感激!
【问题讨论】:
-
听起来您的问题是每次启动应用程序时都会摄取数十亿条记录,而不是存储数据的方式。
-
正确,原始记录在聚合后被丢弃。在“真实”系统上会有所不同,但在这里我需要处理非常有限的硬件。
-
我想我会分享我的发现,截至 2018 年 11 月,scala.collection.mutable.HashMap[K, V] 对于单线程来说已经足够好了,对于多线程,我们正在检查 import java .util.concurrent.ConcurrentHashMap(作为 Scala)。
-
最后的编辑,对于我的问题,我发现使用不可变映射和嵌套映射的尾递归函数的工作速度基本上与使用可变数据结构的迭代方法一样快。我很惊喜
标签: scala dictionary hashmap mutability