shop-produkt user rating

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • shop-produkt user rating

    hallo
    ich benötige ein wenig hilfe!
    ich möchte zu meinen produkten ein user-rating bauen aus dem ich neben einer gesammt rating zahl auch noch hitlisten nach zeit und/oder hits erstellen kann. ( kennt man ja von amazon)
    allerdings bin ich gerade an dem punkt wo ich nicht genau weiter weiss wie ich die datenbank anlege denn die datenbank kann ja recht flott extrem gross werden und das sollte dann etwas genauer überlegt werden.

    wenn ich jedes rating eines produktes pro user pro zeit-einzeit speichere ist die datenbank vielleicht innerhalb von 3 monaten an der speichergrenze.
    also dache ich mit ich speichere gleich mehrere produkt ratings (z.b. top10 oder top20) dann habe ich die datenmenge um das 10, bzw 20 fache reduziert da ich dann in einer rating tabelle 10 bzw 20 spalten anlege.
    diese ratings kann ich dann in der zeiteinheit auch von einander trennen/limitieren
    Frage: ist der gedanken gang bis hier schon richtig oder gibt es vielleicht einen anderen ansatz?
    wie kann ich die tabellen so anlegen das ich so gut wie kaum speicherplatz verbrauche wenn ich viele rating erwarte!?
    p.s. in der rating tabelle werden die produkt ids gespeichert und anhand der spalte würde sich dann das rating 1-10 ergeben... (bzw dann rechnerisch umkehren spalte 1 = 10 punkte)

    gruß flobee
    Zuletzt geändert von flobee; 12.01.2004, 11:06.

  • #2
    Was bitte steht in diesen 20 Spalten dieser Tabelle? Mach doch mal ein Beispiel, ich kann dir naemlich nicht ganz folgen, vor allem wo du die Datenmenge um das 20fache reduzierst wuede ich gern wissen.

    Rocco

    Kommentar


    • #3
      yo!
      tabelle ratings einfach
      - userid produktid rating timestamp

      tabelle ratings (10fache kleiner weil hier mehr spalten zu der zeiteinheit gelten z.b. pro zeile pro user=1 monat)

      - userid produktid-top1 produktid-top2 produktid-top3 ..... timestamp


      gruß flobee

      Kommentar


      • #4
        hmm, alles ein bißchen wirr, aber nicht schlimm.


        Ich denke, daß du die Datenbank auslastet fürs das Rating im Vergleich zu den Produktdaten ist doch sehr gering.

        Leg nen Table an mit der Produkt ID, Produktnamen und Ratingwert,
        vote1, vote 2 usw bis 10.

        Den ratingwert lässte mit nem zähler hochzählen und bei dem rest trägste die benotungenwerte(auch Zähler) ein.

        so kannste einmal auslesen, welches Produkt am meisten gevotet wurde(für Dich) und die anderen Votings auslesen

        PS.: Mich würde interessieren, wie Du das mit dem Eintrag pro monat in der Db verarbeitest
        Zuletzt geändert von Kieferarzt; 12.01.2004, 11:37.

        Kommentar


        • #5
          hallo! @Kieferarzt
          also ich will ja zusätzlich hitlisten erstellen (tops) und die möchte ich zeitlich haben.... zb "im Monat 5 wurden diese produkte alle bewertet und haben x punkte erhalten und diese user waren dabei...." und das macht die datenbank extrem gross!
          deshalb bin ich auf die idee gekommen den user mehrer produkte gleichzeitig voten zu lassen und ihn dafür zeitlich zu beschränken als eine voting- beschränkung auf das produkt für immer oder anderer zeiteinheit da dies wesentl. mehr speicher braucht. denke ich
          und um auf den user zurück schliessen können brauch ich noch für jedes voting die userid und einen timestamp um zeitlich jonlieren zu können

          dein beispiel hat leider nicht ganz meine frage getroffen. in den produkten speichere ich schon das gesammt rating ! aber nur aus performance gründen.
          aber wie lege ich eine optimale datenbank für das rating an!? viele spalten oder viele zeilen!? und wie organisiere ich es wenn ich an der datenbank grenze bin? ich rechne mit 15000 produkt ratings alle 1-2 wochen (soll so ein community ding werden) und da bin ich schnell am ende!! :-)

          gruß flobee

          Kommentar


          • #6
            Re: shop-produkt user rating

            Frage: ist der gedanken gang bis hier schon richtig oder gibt es vielleicht einen anderen ansatz?
            imho ist dein ansatz ziemlich schräg!? zumindest, daß was ich von deinen ausführungen nachvollziehen konnte ... kenne amazon nicht wirklich

            tabelle ratings (10fache kleiner weil hier mehr spalten zu der zeiteinheit gelten z.b. pro zeile pro user=1 monat)

            - userid produktid-top1 produktid-top2 produktid-top3 ..... timestamp
            was bitte steht in produktid-top1, 2, 3? und wieweit soll sich diese liste fortsetzen, doch nicht etwas bis 12421346? oder?

            so wie ich das, was du willst, verstehe, läßt sich das sauber und gut mit sql lösen .... mit vernünftig aufgebauten tabellen
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              Werd auch nicht ganz aus deiner Logik schlau mit den tausend Spalten, aber der "korrekte" Weg sollte jedenfalls der erste Ansatz sein, also

              produkte-tabelle mit produktid , produktdaten und ein paar vorberechneten Werten wie etwa durchschnittsrating usw damit man da schnell zugriff drauf hat.

              rating-tabelle mit userid, produktid, rating, timestamp

              Mit optimierten mysql-abfragen (stichwort join) und gutes indizieren der tabellen sollte das alles gut klappen. Wenn du ein paar Millionen Produkte drin hast, lohnt sich der Umstieg auf eine richtige Datenbank wie Oracle

              Rocco

              Kommentar


              • #8
                hallo @Rocco
                dein/mein vorschlag es so zu machen ist die einfachste und logisch weg
                das kostet aber viele tabellen-zeilen....
                +@derHund
                wenn ich nun diese vielen zeilen mir gedanklich aufteile und sage:
                user dürfen nur einmal im monat voten und können nur hitlisten (top1-top10) voten anstelle eines einzelnen produktes
                damit hätte ich dann top10-produkt-ratings pro monat sowie mehrer durchschnitts ratings pro produkt sowie eine reduzierung der datenbank zeilen. (um das zehnfache, da ich dann 10 spalten für die top10 anlegen würde wo die jew. produkt ID zu top platzierung drin steht)

                der 2. teil jetzt nachvollziehbar?
                in tabellen form:
                PHP-Code:
                userid platz1 platz2 platz3 platz4...... timestamp
                1           568       9956     532       569
                5           2698     568       123       5698
                3           1236     456       6544     6564 
                und nun die frage: geht das auch ggf anders, besser? was wäre wenn ich später auf eine top 20 gehen möchte?

                danke schon mal für eure antworten
                gruß flobee

                Kommentar


                • #9
                  Für mich hört sich das eher nach einer normalen Umfrage an,
                  als nach einem Rating-System.

                  Such Dir ein normales freies UmfrageSkript und dann liesst DU eben die Produkte, die gewertet werden sollen, aus der DB und schreibst die Ergebnisse wieder rein.

                  TOP1-Produkt Vote
                  Top2-Produkt Vote
                  ...etc.......................................

                  Da Du Deine Lösung schon hast, wo liegt dann noch Dein problem?

                  Mach es so oder nehme die "höhere" DB-Belastung in Kauf!

                  Kommentar


                  • #10
                    yo!! danke für feedback
                    dachte vielleicht gibts noch eine andere lösen diese "massen" ggf über andere strukturen zu parken und dabei ein wenige "platz" (in form von menge der zeilen in der tabelle) zu sparen

                    gruß flobee

                    Kommentar


                    • #11
                      flobee ich verstehe jetzt was du vorhast, aber es ist praktisch nicht klug.

                      Wenn du eine grosse Produktdatenbank hast, dann ist eine starre Top10 pro User sehr ungenau wenn du spaeter das Gesamtranking berechnest.

                      Was ist wenn User keine Top10, sondern nur eine Top3 haben und keine Lust 7 weitere Produkte einzutragen?

                      Du solltest sooft wie moeglich einen Schritt voraus denken und dir am Besten keine Limits setzen die dich spaeter behindern.

                      Rocco

                      Kommentar

                      Lädt...
                      X