Tại sao Windows / Linux không sử dụng Cơ sở dữ liệu quan hệ (RDBMS)?


32

Tại sao Windows / Linux không sử dụng cơ sở dữ liệu quan hệ ( RDBMS )?

Tôi biết họ sử dụng hệ thống tệp để lưu trữ tất cả dữ liệu nhưng bạn không nghĩ sử dụng cơ sở dữ liệu như chúng tôi sử dụng trong các trang web / ứng dụng web sẽ hiệu quả hơn?

Vui lòng giải thích về việc sử dụng hệ thống tệp qua cơ sở dữ liệu để lưu trữ.

Đây không phải là một bản sao của Khi sử dụng cơ sở dữ liệu nên được ưu tiên hơn khi phân tích dữ liệu từ một tệp văn bản? Tôi đang nói về các bối cảnh chỉ có hệ điều hành, và câu hỏi đó được khái quát.


32
Một hệ thống tập tin một cơ sở dữ liệu.

20
Bởi vì hệ thống tập tin là cần thiết để thực hiện các cơ sở dữ liệu.
Kilian Foth

16
Windows sử dụng một cơ sở dữ liệu, nó được gọi là "Đăng ký". Hay bạn có nghĩa là "cơ sở dữ liệu quan hệ"? Đó là một câu hỏi khác nhau.
Doc Brown

6
@ gnasher729 Hệ thống tệp là một loại cơ sở dữ liệu rất đặc biệt và như vậy chỉ tốt cho các loại dữ liệu cụ thể. Các loại dữ liệu khác được phục vụ tốt hơn với các loại cơ sở dữ liệu khác nhau (ví dụ: quan hệ).

6
@KilianFoth, không hẳn. Bạn có thể ghi vào một phân vùng đĩa thô (không thể so sánh với tệp OS).
Paul Draper

Câu trả lời:


60

Ngày nay, hầu hết các hệ thống quản lý cơ sở dữ liệu (ví dụ PostGreSQL , MongoDB , v.v.) đều lưu giữ dữ liệu của họ bên trong các tệp HĐH (trước đây, một số DBMS sử dụng phân vùng đĩa thô trực tiếp).

Trên các máy tính gần đây vẫn sử dụng đĩa cứng quay , đĩa rất chậm - liên quan đến CPU hoặc RAM - việc thêm một vài lớp phần mềm không liên quan. Công nghệ SSD có thể thay đổi một chút và một số hệ thống tệp được tối ưu hóa cho SSD.

Các tệp có mặt trong hầu hết các hệ điều hành nói chung vì lý do lịch sử và xã hội (cụ thể là trình biên dịch C và hầu hết các công cụ - trình soạn thảo, trình liên kết - muốn có tệp, do đó có vấn đề về gà và trứng) và vì có rất nhiều tệp rất tốt triển khai hệ thống .

BTW, một số cơ sở hệ thống thiết yếu có thể sử dụng cơ sở dữ liệu. Ví dụ trên Linux PAM có thể được cấu hình để sử dụng thông tin trong cơ sở dữ liệu (nhưng điều này hiếm khi được thực hiện trong thực tế). Ngoài ra, một số máy chủ thư có thể lưu trữ một số hoặc hầu hết dữ liệu của họ trong cơ sở dữ liệu (ví dụ Exim ).

Các tệp có độ trừu tượng thấp hơn một chút so với cơ sở dữ liệu, vì vậy chúng có thể dễ thực hiện hơn (vì lớp hệ thống tệp & VFS trong nhân Linux) và sử dụng nhanh hơn. Cụ thể, các thao tác trên tệp bị hạn chế hơn nhiều so với thao tác trên cơ sở dữ liệu. Trong thực tế, bạn có thể xem các tệp hoặc hệ thống tệp như một số cơ sở dữ liệu rất hạn chế!

Bạn có thể thiết kế một hệ điều hành mà không cần bất kỳ tập tin , nhưng với một số trực giao khác kiên trì máy móc thiết bị (ví dụ như có mỗi quá trình kiên trì, sau đó bạn không quan tâm nhiều một cách rõ ràng về lưu trữ, kể từ khi hệ điều hành đang quản lý nguồn lực dai dẳng). Điều này đã được thực hiện trong một số hệ điều hành học thuật (1) (và cả trong các máy Smalltalk và Lisp của những năm 1980, bằng cách nào đó trong Hệ thống IBM i , còn gọi là AS / 400 , và trong một số dự án đồ chơi được liên kết từ osdev), nhưng khi bạn thiết kế HĐH theo cách này, bạn không thể tận dụng nhiều công cụ hiện có (ví dụ: bạn cũng cần phải tạo trình biên dịch và giao diện người dùng của mình từ đầu, và đó là rất nhiều công việc).

Lưu ý rằng các hệ điều hành microkernel có thể không cần các tệp được cung cấp bởi các lớp kernel vì các hệ thống tệp chỉ là các máy chủ ứng dụng (ví dụ: trình dịch Hurd chạy trong vùng người dùng). Cũng xem cách tiếp cận đơn nhân trong MirageOS ngày nay

Linux (và có lẽ là Windows, vốn lấy hầu hết cảm hứng từ VMS & Unix ) cần các tệp để hoạt động. Ít nhất, chương trình init (chương trình đầu tiên được khởi động bởi kernel) phải là một tệp thực thi được lưu trữ trong một tệp (thường /sbin/init, nhưng nó có thể là systemd những ngày này) và (gần như) tất cả các chương trình khác được bắt đầu bằng execve (2 ) tòa nhà vì vậy phải được lưu trữ trong một tập tin. Tuy nhiên, FUSE cho phép bạn cung cấp ngữ nghĩa giống như tệp cho những thứ không phải tệp.

Cũng lưu ý rằng trên Linux (và có lẽ cả Windows, mà tôi không biết và chưa từng sử dụng) sqlite là một thư viện quản lý một số cơ sở dữ liệu SQL trong một tệp và cung cấp API cho điều đó. Người ta biết rằng Android (một biến thể của Linux) sử dụng rất nhiều tệp sqlite (nhưng nó vẫn có hệ thống tệp giống POSIX).

Đọc thêm về điểm kiểm tra ứng dụng (trong đó, trên nhiều hệ điều hành hiện tại, được triển khai để ghi trạng thái quá trình trong tệp). Bị đẩy đến mức cực đoan, cách tiếp cận đó không cần phải viết thủ công các tệp ứng dụng (mà chỉ để duy trì toàn bộ trạng thái quy trình bằng cách sử dụng máy móc kiểm tra).

Trên thực tế, câu hỏi thú vị là tại sao các hệ điều hành hiện tại vẫn sử dụng các tệp và câu trả lời là di sản, và lý do kinh tế và văn hóa (đáng buồn thay, hầu hết các ngôn ngữ lập trình và thư viện ngày nay vẫn muốn có tệp).


Lưu ý 1: Hệ điều hành học thuật bền bỉ bao gồm Lisaac & Grasshopper , nhưng các dự án học thuật này dường như không hoạt động. Nhìn vào http://tunes.org/ ; nó không hoạt động, nhưng đã nhận được rất nhiều cuộc thảo luận xung quanh các chủ đề như vậy.

Lưu ý 2: khái niệm về tệp đã thay đổi rộng rãi theo thời gian (xem câu trả lời này về trải nghiệm lập trình đầu tiên của tôi): MSDOS đầu tiên trên máy tính IBM của thập niên 1980 (không có thư mục!), VMS -on 1978 Vaxen - (có cả bản ghi cố định các tệp và tệp tuần tự, với hệ thống phiên bản nguyên thủy), các máy tính lớn của thập niên 1970 ( IBM / 370 với OS / VS2 MVS ) có một khái niệm rất khác nhau về các tệp và hệ thống tệp (đặc biệt là tại thời điểm chúng có tỷ lệ thời gian truy cập ổ cứng thời gian truy cập bộ nhớ lõi là vài nghìn - vì vậy vào thời điểm đó, đĩa chạy tương đối nhanh hơn ngày nay, ngay cả khi các đĩa ngày nay hoàn toànnhanh hơn so với thế kỷ trước, ngày nay tỷ lệ tốc độ CPU / đĩa là khoảng một triệu; nhưng bây giờ chúng tôi có SSD). Ngoài ra, các tệp ít hữu ích (hoặc thậm chí không) hữu ích khi bộ nhớ vẫn còn (như trên trống từ tính CAB500 , thập niên 1960; hoặc các máy tính trong tương lai sử dụng MRAM )


9
Cũng đáng chỉ ra rằng một số hệ thống tệp thực sự có một số tính năng RDBMS. Ví dụ: siêu dữ liệu tệp (siêu dữ liệu đặc biệt mở rộng) trong BeFS được lập chỉ mục bằng cây B + và trình quản lý tệp BeOS có công cụ tra cứu giống như SQL tìm kiếm siêu dữ liệu được lập chỉ mục để tìm tệp.
Greyfade

2
Tôi không dám đặt chúng trong câu trả lời của tôi, nhưng cả hai tunes.org & blog của J.Pitrat của thể mở rộng quan điểm của bạn về phần mềm và hệ điều hành.
Basile Starynkevitch

4
@greyfade: Hệ thống tập tin là cơ sở dữ liệu đối tượng. Không có hệ thống tệp nào tôi biết có khả năng trả lời các truy vấn quan hệ (ví dụ: các tệp có thời gian mod trong một phạm vi nhất định.) Bạn phải làm điều đó bằng cách truy vấn thời gian mod của tất cả các tệp và tự lọc. Một số hệ thống tệp thực hiện chính xác khi được sử dụng trực tiếp làm cơ sở dữ liệu đối tượng (lưu trữ hàng triệu tệp rất nhỏ, trong đó tên tệp là khóa), nhưng các hệ thống khác làm tốt với loại khối lượng công việc này.
Peter Cordes

3
@PeterCordes: BeFS đã làm điều đó. Bởi vì tất cả các siêu dữ liệu được lập chỉ mục B + cây, nó hỗ trợ các truy vấn phạm vi, ký tự đại diện, tham gia và các nội dung thú vị khác. Tôi nhớ đã nghe rằng Microsoft đã làm điều tương tự trong WinFS.
greyfade

4
PalmOS là một hệ điều hành khá chính thống không có hệ thống tập tin. Thay vào đó, nó có một cơ sở dữ liệu quan hệ được triển khai trực tiếp trên RAM / flash (phần cứng ban đầu không sử dụng bộ nhớ flash như iPhone ngày nay mà sử dụng RAM tĩnh được hỗ trợ bằng pin cho cả RAM và đĩa).
slebetman

23

Mặc dù đây là dựa trên quan điểm, tôi nghĩ nó chỉ là một tạo tác lịch sử khác. Các hệ điều hành ban đầu đã sử dụng một thiết kế hệ thống tệp đơn giản cho hiệu năng được liên kết chặt chẽ với các đặc điểm của phần cứng có sẵn tại thời điểm đó và nó cũng giống như vậy kể từ đó. Thật khó để thay đổi API đọc / ghi tệp cũ để có thêm API truy vấn / chèn giao dịch khi chúng được thiết lập.

Tất cả các hệ thống tệp hiện tại đều có yêu cầu phải tương thích ngược với các API cũ này.

Microsoft đã nghĩ về việc thay thế hệ thống tệp bằng một hệ thống dựa trên RDBMS , trong quá trình phát triển Longhorn . Đó là quá nhiều thay đổi để họ gỡ bỏ, nhưng bạn có thấy những nỗ lực của họ tiếp tục ở dạng Tìm kiếm Windows (trong đó RDBMS được sử dụng để lưu trữ một bản sao siêu dữ liệu) và các tính năng như hệ thống Filestream của SQL Server (trong đó một bảng cơ sở dữ liệu của dữ liệu tệp được hiển thị cho HĐH dưới dạng một thư mục thông thường cho phép cả Windows Explorer truy cập dữ liệu và các truy vấn SQL của cùng một dữ liệu).

Các hệ điều hành khác không có hệ thống tệp RDBMS. AS / 400 đã từng có những thứ này, mặc dù tôi chưa bao giờ biết đủ về chúng; Tôi nhớ nó xuất hiện kỳ ​​lạ như thế nào vào thời điểm đó). Tôi nghĩ các hệ thống máy tính lớn khác có cùng cách tiếp cận.


1
Nếu bộ nhớ phục vụ bạn có thể nghĩ đến UDB của DB2 trên OS / 400 hay còn gọi là i5 / OS (bây giờ được gọi là "IBM i"): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/ tựa
Brian Cline

1
Có, sẽ rất tuyệt khi BEGIN TRANSACTION / CAM KẾT về quyền truy cập tệp thay vì thực hiện "tìm với -exec". Độ cao của hệ thống tệp nguyên thủy cấp thấp đã chuyển sang adminland là tình cờ và sẽ đi theo cách của trình cắm lập trình. "Hệ thống tập tin" như một hệ thống quản lý siêu dữ liệu và lưu trữ tạm thời thích hợp (mặc dù việc giải thích nội dung bytestream vẫn nên để lại cho các lớp ứng dụng, nếu không sẽ xảy ra đau đầu)? Vâng, chúng tôi muốn!
David Tonhofer

12

Lý do thực sự là thiếu nhu cầu cho nó. Phân lớp cơ sở dữ liệu trên đầu các tệp, thay vì hợp nhất chúng, xử lý phần lớn các tình huống ít nhất cũng như một giải pháp hợp nhất với độ phức tạp giảm đáng kể. Trong một số tình huống mà những người khác đã đề cập, chúng tôi cũng đã xếp các phần của tệp lên trên cơ sở dữ liệu (chẳng hạn như cấu trúc quyền). Trong trường hợp đó, cơ sở dữ liệu quản lý các quyền đó đơn giản hơn đáng kể so với RDBMS thương mại.

Có những lợi thế để hợp nhất chúng, nhưng cho đến nay những điều đó đã được rất ít và đủ xa giữa đó là phong trào đang phát triển chậm. Hãy xem xét mức độ hiếm khi mọi người nói "Đưa cho tôi cột thứ 3 của mỗi hóa đơn tôi đã nhận được kể từ năm 2010 và tổng hợp chúng lại với nhau" hoặc "đừng để tôi xóa tệp này cho đến khi tôi xóa nó khỏi Excel bảng tính cũng được. "

Các hệ thống tệp có một vài lợi thế so với các cơ sở dữ liệu quan hệ giúp chúng hoạt động:

  • Họ đơn giản hơn nhiều. Đây là một vấn đề lớn khi bootstrapping máy tính. Ngay cả trên Android , nơi họ có RDBMS để lưu trữ, họ có những hình ảnh cũ đơn giản để quản lý quá trình tải khởi động ban đầu.
    • Nó dễ dàng hơn để xác định những hạn chế của họ. Trong một máy không giới hạn, RDBM cung cấp khá nhiều năng lượng. Tuy nhiên, trong thế giới hệ thống tập tin, có rất nhiều hạn chế bắt nguồn từ việc cố gắng nhanh khi được đặt trực tiếp lên trên một đĩa quay. Khó có thể chứng minh rằng một truy vấn RDBMS không vượt quá các giới hạn đó so với việc cung cấp các đảm bảo tương tự cho một hệ thống tệp.
  • Họ xử lý các cấu trúc phân cấp tốt hơn. Trong nhiều trường hợp, việc mọi người lưu trữ các tệp ở dạng phân cấp vẫn là điều tự nhiên. Trong RDBMSes, đó là một trường hợp đặc biệt. Hệ thống tệp tối ưu hóa cho trường hợp đặc biệt đó, RDBMS không.
  • Độ tin cậy. Việc chứng minh rằng hai lớp hoạt động độc lập sẽ dễ dàng hơn nhiều so với việc chứng minh rằng một hệ thống khổng lồ hoạt động hoàn hảo. Mảng RAID , tạp chí không an toàn trong thời gian mất điện và các tính năng nâng cao khác dễ thực hiện hơn trong một lớp bên dưới lớp xử lý những thứ như ACID hoặc ràng buộc khóa ngoài.

1
độ tin cậy: bạn có thể chạy DB trên đầu RAID giống như bạn có thể chạy hệ thống tệp trên thiết bị RAID, so với sử dụng đĩa trực tiếp. Ghi nhật ký cần phải được thực hiện bên trong hệ thống tập tin / DB (trừ khi bạn muốn cung cấp đảm bảo tính chính xác bằng cách vô hiệu hóa bộ đệm ghi và không bao giờ sắp xếp lại I / O. Tức là syncchế độ.) +1 cho tất cả các điểm khác của bạn, đặc biệt. hiệu suất bá đạo nhanh trong đó một tấn công cụ trong một thư mục con không làm chậm hiệu suất trong một thư mục con khác. Trừ khi mỗi thư mục hoặc tệp là một bảng khác nhau ...
Peter Cordes

độ tin cậy: các hệ điều hành IBM i series được thiết kế để đáng tin cậy hơn bạn có thể tưởng tượng, được thiết kế để sử dụng kiểu máy tính lớn. Các hệ thống phân cấp chỉ có ở đó do các giới hạn của hệ thống tệp, do đó MS muốn tìm kiếm sau này và các hoạt động DB không phải là hệ thống tệp hiện có. Hãy xem gmail như một ví dụ về cách bạn có thể có một hệ thống phân cấp mà không cần sử dụng hệ thống phân cấp!
gbjbaanb

3

Tôi nghĩ rằng các câu trả lời khác cung cấp một loạt các lý do là tại sao các hệ điều hành không dựa vào cơ sở dữ liệu quan hệ trong nội bộ / độc quyền vì vậy tôi sẽ chỉ chia sẻ một thông tin thú vị mà tôi từng vấp phải.

Rõ ràng, có những công nghệ cho phép bạn gắn cơ sở dữ liệu quan hệ dưới dạng hệ thống tệp khi việc sử dụng chúng là hợp lý. Oracle DBFS (Hệ thống tệp cơ sở dữ liệu) là một ví dụ. Đoạn trích từ tài liệu này giải thích lý do căn bản đằng sau nó khá tốt:

Hệ thống tệp cơ sở dữ liệu (DBFS) tận dụng các tính năng của cơ sở dữ liệu để lưu trữ tệp và điểm mạnh của cơ sở dữ liệu trong việc quản lý hiệu quả dữ liệu quan hệ, để thực hiện giao diện hệ thống tệp chuẩn cho các tệp được lưu trữ trong cơ sở dữ liệu. Với giao diện này, việc lưu trữ tệp trong cơ sở dữ liệu không còn giới hạn ở các chương trình được viết riêng để sử dụng BLOBCLOBgiao diện lập trình. Bây giờ các tệp trong cơ sở dữ liệu có thể được truy cập trong suốt bằng cách sử dụng bất kỳ chương trình hệ điều hành (HĐH) nào hoạt động trên các tệp.

Giải pháp cung cấp một bộ giao diện (máy khách dòng lệnh, thư viện mã) cho dữ liệu LOB được lưu trữ trong các bảng cơ sở dữ liệu. Điều này có thể được sử dụng trên các hệ điều hành Windows và Linux (mặc dù theo như tôi có thể nói, mức độ tích hợp khác nhau giữa chúng)

Các thành phần Oracle DBFS

Nguồn: docs.oracle.com

Theo tài liệu này, hệ thống tập tin nên có thể được sử dụng một cách minh bạch trên Linux

Trên Linux, dbfs_clientcũng có giao diện gắn kết sử dụng FUSEmô-đun hạt nhân trong Hệ thống tập tin trong không gian người dùng ( ) để thực hiện điểm gắn kết hệ thống tệp cung cấp quyền truy cập trong suốt vào các tệp được lưu trữ trong cơ sở dữ liệu và không yêu cầu thay đổi đối với nhân Linux. Nó nhận các cuộc gọi hệ thống tệp tiêu chuẩn từ FUSEmô-đun hạt nhân và chuyển chúng thành các cuộc gọi OCI sang các thủ tục PL / SQL trong Kho lưu trữ nội dung DBFS .

Do đó, câu trả lời cho câu hỏi của bạn là, nói chung, không có lý do gì để hệ điều hành sử dụng cơ sở dữ liệu quan hệ làm hệ thống tệp (và trong trường hợp các thành phần cốt lõi của HĐH, điều này thực sự sẽ gây rắc rối). Đồng thời có thể một người làm điều đó khi một số vấn đề gọi cho nó.


2

Chức năng chính của bất kỳ HĐH nào là tạo điều kiện cho các tương tác giữa các ứng dụng, phần cứng và người dùng.

Vậy .. tại sao HĐH Windows / Linux không sử dụng Cơ sở dữ liệu quan hệ (RDBMS)? Đây là một câu hỏi về tỷ lệ trong Kinh thánh, nhưng câu trả lời ngắn gọn là: Không có bất kỳ lợi ích thực sự nào có được từ việc sử dụng một cấu trúc phức tạp như rdbms như một hệ thống tệp.

"Quan hệ" là từ hoạt động trong "Cơ sở dữ liệu quan hệ" và hầu hết dữ liệu được lưu trữ trong một hệ thống tệp không liên quan đến dữ liệu khác. Các hệ thống tệp thường được triển khai dưới dạng cơ sở dữ liệu hạn chế, không phải là cơ sở dữ liệu quan hệ.


Có lẽ một câu hỏi tốt hơn sẽ là - tại sao các ứng dụng cần cơ sở dữ liệu thay vì chỉ đơn giản là lưu dữ liệu vào các tệp? Tôi chưa bao giờ tìm thấy một câu trả lời thỏa đáng cho câu hỏi này. Tất cả các lợi ích được cho là của cơ sở dữ liệu quan hệ có thể thu được bằng một tệp duy trì
Sridhar Sarnobat
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.