簡體   English   中英

java:將文件流存儲在數據庫中是一種不好的做法嗎?

[英]java : Is it a bad practice to store file streams in a database?

我正在讀取某些文件組的文件流,並將其作為bytea類型存儲在數據庫中。 但是,當我嘗試從數據庫中讀取流並將這些流寫入文件時,確實花了很長時間,最終我遇到了內存不足的異常。 是否有其他選擇可以在不涉及數據庫的情況下更有效地完成它?

設計數據庫時要考慮一個關鍵問題:

When having a bunch of data, where we don't know the kinds of reports
that will be generated, how can we store the data in a manner that
preserves the data's inner relationships and permits any reporting
format we can think of. a

文件缺少數據庫的一些關鍵特性。 文件始終具有“字符順序”的單一結構。 它們還缺乏任何集成報告構建的方法,並且報告通常僅限於簡單的搜索,這些搜索幾乎沒有上下文,而結果沒有顯示在文件的其余部分中。

簡而言之,如果您不使用數據庫的功能,請不要使用數據庫。

許多人確實將文件存儲在數據庫中。 因為它們很方便,並且無需編寫對文件系統存儲的支持,而是剪切並粘貼了數據庫存儲代碼。 讓我們探討一下后果:

  1. 備份和還原變得成問題,因為數據庫的大小增長非常快,並且執行備份和還原的帶寬是數據庫大小的函數。
  2. 故障安全數據庫中的復制重建需要更長的時間(我發現有些時間太長了,以致於冗余無法趕上主數據庫的變化速度)。
  3. (偶然地)批量引用文件的查詢會使CPU繁忙,從而可能使對系統其余部分的訪問陷入飢餓(取決於數據庫)。
  4. 返回那些查詢結果的帶寬會占用系統資源,從而阻止其他查詢傳遞其結果(在某些數據庫上更好,而在其他數據庫上更好)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM