데이터가 메모리에 맞지 않을 때 Erlang 애플리케이션에 적합한 데이터 저장 백엔드

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

문제

Erlang 응용 프로그램을위한 데이터 저장을 구성하는 방법을 연구하고 있습니다. 사용해야 할 데이터는 기본적으로 짧은 문자열 ID로 인덱싱 된 이진 블로브의 거대한 모음입니다. 각 블로브는 10kb 미만이지만 그중 많은 것이 있습니다. 나는 총으로 그들이 최대 200GB의 크기를 가질 것으로 예상되므로 분명히 메모리에 맞을 수 없다. 이 데이터의 일반적인 작업은 ID로 Blob을 읽거나 ID로 Blob을 업데이트하거나 새 제품을 추가하는 것입니다. 주어진 하루 각 기간에 ID의 서브 세트 만 사용되므로 데이터 스토리지 액세스 성능이 메모리 인 캐시의 이점을 얻을 수 있습니다. 성능에 대해 이야기하는 것은 매우 중요합니다. 대상은 상품 하드웨어 (예 : EC2 VM)에서 초당 약 500 개의 판독 및 500 개의 업데이트를 제공하는 것입니다.

여기서 무엇을 사용할 것인지 제안이 있습니까? 내가 이해하면서 Dets는 2G (또는 4G입니까?)로 제한되어 있기 때문에 의문의 여지가 없습니다. Mnesia는 아마도 의문의 여지가 없을 것입니다. 내 인상은 데이터가 메모리에 맞는 경우에 주로 설계되었다는 것입니다. 작업을 위해 EDTK의 버클리 DB 드라이버를 시도하는 것을 고려하고 있습니다. 위의 시나리오에서 작동합니까? 비슷한 조건에서 생산에서 사용한 경험이 있습니까?

도움이 되었습니까?

해결책

tcerl 같은 크기 제한에 직면하게되었습니다. 나는 요즘 Erlang을 사용하지 않지만 당신이 찾고있는 것 같습니다.

다른 팁

CouchDB가 무엇을하고 있는지 보셨습니까? 제품이 삭제 한 후에는 그렇지 않을 수도 있지만 데이터 저장을위한 Erlang 코드가 많이 있습니다. 나머지 API 대신 네이티브 Erlang 인터페이스를 제공하는 이야기도 있습니다.

파일 시스템 만 사용할 수없고 파일 이름을 문자열 ID로 처리하고 파일 내용을 이진 블로브로 처리 할 수없는 이유가 있습니까? 성능 요구 사항에 맞는 하나 (파일 시스템)를 선택할 수 있으며 OS에서 제공하는 기본적으로 무료로 캐싱해야합니다.

MNESIA는 디스크에 데이터를 저장할 수 있습니다. 버클리 DB와 대략 유사한 DETS (디스크 기반 용어 스토리지)도 있습니다. 표준 lib에 있습니다. http://www.erlang.org/doc/apps/stdlib/index.html

Apache CouchDB를 추천합니다.

Erlang에 적합하며, ID 기반 Blobs를 언급하고 관계 요구 사항을 언급하지 않음)에서 문서 지향 데이터베이스를 찾고 있습니다.

인터페이스가 REST이므로 캐싱이 필요한 경우 상품 HTTP 캐시를 매우 간단히 추가 할 수 있습니다.

CouchDB의 문서는 매우 높은 품질입니다.

또한 내장 된 맵 레디스가 있습니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top