2010-03-25 30 views
36

Chúng tôi có một dự án sắp tới nơi chúng tôi sẽ xây dựng một hệ thống CMS phụ trợ toàn bộ sẽ cung cấp toàn bộ mạng nội bộ và mạng nội bộ của chúng tôi với một gói. Câu hỏi mà tôi đã cố gắng tìm một câu trả lời là tốt hơn: lưu trữ hình ảnh trong cơ sở dữ liệu (SQL Server 2005) để chúng ta có thể có tính toàn vẹn, kế hoạch sao chép đơn, vv HOẶC lưu trữ trên hệ thống tệp?Hình ảnh trong cơ sở dữ liệu vs hệ thống tệp

Một vấn đề chúng tôi có là chúng tôi có nhiều máy chủ được cân bằng tải cần phải có cùng một dữ liệu vào mọi lúc. Hiện tại, chúng ta có bản sao SQL, nhưng việc sao chép tệp có vẻ hơi khó khăn hơn một chút. Một mối quan tâm khác là chúng tôi muốn có nhiều độ phân giải của cùng một hình ảnh, chúng tôi không chắc chắn việc tạo và lưu trữ từng phiên bản trên hệ thống tệp có thể là tốt nhất hoặc có thể kéo và tạo hình ảnh có độ phân giải theo yêu cầu hay không.

mối quan tâm của chúng tôi là như sau:

  • toàn vẹn dữ liệu
  • sao chép dữ liệu
  • Nhiều độ phân giải
  • Tốc độ của cơ sở dữ liệu vs hệ thống tập tin
  • tải trên cao của cơ sở dữ liệu vs hệ thống tập tin
  • Quản lý và sao lưu dữ liệu

Có ai có tình huống tương tự hoặc có bất kỳ đầu vào nào về những gì được đề nghị không? Xin được cảm ơn trước về sự giúp đỡ!

+0

Đăng lại: http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay – XpiritO

+1

@XpiritO câu hỏi đó rất chung chung, câu hỏi này rất cụ thể với nhu cầu của mình và bao gồm giải thích về môi trường của mình –

Trả lời

2

Vâng, nếu hai nhu cầu hàng đầu của bạn là tính toàn vẹn và sao chép, thì câu trả lời chắc chắn là DB.

Bạn điểm khác mặc dù:

  • Liêm - DB, đó là lý do tại sao cơ sở dữ liệu tồn tại so với các hệ thống tập tin phẳng.

  • Sao chép - Không chắc chắn nếu bạn có nghĩa là sao chép hình ảnh, nhưng nếu có, thì rõ ràng là DB vì bạn sẽ không tải cân bằng điều này, chắc chắn.

  • Nhiều độ phân giải có thể được thực hiện từ hình ảnh DB, tuy nhiên điều này làm tăng thêm chi phí xử lý. Ngoài ra, độ phân giải càng cao, kích thước càng lớn thì mạng càng chờ. Nhiều độ phân giải giao dịch không gian cho tốc độ.

  • Tốc độ - Tùy thuộc vào quyền truy cập vào hình ảnh, nó có thể không đáng kể. Nếu bạn đang chụp ảnh qua chia sẻ tệp, bạn sẽ phải đợi trên mạng trong mọi trường hợp và mạng luôn là nút cổ chai.

  • Overhead - Thành thật mà nói, nó phụ thuộc vào định nghĩa của bạn về chi phí và cách bạn truy cập hình ảnh.

  • Quản lý, DB, tay xuống. Lưu trữ số ít = Ít lo lắng hơn và bạn luôn phải chạy bản sao lưu trên cơ sở dữ liệu trong mọi trường hợp. Sao lưu hệ thống tập tin trên nhiều máy chủ là tốn kém theo nhiều cách.

1

Giả sử bạn đang ở trong môi trường cửa sổ, không có lý do chính đáng để sử dụng hệ thống tệp. Bạn có thể muốn cẩn thận cách bạn lưu trữ hình ảnh trong các bảng để tránh chia tách trang không mong muốn, nhưng đó là một tinh chỉnh hiệu suất, không phải là một vấn đề lớn.

Nhược điểm để hệ thống tập tin

-Không tự động sao chép

-May phức tạp sao chép của bạn bằng việc có vị trí vật lý khác nhau cho mỗi trường hợp

-Slow với số lượng rất lớn các tập tin

Upside để hệ thống tệp

-Nếu bạn đang lưu trữ một vài tệp rất lớn, tệp sẽ thực hiện tốt hơn một chút.

5

Câu hỏi này xuất hiện thường xuyên - xem this SO kết quả tìm kiếm.

Không có câu trả lời đúng - tùy thuộc vào hoàn cảnh.

Cá nhân - giữ đường dẫn tệp trong DB và tệp trên hệ thống tệp. Mỗi cái đều có điểm mạnh riêng. Bạn có thể sao lưu các tập tin cũng như cơ sở dữ liệu. Đây cũng là kết luận của this guy, người quản lý các TB dữ liệu.

+3

chỉ cần đảm bảo rằng nếu bạn sử dụng hệ thống tệp, cũng để lưu trữ tổng kiểm tra, để phát hiện giả mạo với tệp. – David

54

Có một bài nghiên cứu hay được xuất bản bởi Microsoft Research được gọi là To Blob or not to Blob nơi họ xem xét tất cả các loại biến và tác động.

Phát hiện của họ cuối cùng:

  • lên đến 256 KB, đốm màu được lưu trữ trong cơ sở dữ liệu một cách hiệu quả hơn trong hệ thống tập tin
  • cho 1 MB và lớn hơn, hệ thống tập tin là hơn hiệu quả
  • ở giữa đó là một toss-up

Kể từ khi giấy đã được xuất bản, SQL server 2008 cũng đã được thêm vào các thuộc tính FileStream mà làm cho lưu trữ nội dung trong hệ thống tập tin, nhưng dưới tr kiểm soát ansactional, một thực tế. Rất khuyến khích bạn kiểm tra xem!

+8

+1 cho nguồn tuyệt vời và tóm tắt hiệu quả. –

1

Tôi sẽ;

1) Gán định danh duy nhất (GUID) cho mỗi hình ảnh 2) Tag/Tên hình ảnh với GUID 3) Lưu trữ GUID trong hệ điều hành (File System) 4) Lưu trữ Fully Qualified File Name (FQN) con trỏ trong cơ sở dữ liệu.

Lưu trữ hình ảnh trong cơ sở dữ liệu quá đắt về lưu trữ và bảo trì. Lưu trữ chỉ con trỏ FQN sẽ cung cấp giải pháp tốt hơn. Bạn cũng có thể xây dựng kiểm tra tính toàn vẹn qua các trình kích hoạt và một số thủ tục được lưu trữ.

2

Mối quan tâm của bạn chia thành hai phe.Những mối quan tâm sau đây ủng hộ tài liệu lưu trữ trong cơ sở dữ liệu:

  • toàn vẹn dữ liệu
  • sao chép dữ liệu
  • Nhiều độ phân giải
  • Quản lý dữ liệu và sao lưu

Những mối quan tâm (có lẽ) ủng hộ lưu trữ tài liệu trên hệ thống tệp:

  • Tốc độ của cơ sở dữ liệu vs hệ thống tập tin
  • Overhead tải của cơ sở dữ liệu vs hệ thống tập tin

Vì vậy, quyết định những gì mà hầu hết các vấn đề và lựa chọn cho phù hợp.

+0

+1 cho chi phí. Tôi đã ngạc nhiên trước hiệu suất tăng tôi thu được từ việc di chuyển hình ảnh OUT của cơ sở dữ liệu của tôi và vào hệ thống tập tin cho một trang web với khoảng 3 kích cỡ 500 hình ảnh. Giữ tính toàn vẹn khó khăn hơn (xóa bản ghi và xóa tệp), nhưng có Apache chỉ phục vụ tệp trực tiếp như trái ngược với việc chạy một CGI để truy vấn DB và kết xuất nó thực sự tạo ra sự khác biệt. – tomlogic

4

Sao chép các tệp tĩnh, đặc biệt là trên một số máy chủ, có thể khó quản lý. Nó thực sự đi đến một sự cân bằng giữa quản lý, giám sát và gỡ lỗi các vấn đề nhân rộng so với kích thước cơ sở dữ liệu và tải.

Tôi nghĩ rằng tôi có thể chọn phương pháp tiếp cận cơ sở dữ liệu và nếu tải trở thành vấn đề, hãy xem xét một số loại lớp bộ nhớ cache xung quanh cuộc gọi hình ảnh.

Gợi ý lưu trữ đường dẫn trong db bị thiếu sự cố thực, đang sao chép điều này trên nhiều máy.

1

tôi sẽ không lưu trữ hình ảnh trong cơ sở dữ liệu vì một lý do (câu trả lời của tôi đến từ máy chủ sql):

tôi sẽ không muốn máy chủ SQL dữ liệu bộ nhớ cache được phổ biến bởi những hình ảnh đơn giản cho trang web. Tôi muốn bộ nhớ cache dữ liệu thực sự có dữ liệu trong đó. Ngoài ra nếu bạn có kiến ​​trúc nhiều tầng, việc truyền URL cho hình ảnh dễ dàng hơn nhiều so với một khối dữ liệu nhị phân. Trường hợp bạn chạy vào các vấn đề mặc dù nếu bạn chỉ muốn một số người xem hình ảnh (bảo mật).

+0

Không chắc chắn về máy chủ SQL nhưng Oracle cung cấp cho các DBA kiểm soát những gì được lưu trữ, và theo mặc định các đốm màu lớn không được lưu trữ. Tôi sẽ mong đợi SQL Server để có một cái gì đó tương tự. – codenheim

2

Có những mối quan tâm hợp lệ ở hai bên của cuộc tranh luận, vì vậy luôn đưa ra yêu cầu của bạn. Có bao nhiêu dữ liệu, bao nhiêu hình ảnh, dung lượng lớn?

Inline/BLOB lưu trữ

Upside: đơn giản hoá kiến ​​trúc và thực hiện, đơn giản hoá sao lưu và phục hồi hoặc chuyển đổi của hệ thống; chỉ cần làm một bãi chứa, sao lưu, xuất khẩu (bất kể thuật ngữ cho hương vị của DB của bạn) và di chuyển nó vào cơ sở dữ liệu mới. Kiểm soát phiên bản/tính nhất quán được xử lý bởi DB, vì vậy cho phép khôi phục điểm trong thời gian. Kiểm soát truy cập/bảo mật cũng sạch hơn, vì quyền truy cập vào hình ảnh BLOB là nội tại để truy cập vào hàng tổng thể. Di chuyển hình ảnh ra ngoài DB và cho phép máy chủ HTTP tìm nạp nó, trong khi tốt hơn cho đồng thời và khả năng mở rộng, có thể có vấn đề với việc đảm bảo mọi người không thể hack URL và yêu cầu hình ảnh mà họ không sở hữu. Nếu bạn đặt chúng bên ngoài DB, hãy đảm bảo chính sách bảo mật của bạn bao gồm kiểm soát quyền truy cập hình ảnh giữa những người dùng. Xác thực máy chủ HTTP của bạn phải tích hợp với xác thực của toàn bộ hệ thống hoặc chương trình máy chủ HTTP phục vụ hình ảnh sử dụng một số loại cơ chế phiên để đảm bảo yêu cầu HTTP hợp lệ. Đây là một mối quan tâm rất lớn trong cơ sở dữ liệu nhiều người thuê nhà. Ít quan tâm đến mục đích duy nhất, các hệ thống người thuê nhà đơn lẻ, với xác thực đơn giản.

Nhược điểm: Đối với cơ sở dữ liệu lớn thực sự, sao lưu và phục hồi trở nên khó chịu hoặc thậm chí có vấn đề và tốn kém, vì bạn có thể có một bộ dữ liệu lõi nhỏ. Việc xử lý tất cả như một cơ sở dữ liệu nhất quán vừa tốt vừa quan điểm, nhưng không tốt cho sao lưu trừ khi bạn sử dụng DBMS với chất lượng doanh nghiệp, sao lưu và khôi phục dữ liệu được lưu trữ (ví dụ Oracle RMAN và sao lưu dự phòng).

Luôn xem xét thời gian để khôi phục trong bất kỳ hệ thống nào. Nếu yêu cầu bộ nhớ của bạn là < một vài gigabyte, thậm chí 50-100GB thậm chí, và bạn có nhiều không gian sao lưu dự kiến, lưu trữ nội tuyến sạch hơn. Trên đó, tách mối quan tâm và để cho hệ thống tập tin thực hiện công việc của mình trở thành một lợi thế quan trọng. Không có gì tệ hơn là cố khôi phục, phục hồi và mở một cơ sở dữ liệu khổng lồ vì một lỗi dữ liệu nhỏ. Thời gian phục hồi sẽ là mối quan tâm lớn nhất của tôi.

2

Nói chung, dữ liệu hình ảnh bền bỉ trong DB có thể không hiệu quả như Hệ thống tệp, theo như CMS có liên quan. Tại một thời điểm bạn có thể chỉ muốn hiển thị hình ảnh tĩnh, vào những lúc khác bạn muốn hình ảnh đó có sẵn cho các nhà thiết kế đồ họa của bạn để cập nhật, v.v.

Xem xét chi phí xử lý liên quan đến việc truy xuất hình ảnh mỗi lần bạn muốn làm việc với nó.

Một vài điểm do tại sao bạn nên xem xét các FileSystem

  1. Trình duyệt hiện tất cả công việc, và các bạn được hưởng lợi từ proxy caching hình ảnh vv
  2. Là một nhánh của các bên trên, bạn sẽ có được để dễ dàng sử dụng Content Networks Delivery (CDN)
  3. Replication dữ liệu hình ảnh rất dễ dàng với các công cụ như rsync vv
  4. chế biến (tức là CPU) thời gian được tối ưu hóa mạnh
1

Cảm ơn tất cả các đầu vào nhanh chóng, chúng tôi chỉ có khoảng 5-10GB hình ảnh như bây giờ và rất nhiều trong số đó là bởi vì chúng tôi có nhiều độ phân giải của cùng một hình ảnh.

Một mối quan tâm khác đã được đưa ra là nếu chúng tôi muốn mở rộng để lưu tài liệu, bản trình bày và video im lặng? Liệu phương pháp cơ sở dữ liệu có hỗ trợ cho phép chúng tôi lưu trữ video trong databse và vẫn stream những video đó trong flash không?

Cảm ơn một lần nữa cho tất cả các đầu vào!

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