2008-10-06 38 views
67

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

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

  • gì một cơ sở dữ liệu thực sự làm gì để tìm hiểu những gì phù hợp với một tuyên bố chọn?
  • Cơ sở dữ liệu giải thích cách kết hợp khác với truy vấn với một số câu lệnh "where key1 = key2" ở đâu?
  • Cơ sở dữ liệu lưu trữ tất cả bộ nhớ của nó như thế nào?
  • Chỉ mục được lưu trữ như thế nào?
+1

Tính đến năm 2015, có [bài viết này] (http://coding-geek.com/how-databases-work/) có vẻ khá tốt. – Piovezan

+0

Hãy thử http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf và WikiPedia này. Đây là một chút của một chủ đề rất lớn và các mô hình như RDBMS, FLATFILE vv Các 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 –

+0

Nếu đó là máy chủ SQL, tôi khuyên bạn nên sử dụng Microsoft SQL Server 2005 series (Microsoft press), đặc biệt là Công cụ lưu trữ và truy vấn .. 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ố blog sau: [Craig Freedman] (http://blogs.msdn.com/craigfr/) [Kalen Delaney] (http://sqlblog.com/blogs/kalen_delaney/) Giá trị đăng ký với [ SQLServerCentral] (http://www.sqlservercentral.com/) quá .. –

Trả lời

65

Cơ sở dữ liệu thực sự làm gì để tìm hiểu điều gì phù hợp với tuyên bố chọn ?

Để thẳng thắn, đó là vấn đề về sức mạnh 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ó "chọn * từ bảng trong đó name = 'fred'", nó theo nghĩa đen chạy qua từng bản ghi, lấy trường "tên" 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 hồ sơ ứng viên để áp dụng bộ lọc thực.

Điều này làm giảm số lượng hồ sơ ứng cử viên để áp dụng biểu thức, nếu không nó sẽ chỉ làm những gì chúng tôi gọi là "quét bảng", tức là đọc từng hàng. Tuy nhiên, về cơ bản, tuy nhiên nó xác định các hồ sơ ứng cử viên là riêng biệt với cách nó áp dụng các biểu thức lọc thực tế, và, rõ ràng, có một số tối ưu hóa thông minh có thể được thực hiện.

thế nào để một cơ sở dữ liệu giải thích một gia cách khác nhau để truy vấn với một số báo cáo "nơi key1 = khóa2"?

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

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

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

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

B + Cây thông thường, bạn nên tra cứu. Đó là một kỹ thuật thẳng về phía trước đã tồn tại trong nhiều năm. Lợi ích của nó được chia sẻ với hầu hết bất kỳ cây cân bằng nào: truy cập nhất quán đến các nút, cộng với tất cả các nút lá đượ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 trong 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 đó để nó 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 chỉ mục, điều này chỉ cho phép bạn truy cập vào một bản ghi cụ thể một cách nhanh chóng. Trong một B-Tree bạn có thể nhanh chóng nhận được không chỉ vào một bản ghi cụ thể, nhưng đến một điểm trong một danh sách được sắp xếp.

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

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

+5

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 nhiều hơn về chủ đề này ở bất cứ đâu? –

4
  • Cơ sở dữ liệu thực sự làm gì để tìm ra điều gì phù hợp với tuyên bố chọn?

    DBS đang sử dụng chỉ số (xem dưới đây)

  • thế nào để một cơ sở dữ liệu giải thích một cách khác nhau tham gia vào một truy vấn với một số báo cáo "nơi key1 = khóa2"? Tham gia hoạt động có thể được dịch sang hoạt động cây nhị phân bằng cách hợp nhất cây.

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

    file memorymapped để truy cập nhanh dữ liệu của họ

  • như thế nào chỉ số được lưu trữ?

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

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

0

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

Tôi đã thực hiện ba lần thử viết một 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 đến), và sau đó hỏi về các chi tiết cụ thể.

Cần lưu ý rằng chỉ có một tập con của "ý tưởng tốt đã biết" được triển khai trong bất kỳ DBMS cụ thể 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 dễ dàng nhú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 cách DBMS thu thập số liệu thống kê và cách sử dụng chúng để xây dựng kế hoạch truy vấn, cũng như học cách đọ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 cơ sở dữ liệu internals "chủ đề để tìm hiểu, tìm hiểu điều này. Nó sẽ tạo nên 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 một lần nữa ... ;-)).

1

Ngoài việc đọc, có thể có hướng dẫn sử dụng các công cụ DB để kiểm tra kế hoạch thực hiện mà cơ sở dữ liệu sử dụng trên truy vấn của bạn. Ngoài việc có được thông tin chi tiết về cách 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 bằng vòng phản hồi tốt hơn.

0

Nếu bạn muốn biết thêm chi tiết, tôi khuyên bạn nên tìm các nguồn sqlite và xem nó như thế nào. Nó hoàn chỉnh, mặc dù không phải ở quy mô của các cơ sở dữ liệu 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 khuyên bạn nên The Definitive Guide to SQLite không chỉ là 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 dễ đọc nhất mà tôi biết. Về phía MySQL, bạn có thể học từ MySQL Performance Blog cũng như trên cuốn sách trước O'Reilly High Performance MySQL (V2) trong đó blog là một trong các tác giả.

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