문제

일부 장소에서는 2GB 기간을 명시합니다.어떤 곳에서는 노드 수에 따라 다르다고 말합니다.

도움이 되었습니까?

해결책

귀하의 질문이 "엄청난 수의 기억 상실증 데이터베이스로 구성된 기억 상실증 데이터베이스의 저장 용량은 얼마나 됩니까?"라는 질문이라면 상당히 큽니다. disc_only_copies 테이블" - 사용 가능한 디스크 공간에 따라 크게 제한됩니다.

대답하기 더 쉬운 질문은 다양한 유형의 단일 기억 상실 테이블의 최대 용량이 얼마나 되는지입니다. ram_copies 테이블은 사용 가능한 메모리에 따라 제한됩니다. disc_copies 테이블은 그들의에 의해 제한됩니다 dets 백엔드(Mnesia의 Hakan Mattsson) - 현재 이 제한은 4GB의 데이터입니다.

그래서 간단한 대답은 간단합니다. disc_copies 테이블은 문제가 발생하기 전에 최대 4GB의 데이터를 저장할 수 있습니다.(Mnesia는 디스크 크기 제한을 초과해도 실제로 충돌하지 않습니다. 테이블의 ram_copies 부분은 계속 실행되므로 런타임 시 데이터를 삭제하거나 다른 조치를 취하여 이를 복구할 수 있습니다.)

그러나 다른 기억상실 기능을 고려한다면 대답은 더 복잡해집니다.

  • local_content 테이블.테이블이 a local_content 표, 그런 다음 MNENSIA 클러스터의 각 노드에 다른 내용을 가질 수 있으므로 테이블의 용량은 다음과 같습니다.4Gb * <number of nodes>
  • 조각난 테이블.Mnesia는 사용자가 구성할 수 있는 테이블 파티셔닝 또는 테이블 조각을 사용한 샤딩을 지원합니다.이 경우 여러 기본 테이블에 걸쳐 테이블의 데이터를 효과적으로 배포하고 재분배할 수 있습니다.이러한 기본 테이블은 각각 ​​고유한 구성을 가질 수 있습니다. 예를 들어 하나의 ram_copies 테이블과 나머지 disc_only_copies 테이블이 있습니다.이러한 기본 테이블은 앞서 언급한 것과 동일한 크기 제한을 가지며 이제 조각화된 테이블의 유효 용량은 다음과 같습니다. 4Gb * <number of fragments>. (안타깝게도 테이블을 조각화하면 사용할 테이블 액세스 코드를 수정해야 합니다. mnesia:activity/4 대신에 mnesia:write 하지만 미리 계획을 세우면 관리가 가능합니다)
  • 외부 복사본 극도의 최첨단 생활을 좋아한다면 다음을 적용할 수 있습니다. 기억 상실증 기억 상실증에 대한 패치를 적용하고 다음과 같은 외부 시스템에 테이블 데이터를 저장합니다. 아마존 S3 또는 도쿄 내각.이 경우 테이블 용량은 백엔드 스토리지에 의해 제한됩니다.

다른 팁

이 답변은 유형 테이블과 관련하여 기존의 두 가지 답변과 모순됩니다. disc_copies. 먼저 몇 가지 일반적인 포인트를 얻을 수 있습니다.

  • 미분증 유형 테이블 ram_copies 사용 가능한 RAM에 의해서만 제한됩니다 (32 비트 기계에있는 경우 제외). 데이터는 ETS 테이블에 저장됩니다.
  • 미분증 유형 테이블 disc_only_copies DETS 테이블에 저장됩니다. DETS 테이블은 파일 형식의 한계로 인해 2GB로 제한됩니다.
  • 그 한계를 우회하는 명백한 방법은 아마도 더 많은 테이블을 만드는 것입니다. 테이블 조각화.
  • 스키마는 DETS 테이블에도 저장되므로 기존 테이블을 설명하는 정보도 2GB로 제한됩니다. 그래도 당신이 그 한계를 치기 전에 다른 한도에 도달 할 가능성이 높습니다.
  • 미분증 유형 테이블 disc_copies 저장됩니다 둘 다 RAM과 디스크에서 사용 가능한 RAM에 의해 제한됩니다.

나는 아래에 있음을 보여 주려고 노력할 것입니다. 아니요 MNESIA가 A의 크기로 부과하는 특정 한도 disc_copies 테이블. 그러나 많은 Erlang 프로그래머들이 그것을 믿는다는 점에 유의하십시오 disc_copies 테이블은 2GB로 제한됩니다. 그것은 언급되어 있습니다 받아 들여진 답변 이 질문에, 글을 쓰는 시점 에이 답변은 7의 계수만큼이나.


DISC_COPIES는 2001 년 DETS에서 DISK_LOG로 이동했습니다

그것은 일반적으로 그것을 믿습니다 disc_copies 테이블은 Dets 테이블로 뒷받침됩니다. 내가 알 수있는 한, 이것은 Erlang/OTP R7B-4 (2001 년 9 월 30 일에 출시 될 때까지). 에서 readme:

  -- mnesia -----------------------------------------------------------------

        OTP-3712 - Speed/load improvements disc_copies tables are not 
                   implemented with dets anymore.

보다 차이 자세한 내용은 특히 mnesia_lib.erl 그리고 mnesia_loader.erl.


DETS 및 2/4GB 한도를 지원하는 소스

Archelaus의 대답 그려집니다 http://erlang.org/~hakan/mnesia_consumption.txt, 그것은 그것을 설명합니다 disc_copies 테이블은 ETS 및 DETS 테이블에 있습니다. 그러나보고 있습니다 디렉토리의 색인, 우리는이 문서가 1999 년에 표시되어 있음을 알 수 있습니다.

[TXT] mnesia_consumption.txt  26-Oct-1999 10:57    10k  

변화가 2 년 전에 쓰여진 것처럼 이것을 말할 것임이 합리적입니다.

Ray Boosen의 답변 그려집니다 Erlang FAQ:

11.5 MNESIA에 얼마나 많은 데이터를 저장할 수 있습니까?

DETS는 파일 오프셋에 32 비트 정수를 사용하므로 가장 큰 MNESIA 테이블 (현재)은 4GB입니다.

실제로이 한도에 도달하기 전에 기계가 크롤링 방식으로 느려집니다.

FAQ는 적어도 2001 년 1 월 이후로 Wayback Machine에서 가장 빠른 사본). 이는이 FAQ 입력이 Disk_Log로 전환하기 전부터 날짜를 올렸고 오랫동안 업데이트되지 않았 음을 의미합니다. (어쨌든 DETS 테이블 크기 제한은 4GB가 아닌 2GB입니다.) 제출했습니다. 풀 요청 FAQ 용.


더 높은 한도를 지원하는 출처

Mnesia에 관한 Erlang 장을 배우십시오 말 :

RAM_COPIES
이 옵션을 사용하면 모든 데이터가 ETS에 독점적으로 저장되므로 메모리에만 저장됩니다. 메모리는 32 비트로 컴파일 된 가상 머신의 경우 이론적 4GB (및 실질적으로 약 3GB)로 제한되어야하지만 4GB 이상의 메모리가 있다고 가정 할 때이 한계는 64 비트 가상 머신에서 더 멀리 밀려 나야합니다.

disc_only_copies
이 옵션은 데이터가 DETS에만 저장됨을 의미합니다. 디스크 전용이며, 이와 같이 스토리지는 DETS의 2GB 제한으로 제한됩니다.

disc_copies
이 옵션은 데이터가 ETS와 디스크에 모두 저장되므로 메모리와 하드 디스크 모두에 저장됩니다. MNESIA는 메모리에서 테이블의 디스크 기반 백업을 생성 할 수있는 복잡한 트랜잭션 로그 및 체크 포인트 시스템을 사용하기 때문에 DISC_COPIES 테이블은 DETS 한도에 의해 제한되지 않습니다.

이것이 언제 작성되었는지 확실하지 않지만 위의 텍스트는 가장 빠른 웨이백 머신 카피, 2012 년 4 월.

~ 안에 Erlang-Questions에 대한 게시물 "Mnesia Beating Mnesia to Death (RE : Erlang VM과 함께 4GB의 RAM 사용)", 2005 년 11 월 7 일자 Ulf Wiger는 다음과 같이 썼습니다.

16GB 기계에서는 다음과 같습니다.

  • 6 백만 개의 동시 프로세스를 실행합니다 (Erlang : Hibernate 사용을 통해 실제로 2 천만 달러를 운영 할 수있었습니다 - Spawn Time : 6.3 US, 메시지 전달 시간 : 5.3 US, 1.8GB가 여분의 여유가있었습니다.)

  • 64 비트 단어 크기가 약간 날아 가기 때문에 최소 12GB의 데이터로 MNENIA를 채우지 만, 어떻게 표현하고 싶은지 생각해보십시오.

  • 10GB+ DISC_COPY 테이블을 MNENSIA에 보관하십시오. 로드 시간과 로그 덤프 비용은 허용되는 것처럼 보입니다 (로드하는 데 10 분, 덤핑은 시간이 걸리지 만 배경에서 꽤 잘 실행됩니다.)

결론

혼란은 공식 출처의 정보가 없거나 오래된 정보에서 비롯된 것 같습니다.

  • MNESIA 문서는 테이블 크기 제한을 언급하지 않습니다
  • Erlang FAQ는 MNESIA가 4GB DETS 크기 제한을받는다고 말하지만이 답변은 DESK_LOG Change에 대한 DETS 전에 작성되었습니다.
  • erlang.org 도메인의 유일한 다른 문서는 Håkan Mattsson의 문서입니다.

Lyse는 언급 한 최초의 "권위있는"출처 인 것 같습니다. disc_copies 테이블은 DETS 테이블 크기 제한에 적용되지 않습니다.

문서에 따라 이것은 4GB입니다. 섹션 11.5

http://erlang.org/faq/mnesia.html

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