我正在處理一個相當大的mysql數據庫(數百萬行)和一列存儲blob圖像。應用程序嘗試獲取圖像的一個子集並在其上運行一些處理算法。我遇到的問題是,由於我有相當大的數據集,查詢返回的數據集太大而無法存儲在內存中。處理巨大的SQL結果集
目前,我已將查詢更改爲不返回圖像。在迭代結果集的同時,我運行另一個選擇來抓取與當前記錄相關的單個圖像。這很有效,但成千上萬的額外查詢導致性能下降,這是不可接受的。
我的下一個想法是將原始查詢限制爲10,000個結果左右,然後繼續查詢10,000行的跨度。這似乎是兩種方法之間道路妥協的中間。我覺得可能有更好的解決方案,我不知道。有沒有另一種方法可以同時在內存中只有部分巨大的結果集?
乾杯,
戴夫·麥克萊蘭
也許我的記憶問題不是由查詢造成的。我回到了舊版本(感謝,版本控制),並且數據讀取器似乎只加載它正在閱讀的行,正如Anthony所述。 不過,我不知道將圖像保留在本地文件系統上而不是通過數據庫服務器通過網絡傳輸它們是否更有意義(如下面的ProphetBeal所述)。缺點是它將被存儲在兩個位置(它們必須保留在數據庫中供其他系統使用),但文件系統存儲空間並不是一個直接的問題。 對此有何想法? – 2010-03-26 17:14:48
我給安東尼的答案是因爲他指出DataReader不是我的記憶被填滿的原因(這是相關的,但略有不同)。我很可能會使用ProphetBeal的解決方案來保持本地計算機上的BLOB以消除網絡擁塞,但對於任何處理大型數據集以存儲本地計算機的人來說,DataReader應該是一個有效的解決方案。 – 2010-03-28 22:45:20