基于磁盘的Scala映射

基于磁盘的Scala映射,scala,caching,hashmap,redis,key-value,Scala,Caching,Hashmap,Redis,Key Value,我有一个大的地图,它不能放在内存中,因此我希望它能保存在磁盘上。我有以下选择: 使用一个纯Java库,如:这可以工作,但我没有Scala 像getOrElseUpdate和+=这样的集合,以及 应用/更新方法。我可以在Scala中围绕MapDB创建自己的包装类,但我真的不想手动实现所有Map特性 使用类似redis/memcached的东西:我找不到一个好的scala库,它为我提供了redis或memcached的Map特性。这可能是性能更好的解决方案,但会增加运行数据库的复杂性 那么,是否有一

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

  • 使用一个纯Java库,如:这可以工作,但我没有Scala 像
    getOrElseUpdate
    +=
    这样的集合,以及
    应用
    /
    更新
    方法。我可以在Scala中围绕
    MapDB
    创建自己的包装类,但我真的不想手动实现所有
    Map
    特性
  • 使用类似redis/memcached的东西:我找不到一个好的scala库,它为我提供了redis或memcached的
    Map
    特性。这可能是性能更好的解决方案,但会增加运行数据库的复杂性

  • 那么,是否有一个很好的scala专用库实现了地图的scala集合sugars,但它却依赖于磁盘和/或大型地图的键值存储?

    回答了我自己的问题

    import collection.mutable
    import org.mapdb.DBMaker
    import collection.JavaConversions._
    
    val cache: mutable.Map[String, Seq[String]] = DBMaker.newTempHashMap[String, Seq[String]]()
    
    值得一提的是:它与MapDB(disk persisted
    ConcurrentMap
    implementation)基本相同,但它比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)
    

    它看起来像是对实现
    Map
    的实现进行了扩展——似乎应该在Java的
    Map
    周围有一个通用的包装器/桥接器可以使用。如果不能使用,为什么不呢德格。请看,问题是广义的:如何访问
    java.util.Map
    作为
    scala.mutable.Map[K,V]
    ?我搜索了
    java map scala immutable.map
    ,得到了一个奖励,那不应该是
    val cache:collection.concurrent.map[String,Seq[String]]
    来访问并发方法,比如
    putIfAbsent