Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Benutzerwertung in DBMS / Performance

Diskussion: Benutzerwertung in DBMS / Performance im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo, ich muss für ein größeres Webprojekt (rails) eine Likes/Dislikes Funktion bereitstellen. Es gibt Dokumente und User, User dürfen ...

Antwort
Alt 23.01.11, 18:15   #1 (permalink)
 
Benutzerbild von Firebird
 
Registriert seit: 11.04.06
Firebird Leistung: Facit NTK
Likes: 0
Standard Benutzerwertung in DBMS / Performance

Anzeige

Hallo,

ich muss für ein größeres Webprojekt (rails) eine Likes/Dislikes Funktion bereitstellen. Es gibt Dokumente und User, User dürfen jedes Dokument höchstens einmal positiv oder negativ bewerten.

Haut das hin wenn ich nun eine Table dafür erstelle mir jeweils einem Foreign Key für User und Dokument sowie ein bool für likes oder dislikes?

Ich hab bedenken, dass das einfach riesig wird und ich ja für jedes Dokument Aggregatfunktionen drüberlaufen lassen muss. Oder ist das unbegründet und mit entsprechendem Index performancetechnisch kein Problem?

Wird sich voraussichtlich um einige tausend User handeln (also insgesamt, nicht auf einmal ), die dementsprechend rumklicken.

lg

Firebird ist offline   Mit Zitat antworten
Alt 23.01.11, 19:48   #2 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 211
Standard

sagen wir es mal so ... wenn du einen kleinen schritt von der normalisierung weg machst, ist dein performance problem keines mehr ...


aktuell hast du 2 entitäten, einmal user und einmal bewertbare dinge ...

wenn du nun eine relation dazwischen legst, die die bewertung beinhaltet, ist das problem rein formal gelößt ... nur möchtest du an der stelle den flaschenhals vermeiden, die relation jedesmal prüfen zu müssen um alle bewertungen für eine der beiden seiten zu suchen ... bei den meisten systemen, und da schätze ich mal gehört deines auch dazu, werden hier 2 indices reichen, die alle bewertungen einmal nach user, und einmal nach bewertbarem ding sortieren ... bislang noch keine verletzung der normalform, da ein index zwar redundanz bringt, diese aber nicht bis ins modell reicht ...

sollte das aus performance gründen nicht hin hauen, weil du befürchtest, dass ein bestimmtes aggregat, beispielsweise die summen aller positiven und negativen bewertungen für ein bewertbares ding, sehr häufig abgerufen wird, kann man dies beispielsweise als redundante daten ins modell nehmen ... eine tabelle die die summe(n) + die jeweilige id beinhaltet, aus dem jeweils ohne großen aufwand die daten geholt werden können ... das bricht mit dem normalisierungs ansatz.
lohnt sich allerdings, wenn du deutlich mehr abrufe als bewertungen hast ...

den normalisierten teil speicherst du allerdings trotzdem ... über die indices kannst du sehr schnell feststellen, ob jemand schon bewertet hat ... und es ist möglich in regelmäßigen abständen zu verifizieren, ob die aggregierten werte noch stimmen, und diese ggf zu korrigieren...
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 23.01.11, 20:31   #3 (permalink)
Themenstarter
 
Benutzerbild von Firebird
 
Registriert seit: 11.04.06
Firebird Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
sagen wir es mal so ... wenn du einen kleinen schritt von der normalisierung weg machst, ist dein performance problem keines mehr ...
Ah, vielen Dank für deine Ausführungen!

Ja, am Schritt weg machen hats gehappert - das ich da einfach noch eine neue Table anlege um dem Summen ausrechnen zu entgehen, da bin ich ned draufgekommen

Danke nochmal..
Firebird ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Benutzerwertung in DBMS / Performance
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 aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61