유형 세트의 테이블과 ordered_set 유형의 테이블 사이의 차이점은 무엇입니까? 필자는 읽기/쓰기 성능, 순서가 기반한 것, 분산 된 노드에서의 효과 등의 차이에 관심이 있습니다.Mnesia에서 set과 ordered_set의 차이점은 무엇입니까?
답변
순서는 기본 키를 기반으로합니다. 즉, ordered_set 테이블은 복잡한 기본 키를 사용하여 일치/선택 반복을 수행하는 것이 훨씬 빠릅니다. 예를 들어 레코드가 {{Key, Val1}, Val2}
인 경우 Key
을 일치 시키거나 선택하여 Key
에 대해 매우 빨리 Val1
및 Val2
을 얻을 수 있습니다. 그 이외에는 읽기/쓰기 속도에 큰 차이가 있음을 알지 못합니다.
조각화 된 ordered_set 테이블도 가능하지만 반복은 부분적으로 정렬되지만 완전히 정렬되지는 않습니다. 단일 프래그먼트를 반복하는 순서가 있지만 프래그먼트에서 단편 순서는 정의되지 않습니다.
는 지금까지 순서가 소스에서 간다 :
add_element(E, [H|Es]) when E > H -> [H|add_element(E, Es)];
add_element(E, [H|_]=Set) when E < H -> [E|Set];
add_element(_E, [_H|_]=Set) -> Set; %E == H
add_element(E, []) ->[E].
은 그래서 순서는 요소에 직선 < 나>의 비교처럼 보인다.
주문 이외에는 세트와 정확히 동일합니다. 따라서 낮은 '가치'검색의 요소가 평균보다 빠를 것이라고 추측 할 수 있습니다. 그러나 그 이외에 나는 확실하지 않다.
Erlang은 프로세스에 독립적이며 변수 수정을 허용하지 않으므로 분산 노드에서의 영향은 로컬 노드와 동일해야합니다.
경고 :
이 성능에 대한 나의 부분에 투기 그래서 나는 두 가지 유형의 모든 벤치 마크를 실행하지 않았습니다.
그래, 분명히 내가 질문을 자세히 읽지는 않았다. 이것은 데이터 유형 자체가 아니라 천식 표와 관련됩니다. 기분을 자유롭게 해주세요. –
모듈의 문서에서 차이점을 잘 설명하고 있으므로 실제 경험을 원한다고 가정합니다. –
네,하지만 당신이 말하는 문서에 링크 할 수 있습니까? 내가 읽었던 문서는별로 깊이 들어가 있지 않습니다. – mindeavor