Erlang을 사용하여 LRU 캐시를 구현하는 방법은 무엇입니까? 최고 Github의 프로젝트 주연Erlang LRU 캐시
는 fogfish/cache했지만, 세그먼트 테이블 내 데이터에 대한 매우 적합하지 않았다.
barrel-db/erlang-lru은 목록을 사용하고 있습니다. 테스트 후 너무 많은 데이터가 있으면 속도가 느려집니다.
여기에 문제가있는 것 같습니다.
move_front(List, Key) -> [Key | lists:delete(Key, List)].
자바으로, 더 나은 구현 내가 LinkedList의 좋은 생각이 아니라는 것을 깨달았다 다음 LinkedList의 작업을 수행하려고하고like this
해시 맵과 LinkedList의를 사용했다 Erlang, like this thread.
질문은 Erlang으로 LRU 캐시를 수행하는 방법입니까?
내가 얼랑은 낮은 수준의 캐시 및 작업을 수행하는 너무 높은 수준의 생각 현재, 얼랑의 핵심에서 일부 유사한 기능을 (가지고 ETS http://erlang.org/doc/man/ets.html처럼) 외부 프로젝트를 사용하기 전에 이러한 기능 중 일부를 테스트 해 보았습니까? –
@MathieuK. 당신의 의견에 감사드립니다. 예, 시도했습니다. 핵심 문제는 LRU입니다. access_time을 저장하기 위해 테이블을 사용하려고했지만 모든 읽기/업데이트에 대해 테이블을 업데이트 (삭제 후 삽입)해야합니다. 이것이 더 나은 방법으로 이루어질 수 있을지 궁금합니다. – user3644708
질문에 대한 답이 하나도 없습니다. Erlang에서 고성능 LRU 캐시를 구현하려면 [포트] (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/)를 확인할 수있다. 에뮬레이터/빔). –