2011-04-25 313 views

回答

4

而不是什麼?把它放在文件系統中?

使用二進制文件存儲在文件系統的缺點是:

  • 你沒有得到符合ACID;

  • 如果您可能將該應用程序託管在多個服務器上(例如負載平衡,故障切換),則必須制定某種共享文件存儲以避免後端不同步;

  • 只有一個存儲後端而不是兩個使部署更簡單。

所以只用數據庫存儲,您不必擔心創建與網絡用戶的寫權限的文件夾,整個應用程序可以只讀的。如果您需要移動應用程序,則可以將其從源代碼管理中檢出並指向數據庫,而不必跨越多個文件數據。您的數據庫備份可以覆蓋所有內容,而不必單獨備份文件備份步驟。等等。

在另一方面的弊端數據庫BLOB存儲:

  • 笨拙的非常大的文件;

  • 您無法使用網絡服務器高效地免費提供文件。

+0

是的,正好 - DB vs Filesystem。感謝你的回答。 – Arnthor 2011-04-25 12:53:43

1

存儲在數據庫中的任何相同的優點讓你

  • 你可以索引的另一列或主鍵的數據提供數據
  • 它從一個地方進行訪問,並與行向交易的快速檢索級併發的問題你
  • ,可以適當地高速緩存常用數據
  • 您可以微調用於存儲數據的表引擎
  • 你可以國防部二進制數據和其他表中的行之間的關係(用戶/頁/任何)

我不明白爲什麼它很重要,數據是文本或二進制數據庫爲您提供了很多優點。

1

我假設另一種方法是將二進制數據存儲在文件中,並將文件名而不是數據存儲在數據庫的相應記錄中。這種方法的問題在於它不一致:任何事情都可能發生在你的文件上,它可能會被損壞或刪除,DBMS(在這種情況下,MySQL)不能做任何事情:它不能確保一致性,因爲它確實不知道任何關於你的文件。另一件事,DBMS可以優化對數據的訪問(它可以將其存儲在內存中,而不是每次訪問時都從磁盤讀取),而使用基於文件的方法時,您必須等到查詢完成後,打開文件並從磁盤讀取數據。這會顯着降低性能。

相關問題