2012-05-18 27 views
0

有一個包含大約300-400條記錄的數據庫。我可以做一個簡單的查詢來獲取30條記錄,如:從PostgreSql一個接一個地提取記錄DB

SELECT * FROM table 
WHERE isValidated = false 
LIMIT 30 

關於數據庫表的內容的更多詞語。有一個名爲isValidated的列,可以(正如您正確猜測的)取兩個值中的一個:true或false。查詢後,應該使某些記錄有效(isValidated = true)。從30組的記錄是約5-6記錄。相應地,在每個查詢之後,我將從先前的查詢中獲取記錄(isValidated = false)。事實上,我永遠不會以這種方式走到桌子的盡頭。

驗證過程使用Java + Hibernate進行。我是Hibernate的新手,所以我使用Criterion來做這個簡單的查詢。

這樣的任務是否有最佳做法?添加標誌字段(標記已被讀取的記錄)的變體是不恰當的(爲此數據庫設計過度)。 也許有機會創建一些虛擬表,其中已經處理的記錄將被存儲或類似的東西。順便說一句,在處理所有記錄後,計劃再次開始處理它們(可能有些需要驗證)。

非常感謝您的幫助。

+0

這是一種散文寫作,請寫出點和可以理解。 –

+0

我沒有看到問題,得到所有(記住沒有數百萬)記錄 - 更新需要更新的thoose。如果需要,沖洗 - 重複。我錯過了什麼? – esej

+0

Bhavik Ambani: 關鍵點:如何獲取特定數量的記錄而不重複已處理的記錄。 esej: 過了一段時間,可能會有成千上萬的這樣的記錄,並且將它們全部解決將是一個問題。 – Dragon

回答

2

我可以想像幾種解決方案:

  1. 店都在內存中。您只有400條記錄,並且它可能是一個非常好的解決方案,因爲這個小號碼
  2. 在唯一列(例如PK)上使用了order by子句(無論如何,您應該這樣做),存儲最後裝載的記錄,並確保下一個查詢使用where ID > :lastId
+1

@couling:PostgreSQL可以很好地處理大型數據集。所有你需要做的就是告訴JDBC驅動程序不要**將所有內容加載到內存中。 –

+0

現在它有400條記錄,下週會有成千上萬條記錄(並且,是的,這些對象很重。) 我不太瞭解第二個變體,請您澄清一下或者提供一些鏈接? – Dragon

+0

第一頁:您可以得到ID爲30的第一個未經驗證的記錄:'select * from table where validated = false order by ID limit 30'。您還記得最後一個ID:47.第二頁:您按照ID排序的30個第一個未經驗證的記錄,其中ID大於47:'select * from validateated = false,ID> 47 order by ID limit 30'。你記得最後一個ID:122等等。 –

相關問題