2008-08-12 41 views

Trả lời

70

Hãy nhìn vào câu trả lời này:

Storing Images in DB - Yea or Nay?

Về cơ bản, không gian và đạt hiệu suất có thể khá lớn, tùy thuộc vào số lượng người dùng. Ngoài ra, hãy nhớ rằng các máy chủ Web có giá rẻ và bạn có thể dễ dàng thêm nhiều hơn để cân bằng tải, trong khi cơ sở dữ liệu là đắt nhất và khó nhất để mở rộng một phần của kiến ​​trúc web thường.

Có một số ví dụ ngược lại (ví dụ: Microsoft Sharepoint), nhưng thông thường, lưu trữ tệp trong cơ sở dữ liệu không phải là một ý tưởng hay. Trừ khi có thể bạn viết các ứng dụng máy tính để bàn và/hoặc biết khoảng bao nhiêu người dùng bạn sẽ có, nhưng trên một cái gì đó ngẫu nhiên và không thể dự đoán như một trang web công cộng, bạn có thể trả giá cao để lưu trữ các tệp trong cơ sở dữ liệu.

3

Theo kinh nghiệm của riêng tôi, tốt hơn hết là lưu trữ tệp dưới dạng tệp. Lý do là hệ thống tập tin được tối ưu hóa cho lưu trữ tập tin, trong khi cơ sở dữ liệu thì không. Tất nhiên, có một số trường hợp ngoại lệ (ví dụ: hệ thống tệp MS thế hệ tiếp theo được cho là được xây dựng trên máy chủ SQL), nhưng nói chung đó là quy tắc của tôi.

6

Câu hỏi ở đây là gì?

DBMS hiện đại SQL2008 có nhiều cách xử lý BLOB không chỉ gắn bó với chúng trong bảng. Dĩ nhiên, có những ưu và nhược điểm, và bạn có thể cần suy nghĩ kỹ hơn một chút.

Đây là một giấy thú vị, bởi muộn (?) Jim Gray

To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem

1

Tôi đồng ý với @ZombieSheep. Chỉ một điều nữa - tôi thường không nghĩ rằng cơ sở dữ liệu thực sự cần phải di động vì bạn bỏ lỡ tất cả các tính năng mà nhà cung cấp DBMS của bạn cung cấp. Tôi nghĩ rằng việc di chuyển sang cơ sở dữ liệu khác sẽ là điều cuối cùng bạn sẽ cân nhắc. Chỉ cần tôi $ .02

1

Các nguyên cần thiết của việc phải phân tích một blob (hình ảnh) vào một mảng byte và sau đó ghi nó vào đĩa trong tên tập tin thích hợp và sau đó đọc nó là đủ của một hit trên cao để ngăn cản bạn làm điều này quá thường xuyên, đặc biệt là nếu các tệp khá lớn.

+1

Tôi không thấy bất kỳ nơi nào được đề cập rằng "tệp" này cần phải được ghi vào đĩa và đọc lại. –

+0

Đây là tác vụ ngầm khi hình ảnh phải được hiển thị sau đó, đặc biệt khi được lưu trữ ở các định dạng khác nhau hoặc trong các trường hợp không thể lưu trữ trong bộ nhớ trong thời gian dài, nhờ kích thước tuyệt đối. –

36

Nếu bạn có thể chuyển sang SQL Server 2008, bạn có thể tận dụng lợi thế của hỗ trợ FILESTREAM mang lại cho bạn tốt nhất của cả hai - các tệp được lưu trữ trong hệ thống tệp, nhưng tích hợp cơ sở dữ liệu tốt hơn nhiều so với việc lưu trữ tệp trong một trường varchar. Truy vấn của bạn có thể trả về luồng tệp .NET chuẩn, điều này làm cho việc tích hợp trở nên đơn giản hơn rất nhiều.

Getting Started with FILESTREAM Storage

+1

Tôi đang có một số đặt chỗ tại đây. Cụ thể là khả năng mở rộng và tính khả dụng của mọi thứ: làm thế nào để bạn kiểm soát nơi những "đốm" được lưu trữ? –

+3

Khả năng mở rộng và tính khả dụng dường như đã được suy nghĩ khá tốt - xem báo cáo chính thức này: http://msdn.microsoft.com/en-us/library/cc949109.aspx –

+2

Một điều quan trọng là bạn phải sử dụng tính năng bảo mật tích hợp (tức là xác thực Windows) khi kết nối với cơ sở dữ liệu: http://blogs.msdn.com/b/psssql/archive/2008/04/10/how-it-works-file-streams-requires-integrated-security-windows- authentication.aspx –

2

Chúng tôi đã quyết định để lưu trữ như varbinary cho http://www.freshlogicstudios.com/Products/Folders/ vấn đề hiệu suất một nửa mong đợi. Tôi có thể nói rằng chúng tôi đã rất ngạc nhiên khi thấy nó hoạt động ra sao.

22

Tôi muốn nói, điều đó tùy thuộc vào hoàn cảnh của bạn. Ví dụ, tôi làm việc trong chính quyền địa phương và chúng tôi có rất nhiều hình ảnh như mugshots, v.v.Chúng tôi không có số lượng người dùng cao nhưng chúng tôi cần có sự bảo mật và kiểm tra tốt xung quanh dữ liệu. Cơ sở dữ liệu là một giải pháp tốt hơn cho chúng tôi vì nó làm cho điều này dễ dàng hơn và chúng tôi sẽ không chạy vào vấn đề mở rộng quy mô.

0

Không mơ hồ hay bất cứ điều gì nhưng tôi nghĩ loại 'tệp' bạn sẽ lưu trữ là một trong những yếu tố quyết định lớn nhất. Nếu bạn về cơ bản nói về một trường văn bản lớn có thể được lưu trữ dưới dạng tệp, tùy chọn của tôi sẽ dành cho lưu trữ db.

3

Trong khi hiệu suất là một vấn đề, tôi nghĩ rằng thiết kế cơ sở dữ liệu hiện đại đã làm cho nó ít hơn nhiều của một vấn đề cho các tập tin nhỏ.

Hiệu suất sang một bên, nó cũng phụ thuộc vào dữ liệu được kết hợp chặt chẽ như thế nào. Nếu tệp chứa dữ liệu có liên quan chặt chẽ đến các trường của cơ sở dữ liệu, thì nó chứa khái niệm gần nó và có thể được lưu trữ trong một blob. Nếu nó chứa thông tin có khả năng liên quan đến nhiều bản ghi hoặc có thể có một số sử dụng bên ngoài ngữ cảnh của cơ sở dữ liệu, thì nó nằm bên ngoài. Ví dụ, một hình ảnh trên một trang web được tìm nạp trên một yêu cầu riêng biệt từ trang liên kết đến nó, vì vậy nó có thể thuộc về bên ngoài (tùy thuộc vào các cân nhắc về thiết kế và bảo mật cụ thể).

Sự thỏa hiệp của chúng tôi và tôi không hứa là tốt nhất, đã lưu trữ các tệp XML nhỏ trong cơ sở dữ liệu nhưng hình ảnh và các tệp khác bên ngoài.

+0

Bạn nghĩ gì về một tệp nhỏ hay lớn? – ubiquibacon

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