2012-04-24 3 views
0

나는 자바에서 B + tree의 구현을 해왔다. 그러나 평소처럼, 그것은 메인 메모리에 완전히있다. B + 트리를 디스크에 저장할 수 있습니까? btree의 각 노드에는 자식 노드에 대한 포인터 (주 메모리 주소 또는 객체 참조)가 들어 있습니다. Btree가 디스크에있는 동안 어떻게 비슷한 결과를 얻을 수 있습니까? b + tree가 디스크에있을 때 시나리오에서 b + tree 노드의 주 메모리 주소를 바꿉니 까?B + 트리를 디스크에 쓸 때 "링크"를 유지 하시겠습니까?

가 여기에 게시 비슷한 질문 이미 : B+Tree on-disk implementation in Java

는하지만 완전히 답을 이해 해달라고.

의견을 공유해주세요.

+0

시간의 시작부터 메모리 주소와 오프셋의 차이점은 무엇입니까? –

답변

0

github의 JDBM3 코드를 살펴보십시오. 이 프로젝트는 B + Tree 및 유사한 데이터 구조를 디스크에 유지하므로 분명히 거기에서 답을 찾을 수 있습니다.

0

가장 단순한 형식 : 현재 노드에서 읽거나 쓰는 파일 오프셋 (파일 시작부터 바이트 수)을 추적해야합니다. 따라서 메모리 주소 대신 파일 기반 DB에서 오프셋을 저장합니다.

파일에서 읽을 때이를 메모리에 "캐시"하고 주어진 노드의 메모리 주소를 저장하거나 오프 세트에서만 작동하도록 결정할 수 있습니다.

이 말은 필자는 파일 기반 DB가 일반적으로 디스크보다 페이지가 더 큰 페이지 (디스크의 페이지와 같은 크기 임)에 노드를 작성하여 디스크 액세스를 최적화한다는 점을 추가해야한다고 덧붙여 야합니다. 이렇게하면 한 번의 디스크 찾기 작업 (비싼 작업으로 간주)으로 둘 이상의 노드를 읽을 수 있습니다.

+0

b 트리 (데이터베이스 색인)의 트래버스가 디스크 자체에서 발생하는 방법과 디스크 페이지를 가져 오는 데 사용하는 방법에 대한 고수준 개요를 제공 할 수 있습니까? – user104309