Sql-Server
儲存文件收據的更好方法
我有一個財務系統,需要為系統上保存的每條記錄附加 PDF 收據。
這些收據將通過連接到電腦的適當設備進行掃描,並以 PDF 格式保存在我的數據庫中。
今天系統將PDF文件保存為
varbinary(max)
,但是由於我的表中的行數,我的數據庫的文件大小增加得太快了。平均文件大小約為 1 到 2 MB。在不影響數據庫性能的情況下儲存此類文件的最佳方法是什麼?
您不會像使用 varbinary(MAX) 那樣犧牲數據庫性能。您不是在 varbinary(MAX) 上搜尋。您沒有為該列編制索引。
表中的優點是單一一致備份。不利的一面是更大的備份。
將文件傳送到客戶端 varbinary(MAX) 的效率將低於 FILESTEAM 或文件系統。
1 - 2 mb 相對較小。如果它是 200+ mb,那麼您通常希望避免儲存在 varbinary(MAX) 中。
如果僅表大小是問題,那麼FILESTREAM可能是您最好的解決方案。這不會損害數據庫性能並且文件不會儲存在表中。
FILESTREAM 使基於 SQL Server 的應用程序能夠在文件系統上儲存非結構化數據,例如文件和圖像。應用程序可以利用文件系統的豐富流式 API 和性能,同時保持非結構化數據和相應結構化數據之間的事務一致性。
從許可的角度來看,我很確定 FILESTREAM 不算作數據庫大小。對於具有 10GB 數據庫限制的 EXPRESS,FILESTREAM 不計算在內。
另一個好處是,如果您使用 Adobe iFilter 對 PDF 進行 OCR,您可以全文搜尋文件。但是您也可以使用 FILESTREAM 來做到這一點——據我所知,沒有。
或者您可以完全獨立地管理文件,只在 SQL 中儲存路徑。