2009-06-27 47 views
120

Tôi quan tâm đến việc tìm hiểu cách một công cụ cơ sở dữ liệu hoạt động (tức là nội bộ của nó). Tôi biết hầu hết các cấu trúc dữ liệu cơ bản được dạy trong CS (cây, bảng băm, danh sách, vv) cũng như hiểu biết khá tốt về lý thuyết trình biên dịch (và đã thực hiện một trình thông dịch rất đơn giản) nhưng tôi không hiểu làm sao về cách viết một cơ sở dữ liệu. Tôi đã tìm kiếm các hướng dẫn về chủ đề này và tôi không thể tìm thấy bất kỳ chủ đề nào, vì vậy tôi hy vọng một người khác có thể chỉ cho tôi đúng hướng. Về cơ bản, tôi muốn biết thông tin về những điều sau: Dữ liệuCách viết một cơ sở dữ liệu đơn giản

  • Làm thế nào dữ liệu được lưu trữ nội bộ (tức là cách bảng được đại diện, vv)
  • Làm thế nào động cơ phát hiện ra rằng nó cần (ví dụ như chạy một truy vấn SELECT)
  • Làm thế nào dữ liệu được chèn vào trong một cách đó là nhanh và hiệu quả

và bất kỳ chủ đề khác mà có thể liên quan đến điều này. Nó không phải là một cơ sở dữ liệu trên đĩa - ngay cả một cơ sở dữ liệu trong bộ nhớ là tốt (nếu nó dễ dàng hơn) bởi vì tôi chỉ muốn tìm hiểu các hiệu trưởng đằng sau nó.

Rất cám ơn sự giúp đỡ của bạn.

Trả lời

44

Nếu bạn giỏi đọc mã, nghiên cứu SQLite sẽ dạy cho bạn một chiếc ghe chở toàn bộ về cơ sở dữ liệu thiết kế. Nó nhỏ, vì vậy nó dễ dàng hơn để quấn đầu của bạn xung quanh. Nhưng nó cũng được viết chuyên nghiệp.

http://sqlite.org/

+2

LỘC của tải shell.c sqlite => 3135, sqlite3.c => 136.332, sqlite3ext.h => 447, sqlite3.h => 7097, tổng => 147.011 –

+1

Mà có lẽ là về nhỏ như bạn có thể làm cho một công cụ cơ sở dữ liệu đầy đủ chức năng bằng cách sử dụng một ngôn ngữ cú đúp xoăn. SQLite cũng có sẵn trong C#. –

+0

@RobertHarvey Bạn có thể đăng một liên kết của mã nguồn C# không? –

8

tôi sẽ đề nghị tập trung vào www.sqlite.org

Đó là gần đây, nhỏ (mã nguồn 1MB), mã nguồn mở (do đó bạn có thể hình dung nó ra cho chính mình) ...

Sách đã được viết về cách nó được thực hiện:

http://www.sqlite.org/books.html

nó chạy trên một nhiều hệ điều hành cho cả máy tính để bàn và điện thoại di động để thử nghiệm thật dễ dàng và việc tìm hiểu về nó sẽ hữu ích ngay bây giờ và trong tương lai.

Nó thậm chí có một cộng đồng phong nha ở đây: https://stackoverflow.com/questions/tagged/sqlite

+1

Kích thước byte cho 3,10 bây giờ là gần 7,0 mb mã nguồn. Chỉ có một số ít người có thể tiêu hóa tất cả những điều đó trong một lần ngồi. Tuy nhiên, [this] (http://www.sqlite.org/quickstart.html) cũng là một nơi tốt để bắt đầu. –

+1

Thật vậy. Gần đây đã dành một chút thời gian bên trong mã nguồn của SQLite để tìm ra một lỗi trong SQLCipher, nó là một cơn ác mộng tuyệt đối. Cuộc sống đơn giản hơn 6 năm trước :-) –

6

có thể bạn có thể học hỏi từ HSQLDB. Tôi nghĩ rằng họ cung cấp cơ sở dữ liệu nhỏ và đơn giản cho việc học. bạn có thể xem mã vì nó là mã nguồn mở.

23

Câu trả lời cho câu hỏi này là câu hỏi lớn nhất. mong đợi một luận án tiến sĩ để có nó đã trả lời 100%;) nhưng chúng ta có thể nghĩ về những vấn đề từng người một:

  • Làm thế nào để lưu trữ dữ liệu nội bộ: bạn nên có một tệp dữ liệu chứa các đối tượng cơ sở dữ liệu của bạn và một cơ chế lưu trữ dữ liệu trong tập trung và một số dữ liệu xung quanh nó vào RAM giả sử bạn có một bảng, với một số dữ liệu, chúng tôi sẽ tạo một định dạng dữ liệu để chuyển đổi bảng này thành tệp nhị phân, bằng cách đồng ý về định nghĩa của cột dấu phân cách và dấu phân tách hàng và đảm bảo mẫu dấu phân cách đó không bao giờ được sử dụng trong chính dữ liệu của bạn. I E.nếu bạn đã chọn < *> ví dụ để tách các cột, bạn nên xác thực dữ liệu bạn đang đặt trong bảng này để không chứa mẫu này. bạn cũng có thể sử dụng tiêu đề hàng và tiêu đề cột bằng cách chỉ định kích thước của hàng và một số chỉ mục nội bộ để tăng tốc tìm kiếm của bạn và ở đầu mỗi cột để có độ dài của cột này như "Adam", 1, 11.1 "123 ABC đường POBox 456" bạn có thể có nó như < & RowHeader, 1> < & col1, CHR, 4> Adam < & col2, num, 1,0> 1 < & Col3, Num, 2,1 > 111 < & Col4, CHR, 24> 123 ABC đường POBox 456 < & RowTrailer>

  • Làm thế nào để tìm các mục q uể oải thử sử dụng băm và lập chỉ mục để trỏ vào dữ liệu được lưu trữ và lưu trữ dựa trên tiêu chí khác nhau lấy cùng ví dụ ở trên, bạn có thể sắp xếp giá trị của cột đầu tiên và lưu trữ nó trong một đối tượng riêng biệt tại id hàng của các mục được sắp xếp theo thứ tự abc và Vì vậy, trên

  • Làm thế nào để tăng tốc độ chèn dữ liệu Tôi biết từ Oracle là họ chèn dữ liệu ở nơi tạm thời cả trong RAM và trên đĩa và làm vệ sinh trên cơ sở định kỳ, cơ sở dữ liệu bận rộn mọi lúc nhưng đồng thời chúng tôi không muốn mất dữ liệu trong trường hợp mất điện như thế. vì vậy hãy thử để giữ cho dữ liệu ở vị trí tạm thời này không có phân loại, thêm lưu trữ ban đầu của bạn, và sau này khi hệ thống là khu nghỉ mát miễn phí chỉ số của bạn và xóa các khu vực tạm thời khi thực hiện xong

may mắn, dự án tuyệt vời.

1

Tôi không chắc liệu nó có phù hợp với yêu cầu của bạn hay không nhưng tôi đã triển khai một cơ sở dữ liệu định hướng tệp đơn giản với hỗ trợ đơn giản (SELECT, INSERT , UPDATE) bằng cách sử dụng perl.
Những gì tôi đã làm là tôi lưu trữ mỗi bảng dưới dạng tệp trên đĩa và các mục có mẫu được xác định rõ và thao tác dữ liệu bằng cách sử dụng các công cụ linux được xây dựng như awk và sed. để cải thiện hiệu quả, dữ liệu được truy cập thường xuyên được lưu vào bộ nhớ cache.

3

Nếu MySQL quan tâm đến bạn, tôi cũng sẽ đề xuất điều này wiki page, đã có một số thông tin về cách thức hoạt động của MySQL. Ngoài ra, bạn có thể muốn xem Understanding MySQL Internals.

Bạn cũng có thể xem xét xem giao diện không phải SQL cho công cụ Cơ sở dữ liệu của mình. Vui lòng xem Apache CouchDB. Những gì bạn sẽ gọi, một hệ thống cơ sở dữ liệu định hướng tài liệu.

Chúc may mắn!

+0

trang wiki. 404 – Pacerier

+0

ANd nếu bạn muốn xem một db khác: http://www.sqlserverinternals.com/ sách điện tử của cô ấy trên máy chủ nội bộ SQl là hàng đầu. – HLGEM

7

SQLite đã được đề cập trước đó, nhưng tôi muốn thêm một số thứ.

Cá nhân tôi đã học được rất nhiều bằng cách nghiên cứu SQlite. Điều thú vị là, tôi đã không đi đến mã nguồn (mặc dù tôi chỉ có một cái nhìn ngắn). Tôi đã học được nhiều bằng cách đọc tài liệu kỹ thuật và đặc biệt xem xét các lệnh nội bộ mà nó tạo ra. Nó có một trình thông dịch dựa trên ngăn xếp riêng bên trong và bạn có thể đọc mã P nó tạo ra bên trong chỉ bằng cách sử dụng giải thích. Do đó bạn có thể thấy các cấu trúc khác nhau được dịch sang động cơ cấp thấp như thế nào (điều đó đơn giản đến ngạc nhiên - nhưng đó cũng là bí quyết về tính ổn định và hiệu quả của nó).

6

Được rồi, tôi đã tìm thấy một trang web trong đó có một số thông tin về SQL và thực hiện - đó là một chút khó khăn để liên kết đến các trang trong đó liệt kê tất cả các hướng dẫn, vì vậy tôi sẽ liên kết chúng từng cái một:

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