Tôi nghĩ câu trả lời của Barry khá tuyệt vời. Tôi sẽ chỉ thêm một vài suy nghĩ nữa. Lưu ý loại mờ này giữa hệ thống tệp và thiết bị thô, điều này hoàn toàn khác nhau nhưng có thể được nghĩ về cùng một khái niệm.
Tại sao nhà cung cấp DBMS sẽ tự quản lý I/O của riêng họ, v.v. ??
kiểm soát
Khi hầu hết các hệ thống DBMS lớn lên (Oracle, DB2, Sybase ASE {SQL Server là một người anh họ để Sybase ASE}) Hệ thống tập tin hệ điều hành không phát triển như họ ngày hôm nay nhưng đang tiến triển nhanh chóng (Oracle được viết vào năm 1979 !!, Sybase năm 1987). Giả sử hệ điều hành có thể làm đủ mọi thứ ưa thích vừa nhanh vừa an toàn thì không phải lúc nào cũng được. Các nhà cung cấp DBMS đã viết các thư viện I/O của riêng họ để giúp giảm khả năng họ sẽ không bị ảnh hưởng bởi các hệ điều hành quirks hoặc trở nên lỗi thời khi công nghệ tiến triển.
Điều này ít phổ biến hơn (MySQL, PostgreSQL, SQLite, v.v. không làm điều này) - ngay cả SQL Server đã chuyển một phần lớn quản lý trở lại Windows vì nhóm Windows đã làm việc chặt chẽ với SQL Server để tối ưu hóa khối lượng công việc DBMS.
an
Giữ kiểm soát chặt chẽ của toàn bộ tập tin dữ liệu cho phép các DBMS để đảm bảo rằng viết xảy ra khi nó muốn nó và không phải khi hệ điều hành cảm thấy như nó. Giữ bộ đệm dữ liệu của riêng họ đảm bảo rằng hệ điều hành sẽ không nghĩ rằng một số trang công việc xoay vòng cấp thấp có dữ liệu cơ sở dữ liệu quan trọng.
quán
Oracle, Sybase ASE, vv là hệ thống rất đắt mà rất phức tạp. Nếu bạn đã bỏ ra 10 triệu đô la cho việc cài đặt DBMS và nó chạy chậm (hoặc tệ hơn, dữ liệu bị hỏng!) Vì một số lỗi điên rồ trong bản sửa đổi hạt nhân hệ điều hành của bạn, bạn sẽ đổ lỗi cho ai? Nhà cung cấp DBMS. Việc điều khiển I/O, quản lý khóa, kiểm soát đồng thời, luồng, vv của bạn chắc chắn là cách khó để thực hiện - nhưng khi bạn hoàn toàn cần lặp lại, hành vi nhất quán từ DBMS của bạn trên một loạt các hệ điều hành bạn phải thực hiện hệ điều hành ra khỏi phương trình càng nhiều càng tốt.
Một lần nữa, như hệ điều hành đã trưởng thành và phát triển, rất nhiều các hệ thống mới đã cố gắng sử dụng hệ điều hành cấp tính năng càng nhiều càng tốt, nhưng ngay cả MySQL có một số hồ đệm mà bạn có thể cấu hình trong my.cnf
Vì vậy, tất cả ghi vào cơ sở dữ liệu phải chảy qua một semaphore phổ biến để chỉ viết 1 được thực hiện tại một thời điểm hoặc là có một số cách mà nó có nhiều ghi xử lý mở trên cùng một tệp? – Kibbee
Không, việc triển khai đúng nhưng không thực hiện có thể sử dụng một semaphore duy nhất cho mỗi hàng. Lưu ý rằng mặc dù bộ nhớ đệm được sử dụng rất nhiều bởi các công cụ cơ sở dữ liệu, do đó, có khả năng chỉ có một luồng duy nhất đẩy các trang bẩn vào đĩa, giống như cơ chế tệp trang của hệ điều hành. –
Tuy nhiên, những thứ như I/O/phân tán/thu thập I/O không đồng bộ chồng chéo có thể được sử dụng để có các hoạt động I/O đồng thời cho các phần khác nhau của cùng một tệp trên chuyến bay, vẫn chỉ sử dụng một luồng đơn. Các cơ chế chính xác được sử dụng phụ thuộc vào hệ thống, vì sự cân bằng sẽ khác nhau giữa các nền tảng –