3

メモリに収まらない大きなマップがあるので、ディスク上に配置したいと思います。次のオプションがあります。

  1. MapDBのような純粋なJavaライブラリを使用します。これは機能しますが、Scalaコレクションの砂糖のようなgetOrElseUpdateand++=apply/updateメソッドを取得できません。Scalaで独自のラッパークラスを作成することもできますが、すべてのトレイト MapDBを手動で実装したくはありません。Map
  2. redis / memcachedのようなものを使用してください:Mapredisまたはmemcachedの特性を提供する優れたscalaライブラリが見つかりませんでした。これはより優れたパフォーマンスソリューションかもしれませんが、データベースの実行が複雑になります

では、マップ用のScalaコレクションシュガーを実装しているにもかかわらず、ディスクや大きなマップ用のKey-Valueストアにフォールバックする優れた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

クロニクルマップについて言及する価値があります。これは基本的に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 に答える