Việc sử dụng một máy chủ cơ sở dữ liệu có ý nghĩa nếu ứng dụng chỉ thực hiện mọi thứ cục bộ?


41

Tôi đã thấy một số ứng dụng về cơ bản là phần mềm ứng dụng chạy cục bộ vào hệ thống (vì vậy chúng không giao tiếp nhiều qua mạng). Các ứng dụng này dường như phụ thuộc vào máy chủ cơ sở dữ liệu để lưu trữ dữ liệu của họ.

Một ví dụ về một ứng dụng là Amarok (một trình phát nhạc phổ biến trên Linux). Tôi không biết liệu họ có còn làm điều này không, nhưng tôi nhớ đã có lúc cài đặt Amarok có nghĩa là bạn phải cài đặt máy chủ MySQL và chạy nó ở chế độ nền mọi lúc.

Lợi thế của việc sử dụng máy chủ để lưu trữ cục bộ so với sử dụng giải pháp SQL nhúng nhỏ hơn như sqlite là gì? Tôi đang nói về phần mềm ứng dụng nói chung, không nhất thiết phải là amarok (đó chỉ là một ví dụ). Có bất kỳ tình huống trong đó sử dụng một máy chủ cơ sở dữ liệu có ý nghĩa so với một cơ sở dữ liệu nhúng?


4
Có một cơ sở dữ liệu có thể rất quan trọng. Có cơ sở dữ liệu trong quá trình hoặc cơ sở dữ liệu quy trình riêng biệt là một lựa chọn / chi tiết triển khai.
9000

2
Tôi hiểu điều đó. Câu hỏi là về lý do tại sao bạn chọn một cơ sở dữ liệu quy trình riêng biệt (như máy chủ mysql) trên cơ sở dữ liệu trong quá trình (như SQLite) cho các ứng dụng cục bộ.
9a3eedi

Câu trả lời:


29

SQLite cung cấp một danh sách khá tốt về thời điểm sử dụng hay không so với các lựa chọn thay thế:

https://www.sqlite.org/weaverouse.html

Dòng tóm tắt này nắm bắt trường hợp sử dụng SQLite cực kỳ tốt theo kinh nghiệm của tôi:

SQLite không cạnh tranh với cơ sở dữ liệu máy khách / máy chủ. SQLite cạnh tranh với fopen ().

Bài viết mở rộng ở độ dài về điểm này. Nó cũng có một phần có tiêu đề "Các tình huống trong đó RDBMS của máy khách / máy chủ có thể hoạt động tốt hơn". Tóm lại, chúng là:

  • Ứng dụng Máy khách / Máy chủ : nhiều người dùng qua mạng.
  • Trang web có khối lượng lớn : viết chuyên sâu hoặc đọc đủ chuyên sâu để yêu cầu shending.
  • Bộ dữ liệu rất lớn : lớn hơn có thể được lưu trữ hợp lý trên một đĩa.
  • Đồng thời cao : đặc biệt là viết đồng thời.

@ Chín Trả lời, mặc dù nó không phù hợp với câu hỏi ban đầu của bạn? Nhân tiện, tôi đã đưa ra câu trả lời này cho một lý do chính xác.
Doc Brown

@DocBrown: Các trường hợp cụ thể mà bạn nên sử dụng RDBMS của máy khách / máy chủ là [xem câu trả lời]; cho mọi thứ khác SQLite hoạt động tốt. Tôi không chắc chắn những gì không rõ ràng trong đó, vì vậy hãy thoải mái chỉnh sửa câu trả lời nếu bạn tin rằng nó cần thiết.
Denis de Bernardy

Câu hỏi ban đầu là về các trường hợp cụ thể trong đó cơ sở dữ liệu ac / s có ý nghĩa nếu ứng dụng chỉ thực hiện mọi thứ cục bộ (trích dẫn từ tiêu đề) hoặc sử dụng máy chủ để lưu trữ cục bộ (trích dẫn từ văn bản câu hỏi). Bốn kịch bản ở trên trái ngược hoàn toàn với kịch bản đó (hai kịch bản đầu tiên) hoặc rất khó xảy ra hoặc không phổ biến như các kịch bản "cục bộ" (hai kịch bản thứ hai). Vì vậy, những gì bạn viết không sai, nhưng nó không phù hợp với câu hỏi.
Doc Brown

@DocBrown - và câu trả lời ngắn gọn là: nó không có ý nghĩa gì trừ khi bạn xử lý các tập dữ liệu ngoại cỡ hoặc cần ghi đồng thời. (Hoặc, vì lý do rõ ràng, cần một thứ gì đó mà SQLite không cung cấp.) Một lần nữa, hãy thoải mái chỉnh sửa câu trả lời nếu điểm đó không rõ ràng với bạn.
Denis de Bernardy

Chà, nếu bạn thực sự nghĩ rằng danh sách đó đã hoàn thành (và vì vậy hãy đưa ra một tuyên bố ẩn rằng đối với kịch bản cục bộ, việc sử dụng máy chủ C / S DB không có ý nghĩa gì), thì tôi không đồng ý và tôi không nghĩ mình có thể cải thiện câu trả lời của bạn bằng cách thêm một số làm rõ.
Doc Brown

28

Ngay cả đối với một hệ thống duy nhất có một người dùng, máy chủ cơ sở dữ liệu "thực" có ý nghĩa:

  1. Nó sử dụng một ngôn ngữ quen thuộc ( SQL ). SQLite sử dụng SQL, nhưng một số cơ sở dữ liệu nhúng (ví dụ: cơ sở dữ liệu đối tượng , NoQuery ) không sử dụng SQL. Những người có xu hướng có một đường cong học tập cao hơn bởi vì chúng ít phổ biến hơn.
  2. Nó cung cấp tính toàn vẹn tham chiếu, các ràng buộc, kích hoạt, vv mà các sản phẩm như SQLite có thể không cung cấp hoặc ít nhất là không cung cấp đầy đủ.
  3. Bằng cách nhắm mục tiêu cơ sở dữ liệu mạng tuân thủ ACID nhiều người dùng thực sự , ứng dụng có tùy chọn làm việc trong một kịch bản máy trạm / người dùng đơn hoặc như một ứng dụng được lưu trữ nhiều người dùng, sử dụng cùng một cơ sở mã .
  4. Người dùng có khả năng kiểm tra dữ liệu ngoại tuyến bằng các công cụ tiêu chuẩn (ví dụ: SQL Developer, MySQL Workbench, SQL Server Management Studio), tải hoặc sao lưu dữ liệu bằng các công cụ đó, v.v. Mặc dù có thể làm như vậy với nhiều cơ sở dữ liệu nhúng khác nhau các loại, mọi người có thể quen thuộc hơn với các công cụ từ thế giới cơ sở dữ liệu C / S.

Hạn chế chính là cần cài đặt và bảo trì phần mềm máy chủ cơ sở dữ liệu, điều này hơi phức tạp đối với người dùng không có kỹ thuật (và thậm chí nhiều người dùng kỹ thuật). Các hệ điều hành như Linux giúp việc này trở nên dễ dàng hơn: Tôi có PostgreSQL và MySQL chạy trên hệ thống Linux của tôi. Tôi đã cài đặt các ứng dụng được nối với chúng mà không có sự tương tác nào từ phía tôi.


9
Trên thực tế, có một hệ thống cơ sở dữ liệu (cụ thể là Sybase SQL ở mọi nơi) với sự hỗ trợ SQL đầy đủ, tính toàn vẹn tham chiếu, ACID, các thủ tục được lưu trữ, không yêu cầu thiết lập máy chủ hoặc cài đặt như một dịch vụ khi chạy trong cấu hình cục bộ (mặc dù có thể thiết lập cho một môi trường nhiều người dùng). Tôi không biết bất kỳ hệ thống cơ sở dữ liệu nào khác có các thuộc tính này, nếu ai đó biết, tôi sẽ quan tâm.
Doc Brown

3
@DocBrown IIRC MS SQLServer Compact cung cấp cho bạn điều này vì nó là một dll, mặc dù LocalDB có lẽ là lựa chọn tốt hơn - nó không yêu cầu cài đặt như một dịch vụ mặc dù yêu cầu quyền quản trị.
gbjbaanb

5
Để thêm vào thảo luận về tính hợp lệ của nhược điểm - ngoài SQLite đã được đề cập một cách tò mò trong câu trả lời, một số cơ sở dữ liệu không phải là SQL và các hệ thống giống như cơ sở dữ liệu, ví dụ như OrientDB, Solr và các hệ thống khác, có hỗ trợ nhúng chuyên dụng .
mikołak

14
SQLite cung cấp tính toàn vẹn tham chiếu (mặc dù nó cần được bật) và các ràng buộc cơ bản. Nó cũng nhanh hơn đáng kể so với hầu hết các máy chủ nếu được sử dụng đúng cách. Nhược điểm chính của nó so với máy chủ là nó là một nhà văn.
Jan Hudec

2
@DocBrown: Cơ sở dữ liệu nhúng của Firebird cung cấp hỗ trợ SQL đầy đủ, bao gồm tính toàn vẹn tham chiếu, đảm bảo ACID, procs được lưu trữ và kích hoạt. Nó không được sử dụng để hỗ trợ nhiều kết nối đồng thời vào cơ sở dữ liệu nhúng và tôi không chắc liệu giới hạn đó có còn hay không, nhưng toàn bộ bộ tính năng SQL đã có.
Mason Wheeler

21

Tôi nghĩ rằng nó phải làm với quán tính.

Amarok dựa trên XMMS từ năm 1997. Để có khả năng cơ sở dữ liệu tốt, bạn phải sử dụng máy chủ, vì nó mạnh hơn rất nhiều so với các giải pháp dựa trên tệp, mà không có nghĩa là có khả năng cơ sở dữ liệu tốt.

Sự phổ biến sắp tới và ngày càng phổ biến của các cơ sở dữ liệu nhúng cục bộ tốt như SQLlite là một cái gì đó khá gần đây.


Từ những gì tôi nhớ, AmaroK 1 (có thể dựa trên XMMS) không phụ thuộc vào máy chủ cơ sở dữ liệu. Đó là Amarok 2, được phát hành với KDE4, đã giới thiệu sự phụ thuộc và vào thời điểm đó, tôi thấy rất lạ là họ sẽ yêu cầu tôi cài đặt MySQL và giữ cho nó chạy trong nền
9a3eedi

10

Tính năng phân biệt đối xử quan trọng nhất là đồng thời .

Nếu bạn chỉ có một ứng dụng chạy trong một phiên bản cho người dùng, giải pháp nhúng (cho dù là sqlite hoặc một số lưu trữ đối tượng) thường là OK.

Tuy nhiên, nếu bạn có nhiều trường hợp cần thao tác cơ sở dữ liệu đồng thời, bạn cần phải có một máy chủ để đồng bộ hóa nó. SQLite chỉ cho phép viết một lần, trong toàn bộ cơ sở dữ liệu và hầu hết các giải pháp nhúng khác cũng vậy. Và nếu bạn thậm chí có nhiều ứng dụng, bạn có thể cần đặc tả ràng buộc chi tiết hơn mà các giải pháp nhúng thường không cho phép.


5

Nhiều câu trả lời khác nói về đồng thời là một lợi thế, nhưng cũng vì db đang chạy như một máy chủ, cơ sở dữ liệu có thể chạy các tác vụ mà không cần ứng dụng chạy. Đây có thể là bảo trì, sao lưu, đồng bộ hóa với máy chủ khác hoặc bất kỳ tác vụ theo lịch trình.

Nếu bạn cảm thấy ứng dụng của mình có thể biến thành ứng dụng khách / máy chủ, bạn có thể muốn bắt đầu bằng cách sử dụng RDBMS từ đầu thay vì chuyển nó qua sau.

Tôi không biết liệu ví dụ đưa ra có tận dụng điều này hay không.


2

Trừ khi bạn đang chạy một hệ thống nhúng với bộ nhớ và cpu thấp, tôi không nghĩ rằng việc chạy một máy chủ trên nền sẽ gây hại cho bạn.

Chạy một máy chủ cơ sở dữ liệu cục bộ là tốt. Cơ sở dữ liệu có nghĩa là để truy cập và thao tác dữ liệu. Truy cập mạng là một lợi thế, có thể cần hoặc không cần thiết. Có một số công cụ khoa học và kỹ thuật làm điều này.

Giả sử bạn đang sử dụng dữ liệu trên ứng dụng cục bộ. Tại sao bạn không nên sử dụng cơ sở dữ liệu? trái ngược với những gì?


Nếu tôi triển khai một ứng dụng cho người dùng bình thường (giả sử là một trình phát nhạc như AmaroK), tôi sẽ nghĩ rằng việc họ cài đặt máy chủ MySQL và chạy nó trong nền là một yêu cầu hệ thống hơi quá và sẽ là thứ người dùng sẽ không thích. Nhưng tôi đoán nó phụ thuộc vào ứng dụng. Điều này trái ngược với việc sử dụng một cái gì đó như SQLite.
9a3eedi

2

Nó phụ thuộc vào sự trừu tượng hóa dữ liệu của bạn và không gian ứng dụng tổng thể, yêu cầu quản lý truy cập, khoản đầu tư bạn đang lên kế hoạch bảo trì dữ liệu, mức độ khẩn cấp của nguyên mẫu bắt buộc, nơi bạn đang ở trong đường cong học tập, v.v.

Nếu bạn muốn đảm bảo cơ sở dữ liệu được tích hợp chặt chẽ vào một ứng dụng không yêu cầu quyền truy cập từ các ứng dụng khác, hãy tạo các đảo cơ sở dữ liệu nhúng. Việc triển khai lưu trữ web Mozilla Firefox với SQLite có thể được đưa ra làm ví dụ.

Nếu bạn cần hiệu quả cao hơn với dữ liệu hạn chế, lựa chọn thiết kế Cơ sở dữ liệu trong bộ nhớ là thích hợp hơn.

Mặt khác, nếu bạn có nhiều ứng dụng chạy nhiều truy vấn trên cùng một dữ liệu và nó yêu cầu cấu trúc lưu trữ dữ liệu tốt hơn để tối ưu hóa hiệu suất, thì cần phải có DBMS tập trung. Tôi hoàn toàn thích nó cho nghiên cứu khoa học, khi nó đòi hỏi lượng dữ liệu khổng lồ và thời gian phản hồi truy vấn sẽ tác động mạnh mẽ đến trải nghiệm người dùng nói chung.

Đối với trường hợp Amarok, tôi đoán đó là một lựa chọn DBMS nguồn mở tại thời điểm đó, trước khi họ chọn đường dẫn của cơ sở dữ liệu nhúng.

Nếu có một định nghĩa hệ thống cụ thể trong tay của bạn, nó sẽ dễ dàng hơn để cân và nhược điểm.

V / r, Umut

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.