2011-09-03 2 views
0

학습 과제로 C#에서 간단한 내장 데이터베이스를 작성하려고합니다. 모든 일이 잘 진행되고 있지만 데이터를 디스크에 저장하는 데에는 막혀 있습니다.DB의 데이터 파일 내부에 데이터가 어떻게 구성되어 있습니까?

내 문제 중 하나의 예로 .. 나는 데이터 파일의 중간에 데이터를 "삽입"해야 할 수도 있습니다. 이것은 순차적 인 파일 액세스에서는 분명히 불가능합니다. 삽입이있을 때마다 파일의 마지막 절반을 다시 쓰는 것은 명백한 성능상의 이유로 옵션이 아닙니다.

내가 상상할 수있는 유일한 해결책은 파일에 빈 공간이 오는 각 테이블을 작성하는 것입니다. 빈 공간은 새 데이터를 쓰는 데 사용되며 테이블이 사용 가능한 공간을 모두 사용할 때마다 파일을 재구성하거나 성장시켜야합니다.

내 질문에 .. 정확히 전형적인 DB의 데이터 파일에서 "보이는"데이터가 무엇입니까? 어떻게/어디서 새로운 데이터가 파일에 기록됩니까?

답변

2

일반적으로 데이터베이스는 B- 트리를 사용하여 데이터 (키가 행의 기본 키가되고 값은 행의 내용이됩니다)와 색인을 모두 저장합니다. 이렇게하면 O(log n) 시간에 임의의 위치에 행을 삽입 할 수 있습니다.

예를 들어 내부 노드가 포인터 만 저장하고 리프 노드는 데이터 만 저장하는 SQLite가 B- 트리를 사용하는 방법을 설명하는 file format for SQLite databases을 참조하십시오.

다음을 참조하십시오. http://en.wikipedia.org/wiki/B-tree#Insertions_and_deletions_cause_trouble. 문제가있는 것으로 보입니다.

0

David Wolever의 대답은 잘못되었습니다. 데이터베이스의 데이터는 B- 트리에 저장되지 않습니다. B- 트리 (일반적으로 B + 트리)는 내부 노드에 키와 하위 포인터, 리프 노드에 키와 데이터 포인터 만 저장합니다. B + 트리는 대개 데이터를 저장하지 않습니다 (관계 테이블의 경우에도 가능). 데이터베이스의 데이터는 블록으로 조직화 된 데이터 파일에 저장됩니다.

관련 문제