我們有一個Web服務方法,它接受一些數據並將其放入Lucene索引中。我們用它來從我們的asp.net web應用程序索引新的和更新的條目。將大型SQL Server數據庫重新綁定到Lucene
這些條目存儲在一個大的SQL Server表(20M行和增長),我需要一種方式來重新索引整個表,以防當前索引被刪除或損壞。我不確定從大表中檢索數據塊的最佳方式是什麼。目前,我們使用表格具有自動增量的PK這一事實,所以我們得到1000行的塊,直到它開始不返回任何東西。有點像(僞語言):
i = 0
while (true)
{
SELECT col1, col2, col3 FROM mytable WHERE pk between i and i + 1000
.... if result is empty 20 times in a row, break ....
.... otherwise send result to web service to reindex ....
i = i + 1000
}
這樣,我們就不需要SELECT COUNT(*),這將是一個巨大的性能殺手,我們只是拉昇的PK值,直到我們停止獲取任何結果。如果我們在表中的某個位置出現了超過20,000個值的漏洞,它將在假設達到最終時停止索引,但這是我們現在必須生存的折衷。
任何人都可以提出一個更有效的方式從表中獲取數據索引?我認爲我們不是第一個面臨這個問題 - 搜索引擎如今被廣泛使用:)
我認爲你需要澄清你的問題。是「lucene索引」lucene.apache.org?索引被破壞 - 這是一個SQL服務器索引嗎?你擔心你的20M行表中有序號嗎?此外,使用IDENT_CURRENT()的想法很有趣,但不一定會告訴你表中的行數 - 任何失敗的插入可以在序列中創建幻影間隙。 – EBarr 2011-02-24 20:54:16
@EBarr:我真的不需要行數,而是首行和最後一行數,所以我可以從第一個循環到最後一個循環,每次循環獲取1000行。如果有差距,我會得到不到1000行,或者沒有 - 沒有什麼大不了的。 – Andrey 2011-02-24 21:11:25
@EBarr:我在談論Apache的Lucene索引。 – Andrey 2011-02-24 21:12:53