基于磁盘的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特性。这可能是性能更好的解决方案,但会增加运行数据库的复杂性 那么,是否有一
getOrElseUpdate
和+=
这样的集合,以及
应用
/更新
方法。我可以在Scala中围绕MapDB
创建自己的包装类,但我真的不想手动实现所有Map
特性李>
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 persistedConcurrentMap
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
?