해시 역할을하는 원자 배열이있는 프로젝트에서 작업하고 있습니다. 사용자가 서버에 연결할 때마다 특정 값이 해시되고 해당 해시를 배열의 요소를 조회하는 색인으로 사용하고 해당 요소를 반환합니다. "외부 힘"(장기 실행 gen_server에 의해 처리되는)은이 배열을 변경할 수 있으므로 단순히 하드 코드 할 수는 없습니다. 내 문제는이 배열을 "호스팅"하는 방법입니다.배열 : 배열에 분산 작업
나의 첫 번째 구현은 배열 사본을 보관하고 요청한 사람에게 보낸 간단한 gen_server였습니다. 그런 다음 그것을 요구하는 프로세스는 그것을 통과하여 원하는 인덱스를 얻을 수 있습니다. 이 구현에는 사용 된 메모리의 양과 과도한 양이있었습니다.이 동일한 어레이의 사본이 너무 많이 떠 다니는 이유가 여기에 있습니다.
현재 구현에는이 배열의 상태를 처리하는 중앙 gen_server와 실제 요청을 처리하는 하위가 있습니다. 상태가 변경되면 중앙 gen_server가 자식을 업데이트합니다. 프로세스가 해쉬 결과를 찾고자 할 때, 프로세스는 인덱스 번호를 중앙 gen_server로 전송하고, 중앙 gen_server는 그 요청을 자식 중 하나에게 전달합니다. 자식은 "로컬"목록을 탐색하고 결과 아톰을 원래 프로세스로 되돌려 보냅니다.
현재 구현의 문제점은 트래픽이 많을 때 느려지 게된다는 것입니다. 나는 점점 더 많은 아이들을 사용하려고 노력해 왔지만 중앙 gen_server가 병목이라고 확신한다.
아무에게도 내 문제에 대한 더 나은 해결책에 대한 아이디어가 있습니까?
편집 : % s의/배열/목록/g