我想從一個mysql設置移動到一個postgres,並且我遇到麻煩的一個字段是一個mysql LBLOB。我正試圖將它移到postgres中的LargeObject類型中,並且我遇到了一些速度問題。我在Java/Groovy中這樣做,坦率地說,流媒體業務讓我感到困惑。從一個數據塊讀取BLOB到另一個數據庫
我試過兩種方法:將LBLOB保存在內存中,並直接寫入LO,然後將LBLOB寫入磁盤(畢竟它是一個文件),然後將文件讀回到LO中。
第二種方法要快很多倍,我不知道爲什麼,因爲我認爲它仍然太慢。
這是第一種方法。
InputStream ins = rs.getBinaryStream(1);
def b
while ((b = ins.read()) > -1) {
obj.write(b.toInteger().byteValue())
}
「插件」是一個ByteArrayInputStream,所以我讀到,在(爲int),然後將其寫入「目標文件」的LO。這對於1MB文件大約需要7分鐘。我的直覺告訴我這應該比第二個更有效率,但事實並非如此。
我會騰出代碼片段寫入文件版本,但它非常基本。它以同樣的方式從數據庫中讀取數據,然後將輸出寫入磁盤上的文件。然後我從磁盤讀取文件並將其寫入LO。該方法對於同一個文件大約需要8秒。
這是怎麼回事?
我發誓我也這樣做了,但最終因爲某些未知原因而改爲我提交的代碼。我原本認爲差異可以忽略不計,但現在我想我一定沒有計時這個版本。這是答案。謝謝。 – 2010-01-17 19:08:56