Scala中的Disk-persisted-lazy-cacheable-List?
发布时间:2020-12-16 09:22:03 所属栏目:安全 来源:网络整理
导读:我需要在Scala中有一个非常非常长的成对(X,Y)列表.这么大,它不会适合内存(但很适合在磁盘上). 所有更新操作都是cons(头附加). 所有读取访问都从头开始,并有序地遍历列表,直到找到预定对. 缓存会很好,因为大多数读取访问将一直保持相同的数据. 所以,这基本上
我需要在Scala中有一个非常非常长的成对(X,Y)列表.这么大,它不会适合内存(但很适合在磁盘上).
>所有更新操作都是cons(头附加). 所以,这基本上是一个“磁盘持久化 – 可缓存的List”? 在我开始推出自己之前,有什么想法可以得到一个? 附录:yes .. mongodb或任何其他非嵌入式资源,是一种过度的杀伤力.如果您对此具有特定的用例感兴趣,请参阅课程时间线here.基本上,我有一个非常非常大的时间线(几个月数百万),尽管我的比赛只需要触摸最后几个小时. 解决方法
这样做最简单的方法是扩展可遍历.您只需定义foreach,并且您可以完全控制遍历,因此您可以执行打开和关闭文件等操作.
您还可以扩展Iterable,这需要定义迭代器,当然也可以返回某种类型的迭代器.在这种情况下,您可能会为磁盘数据创建一个迭代器,但是要更好地控制开放文件. 以下是由Josh Suereth撰写的“Traversable”的一个例子: class FileLinesTraversable(file: java.io.File) extends Traversable[String] { override def foreach[U](f: String => U): Unit = { val in = new java.io.BufferedReader(new java.io.FileReader(file)) try { def loop(): Unit = in.readLine match { case null => () case line => f(line); loop() } loop() } finally { in.close() } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |