我需要根据两个条件来汇总大量记录。举个例子,记录说明一个人每天在哪个城市。
我需要使用非常有限的硬件且没有云来进行此聚合。我不想为此将原始数据上传到数据库,原始数据确实很大(想想数十亿条记录)
我的最初想法是用钥匙ID来构建地图,这将是数百万个,其值是一张地图,其中钥匙是城市,价值是他们在那个城市度过的天数。这是一个具有数百万个键的映射,每个值都具有映射的十分之几(少于100个)条目。
我想运行一些基准测试,我希望获得一些帮助来简化我可以使用的地图类型:可变/不可变,哈希/树...我也需要在性能和内存使用之间取得平衡。 任何帮助将不胜感激!
答案 0 :(得分:0)
如果性能至关重要,则应考虑将可变数据结构用于聚合过程,因为Scala中的不变性,尤其是在大型记录的情况下,可能会导致性能大幅下降。您可以查看本文,也有针对不同集合的基准测试: https://medium.com/@hussachai/scalas-immutable-collections-can-be-slow-as-a-snail-da6fc24bc688
此外,您应该考虑使用并行集合来加快记录处理: https://alvinalexander.com/scala/how-to-use-parallel-collections-in-scala-performance
但是,内存使用可能是问题所在。您可能不想实施所有流数据或立即使用流式解决方案,例如使用Apache Spark,如果超出了内存限制,您可以在其中将数据持久保存在磁盘上