Tại sao SQL không phổ biến trong các ứng dụng máy tính để bàn lớn?


28

Là một nhà phát triển phần mềm, tôi đã làm việc trên các dự án từ các ứng dụng nhỏ tại nhà đến các ứng dụng doanh nghiệp cỡ trung bình. Trong gần như mọi dự án tôi đã sử dụng một cơ sở dữ liệu hoặc hối tiếc vì đã chọn không sử dụng nó ngay từ đầu.

Bây giờ, tôi đang tự hỏi một vài điều về cơ sở dữ liệu và cách sử dụng chúng trong các ứng dụng chung:

  • Tại sao Windows không sử dụng bất kỳ cơ sở dữ liệu SQL "trung tâm" nào? Ví dụ:
    • Lỗi Báo cáo dữ liệu được lưu trữ trong một loạt các tệp,
    • Windows Update lưu trữ mọi thứ trong các tệp phẳng,
    • Bộ nhớ cache biểu tượng được lưu trữ trong một tệp duy nhất rất lạ mà dường như không được truy cập thông qua SQL, v.v.
  • Tại sao nhiều ứng dụng lớn tránh sử dụng cơ sở dữ liệu? Ví dụ: Microsoft Outlook sẽ không đạt được bằng cách sử dụng cơ sở dữ liệu thực tế thay vì phát minh lại bánh xe bằng cách có định dạng riêng cho các tệp .pst và lưu trữ một số dữ liệu trong sổ đăng ký?

Nếu cơ sở dữ liệu thêm một lớp bổ sung phức tạp tổng thể và mất hiệu năng nhỏ, thì đó là một lợi thế rất lớn của việc làm cho mã đơn giản hơn trong hầu hết các trường hợp, đặc biệt là khi lưu trữ các khối dữ liệu nhỏ có tổ chức thay vì nhị phân lớn dòng suối. Vậy tại sao rất ít sản phẩm thực sự sử dụng cơ sở dữ liệu? Có lẽ ứng dụng duy nhất tôi biết thực sự sử dụng cơ sở dữ liệu Sqlite là Firefox và có thể là Microsoft Exchange (nhưng ứng dụng cuối cùng không phải là ứng dụng dành cho máy tính để bàn)?

Ngoài ra, sẽ không có một bộ ứng dụng nào, như Microsoft Office hay Microsoft Expression, được hưởng lợi từ việc có cơ sở dữ liệu SQL hợp nhất , giúp triển khai các ứng dụng dễ dàng hơn, cập nhật / nâng cấp dữ liệu, chia sẻ dữ liệu giữa các ứng dụng đó, để tạo bản sao lưu v.v.


4
Nói cho nền tảng của riêng bạn. ;) Nhiều ứng dụng Mac / iPhone sử dụng CoreData, thường sử dụng cơ sở dữ liệu SQLite để lưu trữ.
mipadi

8
Cơ sở dữ liệu cũng chỉ là "một loạt các tập tin". Tôi tranh luận rằng tất cả các ví dụ bạn đã trình bày trong cơ sở dữ liệu thực tế, không phải là cơ sở dữ liệu quan hệ có thể truy vấn SQL.
Allon Guralnek

8
Theo cơ sở dữ liệu, ông có nghĩa là cơ sở dữ liệu quan hệ.
Olivier Jacot-Descombes

Câu trả lời:


20

1) Nói chung, chi phí hoạt động của RDBMS đầy đủ là quá lớn và sẽ tăng thêm tải không cần thiết cho hệ thống và độ phức tạp.

Có một cài đặt làm cho cuộc sống của bạn trở thành một nhà phát triển dễ dàng hơn nhưng làm cho cuộc sống của chủ sở hữu máy trở nên tồi tệ hơn vì máy của họ có thể chạy chậm hơn và có nhiều vấn đề hơn. Trong các cuộc đối đầu giữa nhà phát triển và người dùng, người dùng hầu như luôn luôn phải giành chiến thắng.

2) Nhiều cửa hàng dữ liệu có các nhu cầu cụ thể không được đáp ứng bởi một cái gì đó như SQL Server Express.

Ví dụ, các bản ghi lỗi nên được ghi vào điều đơn giản nhất có thể để tối đa hóa khả năng ghi sẽ xảy ra và dữ liệu sẽ có sẵn. SQL Server sẽ không bao giờ đơn giản như vậy.

Đối với các ứng dụng phức tạp hơn, đối số có xu hướng xoay quanh việc tối ưu hóa cho các trường hợp người dùng rất cụ thể - các tệp phẳng có thể nhanh như chớp.


5
Tôi không nghĩ anh ta có nghĩa là loại cơ sở dữ liệu mà bạn cần cài đặt toàn bộ máy chủ. SQLite hoạt động mà không cần máy chủ và phổ biến rộng rãi trong các ứng dụng nguồn mở.
nguyệt quế

@Laurent - nếu anh ta không làm vậy thì tại sao anh ta đánh dấu nó là câu trả lời được chấp nhận khi anh ta có thể chấp nhận câu trả lời SQL Lite dưới đây?
Jon Hopkins

30

Nhiều ứng dụng nhúng SQLite . Trích dẫn từ trang web của họ:

SQLite là một thư viện phần mềm thực hiện một công cụ cơ sở dữ liệu SQL giao dịch khép kín, không cấu hình, không cấu hình. SQLite là công cụ cơ sở dữ liệu SQL được triển khai rộng rãi nhất trên thế giới. Mã nguồn cho SQLite nằm trong miền công cộng. ".

Bạn chỉ cần sử dụng một trong các API có sẵn, tạo cơ sở dữ liệu, bảng, v.v. và công cụ SQL sẽ lưu trữ mọi thứ trong tệp nhị phân mà bạn có thể đặt ở bất kỳ đâu trong hệ thống tệp của người dùng. Trên hết, đó là FLOSS.


23

Windows vận chuyển và sử dụng một công cụ cơ sở dữ liệu có tên Extensible Storage Engine (ESE) .

ESE được Active Directory, Exchange Server, Windows Mail và Desktop Search sử dụng trong số nhiều ứng dụng và dịch vụ Windows khác.

Để phát triển, các trình bao bọc ESE nguồn mở tồn tại:

Với ESE vận chuyển với mọi phiên bản Windows hiện đại, bạn không phải lo lắng về việc triển khai cơ sở dữ liệu. Về mặt kiến ​​trúc ESE hoàn thành vai trò tương tự với các cơ sở dữ liệu nhúng như SQLite.


Có lẽ vì không thể quảng bá tính năng này !! ?? Làm thế nào có thể là tôi đã phát triển gần như độc quyền với các công nghệ của Microsoft kể từ những năm 90 và tôi chưa bao giờ nghe về điều này? Việc thiếu một mặt trước tốt có thể là một lý do khác. Từ Wikipedia: "Trong nhiều năm, nó là một API riêng chỉ được Microsoft sử dụng, nhưng từ đó đã trở thành một API được xuất bản mà bất kỳ ai cũng có thể sử dụng." Ngoài ra: "API JET Blue được xuất bản năm 2005 để tạo điều kiện cho việc sử dụng bởi số lượng ứng dụng và dịch vụ ngày càng tăng cả trong và ngoài Windows."
Mike hỗ trợ Monica

8

Cơ sở dữ liệu quan hệ không phải là cấu trúc dữ liệu hiệu quả nhất cho mọi miền. Rất nhiều ứng dụng máy tính để bàn sử dụng cơ sở dữ liệu nhúng, bạn không thể dễ dàng biết chúng đang làm điều đó nếu tất cả những gì bạn thấy là một vài tệp dữ liệu.


Đó là vấn đề: tại sao không sử dụng Microsoft SQL Server (Express? Hoặc giấy phép đặc biệt cho một máy chủ SQL duy nhất được cài đặt sẵn trên mọi nền tảng Windows?) Thay vì cơ sở dữ liệu nhúng (không phải SQL?) Hoặc định dạng nhị phân ngoài trái đất như Microsoft Outlook. ?
Arseni Mourzenko

Bởi vì như ông nói SQL không tối ưu cho mọi thứ. Nhiều kho lưu trữ dữ liệu cụ thể của ứng dụng sẽ được anh tối ưu hóa cao cho một tác vụ và kết quả là sẽ nhanh hơn SQL với dấu chân nhỏ hơn.
Jon Hopkins

3
@MainMa: Bây giờ bạn vừa thêm một phụ thuộc bổ sung: người dùng phải cài đặt và chạy SQL Server. Điều này không tầm thường. Nếu một SQL Server localhost đặc biệt được cài đặt sẵn trên tất cả các máy tính Windows, nó có thể khác, nhưng điều đó không xảy ra.
David Thornley

SQLServer Compact rất dễ cài đặt: chỉ cần sao chép một vài tệp.
MarkJ

7

Tại sao Windows không sử dụng bất kỳ cơ sở dữ liệu SQL "trung tâm" nào?

Trên thực tế, ý tưởng này đã được phát triển tại Microsoft một thời gian. Nó được gọi là WinFS . Đây là một công nghệ hấp dẫn và có sẵn cho các thuê bao MSDN. Vài ngày tới, tôi sẽ cài đặt nó trên máy ảo và chơi xung quanh nó.


2
Tôi vẫn nhớ WinFS là "điều lớn tiếp theo" cho Windows (vào thời điểm đó) Longhorn, trở lại khi tôi vẫn biết cách sử dụng PC. :-)
Denis de Bernardy

6

Cơ sở dữ liệu cung cấp tính linh hoạt và giống như mọi tính năng gần như chắc chắn có một chi phí. Nếu một tệp phẳng sẽ hoạt động, thì bạn có thể cho rằng không ai sẽ cần truy vấn dữ liệu theo những cách không dự đoán được như trong một báo cáo đột xuất.

Cơ sở dữ liệu cũng làm tốt công việc xử lý nhiều kết nối / đầu vào. Một lần nữa, nếu đây không phải là một yêu cầu cho ứng dụng máy tính để bàn của bạn, tại sao lại thêm độ phức tạp bổ sung? Khác với giao diện người dùng / cài đặt thực tế của chính Outlook, có bao nhiêu ứng dụng hoặc người dùng khác đang cố ghi vào tệp Outlook trên máy tính của bạn?

Sẽ dễ dàng hơn nếu tất cả dữ liệu nằm trong cơ sở dữ liệu quan hệ theo quan điểm "Tôi muốn có thể truy vấn tất cả dữ liệu theo bất kỳ cách nào tôi thấy phù hợp với một ngôn ngữ như SQL", nhưng điều này hiếm khi được ưu tiên với nhiều ứng dụng.

Hầu hết các lập trình viên sẽ nhìn vào nó từ:

  • Tôi biết ứng dụng này giả sử phải làm gì, đây là tất cả những gì nó được cho là phải làm

  • ứng dụng của tôi là quyền lợi duy nhất sẽ truy cập và / hoặc thao túng những dữ liệu này

  • một cấu trúc tệp đơn giản của thiết kế của riêng tôi sẽ hoạt động

  • cho ít nhất một ứng dụng tôi muốn tránh dựa vào mã của người khác và có toàn quyền kiểm soát.


1
+1. Bạn nói đúng: không có nhiều kết nối cho các ứng dụng máy tính để bàn (trong hầu hết các trường hợp), điều này làm giảm lợi ích của cơ sở dữ liệu SQL.
Arseni Mourzenko
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.