Beste Datenbankstruktur zum Speichern von RSS-Feeds

8

Ich habe auf der Suche nach einer Antwort gesucht, sowohl hier als auch in Google. Obwohl ich einige Hinweise gefunden habe, habe ich noch keine Lösung gefunden.

Wenn Sie einen einfachen RSS-Reader mit einer Datenbank haben, haben Sie möglicherweise ein paar Tabellen zum Speichern von Feeds (ignorieren Sie den Umgang mit Abonnenten hier):

  • Feeds ( Feed-ID , Feed-Titel, Feed-URL)
  • Elemente ( Element-ID , Feed-ID , Artikel-Titel, Artikel-Inhalt)

Dies funktioniert in den meisten Fällen, aber für viele Websites / webbasierte Anwendungen haben Sie möglicherweise einen Haupt-Feed von der Startseite und dann Kategorie-Feeds. Wenn Sie beide in die obige Art von System aufnehmen, werden viele replizierte Daten fällig zum selben Beitrag, der in mehreren RSS-Feeds erscheint.

Die zwei Möglichkeiten, die ich gefunden habe, sind entweder ignorieren und akzeptieren die Duplikate oder verwenden Sie eine Verknüpfungstabelle zwischen den Feeds und den Elementen. Aber das scheint auch eine ziemliche Verschwendung zu sein, wenn wahrscheinlich 80% der Art von Feeds, die ich suchen möchte, nicht mehrere Feeds haben, die diese Replikation erzeugen könnten.

Gibt es einen besseren Weg dies zu tun / schaue ich das völlig falsch an?

Aktualisieren

Dank beiden für die Antworten, so scheint der Konsens zu sein, dass die Einsparung an Speicherplatz wahrscheinlich nicht signifikant genug ist, um sich Sorgen zu machen und würde durch das Potenzial für unbekannte Probleme (wie von dbr erwähnt) negiert werden.

Das Hinzufügen einer Linktabelle oder ähnlichem würde wahrscheinlich auch die Verarbeitungszeit erhöhen, so dass es sich insgesamt nicht lohnt, sich über zu viel Sorgen zu machen. Ich hatte Gedanken nach dem Lesen der Antworten der Verknüpfung von Inhalten und Entfernen von Duplikaten nur dann, wenn der Beitrag nicht mehr in RSS-Feeds, um Platz zu sparen, aber wieder wie Assaf gesagt hat, die Platzeinsparungen könnte dies eine Verschwendung von Zeit zu machen.

    
Duncan 09.03.2009, 00:21
quelle

2 Antworten

3

Ich würde vorschlagen, dass Sie nicht versuchen, jede mögliche Kopie von Feed-Daten in dieser Phase der Entwicklung zu optimieren (Design, nehme ich an). Konzentrieren Sie sich darauf, es zum Laufen zu bringen und wenn Sie fertig sind, wenn Sie Profiling durchführen und feststellen, dass Sie tatsächlich X% Speicherplatz sparen können, wenn Sie Links oder freigegebene Daten zwischen Feeds verwenden, nur dann und Wenn X groß genug ist, um die Zeit zu bezahlen, die für die Optimierung Ihrer Datenbank benötigt wird würde ich vorschlagen, dass Sie solche fortgeschritteneren Schemata implementieren.

    
Assaf Lavie 09.03.2009, 00:27
quelle
3

Wie Assaf sagte, würde ich mir keine Sorgen darüber machen, doppelte Artikel zu speichern, wenn sie aus verschiedenen Feeds stammen, zumindest jetzt. Die Komplikation, die es hinzufügen würde, nützt nicht den wenigen Kilobyte Speicherplatz, die Sie sparen würden.

Ich nehme an, wenn du einen sha1-Hash des Inhalts nimmst, mach SELECT id FROM articles WHERE hash = $hash und wenn etwas existiert, habe einfach eine "article_content_id", die den Inhalt des Artikels in eine andere Zeile verweist ... aber was passiert, wenn du zwei hast Artikel:

%Vor%

.. das funktioniert gut, und Sie haben 3 Bytes gespeichert, indem Sie den Artikel nicht dupliziert haben (offensichtlich mehr, wenn der Artikel länger war)

.. aber was passiert, wenn Bob beschließt, seinem RSS-Feed Anzeigen hinzuzufügen, indem er den Inhalt von Hi! in Hi!<p><img src='...'></p> ändert - aber Planet Randompeople entfernt alle Bilder. Um ein Feed-Element zu aktualisieren, müssen Sie dann jede Zeile überprüfen, die content_link_id -links für den Artikel, den Sie aktualisieren, überprüfen, ob das neue Element den gleichen Hash wie die Artikel hat, die es verlinken - wenn es anders ist Um die Verknüpfung aufzuheben und die alten Daten in das Verknüpfungselement zu kopieren, kopieren Sie den neuen Inhalt in das ursprüngliche Element.

Es gibt möglicherweise bessere Möglichkeiten, das zu tun, aber mein Punkt ist, dass es sehr kompliziert werden kann, und Sie werden wahrscheinlich nur ein paar Kilobytes (vorausgesetzt, das Datenbankmodul führt selbst keine Komprimierung durch) auf einer sehr begrenzten Untergruppe von Beiträge ..

Abgesehen davon scheint eine Tabelle mit feeds und items sinnvoll zu sein, und wie die meisten anderen RSS-Speicher-Datenbanken, die ich gesehen habe, damit zu tun hatten.

    
dbr 09.03.2009 01:31
quelle

Tags und Links