2010-12-29 7 views
4

Mnesia 설명서와 인기있는 Erlang 서 3 권을 검토했습니다. 단일 열 기본 및 보조 인덱스 만 만들고 사용할 수있는 것 같습니다. 아니면 예제가 다루는 것일까요? 각 열에 별도의 색인을 만들면 Mnesia가 다중 열 키 색인 검색을 시뮬레이션하기 위해 지능적으로 함께 사용할 수 있습니까? 그렇다면 간단한 테이블 스캔보다 성능이 훨씬 더 좋을까요?Erlang Mnesia에서 다중 열 인덱스를 만들고 사용하는 방법

Mnesia에서 다중 열 색인 생성을 지원하지 않는 경우 원시 dbms를 사용하면 Erlang에서이 기능을 시뮬레이션 한 사람이 있습니다.

두 번째 Qestion : 제약 조건 (참조, 확인), 트리거 및 이벤트 기반 알림은 어떻습니까?

답변

5

한 가지 방법은 {X, Y}을 키가있는 "열"에 직접 저장하는 것입니다. 이렇게하면 구조 {_, _}의 쿼리를 빠르게 검색 할 수 있지만 터플의 값 중 하나만 알면 검색 속도가 느려집니다 (기본적으로 테이블은 해시 테이블 임).

당신의 다른 DBMS가 원한다면 : Mnesia는 응용 프로그램을 작성할 때 에릭슨 개발자의 요구를 충족시키기 위해 구축 된만큼 전통적인 데이터베이스를 대체 할 수있는 것이 아닙니다. 따라서 기존 데이터베이스에 데이터를 저장하는 것이 더 바람직 할 수 있습니다.

그러나 당신이 원한다면 흉골 주위에 코드가있는 기능을 추가 할 수도 있습니다.

+0

많은 감사. 급료별로 정렬하고 이름을 tuple-name으로 사용하려면 add_table_index (staff, {sal, lname, fname})를 사용하십시오. field {sal, lname, fname}? Mnesia는 tupled 테이블 필드와 tupled 인덱스 필드를 허용합니까? 아니면 프로그래밍 방식으로 수동으로 키 필드 데이터를 하나의 키 필드로 순서대로 연결합니다. 이제 키 필드로 사용합니까? 순진하지만 나는이 모든 일에 아주 새로운 것입니다. 나는 일을 기꺼이 시도하고 이러한 대안을 시도해 볼 것이지만, 어떤 도움도 감사 할 것입니다.Joe Pee – user557513

+0

대답은 분명하기 때문에 친절하게도 마지막 질문은 무시하십시오. 감사. – user557513

1

Mnesia에는 이벤트 기반 알림이 있습니다. mnesia 이벤트를 구독하는 프로세스 (gen_server)를 가질 수 있습니다. 이러한 이벤트는 테이블 이벤트, 시스템 이벤트 및 기타 항목으로 분류됩니다. 사건에 관한 부분에서의 기록물 문서를 읽으십시오. 사실상 mnesia 이벤트 처리기를 사용하여 이벤트를보고하는 프로세스에 대해 가능한 것은 mnesia:report_event(Event)입니다. mnesia 이벤트에 등록 된 모든 프로세스는이 메시지를 받게됩니다. Mnesia는 구독 프로세스에 대해 테이블의 모든 트랜잭션에 대한 실시간 정보를보고합니다. 트랜잭션을 읽거나 쓰거나 삭제할 수 있으며 해당 루프의 프로세스가 관심이있을 수있는 이벤트 유형과 패턴이 일치 할 수 있습니다. 상세하고 간단한 테이블 이벤트가 있습니다. 개인적으로 이벤트가 매우 유용하다는 것을 알게되었습니다. 문서에서 세부 사항을 얻을 수 있어야합니다.

이벤트 정보 이제는 기억 상실 테이블에 같은 유형의 레코드가 저장됩니다. 이 정보는 mnesia:table_info(Table_name::atom(),attributes)으로 전화하여 액세스 할 수 있습니다. mnesia 테이블에 인덱스를 적용하면 첫 번째 레코드 필드가 아닌 한 (일반적으로 "기본 키"라고 함) 해당 속성의 모든 필드를 수락합니다. 이러한 인덱스는 테이블 작성시 테이블 작성시 적용 할 때보다 이유의 수. OTHER_NAME, 연령, 성별, FIRST_NAME 및 작업 색인 및 기록 검색을위한 모든 mnesia API를 : 나는 당신의 질문을 이해 한 경우

 
-record(employee,{id,first_name,other_name,sex,age,job}). 

install(Nodes)-> 
    mnesia:create_schema(Nodes), 
    mnesia:start(), 
    mnesia:create_table(employee,[{index,[age,sex,first_name,job]},
{attributes,record_info(fields,employee)}]), mnesia:stop(), ok.

아래의 코드를 고려, 지금 테이블 직원이 열이 말할 수 있습니다 색인 된 속성에 기반한 작업 예 mnesia:index_read/3 or mnesia:index_match_object/2 or mnesia:index_match_object/4. 행운을 빌어 요

/[email protected]