B 트리 구현하는 과제를 하는데 몇 가지 궁금증들이 떠올랐습니다.
1. B 트리에서 leaf는 실제 데이터에 접근하는 포인터를 담아야 하고
internal은 다른 node에 대한 포인터를 담아야 하잖아요?
이 둘을 한 종류의 node로 다뤄야 할텐데, node를 추상화시키더라도
leaf에서 실제로 가리키는 자료형이 뭔지 결정을 할 수가 없더라고요.
왠지 native단에서 db와 파일 간의 연결 작업이 이뤄질 거 같은데(이런 부분은 하나도 모르겠어요..),
실제 db(mysql, oracle, etc..)들은 어떻게 구현이 되어있는지 궁금하더라고요.
2. db에서 쓰이는 어떠한 자료형이든 key로 사용될 수 있으니 저도 일반화시키려고 java generic을 생각해봤는데
B 트리 특성상 자식의 개수는 node의 크기에 따라 달라지니까 generic을 쓰면 node의 크기를 결정할 수 없을 것 같더라고요.
어떤 게 key로 쓰일지 모르니..
역시 이 경우도 실제로는 어떤 식으로 문제를 해결하는지 궁금하고요.
3. db는 보통 어떤 언어로 설계가 되는지, 어느 분야의 어느 정도의 지식을 갖춰야 설계를 할 수 있는지 궁금합니다.
잘 아시는 분들 답변 부탁드려요~
안 나오던데요 ㅎ
시스템 데이터베이스 설계를 얘기하는거냐 아니면 오라클같은 데이터베이스를 만드는 설계를 얘기하는거냐. 의미자체가 모호
시스템 데이터베이스면 파일 시스템 말인가요? 그렇다면 제가 궁금한 건 후자일 듯
오라클같은 상용 DBMS가 어떻게 구현되어있는지는 클로즈드 소스니까 알수가없고, DBMS 엔진부가 오픈소스인 큐브리드같은걸 알아보셈
하지만 오라클과는 비교도할수없겠지... 해쉬조인의 해쉬함수 성능만하더라도 괴물같은 오라클새끼들은 SQL SERVER랑은 비교도할수없는 성능을 자랑...
흠.. 알아들을 수 있을지 모르겠지만 ㅋㅋ 함 찾아볼게요. 근데 제가 지금 어려워하는 게, 언어 상에서 추상적인 자료형을 가지고 놀아서 그럴 수도 있는 걸까요? 실제로는 파일들을 구조화하는 작업일테고, 그러면 leaf든 internal이든 disk block에 대한 포인터를 다룰테니까..?
디비에세 물리적데이터가 있는 디스크파일에 접근할때 B트리가 무조건쓰이는게 아닌데 무슨소린지 모르겠군. B트리는 인덱스에 쓰이는 구조인데.
인덱스도 결국엔 파일에 저장돼있지 않나요?
B트리구조로되어있는 인덱스에서 rowid를 검색하고 물리적디스크파일을 찾아감
아직 자세히는 모르지만, 제가 궁금했던 건 인덱스끼리 구조화할 때 필요한 포인터랑 최종적으로 rowid를 통해 디스크파일을 향하는 포인터랑 다를텐데 이것들을 어떻게 하나의 트리 구조로 관리할 수 있느냐예요. 개념이 자리잡지 못해서 질문 자체가 좀 모호해보이긴 하네요..
애초에 학교과제수준 지금 나도 B+트리 짜는거하는데 그거 구별하지말라고 해서 내줄텐데??? 구별하라냐?? 그럼 애초에 포인터배열 2개만들고 처음에 leaf로 처넣을때는 디스크파일향하게하고 split할때 위에 루트두고 non-leaf생길때 그 non-leaf에서는 index전용 포인배열에 가리키게하면되지