7

新しい Elixir プロジェクトで、Erlang の ETS をユーザー検索用のキャッシュとして使用することを検討しています。ユーザー入力に基づいて、システムは高価なサードパーティ API を使用してルックアップを行います。

同じユーザー入力に対して重複した呼び出しを行うことを避けるために、外部 API の前にキャッシュ レイヤーを配置するつもりであり、ETS はこれに適したオプションのようです。ただし、ユーザー入力のバリエーションに制限がないため、ETS テーブルに必要なストレージ容量が際限なく増大することが懸念されます。

私が ETS について読んだとき、ETS のテーブルのサイズに関する懸念について話し合っている人を他に見たことがありません。これは、ETS の異常な使用例になるからですか?

一見したところ、私の好みは ETS テーブルのエントリ数を制限し、制限に達したら最も古いエントリを拒否 (つまり削除) することです…</p>

ETS で無制限の数のエントリを処理するための一般的な戦略はありますか?

4

2 に答える 2

2

私は、Redis API を使用した「スマート無効化キャッシュ」のような ETS テーブルを本番環境で使用しています (SQL WAL ログのようなマスター - マスター レプリケーションもあります)。

最大のサイズは ~ 200-300Mb で、100 万を超えるアイテムがあります。過去2年間、問題はありません。制限については知っていますERL_MAX_ETS_TABLESが、サイズに関する情報はありません。

このテーブルには特別な「スマート インデックス」があります。このメソッドはテーブル内のすべての要素を渡すため、ETS select/match/etc は低速で​​す。

于 2016-08-24T10:07:26.410 に答える