2010-12-17 12 views
6

Piszę aplikację, która pobiera dane z szeregu dowolnych kanałów RSS. Kanały są ankietowane asynchronicznie w tle, a metoda jest wywoływana za każdym razem, gdy do kanału dodawany jest nowy element.Wyodrębnianie nowych pozycji z kanału RSS

Mój problem polega na identyfikowaniu nowych pozycji w kanale. Jaki jest najlepszy sposób na zrobienie tego? Wymyśliłem kilka pomysłów, ale wszystkie są wadliwe.

Sugestia: Za każdym razem, sondowania, zachować wszystkie elementy nowsza niż pubDate z ostatni element w ostatnim sondażu Problem: pubDate nie jest wymagane pola.

Sugestia: Przechowywać mieszania zawartości dla każdego elementu, który powróci, a nie zawartości powrotną z tego samego skrótu Problem: Gwałtownie rośnie spod kontroli pod względem zużycia pamięci

Odpowiedz

4

Jak o obu?

Użyj daty publikacji na tych kanałach, które ją zwracają, i zachowaj skrót innych. Jeśli większość źródeł danych zwróci datę publikacji, a liczba kanałów nie osiągnie milionów, powinieneś być w porządku, zarówno pod względem wydajności, jak i pamięci.

+1

Polecam hash podmiotu i jeden dla ciała. Ponadto niektóre pliki danych mają identyfikatory i inne identyfikatory UUID. – sal

+0

Po co przechowywać oddzielne hashy dla ciała i tematu? Czy to nie tylko podwaja moje koszty magazynowania? – Martin

2

Możesz użyć PubDate dla tych kanałów RSS, gdzie są one dostarczane. Jeśli nie podano parametru PubDate, a duplikaty są dokładnie takie same, tj. Gdy nie można znaleźć pojedynczego pola, aby je rozróżnić, obliczyć sumę kontrolną md5 i zapisać dla porównania. Użyj linku http://sharpertutorials.com/calculate-md5-checksum-file/. W ten sposób unikniesz przechowywania wszystkich plików zawartości i ich porównania. Praktycznie możesz oczyścić dane sumy kontrolnej często w oparciu o częstotliwość nowych treści, aby uniknąć problemu z pamięcią. Jeśli to możliwe, zachowaj wiele skrótów dla różnych źródeł. Jeśli opublikujesz rzeczywiste liczby, możemy mieć bardziej realistyczne rozwiązanie.

Powiązane problemy