3

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

  1. 使用像MapDB这样的纯 Java 库:这可行,但我没有得到像getOrElseUpdateand++=apply/update方法这样的 Scala 集合糖。我可以在 Scala 中创建自己的包装类MapDB,但我真的不想手动实现所有Map特征。
  2. 使用 redis/memcached 之类的东西:我找不到一个好的 scala 库来给我Mapredis 或 memcached 的特征。这可能是性能更好的解决方案,但它引入了运行数据库的复杂性

那么是否有任何不错的 scala only 库来实现地图的 Scala 集合糖,但它又依赖于磁盘和/或大型地图的键值存储?

4

2 回答 2

7

回答了我自己的问题

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

val cache: mutable.Map[String, Seq[String]] = DBMaker.newTempHashMap[String, Seq[String]]()
于 2013-02-09T01:48:50.210 回答
0

值得一提的是Chronicle Map:它与 MapDB(磁盘持久化实现)基本相同ConcurrentMap,但它比 MapDB高效得多。

例子:

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)
于 2017-03-19T00:38:46.513 回答