2

我想創建一個通用機制來保存我的應用程序和數據庫中的文件,並且爲此我想出了創建兩個表格的想法,其中包含以下schema以保存文件在任何數據庫表有關的任何行:關於保存文件的通用機制的性能問題

FileInfo 
================================================================= 
ID FileName ContentType FileSize DatabaseTableName RowID 

,並用OneToOne關係保存在一個單獨的表文件中的數據創建下面的表中,以便查詢FileInfo表可以進行更快:

FileData 
================================================================= 
ID FileData 

嗯,我不是數據庫性能方面的專家,這就是爲什麼我想知道這樣的設計是否將保存所有表中的所有文件在單個表中將導致性能問題,這是一種不好的做法?

如果會的話,你能否給我提供更好的解決方案?

在此先感謝

+0

您是否試圖在數據庫中存儲文件數據,如果是這樣,我建議您看看Filestream :: https://docs.microsoft.com/en-us/sql/relational-databases/blob/filestream-sql-server – TheGameiswar

+0

@TheGameiswar我想讓用戶配置文件是保存在數據庫還是文件系統。所以是的文件可能會保存在數據庫中。 – Karamafrooz

+0

好吧,這樣做的任何理由'我想讓用戶配置文件是保存在數據庫還是作爲文件系統' – TheGameiswar

回答

1

我覺得這個問題不能沒有一篇散文的答案。基本上可以將文件存儲在數據庫中。數據庫和文件系統有很大不同的屬性。值得讚揚的是,您希望爲您的框架的用戶提供選擇正確選擇的選項。

將此拆分爲許多表(手動分區)或任何其他形式的分區將無濟於事。 SQL Server沒有處理極大表的固有問題。

數據庫中的Blob會導致一些特定的缺陷。這些斑點在哪裏生活並不重要。

我喜歡把它分成兩個表格。通常情況下,這不是必需的。如果查詢編寫得正確,並且只提取所需的列,那麼SQL Server根本不會觸及未使用的blob列。

這就是說,像你一樣拆分大斑點通常很方便。 ORM不喜歡巨大的行。工具(和管理員運行一個簡單的手冊select *)現在可以查看FileInfo表,而不會因爲大數據而失敗。

拆分不是必須的,但可以使數據庫更容易工作。

+1

非常感謝您的支持完整清晰的答案:) – Karamafrooz