2012-12-28 192 views
0

我有關於大型數據庫的結果集的問題。 (MySQLdb的,爪哇1.7)按列搜索結果集

的任務是執行一個列的所有條目的轉變到另一個數據庫。 (例如,將每個數除以三,並將它們寫入另一個數據庫)

由於數據庫包含大約70列和幾百萬行,我的第一種方法是獲得SELECT *並按列解析結果集。

不幸的是,我發現沒有辦法這樣分析它,作爲指定的方式打算通過它逐行(而(rs.next()){}等)。

我不喜歡這種方式,因爲這將創造70個大數組,我將不得不每一次以減少內存佔用只有一個。

因此,這裏是我的主要問題:

  1. 有沒有辦法?
  2. 我應該爲每一列創建一個查詢並解析它們(每次只有一個數組,但有70個查詢)或
  3. 我應該只是得到整個ResultSet並逐行解析它,將它們寫入70個數組?

問候,並在此先感謝!

+0

你真正的意思_其他database_或只是_其他table_? – jlordo

+0

是否相關? 但你是正確的,這是,其實只是一個表 – Maltram

+0

這是非常相關的,因爲如果它只是一個表,你可以使用數據庫來完成這項工作。這將是非常有效的,你根本不需要任何Java代碼(除非你想讓java執行sql語句)。 – jlordo

回答

0

爲什麼不用mysql來做呢?

使用此查詢:

create table <table_name> as select <column_name_on_which_you_want_transformation>/3 from <table name>; 
+0

因爲「/ 3」只是一個例子,轉換比較複雜...... 我想過但我不確定是否有可能。 我會再試一次,雖然 – Maltram

+0

好的。請讓我們知道你是否仍然面臨任何問題。 –

2

爲什麼不只是page your queries?一次拉出'n'行,執行轉換,然後將它們寫入新數據庫。

這意味着你不必在一個查詢/迭代拉了一切,然後一氣呵成寫了一大堆,而你沒有工作一行接一行的低效率。

我的其他評論也許這是不成熟的優化。你有沒有嘗試加載整個數據集,並看看它會佔用多少內存。如果它的數量級爲10或甚至100,我希望JVM能夠輕鬆處理。

我假設你的轉換需要在Java中完成。如果你可以用SQL來完成,那麼完全在數據庫中完成它可能會更有效。

+0

我並不擔心結果集的大小,而是70個數組的大小(我認爲它必須小於結果集)。 但你的方法提出了很多querries的,這將導致更高的流量。現在我不確定哪個資源是瓶頸(流量或內存) – Maltram

+0

我的方法建議可調數目的查詢。如果頁面,則可以選擇頁面(例如500行?)這樣的大小,該大小加載在給定的數據量,然後寫每個設置回在一個批次操作。更改頁面大小決定了a)每個查詢消耗的內存量b)寫入db的次數 –