基于Scala磁盘的Map

时间:2013-02-09 00:02:35

标签: scala caching hashmap redis key-value

我有一张不适合内存的大地图,因此我希望它能够存放在磁盘上。我有以下选择:

  1. 使用像MapDB这样的纯Java库:这有效,但我没有得到Scala 收集糖,如getOrElseUpdate++=apply / update方法。我可以在Scala中围绕MapDB创建自己的包装类,但我真的不想手动实现所有Map特征。
  2. 使用像redis / memcached这样的东西:我找不到一个好的scala库,它为我提供了redis或memcached的Map特性。这可能是更好的性能解决方案,但它带来了运行db
  3. 的复杂性

    那么是否有任何一个很好的scala only库来实现地图的Scala集合糖,但是它会回溯到磁盘和/或大型地图的键值存储?

2 个答案:

答案 0 :(得分:7)

回答了我自己的问题

import collection.mutable
import org.mapdb.DBMaker
import collection.JavaConversions._

val cache: mutable.Map[String, Seq[String]] = DBMaker.newTempHashMap[String, Seq[String]]()

答案 1 :(得分:0)

值得一提Chronicle Map:它与MapDB(磁盘持久ConcurrentMap实现)基本相同,但它比MapDB much more efficient

示例:

val cache: mutable.Map[String, java.util.List[String]] = ChronicleMap
    .of(classOf[String], classOf[java.util.List])
    .averageKey("key")
    .averageValue(...)
    .valueMarshaller(ListMarshaller.of(
        CharSequenceBytesReader.INSTANCE,
        CharSequenceBytesWriter.INSTANCE
    ))
    .entries(...)
    .createPersistedTo(file)