Lưu trữ hình ảnh trong cơ sở dữ liệu, hoặc trong các tệp có liên kết cơ sở dữ liệu?


22

Có thích hợp để lưu trữ các tập tin hình ảnh trong cơ sở dữ liệu? Hoặc sẽ tốt hơn nếu chỉ lưu trữ đường dẫn của tệp trong cơ sở dữ liệu, trong khi vẫn giữ tệp đó trên máy chủ?

Có phương pháp nào khác để làm điều này đúng không?

Câu trả lời:


22

Tôi thực sự khuyên bạn nên lưu trữ hình ảnh trong hệ thống tập tin chứ không phải trong cơ sở dữ liệu.

Lưu trữ hình ảnh trong cơ sở dữ liệu có một số nhược điểm:

  • Cơ sở dữ liệu có thể phát triển lớn bất ngờ. Đôi khi không gian là một vấn đề. Ví dụ với SQLServer express, bạn có giới hạn 4GB.

  • Di chuyển dữ liệu có thể trở thành một nỗi đau, ví dụ nếu bạn chuyển từ SQLServer sang Oracle

  • Các truy vấn có thể trở nên rất chậm và bạn sẽ có tải cơ sở dữ liệu cao

  • Khả năng tương tác với các ứng dụng khác sẽ tốt hơn nếu hình ảnh trên hệ thống tập tin và các ứng dụng khác sử dụng một cơ sở dữ liệu khác. Bạn cũng có thể truy cập chúng trực tiếp và không cần các công cụ cơ sở dữ liệu.

  • Hiệu suất tệ hơn nói chung

  • Có lẽ bạn sẽ phải tạo các tệp tạm thời khi truy xuất hình ảnh từ cơ sở dữ liệu. Điều đó là không cần thiết.

Những nhược điểm này vượt xa chi phí giữ đường dẫn đến hình ảnh được lưu trữ trong cơ sở dữ liệu được đồng bộ hóa với hệ thống tệp. Chỉ có một vài trường hợp đặc biệt trong đó tốt hơn là lưu trữ hình ảnh trong cơ sở dữ liệu.


11

Nghiên cứu về SQL Server 2005 và hệ thống tệp NTFS (Microsoft) để so sánh hiệu suất CRUD: Với BLOB hoặc không với BLOB . Nghiên cứu này cũng được thực hiện trong một ứng dụng web. Bạn đã liệt kê một cơ sở dữ liệu khác (MySQL) và tôi sẽ cho rằng bạn không sử dụng Windows Server cho trang web PHP của mình, vì vậy sẽ rất thú vị nếu ai đó đã thực hiện một nghiên cứu tương tự về các công nghệ khác nhau.

Hóa ra nó phụ thuộc vào kích thước của các tập tin. SQL Server ưu tiên (tốt hơn gấp 2 lần) các đốm màu từ 256K trở xuống và hệ thống tệp ưu tiên các tệp 1MB +. Các hệ thống tệp trong nghiên cứu này xử lý phân mảnh tốt hơn cơ sở dữ liệu, vì vậy nếu bạn liên tục cập nhật các tệp này hoặc hệ thống này phát triển theo thời gian, phân mảnh sẽ là một yếu tố lớn hơn mà hệ thống tệp sẽ thực hiện công việc tốt hơn.

Bạn cần xác định mức độ trách nhiệm của trang web đối với việc duy trì các tệp này. Nếu bạn đang xây dựng một trang web cho các đại lý yêu cầu bảo hiểm để tải lên hình ảnh về một vụ tai nạn, tốt hơn hết bạn nên kiểm soát giao dịch và đảm bảo rằng các tệp đó nằm trên máy chủ. Cơ sở dữ liệu tốt làm điều này cho bạn, vì vậy là nhà phát triển, bạn đã thêm áp lực.

Sao chép, sao lưu, phục hồi thảm họa, phân mảnh, dung lượng đĩa còn lại và hiệu suất theo thời gian nên được xem xét trong quá trình thiết kế. Đây chỉ là một nghiên cứu về phiên bản SQL Server trước đó và giống như các nhà sản xuất cơ sở dữ liệu khác, tôi đoán việc xử lý các tệp lớn và nhị phân là một lĩnh vực cạnh tranh lớn.


Bạn cũng có thể muốn xem xét các giải pháp tích hợp. Ví dụ: trên SQL Server có FILESTREAMRemote Blob Store .
Fernando Correia

4

Nếu bạn sắp có một số lượng lớn hình ảnh, việc lưu trữ chúng trong cơ sở dữ liệu có thể loại bỏ các vấn đề với việc hết các nút ở cấp hệ thống tệp.

Tuy nhiên, vấn đề này sẽ được giải quyết tốt nhất bằng cách sử dụng một hệ thống tệp phù hợp hơn và bất kỳ biện pháp nào được khuyên dùng với hệ thống tệp đó trong tổ chức.

Mặt khác, lưu trữ hình ảnh trong cơ sở dữ liệu là một sự lãng phí hoàn toàn tài nguyên. Lưu trữ đường dẫn như bạn đã nói.

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.