Làm thế nào để cơ sở dữ liệu hoạt động nội bộ? [đóng cửa]


79

Tôi đã làm việc với cơ sở dữ liệu trong vài năm qua và tôi muốn nghĩ rằng mình đã khá thành thạo với việc sử dụng chúng. Tuy nhiên, gần đây tôi đang đọc về Luật Tóm tắt rò rỉ của Joel và tôi nhận ra rằng mặc dù tôi có thể viết một truy vấn để nhận được khá nhiều thứ tôi muốn từ cơ sở dữ liệu, tôi không biết cơ sở dữ liệu thực sự diễn giải truy vấn như thế nào. Có ai biết bất kỳ bài báo hoặc cuốn sách hay nào giải thích cách cơ sở dữ liệu hoạt động nội bộ không?

Một số điều cụ thể mà tôi quan tâm là:

  • Cơ sở dữ liệu thực sự làm gì để tìm ra điều gì phù hợp với câu lệnh select?
  • Làm cách nào để cơ sở dữ liệu diễn giải một phép nối khác với một truy vấn có một số câu lệnh "where key1 = key2"?
  • Làm thế nào để cơ sở dữ liệu lưu trữ tất cả bộ nhớ của nó?
  • Các chỉ mục được lưu trữ như thế nào?

Nếu đó là máy chủ SQL, tôi thực sự khuyên bạn nên sử dụng loạt Inside Microsoft SQL Server 2005 (Microsoft press) đặc biệt là Storage Engine và trên Querying.. Nó trả lời tất cả các câu hỏi của bạn và hơn thế nữa. Bạn có thể quan tâm đến một số trong những blog: Craig Freedman Kalén Delaney Worth đăng ký vào SQLServerCentral quá ..
Gulzar Nazim

Hãy thử dùng db.cs.berkeley.edu/papers/fntdb07-architecture.pdf và WikiPedia. Đây là một chủ đề hơi lớn và các mô hình như RDBMS, FLATFILE, v.v. Trình phân tích cú pháp thực sự là một trong những thành phần quan trọng nhất. Cảm ơn
Saif Khan

2
Vào năm 2015, có một bài báo này có vẻ khá hay.
Piovezan

kiến trúc bên trong của cơ sở dữ liệu rất phức tạp. BÀI VIẾT NÀY giải thích hoạt động chi tiết của máy chủ mysql và công cụ lưu trữ.
shashwat srivastava

Câu trả lời:


83

Cơ sở dữ liệu thực sự làm gì để tìm ra điều gì phù hợp với câu lệnh select?

Nói trắng ra, đó là một vấn đề vũ phu. Đơn giản, nó đọc qua từng bản ghi ứng viên trong cơ sở dữ liệu và khớp biểu thức với các trường. Vì vậy, nếu bạn có "select * from table where name = 'fred'", nghĩa là nó chạy qua từng bản ghi, lấy trường "name" và so sánh nó với 'fred'.

Bây giờ, nếu trường "table.name" được lập chỉ mục, thì cơ sở dữ liệu sẽ (có thể, nhưng không nhất thiết) sử dụng chỉ mục trước để xác định vị trí các bản ghi ứng viên để áp dụng bộ lọc thực tế.

Điều này làm giảm số lượng bản ghi ứng viên để áp dụng biểu thức, nếu không nó sẽ chỉ thực hiện những gì chúng ta gọi là "quét bảng", tức là đọc mọi hàng.

Nhưng về cơ bản, tuy nhiên, nó định vị các bản ghi ứng viên tách biệt với cách nó áp dụng biểu thức bộ lọc thực tế và rõ ràng là có một số tối ưu hóa thông minh có thể được thực hiện.

Làm cách nào để cơ sở dữ liệu diễn giải một phép nối khác với một truy vấn có một số câu lệnh "where key1 = key2"?

Vâng, một phép nối được sử dụng để tạo một "bảng giả" mới, trên đó bộ lọc được áp dụng. Vì vậy, bạn có tiêu chí bộ lọc và tiêu chí tham gia. Tiêu chí kết hợp được sử dụng để xây dựng "bảng giả" này và sau đó bộ lọc được áp dụng cho điều đó. Bây giờ, khi diễn giải phép nối, một lần nữa vấn đề tương tự như so sánh bộ lọc - brute force và đọc chỉ mục để xây dựng tập hợp con cho "bảng giả".

Làm thế nào để cơ sở dữ liệu lưu trữ tất cả bộ nhớ của nó?

Một trong những chìa khóa của cơ sở dữ liệu tốt là cách nó quản lý bộ đệm I / O của nó. Nhưng về cơ bản nó khớp khối RAM với khối đĩa. Với các trình quản lý bộ nhớ ảo hiện đại, một cơ sở dữ liệu đơn giản hơn gần như có thể dựa vào VM làm trình quản lý bộ đệm bộ nhớ của nó. DB'S cao cấp tự làm tất cả những điều này.

Các chỉ mục được lưu trữ như thế nào?

B + Cây thường, bạn nên tra cứu nó. Đó là một kỹ thuật thẳng tiến đã tồn tại trong nhiều năm. Lợi ích của nó được chia sẻ với hầu hết mọi cây cân bằng: quyền truy cập nhất quán vào các nút, cộng với tất cả các nút lá đều được liên kết để bạn có thể dễ dàng di chuyển từ nút này sang nút khác theo thứ tự khóa. Vì vậy, với một chỉ mục, các hàng có thể được coi là "được sắp xếp" cho các trường cụ thể trong cơ sở dữ liệu và cơ sở dữ liệu có thể tận dụng thông tin đó để có lợi cho việc tối ưu hóa. Điều này khác với việc sử dụng bảng băm cho một chỉ mục, điều này chỉ cho phép bạn truy cập một bản ghi cụ thể một cách nhanh chóng. Trong B-Tree, bạn có thể nhanh chóng không chỉ đến một bản ghi cụ thể mà còn đến một điểm trong danh sách được sắp xếp.

Cơ chế thực tế của việc lưu trữ và lập chỉ mục các hàng trong cơ sở dữ liệu thực sự khá dễ hiểu và dễ hiểu. Trò chơi đang quản lý bộ đệm và chuyển đổi SQL sang các đường dẫn truy vấn hiệu quả để tận dụng các thành ngữ lưu trữ cơ bản này.

Sau đó, có toàn bộ sự phức tạp của nhiều người dùng, khóa, ghi nhật ký và giao dịch nằm trên thành ngữ lưu trữ.


8
Tôi chỉ muốn nói rằng đây là một câu trả lời thực sự thú vị và hữu ích. Bạn đã viết dài hơn về chủ đề này ở bất cứ đâu chưa?
Nathan Long

đây là giúp đỡ tôi để tìm hiểu làm thế nào thực sự công trình cơ sở dữ liệu
Adzimzf

4
  • Cơ sở dữ liệu thực sự làm gì để tìm ra điều gì phù hợp với câu lệnh select?

    DB đang sử dụng các chỉ mục (xem bên dưới)

  • Làm cách nào để cơ sở dữ liệu diễn giải một phép nối khác với một truy vấn có một số câu lệnh "where key1 = key2"? Phép toán tham gia có thể được dịch sang phép toán cây nhị phân bằng cách hợp nhất cây.

  • Làm thế nào để cơ sở dữ liệu lưu trữ tất cả bộ nhớ của nó?

    các tệp được ánh xạ bộ nhớ để truy cập nhanh hơn vào dữ liệu của chúng

  • Các chỉ mục được lưu trữ như thế nào?

    Các DB nội bộ đang làm việc với B-Trees để lập chỉ mục.

Điều này nên được giải thích chi tiết hơn trên wikipedia ..

http://en.wikipedia.org/wiki/B-tree

http://en.wikipedia.org/wiki/Database


1

Ngoài việc đọc, bạn có thể sử dụng các công cụ DB để kiểm tra kế hoạch thực thi mà cơ sở dữ liệu sử dụng trên các truy vấn của bạn. Ngoài việc hiểu rõ hơn về cách nó hoạt động, bạn có thể thử nghiệm các kỹ thuật để tối ưu hóa các truy vấn với vòng phản hồi tốt hơn.


0

Saif, liên kết xuất sắc. Tổng quan về con mắt quản lý bao gồm hầu hết các chủ đề và cung cấp chi tiết về cách triển khai của nhà cung cấp cụ thể.

Tôi đã cố gắng viết ba lời giải thích, nhưng đây thực sự là một chủ đề quá lớn. Hãy xem bài viết của Hellerstein (bài viết trên máy chủ berkeley mà Saif đã liên kết), rồi hỏi về các chi tiết cụ thể.

Cần lưu ý rằng chỉ một tập hợp con "những ý tưởng hay đã biết" được triển khai trong bất kỳ DBMS nhất định nào. Ví dụ, SQLite thậm chí không thực hiện các phép nối băm, nó chỉ thực hiện các vòng lặp lồng nhau (ack !!). Nhưng sau đó, nó là một dbms có thể nhúng dễ dàng và nó hoạt động rất tốt, vì vậy có điều gì đó để nói về sự thiếu phức tạp.

Tìm hiểu về cách DBMS thu thập các thống kê và cách nó sử dụng chúng để xây dựng các kế hoạch truy vấn, cũng như học cách đọc các kế hoạch truy vấn ngay từ đầu, là một kỹ năng vô giá - nếu bạn phải chọn một chủ đề "nội bộ cơ sở dữ liệu" để học, học cái này. Nó sẽ tạo ra một thế giới khác biệt (và bạn sẽ không bao giờ vô tình viết một sản phẩm Descartes nữa ... ;-)).


0

Nếu bạn muốn biết thêm chi tiết, tôi khuyên bạn nên lấy các nguồn sqlite và xem nó hoạt động như thế nào. Nó hoàn chỉnh, mặc dù không phải ở quy mô của cơ sở dữ liệu mã nguồn mở và thương mại lớn hơn. Nếu bạn muốn biết chi tiết hơn, tôi giới thiệu Hướng dẫn dứt khoát về SQLite , đây không chỉ là lời giải thích tuyệt vời về sqlite mà còn là một trong những cuốn sách kỹ thuật đáng đọc nhất mà tôi biết. Về phía MySQL, bạn có thể tìm hiểu từ MySQL Performance Blog cũng như trên đầu sách về O'Reilly High Performance MySQL (V2) mà blog là một trong những tác giả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.