2010-03-10 64 views
1

我創造我自己的RSS閱讀器,並瞭解哪些RSS項目已經下載我轉換(每個項目)的鏈接,MD5哈希值。加載RSS提要時,它會將所有項目添加到ListView對象,然後針對文本文件檢查MD5哈希值並刪除已存在的哈希值。這樣,只顯示新項目。RSS的組織讀者

現在這個工作正好,因爲我只有5個提要,每個提要只加載約10個項目,但就長期使用而言,文本文件會變得雜亂無章,非常老的MD5哈希。我想知道是否SQLite數據庫會更好地做這樣的事情,比如存儲Feed鏈接,MD5哈希和Date。但即使如此,數據庫也會越來越大,最終會變得非常緩慢。

如何緩解這一問題?

+0

你是什麼原因檢查RSS飼料的完整性? 你在做什麼?消息的標題?伊莫,我認爲一個rss feed的網站不會發布兩次相同的信息。 – Younes 2010-03-10 14:27:24

+0

@Younes - 散列是項目的唯一URL。例如,如果攝像頭的程序每小時檢查一次,並且該項目仍然處於前一小時的供稿中,則該項目會多次顯示。 – 2010-03-10 14:29:41

回答

1

如果要存儲的哈希最後檢索日期,每次檢查飼料和仍然存在的項目,並創建一個日常維護,消除超過預先設定的時間間隔較舊的日期時間更新的日期。

運行此保養程序,比方說,每天一次。你可以用這個數據庫,甚至是一個平坦的緩存文件(用XML或其他)。然後,你可以對你的MD5散列,日期等數組進行序列化/反序列化,從你不需要的數組中刪除任何數據任何更多,然後再次串行化數組回到您的緩存文件。

+0

這似乎是一個很好的解決方案,謝謝。 :) – cam 2010-03-10 14:38:50

1

爲什麼不使用更新的領域在RSS這種方式,你需要保存的是最新的獲取日期比較它更新的日期飼料。

2010-03-10T14:27:03Z

更新> last_fetched_date =獲得飼料

+0

我很喜歡,但我有一個非常具體的用途,不幸的是,我需要實現的許多「RSS」飼料不提供日期字段。只有一個鏈接和一個標題。 – cam 2010-03-10 14:37:05

+1

噢..在一個完美的世界上所有的RSS源將有:-) – 2010-03-10 15:02:16

+0

最後更改日期飼料根據RSS 2.0規範是可選實現的GUID領域,項目所有領域都是可選的,雖然它必須提供標題或說明。如果您無法確定Feed何時更改或無法唯一識別某個項目,請不要緩存它;-) – 2010-03-10 16:30:44

0

SQLite是相當快的,即使有 「大」 的文件。在數據庫變得足夠大而成爲問題之前,它將需要相當多的活動。

+0

爲了澄清,我還將實施「清理」例程以清除非常舊的記錄。但做更多可能是不成熟的優化。 – 2010-03-10 14:38:28