2010-01-08 11 views
6

Cách tốt nhất là gì lưu trữ nhị phân hoặc image tệp?Cách tốt nhất để lưu trữ tệp nhị phân hoặc hình ảnh

  1. Cơ sở dữ liệu Hệ thống
  2. file Hệ thống

Bạn có hài lòng giải thích, tại sao?

+2

Vui lòng cung cấp thêm một số ngữ cảnh cho câu hỏi này. Câu trả lời có thể khá khác nhau đối với người dùng gia đình, cửa hàng trực tuyến, bản đồ google và môi trường công ty hoang tưởng. –

+1

Nếu có một * đúng cách *, tôi nghi ngờ sẽ có 2 khả năng khả dụng! Nó phụ thuộc vào những gì bạn đang làm. Tôi đã có các ứng dụng bắt đầu bằng một cách và kết thúc bằng cách khác vì mọi thứ thay đổi. Dù bạn làm gì, bạn nên tóm tắt điều này đi đủ để bạn có thể thay đổi nó mà không thay đổi TẤT CẢ mã của bạn MỌI NGƯỜI. – hackerhasid

+0

@Wim Hollebrandse: Rất tiếc phải nói rằng, nhận xét của bạn là bất ngờ. Tôi đăng các vấn đề ở đây để có được giải pháp, không phải để có được thứ hạng. Tôi cần giải pháp và khi tôi có nó, tôi cảm thấy hạnh phúc. Nhờ stackoverflow.com cho các dịch vụ của họ. –

Trả lời

9

Không có cách nào thực sự tốt nhất, chỉ là một loạt các giao dịch.

Ưu điểm cơ sở dữ liệu:
1. Dễ dàng hơn trong việc xử lý môi trường phân cụm.
2. Không phụ thuộc vào các tài nguyên bổ sung như máy chủ tệp.
3. Không cần thiết lập các hoạt động "đồng bộ hóa" trong môi trường cân bằng tải.
4. Sao lưu tự động bao gồm các tệp.

Cơ sở dữ liệu Cons:
1. Kích thước/tăng trưởng của cơ sở dữ liệu.
2. Tùy thuộc vào máy chủ DB và ngôn ngữ của bạn, có thể khó đưa vào và truy xuất.
3. Tốc độ/hiệu suất.
4. Tùy thuộc vào máy chủ DB, bạn phải quét vi-rút các tệp tại thời điểm tải lên và xuất.


file Ưu:
1. Đối với web duy nhất/cài đặt máy chủ db duy nhất, đó là nhanh.
2. Hiểu rõ khả năng thao tác tệp. Nói cách khác, thật dễ dàng để di chuyển các tệp đến một vị trí khác nếu bạn hết dung lượng đĩa.
3. Có thể quét vi-rút khi các tệp ở chế độ "nghỉ ngơi". Điều này cho phép bạn tận dụng các bản cập nhật của máy quét.

Tiêu đề tệp:
1. Trong môi trường đa máy chủ web, yêu cầu chia sẻ có thể truy cập. Mà cũng nên được nhóm cho chuyển đổi dự phòng.
2. Yêu cầu bảo mật bổ sung để xử lý quyền truy cập tệp. Bạn phải cẩn thận rằng máy chủ web và/hoặc chia sẻ không cho phép thực thi tệp.
3. Sao lưu giao dịch phải tính đến hệ thống tệp.


Ở trên, SQL 2008 có một thứ gọi là FILESTREAM kết hợp cả hai thế giới. Bạn tải lên cơ sở dữ liệu và lưu trữ các tệp trong một thư mục trên đĩa một cách minh bạch. Khi truy xuất bạn có thể kéo từ cơ sở dữ liệu; hoặc bạn có thể đi trực tiếp đến nơi nó sống trên hệ thống tệp.

0

Tôi thích lưu trữ hình ảnh trong cơ sở dữ liệu . Nó làm cho nó dễ dàng chuyển đổi từ phát triển sang sản xuất chỉ bằng cách thay đổi cơ sở dữ liệu (không có tệp sao chép). Và cơ sở dữ liệu có thể theo dõi các thuộc tính như ngày tạo/sửa đổi cũng như Hệ thống tệp.

0

Cá nhân tôi không bao giờ lưu trữ hình ảnh TRONG cơ sở dữ liệu cho mục đích hiệu suất. Trong tất cả các trang web của tôi, tôi có một thư mục "/ files" nơi tôi có thể đặt các thư mục con dựa trên loại hình ảnh mà tôi sẽ lưu trữ. Sau đó, tôi đặt tên cho chúng trên quy ước.

Ví dụ: nếu tôi lưu trữ ảnh hồ sơ, tôi sẽ lưu trữ trong "/ files/profile /" dưới dạng profile_2.jpg (nếu 2 là ID của tài khoản). Tôi luôn luôn làm cho nó một quy tắc để thay đổi kích thước hình ảnh trên máy chủ với kích thước lớn nhất tôi sẽ cần, và sau đó nhỏ hơn nếu tôi cần chúng. Vì vậy, tôi sẽ lưu "profile_2_thumb.jpg" và "profile_2_full.jpg".

Bằng cách tạo ra quy tắc cho chính mình, bạn có thể chỉ đơn giản trong cuộc gọi đang img src = "/ files/profile__thumb.jpg"

Thats làm thế nào tôi làm điều đó anyway!

4

Ưu điểm của lưu trữ tập tin nhị phân trong một DB:

  • Một số giảm độ phức tạp kể từ khi lớp truy cập dữ liệu hệ thống của bạn cần chỉ giao tiếp với một DB và không phải là một DB + hệ thống tập tin.
  • Bạn có thể bảo mật tệp của mình bằng cách sử dụng cùng một bảo mật toàn diện dựa trên bảo mật bảo vệ phần còn lại của cơ sở dữ liệu .
  • Tệp nhị phân của bạn được bảo vệ chống mất mát cùng với phần còn lại của dữ liệu của bạn bằng cách sao lưu cơ sở dữ liệu. Không yêu cầu hệ thống sao lưu hệ thống tập tin riêng biệt .

Nhược điểm của lưu trữ tập tin nhị phân trong một DB:

  • Tùy thuộc vào kích thước/số lượng file, có thể chiếm không gian đáng kể có khả năng làm giảm hiệu suất (dependening vào việc nhị phân tập tin của bạn được lưu trữ trong một bảng được truy vấn nội dung khác thường hoặc không) và thực hiện sao lưu dài hơn lần.

Ưu điểm của lưu trữ tập tin nhị phân trong hệ thống tập tin:

  • Đây là những tập tin hệ thống là tốt tại. Các hệ thống tệp sẽ xử lý tốt việc chống phân mảnh và truy xuất tệp (giả sử truyền trực tuyến tệp video tới thông qua máy chủ web) có khả năng sẽ nhanh hơn với một db là nhanh hơn.

Nhược điểm của lưu trữ tập tin nhị phân trong hệ thống tập tin:

  • Hơi phức tạp hơn truy cập dữ liệu lớp. Cần hệ thống sao lưu riêng của mình. Cần xem xét các vấn đề về tính toàn vẹn tham chiếu (ví dụ: con trỏ trong cơ sở dữ liệu sẽ cần phải dẫn đến việc xóa tệp để không có tệp 'mồ côi' trong hệ thống tệp ).

Trên số dư, tôi sẽ sử dụng hệ thống tệp. Trong quá khứ, bằng cách sử dụng SQL Server 2005, tôi chỉ đơn giản là lưu trữ một 'con trỏ' trong các bảng db vào tệp nhị phân. Con trỏ thường sẽ là một GUID.

Đây là tin tốt nếu bạn đang sử dụng SQL Server 2008 (và có thể những người khác - tôi không biết): có được hỗ trợ cho một giải pháp lai với loại dữ liệu VARBINARY (MAX) FILESTREAM mới. Các hành vi này giống như các cột VARBINARY (MAX) nhưng đằng sau hậu trường, SQL Sever 2008 sẽ lưu trữ dữ liệu trong hệ thống tệp.

+0

Khi tôi bắt đầu nhập, chưa có câu trả lời nào. SO đang trở thành một chương trình đố vui, nơi người đánh máy nhanh nhất thắng! :) – Emmanuel

+0

Tôi nghĩ rằng bạn thực sự đánh bại tôi bằng một hoặc hai phút. – NotMe

2

Không có cách nào tốt nhất.

Cái gì? Bạn cần thêm thông tin?

Có ba cách tôi biết ... Một, như mảng byte trong cơ sở dữ liệu. Hai, dưới dạng tệp có đường dẫn được lưu trữ trong cơ sở dữ liệu. Ba, như lai (chỉ khi DB cho phép, chẳng hạn như với loại FileStream).

Điều đầu tiên khá thú vị vì bạn có thể truy vấn và lấy dữ liệu của mình trong cùng một bước. Mà luôn luôn là tốt đẹp. Nhưng điều gì sẽ xảy ra khi bạn có rất nhiều tệp? Cơ sở dữ liệu của bạn trở nên lớn. Bây giờ bạn phải đối phó với các vấn đề bảo trì cơ sở dữ liệu lớn, chẳng hạn như các thử nghiệm sao lưu cơ sở dữ liệu trên một terabyte. Và điều gì sẽ xảy ra nếu bạn cần truy cập bên ngoài vào các tệp? Chẳng hạn như chuyển đổi loại, thao tác hàng loạt (thay đổi kích thước tất cả hình ảnh, hình mờ ứng dụng, v.v ...)? Nó khó hơn nhiều so với khi bạn có các tập tin.

Thứ hai là điều tuyệt vời cho số lượng tệp lớn. Bạn có thể lưu trữ chúng trên thiết bị NAS, sao lưu chúng lên từng bước, giữ cho cơ sở dữ liệu của bạn nhỏ, v.v. Nhưng sau đó, khi bạn có nhiều tệp, bạn bắt đầu chạy vào các hạn chế trong hệ thống tệp. Và nếu bạn phát tán chúng qua mạng, bạn sẽ gặp phải các vấn đề về thời gian chờ, các vấn đề về quyền của người dùng, v.v. Ngoài ra, tôi sẽ thương hại bạn nếu mạng của bạn được sắp xếp lại. Bây giờ bạn phải chạy các cập nhật lớn trên cơ sở dữ liệu để thay đổi vị trí tệp của bạn, và tôi thương hại bạn nếu một cái gì đó vít lên.

Sau đó, có tùy chọn kết hợp. Nó gần như hoàn hảo - bạn có thể nhận được các tập tin của bạn thông qua truy vấn của bạn, nhưng cơ sở dữ liệu của bạn không phải là lớn. Điều này có giải quyết được tất cả các vấn đề của bạn không? Chắc là không. Cơ sở dữ liệu của bạn không còn di động nữa; bạn bị khóa vào một DBMS cụ thể. Và công cụ này chưa trưởng thành, vì vậy bạn có thể tận hưởng quá trình mọc răng. Và ai nói điều này giải quyết tất cả các vấn đề khác nhau?

Sự thật là, không có cách "tốt nhất".Bạn chỉ cần phải xác định yêu cầu của bạn, làm cho sự lựa chọn tốt nhất tùy thuộc vào họ, và sau đó hút nó lên khi bạn tìm ra bạn đã làm điều sai trái.

+0

Cảm ơn Will, tôi đã xem xét sử dụng FileStream nhưng câu trả lời của bạn đã khiến tôi suy nghĩ lại do các vấn đề bạn nêu ra! – JLWarlow