2012-02-23 52 views
0

我有一個數據庫表,其中一列有Y/N標誌。我想讀取標誌爲'N'的所有記錄,並在處理記錄後,在該記錄中將標誌設置爲'Y'。使用兩個單獨的連接在同一時間執行此操作是否正確併合理?或者我應該先閱讀整個表格,並在閱讀結束後才更新?什麼是正確的方法呢?在閱讀時更新表格

涉及的數據庫是Netezza,萬一它很重要。

+0

它總是很重要。由於我不知道netezza,我無法回答。但是,如果它已關閉SQLite和WAL模式,則答案將是:無併發讀取和寫入。 – Benoit 2012-02-23 18:27:05

+0

謝謝,分離閱讀和寫作看起來更清晰。我只是想知道交易隔離是否會對我有所幫助,以及是否有標準模式來做這種事情。 – drmirror 2012-02-23 18:32:16

+2

你有沒有[閱讀此](http://www.dsxchange.com/viewtopic.php?t=125306&view=previous)? – Benoit 2012-02-23 18:36:15

回答

1

您應該先閱讀然後更新。不是異步的。如果「選擇」部分需要很長時間,則應考慮批量操作。您可以使用單獨的連接,但應確信已完成閱讀。

+0

謝謝,那看起來像是謹慎的路線。我希望瞭解更多關於事務隔離和數據庫可能用於這類事情的其他工具。但我同意先閱讀所有內容然後更新是最乾淨的方法。 – drmirror 2012-02-24 19:51:44

1

主要取決於您的設計和需求。

國旗有多重要?如果在處理完所有標誌之前設置了所有標誌,則會發生什麼情況......等等。

爲什麼你需要兩個連接是我的理解,通常你有一個連接,你保持開放。我不知道Netezza的塊,但也可以做一些系統來同時進行選擇和更新。

你可以這樣做:

  1. 加載了一堆,對它們進行處理,然後更新所有標誌。 (最快,一次失敗=全部失敗)
  2. 加載一堆,處理一個,更新一個標誌,下一個進程..(相當快,一次失敗,不會全部擊中)
  3. 一個接一個地取出並更新它們。 (將是最慢但最安全的)