3

私たちはScalaでプロジェクトを行っており、主に読み取り操作を提供し、非常に高速に実行するために必要なKey-Valueデータベース(マップなど)が必要です。

  • エキゾチックなクエリのサポートや複雑な検索ロジックは一切ありません。地図のように、キーを指定して値を取得するだけです。条件なし、結合なし、何もありません。キー->値
  • ちなみに、値はそれ自体がいくつかの文字列のリストなどのマップです。少し長いことを意味します(重要な場合)
  • 読むためだけに使用します。dbの最初の入力、またはいくつかの非常にまれな更新、あるいはdbの外部で処理できる可能性のある更新についての書き込みは期待されていません...

私はMangoDBとmemcachedDBに向けられてきましたが、Mangoはクエリが得意であり(これは私に価値を追加しません)、memcacheDBはすべて配布に関するものです(私のプロジェクトでは問題ではありません)。これまでのところ、RDBMS(MySQLなど)を活用することを考えていますが、NoSQLの世界にはもっと良いオプションがあるのではないでしょうか。

4

6 に答える 6

1

SQLiteまたはBerkeleyDB(SQLite互換のSQL APIを備えています)をお勧めします。どちらもシンプルな組み込みデータベースライブラリであり、アプリケーションにリンクしているため、別のサーバーは必要ありません。どちらもクエリの実行が非常に高速です。Berkeley DBは、非常に大規模なデータベースに対してより優れたスケーラビリティを備えています。キーと値のペアのAPI (NoSQL)の使用に関心がある場合は、BerkeleyDBにもそのAPIがあります。

あなたの検索で頑張ってください。

于 2011-02-28T05:10:41.787 に答える
1

別の方法は、フラットファイルを使用することです。データは比較的単純に聞こえ、ファイルに頻繁に書き込む必要はありません。memcachedのオープンソースのscala実装もあるようです。このアクセスは非常に高速です。https://github.com/victori/smemcached

于 2011-02-26T06:45:28.817 に答える
1

京都内閣をご覧になることをお勧めします。私はその周りにいくつかの Scala ラッパーを書いているところです。これにより、プレーンな古いバニラ Scala マップとしてアクセスできるようになります。私自身はまだベンチマークを行っていませんが、ベンチマークによると、Berkeley DB よりも高速です。(ただし、Java 統合のオーバーヘッドに関するドキュメントがないため、判断するには時期尚早かもしれません。)

ここで JavaDoc API を確認してください。私はREPLでそれをいじっていましたが、うまくいきました。

これが機能するREPLからのいくつかの証拠は次のとおりです。

$ scala -Djava.library.path=/usr/local/lib
Welcome to Scala version 2.8.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :cp /Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar
Added '/Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar'.  Your new classpath is:
.:/Users/wilfred/.m2/repository/com/fallabs/kyotocabinet/1.15/kyotocabinet-1.15.jar

scala> import kyotocabinet._                                                                
import kyotocabinet._

scala> val db = new DB()                                                                    
db: kyotocabinet.DB = (null): -1: -1

scala> db.open("casket.kch", DB.OWRITER | DB.OCREATE)
res0: Boolean = true

scala> db.set("foo", "bar")
res1: Boolean = true

scala> db.get("foo")
res2: java.lang.String = bar
于 2011-03-01T06:22:36.710 に答える
0

MemcacheDB は、分散ネットワークの部分が必要ない場合でも、ジョブに適したツールのように思えます (使用しないために何もする必要はありません)。

さらに良いことに、redisは非常に高速であると想定されており、リストやセットなどのデータ構造を格納するためのネイティブ サポートも備えています。

于 2011-03-02T14:36:07.357 に答える
0

MongoDB は、おそらくこれに対する簡単なソリューションです。

http://www.mongodb.org/display/DOCS/Benchmarks

于 2011-02-26T06:10:45.463 に答える