ErlangでLRUキャッシュを実装する方法は?トップはGitHubのプロジェクト主演Erlang LRUキャッシュ
はfogfish/cacheだったが、セグメント化されたテーブルには、私のデータのために非常に適合しませんでした。
barrel-db/erlang-lruはリストを使用していました。テスト後、データが多すぎると処理が遅くなります。
ここに問題があったと思います。
move_front(List, Key) -> [Key | lists:delete(Key, List)].
のJavaでは、より高度な実装では、私はLinkedListのは良いアイデアではなかったことに気づき、その後のLinkedListを実行しようとしました、そしてlike this
ハッシュマップとのLinkedListを使用していましたErlang、like this threadの場合
ErlangでLRUキャッシュを実行する方法は?
を実装する必要があります私はErlangのは、低レベルのキャッシュを行うには高すぎるレベルであり、現在、Erlangのは、(コアにいくつかの類似した特徴を持っていると思いますETS http://erlang.org/doc/man/ets.html)のように、外部プロジェクトを使用する前にいくつかの機能をテストしましたか? @マシューK。 –
コメントありがとうございます。はい、試しました。重要な問題はLRUです。私はaccess_timeを保存するためにテーブルを使用しようとしましたが、すべての読み取り/更新でテーブルを更新(削除してから挿入)する必要があります。これがもっと良い方法でできるのだろうか? – user3644708
あなたの質問に1つの答えがありません。 Erlangで実行可能なLRUキャッシュを実装したい場合は、[ports](http://erlang.org/doc/reference_manual/ports.html)または[NIF]で相互接続された外部コードを使用することをお勧めしますhttp://erlang.org/doc/tutorial/nif.html)。 Cプログラミングは私のお気に入りのドメインではありませんが、ErlangのCコードを実装する例が必要な場合は、[ビームソースコード](https://github.com/erlang/otp/tree/maint/erts/)をチェックしてくださいエミュレータ/ビーム)。 –