2008-11-13 17 views
4

얼랑 어플리케이션을위한 데이터 스토리지를 구성하는 방법을 연구하고 있습니다. 사용하기로되어있는 데이터는 기본적으로 짧은 문자열 ID로 인덱싱 된 이진 Blob의 거대한 컬렉션입니다. 각 얼룩은 10Kb 이하이지만 그 중 많은 수가 있습니다. 나는 그들이 총 200Gb의 크기를 가질 것이기 때문에 메모리에 맞지 않을 것이라고 생각합니다. 이 데이터의 일반적인 작업은 ID로 blob을 읽거나 ID로 blob을 업데이트하거나 새 ID를 추가하는 것입니다. 주어진 시간대마다 ID의 서브 세트 만 사용되므로 데이터 저장 영역 액세스 성능이 메모리 내부 캐시의 이점을 얻을 수 있습니다. 공연에 대해 말하면 매우 중요합니다. 목표는 상용 하드웨어 (예 : EC2 VM)에서 약 500 회의 읽기 및 초당 500 회의 업데이트를 수행하는 것입니다.데이터가 메모리에 맞지 않을 때 Erlang 어플리케이션을위한 적합한 데이터 스토리지 백엔드

제안 사항은 무엇입니까? 내가 2G (또는 4G 였던가?)에 국한되어 있기 때문에 dets는 의심의 여지가 없다. 아마 기억 상실증은 역시 문제가되지 않습니다. 내 인상은 주로 데이터가 메모리에 적합한 경우를 위해 설계된 것입니다. 나는 EDTK의 Berkeley DB 드라이버를 사용해 보려고한다. 위의 시나리오에서 작동합니까? 비슷한 조건의 생산 과정에서 누구나 사용 경험이 있습니까?

답변

5

tcerl이 동일한 크기 제한에 직면했습니다. 나는 Erlang을 요즘 사용하지 않고 있지만 당신이 찾고있는 것과 같다고 들립니다.

+0

그건 답이 너무 늦었다는 것을 제외하고 - 이미 내 응용 프로그램에서 tcerl을 가지고 놀고있다. :) –

0

Mnesia는 디스크에 데이터를 저장할 수 있습니다. Berkeley DB와 거의 비슷한 dets (디스크 기반 용어 저장)도 있습니다. 표준 라이브러리에 있습니다 : http://www.erlang.org/doc/apps/stdlib/index.html

+0

Dets 내 프로젝트에 사용할 수 없습니다 - 인용 문서에서 "Dets 파일의 크기는 2GB의 초과 할 수 없습니다." Mnesia는 dets를 기반으로하므로 제한을 상속받습니다. 해결 방법은 파티션을 만들 수 있지만 성능이 떨어질 것으로 생각됩니다. 내 제한된 테스트에서 dets는 다소 느립니다. –

+0

2GB 디츠 제한은 32 비트 아치에만있는 것으로 추측 할 수 있습니다 ... 어쨌든 erlang에 대해 여기보다 아마 erlang 메일 링리스트에 물어보십시오. – a2800276

1

CouchDB는 무엇을하고 있습니까? 그것은 당신이 제품을 떨어 뜨린 것과는 완전히 다른 것일 수 있습니다 만, 거기에 데이터를 저장하기위한 많은 Erlang 코드가 있습니다. REST API 대신 기본 erlang 인터페이스를 제공하는 방법에 대해서도 설명합니다.

1

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

+0

실제로 이것을 시도한 결과 약간의 느린 tcerl 기반 구현을 발견했다. 파일 시스템을 조율하는 데 신경 쓰지는 않았지만 그보다 느린 속도 였지만 적어도 기본적인 벤치 마크에서는 요구 사항이 충분히 빠르다. –

0

Apache CouchDB를 권하고 싶습니다.

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

인터페이스가 REST이기 때문에 캐싱이 필요한 경우 매우 간단하게 기본 HTTP 캐시를 추가 할 수 있습니다.

CouchDB 설명서는 매우 우수한 품질을 제공합니다.

는 또한 내장 된지도-감소 :