Hug*_*ira 15 scala data-stream data-structures
我需要在Scala中有一个非常非常长的对(X,Y)列表.如此之大,它不适合内存(但很适合在磁盘上).
所以,这基本上是一个"磁盘持久 - 懒惰 - 可缓存列表"™
在我开始推出自己的产品之前,有关如何获得一个的想法吗?
附录:是.. mongodb,或任何其他非可嵌入资源,是一种矫枉过正.如果您对此特定用例感兴趣,请参阅Timeline 此处的课程.基本上,我有一个非常非常大的时间线(几个月内数百万对),虽然我的比赛只需要触及最后几个小时.
执行此类操作的最简单方法是扩展Traversable. 您只需定义foreach,并且可以完全控制遍历,因此您可以执行打开和关闭文件之类的操作。
您还可以扩展Iterable,这需要定义iterator,当然还需要返回某种Iterator. 在这种情况下,您可能会Iterator为磁盘数据创建一个,但是控制打开文件之类的事情会困难得多。
下面是我所描述的一个例子Traversable,作者是 Josh Suereth:
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)