2010-03-16 62 views
6

Tôi đang viết một ứng dụng php và đã tự hỏi nếu đó là một ý tưởng tồi để lưu trữ các tập tin hoàn chỉnh trong cơ sở dữ liệu. Các tệp phải có kích thước khoảng 100-200kb chủ yếu là tệp văn bản (txt, doc, docx, v.v.) hoặc các tệp hình ảnh nhỏ. Hay nó chỉ là một ý tưởng sai lầm đơn giản?Ưu điểm và nhược điểm của việc lưu trữ tệp trong cơ sở dữ liệu là gì?

+2

Bạn có thể muốn kiểm tra này: Lưu trữ hình ảnh trong DB - Yea hoặc Nay? (http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay) –

+0

MongoDB có một số tính năng thú vị để lưu trữ tệp. – benlumley

+0

@Daniel Vassallo: thú vị, tôi không nghĩ rằng tôi sẽ lưu trữ ở đó nhiều hình ảnh và chắc chắn nó sẽ không dành cho bất kỳ trang web lưu lượng truy cập cao nào. – Gabriel

Trả lời

2

Pro: có độ di động cao.

Con: bạn không thể làm bất cứ điều gì với nó bằng cách sử dụng SQL (lập chỉ mục, tìm kiếm, vv) và bạn sẽ cần phải thêm siêu dữ liệu trong các cột khác (loại nội dung, tên tệp, v.v.) để cải thiện khả năng sử dụng và bảo trì .

Tôi sẽ không làm điều đó. Hệ thống tập tin đĩa là hệ thống phù hợp hơn cho những nhiệm vụ đó.

+0

Tôi đang hướng đến tính di động, vì các tệp đó sẽ không được chỉnh sửa theo bất kỳ cách nào, có thể chúng sẽ bị xóa nhưng đó là nó. – Gabriel

1

Cá nhân, tôi thích ý tưởng, đặc biệt nếu DB lưu trữ chúng được nén hoặc bạn nén chúng theo cách thủ công.

Trong số những thứ khác, điều đó có nghĩa là bạn không cần phải lo lắng về tên duy nhất cho tệp, điều này tiết kiệm rất nhiều sự phức tạp.

+0

Tuy nhiên, bạn vẫn cần xác định chúng duy nhất trong cơ sở dữ liệu. – Cameron

+0

Thật vậy. Tôi đã không nghĩ đến trường hợp tầm thường chỉ lưu trữ tệp trong cơ sở dữ liệu; Tôi giả định một số "siêu dữ liệu" như tên người dùng, ngày tháng, tên tệp hoặc các loại tương tự. –

2

Nó thực sự phụ thuộc vào tình huống?

  • Cách các tệp sẽ là được phân phối?
  • Các tệp được sử dụng độc lập hay là chúng có phải là một phần của hệ thống có thể có ủy quyền riêng và logic xác thực không?
  • Làm cách nào để chiến lược sao lưu của bạn là ?
  • Bạn có cần sao chép không?
  • Bạn có cần hỗ trợ nhiều I/O không?
  • Điều gì về bộ nhớ đệm?

Có nói rằng, tôi sẽ dựa vào một số loại hệ thống tệp cho tài liệu trên cơ sở dữ liệu.

3

Ưu điểm:

  1. Không cần phải lo lắng về quyền ghi vào lưu trữ tập tin.
  2. Không cần phải thử và đồng bộ hóa các tệp trên filestore với các hàng trong cơ sở dữ liệu, tránh các tệp mồ côi hoặc liên kết bị hỏng. Ví dụ, bạn có thể tự động cascade xóa các tập tin khi nội dung liên quan bị xóa.
  3. Trong cơ sở dữ liệu nào đó (chẳng hạn như Oracle và SQL Server), bạn có thể tập tin chỉ mục và tìm kiếm trong họ sử dụng SQL
  4. Không cần phải lo lắng về tên tập tin độc đáo, thư mục và nó có thể làm cho tải lên đơn giản hơn trong một số trường hợp
  5. Dễ bảo vệ quyền truy cập vào các file để người dùng chỉ được ủy quyền có thể nhìn thấy chúng

Nhược điểm:

  1. Performance phục vụ các file thường rừng đặc dụng fers so với filestore
  2. Có thể dẫn đến cơ sở dữ liệu lớn. Cần cẩn thận khi chọn các cột nhị phân.
  3. làm việc nhiều hơn để liên kết đến tập tin và phân phát nội dung - bạn cần phải xử lý chuyên ngành, vv
Các vấn đề liên quan