2011-01-14 34 views
14

Tôi biết cách triển khai btree trong bộ nhớ, nhưng không rõ về cách lưu trữ btree trong đĩa. Tôi nghĩ có hai khác biệt chính:Làm thế nào btree được lưu trữ trên đĩa?

  1. Chuyển đổi giữa con trỏ bộ nhớ và địa chỉ đĩa, xem post này.
  2. Cách tách trang khi chèn mục k/v mới? Nó rất dễ thực hiện trong bộ nhớ.

Cảm ơn

+0

Có thể trùng lặp http://stackoverflow.com/questions/872070/saving-btrees-to-a-disk-file-and-read-it mặc dù câu trả lời ở đó không thực sự tốt. –

+0

Bạn đã bao giờ tìm ra điều này chưa? Có một triển khai mã nguồn mở tốt đẹp ở đây: https://github.com/jankotek/JDBM3 nhưng phải mất thời gian để đọc qua nó. Để bắt đầu, bạn có thể xem: https://github.com/jankotek/JDBM3/blob/master/src/test/java/org/apache/jdbm/BTreeTest.java. Nếu bạn tìm thấy tài nguyên tốt hơn, vui lòng chia sẻ tài nguyên đó. – Sohaib

Trả lời

1

Tôi đề nghị là để có một cái nhìn vào cuốn sách Database System Implementation"

Chương "lưu trữ dữ liệu" 2 và chương 3 "đại diện cho yếu tố dữ liệu" wil cung cấp cho bạn một số gợi ý về vấn đề này.

Cấu trúc chỉ mục của Chương 4 có một phần trên Btrees

Đây là nguồn thông tin tốt nhất mà tôi đã tìm thấy cho đến nay về chủ đề này.

+2

Có rất nhiều sách về chủ đề này, ví dụ, * khái niệm hệ thống cơ sở dữ liệu * (http://codex.cs.yale.edu/avi/db-book/) chương 11. Tuy nhiên không ai trong số họ nói về thực tế implmentation. – Chang

4

tất cả phụ thuộc vào DBMS bạn sử dụng. Nếu bạn muốn biết nó được thực hiện như thế nào trong MS SQL Server, những điều cần đọc là:

  • Trang (tôi đoán chúng gần như tất cả DBMS hiện đại) - trong SQL Server là 8Kb. Tệp cơ sở dữ liệu được tạo từ các trang.
  • Mức độ mở rộng - nhóm hợp lý 8 trang liên tục
  • (S) GAM - (Bản đồ phân bổ toàn cầu) được chia sẻ. Bitmap chứa thông tin về các phần mở rộng miễn phí và chiếm đóng. Đây là một trong những trang đầu tiên trên tệp cơ sở dữ liệu.
  • IAM - Bản đồ phân bổ chỉ mục. Bạn có thể tìm ra chỉ mục/heap nào được lưu trữ trong đó các phần mở rộng. Có thông tin này, bạn có thể lấy vị trí trong tệp nơi lưu trữ chỉ mục/heap.

Sử dụng IAM và GAM (hoặc SGAM), bạn có thể chia trang - chỉ cần di chuyển một phần của trang (được cho là tràn) đến trang khác trong tệp.

IAM và GAM cũng là câu trả lời cho câu hỏi đầu tiên của bạn.

Hầu hết các tên này được lấy từ MS SQL Server nhưng tôi khá chắc chắn, trong DBMS khác, nó được giải quyết khá giống nhau.

Hy vọng điều đó sẽ hữu ích.

+0

tốt ít nhất một số gợi ý để kéo các chủ đề (+1) –

Các vấn đề liên quan