データがメモリに収まらない場合のErlangアプリケーションに適したデータストレージバックエンド

StackOverflow https://stackoverflow.com/questions/287233

質問

私は、Erlangアプリケーションのデータストレージを整理するための可能なオプションを調査しています。使用するはずのデータは、基本的に、短い文字列IDでインデックス付けされたバイナリBLOBの膨大なコレクションです。各blobは10 Kb未満ですが、それらの多くがあります。合計で最大200 Gbのサイズになると予想されるため、明らかにメモリに収まりません。このデータの一般的な操作は、IDでBLOBを読み取るか、IDでBLOBを更新するか、新しいBLOBを追加することです。所定の期間ごとにIDのサブセットのみが使用されるため、データストレージアクセスのパフォーマンスはメモリ内キャッシュの恩恵を受ける可能性があります。パフォーマンスについて話す-それは非常に重要です。ターゲットは、コモディティハードウェア(EC2 VMなど)で毎秒約500回の読み取りと500回の更新を行うことです。

ここで何を使うべきか提案はありますか?私が理解しているように、detsは2Gに制限されているため(または4Gでしたか?)おそらく、Mnesiaも問題外です。私の印象では、それは主にデータがメモリに適合する場合のために設計されたということです。私は、タスクのためにEDTKのBerkeley DBドライバーを試すことを検討しています。上記のシナリオで機能しますか?同様の条件で本番環境で使用した経験はありますか?

役に立ちましたか?

解決

tcerl は、同じサイズ制限に直面して出てきました。私は最近Erlangを使用していませんが、あなたが探しているもののように聞こえます。

他のヒント

CouchDBの動作を確認しましたか?製品のドロップとしてあなたが望んでいるものではないかもしれませんが、データを保存するためのアーランコードがたくさんあります。 REST APIの代わりにネイティブのアーランインターフェイスを提供するという話もあります。

ファイルシステムを単に使用できず、ファイル名を文字列IDとして扱い、ファイルの内容をバイナリBLOBとして扱うことができない理由はありますか?パフォーマンス要件に合ったもの(ファイルシステム)を選択できます。OSから提供される基本的に無料のキャッシュを取得する必要があります。

Mnesiaはデータをディスクに正常に保存できます。また、Berkeley DBにほぼ類似したdets(ディスクベースの用語ストレージ)もあります。標準ライブラリにあります: http://www.erlang.org/doc/ apps / stdlib / index.html

Apache CouchDBをお勧めします。

Erlangに最適です。そのサウンドから(IDベースのBLOBについて言及し、リレーショナル要件については言及しません)、ドキュメント指向のデータベースを探しています。

インターフェースはRESTであるため、キャッシングが必要な場合は、その前に汎用HTTPキャッシュを簡単に追加できます。

CouchDBのドキュメントは非常に高品質です。

Map-Reduceも組み込まれています:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top