2009-07-09 24 views
10

tình hình cụ thể của tôilưu trữ hình ảnh được tải lên và các văn bản - hệ thống tập tin cơ sở dữ liệu vs blob

trang web quản lý tài sản, nơi người dùng có thể upload ảnh và tài liệu thuê. Đối với mỗi căn hộ, có thể có 4 ảnh, vì vậy sẽ không có quá nhiều ảnh trong hệ thống.

Đối với ảnh, sẽ có hình thu nhỏ của mỗi ảnh.

Câu hỏi của tôi

# 1 của tôi ưu tiên là hiệu suất. Đối với người dùng cuối, tôi muốn tải các trang và hiển thị hình ảnh nhanh nhất có thể.

Tôi có nên lưu trữ hình ảnh bên trong cơ sở dữ liệu hoặc hệ thống tệp hoặc không quan trọng? Tôi có cần phải lưu trữ bất cứ thứ gì không?

Cảm ơn trước!

Trả lời

9

Hệ thống tệp. Không có cuộc thi. Dữ liệu phải trải qua nhiều lớp hơn khi bạn lưu trữ nó trong db.

Chỉnh sửa khi lưu vào bộ nhớ đệm: Nếu bạn muốn lưu tệp trong khi người dùng tải lên để đảm bảo hoạt động kết thúc sớm nhất có thể, hãy đưa nó thẳng vào đĩa (tức là hệ thống tệp) nhanh chóng. Miễn là các tệp không quá lớn và bạn không có quá nhiều người dùng đồng thời, bạn có thể 'lưu' tệp trong bộ nhớ, quay lại người dùng, sau đó lưu vào đĩa. Thành thật mà nói, tôi sẽ không bận tâm.

Nếu bạn đang tạo các tệp khả dụng trên web sau khi chúng được tải lên và muốn bộ nhớ cache để cải thiện hiệu suất, hệ thống tệp vẫn là tùy chọn tốt nhất. Bạn sẽ nhận được bộ nhớ đệm miễn phí (có thể phải điều chỉnh một hoặc hai cài đặt) từ máy chủ web của bạn. Bạn sẽ không nhận được điều này nếu các tập tin nằm trong cơ sở dữ liệu.

Sau tất cả những gì có vẻ như bạn sẽ không bao giờ lưu trữ tệp trong cơ sở dữ liệu. Không phải vậy, bạn chỉ cần một lý do chính đáng để làm như vậy.

+0

@Daniel. "Thiết lập hoặc hai" mà tôi phải điều chỉnh trên máy chủ web để có được hiệu suất bộ nhớ đệm tốt nhất có thể là gì? – AngryHacker

+0

Bạn có thể vui lòng làm rõ, nếu có cần thiết để lưu trữ các tập tin như trình duyệt hiện bộ nhớ đệm cho các tập tin hình ảnh của chính nó. –

10

Mặc dù có ngoại lệ đối với mọi thứ, trường hợp chung là lưu trữ hình ảnh trong hệ thống tệp là đặt cược tốt nhất của bạn. Bạn có thể dễ dàng cung cấp dịch vụ lưu vào bộ nhớ đệm cho ảnh, bạn không cần phải lo lắng về mã bổ sung để xử lý xử lý ảnh và bạn có thể dễ dàng bảo trì ảnh nếu cần qua phương pháp chỉnh sửa hình ảnh chuẩn.

Có vẻ như mô hình kinh doanh của bạn phù hợp với tình huống này.

+1

Bạn muốn thêm vào, những gì được nói bởi Daniel, rằng Cơ sở dữ liệu chỉ là một lớp, mà người hỏi muốn đặt các tệp. – Dykam

+4

+1 Đã đồng ý - FS thực hiện trong trường hợp này. Một điều cần lưu ý nếu/khi bạn sẽ có nhiều tệp hoàn toàn là cấu trúc hệ thống tệp sane (ví dụ: không có hàng trăm nghìn tệp trong một thư mục). Điều đó nói rằng, giữ cho đường dẫn của bạn trong DB và các tập tin trên đĩa. – DarkSquid

+1

Các đường dẫn trong DB và các tệp trên đĩa là một cách tiếp cận hiện đại rất tốt đẹp cho điều này. Tôi biết SQL Server 2008 có một kiểu dữ liệu kiểu tập tin hoặc một cái gì đó để có hiệu lực mà các chức năng trong một cách tương tự. –

3

Lưu trữ hình ảnh của bạn chắc chắn trên hệ thống tệp. Một mối quan tâm mà folks không xem xét đủ khi xem xét những loại điều này là sưng lên; nhồi nhét hình ảnh dưới dạng các đốm màu nhị phân vào cơ sở dữ liệu của bạn là một cách thực sự nhanh chóng để làm nổi bật DB của bạn. Với một cơ sở dữ liệu lớn có yêu cầu phần cứng cao hơn, sao chép khó khăn hơn và yêu cầu sao lưu, vv Gắn bó hình ảnh của bạn trên một hệ thống tập tin có nghĩa là bạn có thể sao lưu chúng/sao chép chúng với nhiều công cụ hiện có một cách dễ dàng và đơn giản. Không gian lưu trữ cũng dễ dàng tăng lên trên hệ thống tập tin hơn là trong cơ sở dữ liệu.

1

một DB có thể nhanh hơn hệ thống tệp trên một số thao tác, nhưng tải một đoạn dữ liệu được xác định rõ 100s KB không phải là một trong số chúng.

cũng vậy, một máy chủ web tốt (như nginx) nhanh hơn bất kỳ lớp webapp nào mà bạn phải viết để đọc blob từ DB.trong một số thử nghiệm, nginx gần như ngang bằng với memcached cho dữ liệu thô phục vụ các tệp có kích thước trung bình (như HTML lớn hoặc hình ảnh có kích thước trung bình).

truy cập FS. không có cuộc thi.

+0

Tôi đang sử dụng nginx, điều này là tốt để biết. – resopollution

+2

kiểm tra tiêu đề phản hồi "X-Accel-Redirect" nếu bạn muốn phân phối các tệp nhiều megabyte có toàn quyền kiểm soát truy cập từ ứng dụng web của bạn và tốc độ nginx đầy đủ. – Javier

1

Có thể trên một chút ốp, nhưng trong this video từ Hội nghị MySQL, người thuyết trình nói về cách trang web smugmug sử dụng MySQL và các công nghệ khác để có hiệu suất cao. Tôi nghĩ rằng video xây dựng dựa trên một số câu trả lời được đăng ở đây, nhưng cũng đề xuất các cách cải thiện hiệu suất trang web bên ngoài phạm vi của DB.

+1

đã xem toàn bộ nội dung, điều này khá hay và sâu – resopollution

2

Nhận xét về câu trả lời của Sheepy.

Trong các tệp lưu trữ phổ biến trong SQL thì tốt hơn khi kích thước tệp nhỏ hơn 256 kilobyte và có giá trị khi lớn hơn 1 megabyte. Vì vậy, giữa 256-1024 kilobyte nó phụ thuộc vào nhiều yếu tố. Đọc this để tìm hiểu thêm về các lý do để sử dụng hệ thống tệp hoặc SQL.

Các vấn đề liên quan