Zurück   klamm-Forum > Virtual World > Programmierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15.04.2011, 08:32:24   #1 (permalink)
King with a crown
Benutzerbild von DelphiKing

ID: 46719
Lose-Remote

DelphiKing eine Nachricht über ICQ schicken
Reg: 20.04.2006
Beiträge: 6.269
DelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes Ansehen
Standard Gute Datenbankstruktur

Heyho,

angenommen, ich will einen News-Artikel-Crawler schreiben, welcher ständig die 10 größten Newswebseiten durchforstet und dabei zu jedem Artikel möglichst viele Informationen speichern will.
Also beispielsweise den Titel, die Anzahl Kommentare, die User-Bewertung, wie oft die News angeschaut wurden und noch ein paar Sachen mehr.

Jetzt ist es aber so, dass diese 10 Webseiten die genannten Kriterien sehr unterschiedlich ausgestaltet haben, z.B. hat Webseite A bei den Bewertungen ein "Gefällt mir"-System, wo man nur sagen kann, dass einem ein Artikel gefällt.
Webseite B hat aber ein "Finde ich gut / Finde ich schlecht"-System und Webseite C hat 1-5 Sterne, die man vergeben kann. Und eine andere Seite hat vielleicht gar keine Bewertungen.

Wie erfasse ich diese Daten jetzt trotzdem möglichst ohne Informationsverlust in einer DB? So, dass ich zumindest die Artikel innerhalb einer Plattform untereinander vergleichen kann. Natürlich sollen, wenn neue Daten erfasst werden, die alten weiterhin gespeichert werden.
Natürlich sollte das auch flexibel sein, falls eine Webseite ihr Datenformat ändert oder eine neue Webseite dazukommt.
  • Für jede Newsseite eine eigene Tabelle, deren Spalten die jeweils verfügbaren Kriterien in der jeweiligen Ausprägung sind?
  • Oder für alle Newsseiten die gleiche Tabelle, aber alle möglichen benötigten Spalten drin, die dann eben u.U. leer sind?
  • Oder für alle die gleiche Tabelle und allgemein gehaltene Spalten, in denen die Werte dann plattformspezifisch z.B. XML-encodiert stehen?
  • Oder jeden einzelnen Wert für jede einzelne Webseite z.B. XML-encodiert in eine eigene Tabellenzeile und die Trennung dann scriptseitig ("SELECT wert WHERE newsseite=1 AND typ='bewertungen'")?

Oder vielleicht noch irgendwas anderes, was nicht unsauber oder unperformant ist? ^^

Wenn man halt mal wirklich davon ausgeht, dass es mehrere dieser Kriterien gibt, die von Plattform zu Plattform in sehr unterschiedlichem Format sind, und man sie trotzdem erfassen will…
Und natürlich die Frage "macht das alles Sinn / ist das erlaubt" mal völlig außen vor gelassen, geht ja nur um die technische Seite ^^


LG, flo
DelphiKing ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 15.04.2011, 09:56:21   #2 (permalink)
return void
Benutzerbild von ice-breaker

ID: 93995
Lose-Remote

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.026
ice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehenice-breaker genießt hohes Ansehen
Standard

Zitat:
Zitat von DelphiKing Beitrag anzeigen
Wie erfasse ich diese Daten jetzt trotzdem möglichst ohne Informationsverlust in einer DB? So, dass ich zumindest die Artikel innerhalb einer Plattform untereinander vergleichen kann.
meinst du die Artikel einer Website vergleichen, oder Artikel von verschiedenen Webseiten? Denn Plattform ist hier in dem Kontext mehrdeutig.
Bei letzterem musst du die Daten bei dir eben in eine gemeinsame Struktur bringen, ist schwer, aber meist findet man doch ein System.

Zitat:
Zitat von DelphiKing Beitrag anzeigen
Für jede Newsseite eine eigene Tabelle, deren Spalten die jeweils verfügbaren Kriterien in der jeweiligen Ausprägung sind?
wirkt reichlich rendundant, denn die Eigenschaften die sich alle teilen (Titel, Text, Datum, Autor) haben ja eigentlich die gleiche Struktur.

Zitat:
Zitat von DelphiKing Beitrag anzeigen
Oder für alle Newsseiten die gleiche Tabelle, aber alle möglichen benötigten Spalten drin, die dann eben u.U. leer sind?
na das klingt aber gleich schon stark nach Verstößen der Normalform

Zitat:
Zitat von DelphiKing Beitrag anzeigen
Oder für alle die gleiche Tabelle und allgemein gehaltene Spalten, in denen die Werte dann plattformspezifisch z.B. XML-encodiert stehen?
wtf?
Wenn du schon eine Datenbank nutzt, warum die Datenhaltung kaputt machen indem du wieder Daten speicherst, die für die Datenbank nicht auswertbar sind?

Zitat:
Zitat von DelphiKing Beitrag anzeigen
Oder jeden einzelnen Wert für jede einzelne Webseite z.B. XML-encodiert in eine eigene Tabellenzeile und die Trennung dann scriptseitig ("SELECT wert WHERE newsseite=1 AND typ='bewertungen'")?
wtf^2



Zitat:
Zitat von DelphiKing Beitrag anzeigen
Oder vielleicht noch irgendwas anderes, was nicht unsauber oder unperformant ist? ^^
Mir fallen da auf Anhieb 2 Methoden ein:
  • "Objektorientierung": erstelle eine Tabelle in der alle Einträge sind, die die gleiche Struktur haben, und dann für verschiedene Ausprägungen wie Bewertungen spezielle Tabellen
  • NoSQL: bei NoSQL hat man ja keine festen Schemas, das klingt für dein Problem geradezu optimal, leider hat MySQL das nicht. Digg (?) hatte das aber in MySQL nachgebaut, damit gab es nur noch eine Tabelle mit 2 Spalten: Key | Value


"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici
ice-breaker ist offline   Mit Zitat antworten
Alt 15.04.2011, 14:07:36   #3 (permalink)
King with a crown
Benutzerbild von DelphiKing

ID: 46719
Lose-Remote

DelphiKing eine Nachricht über ICQ schicken
Reg: 20.04.2006
Beiträge: 6.269
DelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes AnsehenDelphiKing genießt hohes Ansehen
Standard

Zitat:
Zitat von ice-breaker Beitrag anzeigen
meinst du die Artikel einer Website vergleichen, oder Artikel von verschiedenen Webseiten? Denn Plattform ist hier in dem Kontext mehrdeutig.
Bei letzterem musst du die Daten bei dir eben in eine gemeinsame Struktur bringen, ist schwer, aber meist findet man doch ein System.
Ich meine ansich ersteres (Artikel nur webseitenweise vergleichen), aber eine gemeinsame Struktur wäre natürlich eigentlich sowieso wünschenswert. Ist aber halt schwer, weil man sowas wie "Like"s und Sterne-Bewertungen nicht vergleichen/vereinheitlichen kann…


Zitat:
Zitat von ice-breaker Beitrag anzeigen
wtf?
[…]
wtf^2
All diese WTFs sind durchaus angebracht, weil du hast ja Recht… außer diesen "schmutzigen" Lösungen ist mir aber halt nix anderes eingefallen ^^
Hätte ich beim Gedanken daran kein Bauchweh, hätte ich gar nicht gefragt sondern implementiert und mich dann in 2 Monaten gewundert, wieso alles scheiße ist

Zitat:
Zitat von ice-breaker Beitrag anzeigen
Mir fallen da auf Anhieb 2 Methoden ein:
  • "Objektorientierung": erstelle eine Tabelle in der alle Einträge sind, die die gleiche Struktur haben, und dann für verschiedene Ausprägungen wie Bewertungen spezielle Tabellen
  • Meinst du mit letzterem dann sowas wie eine Tabelle (mal ganz naiv) "5-Sterne-Bewertung" und eine Tabelle "Likes"?

    Zitat:
    Zitat von ice-breaker Beitrag anzeigen
  • NoSQL: bei NoSQL hat man ja keine festen Schemas, das klingt für dein Problem geradezu optimal, leider hat MySQL das nicht. Digg (?) hatte das aber in MySQL nachgebaut, damit gab es nur noch eine Tabelle mit 2 Spalten: Key | Value
Ich muss zugeben, ich habe mich mit NoSQL noch nicht im Detail befasst, drum kann ich mir das im Moment noch nicht so konkret vorstellen… theoretisch klingt das aber schon ganz interessant, muss ich wohl nur mal ein bisschen umdenken ^^


Danke also auf jeden Fall schon mal
DelphiKing ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] datenbankstruktur adblue Programmierung 4 08.02.2011 16:42:34
[PHP/MySQL]Datenbankstruktur überprüfen BartTheDevil89 Programmierung 19 17.08.2008 10:41:14
[MySQL] Datenbankstruktur: Gruppen BenArt Programmierung 3 02.01.2008 22:11:05
[mysql] Datenbankstruktur T-Rex Scripts & Software 7 28.12.2007 08:53:45
[MySQL] Idee für Datenbankstruktur gesucht =/ eggman Programmierung 4 29.05.2006 21:49:18


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36:07 Uhr.