2

Ubuntu Linux 12.04で実行されるアプリケーションがあり、多数の大きなシリアル化されたオブジェクトを保存および取得する必要があります。現在、ストアは、シリアル化されたストリームをファイルとして保存するだけで実装されています。ファイル名は、シリアル化されたオブジェクトのmd5ハッシュと同じです。ただし、ファイルストアを、最近読み取り/書き込みされたオブジェクトのメモリ内キャッシュを実行し、できればハッシュを実行するファイルストアに置き換える速度を上げたいと思います。

私のアプリケーションの設計はこれ以上複雑になることはありません。したがって、キー値データベースとキャッシングを抽象化された効率的な方法で管理するストアバックエンドが望ましいでしょう。私はそこにあるすべてのキー/バリューストアに少し迷っています、そしてトピック/情報の多くは時代遅れのようです。私は当初memcached+membaseのようなものを見ていましたが、もっと良い解決策があるかもしれません。redis、mongodb、couchdbを調べましたが、それらが私のニーズに合っているかどうかはわかりません。

私の最も重要な要件:

  • 最近書き込まれた/読み取られたオブジェクトをメモリに自動的にキャッシュすることですぐに利用できるように、永続ストアに透過的に保存します。
  • ストアは再起動後も存続する必要があります。したがって、メモリ内のオブジェクトはできるだけ早くディスクに保存する必要があります。
  • 現在、md5を手動で計算しています。バックエンドが私のためにこれを行うと、実際にはもっと良いでしょう。したがって、オブジェクトが格納されているときにハッシュキーを取得し、後でハッシュキーを使用してオブジェクトを取得できるようにします。
  • 大きなプラスは、Ubuntu 12.04で利用可能なパッケージがある場合、ユニバースまたはランチパッドなどを介して利用できることです。
  • これ以外に、ソフトウェアは必要以上に複雑ではなく、軽量であることが望ましいです(分散マップリデュースジョブなどは必要ありません)

アドバイスありがとうございます!

4

2 に答える 2

1

通常、Redisをお勧めします。これは、非同期永続ストアを備えた高速でメモリ内にあるためです。さらに、memcachedのように単一の目的ではなく、他の目的にさまざまなデータ型を使用できることがわかります。自動ハッシュに関しては、オブジェクトを格納するときに独自のキーを定義するときに、それが行われるとは思いません(ほとんどのオブジェクトのように)。

Redisの欠点の1つは、大量のバイナリオブジェクトを格納している場合、RAMで使用可能なメモリに制限されるため(シャーディングを除く)、パフォーマンスの制限に達する可能性があることです。その場合、オブジェクトをファイルシステムに保存し、それらをハッシュし、キーをRedisに保存し、それをファイルサーバーに保存されているファイル名と一致させることができます。

-

別のオプションは、JSONとしてネイティブなオブジェクトを格納するという点でMongoに似ているElasticSearchをチェックアウトすることですが、RESTfulAPIインターフェイスを備えたLucene検索エンジンが上部に含まれています。高速応答のためにメモリ内のデータを「ウォームアップ」しますが、永続ストアでもあり、最も優れた部分は、マルチキャストを使用して他のノードを見つける自動シャードと自動クラスターです。

-

それがお役に立てば幸いです。もしそうなら、愛を分かち合いましょう!;-)

于 2012-07-15T12:23:00.190 に答える
0

見てみますMongoDB。OSを使用してデータをページインおよびページアウトするために効率的にキャッシュし、セットアップは非常に簡単です。RedisとMemcachedは、すべてをRAMに保持するため、適切なソリューションにはなりません。LevelDBやBDBのような他のより単純なソリューションもおそらく適切でしょう。ハッシュを自動的に計算するデータベースはないと思います。ただし、このためのコードはすでにあるようです。

于 2012-07-15T18:32:43.293 に答える