加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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()
     }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读