Seite 1 von 1

datenbank oder textdatei?

Verfasst: 22.02.2007 16:20
von Ambience
Hallo,

ich versuche mir hier gerade so eine art community zu basteln..

Jetzt stellt sich die Frage was besser ist, ob ich:

a) die anzahl der User ständig per SELECT COUNT abfragen soll
b) die anzahl der User immer in eine Textdatei schreiben soll
c) die anzahl der User in die Datenbank und cachen..(z.b. so wie bei phpBB3 in die config Tabelle oderso)

Mir geht es dabei eher darum traffic einzusparen und gleichzeitig sollte evlt. noch dazu die Performance gesteigert werden...

Ich persönlich schwanke zwischen Textdatei und Datenbank mit Cache.

Eine Suche hat mir leider auch nichts verwendbares ausgegeben, außer das Textdateien zum traffic sparen verwendet werden können, allerdings weiß ich hierbei wieder nicht, ob sich das auch positiv auf die performance ausschlägt.

Verfasst: 23.02.2007 12:40
von Xwitz
Kleiner Tip: SELECT COUNT ist sehr schnell, wenn die Tabellen einen Index haben. Da wird nichts gezählt, die Zeilenzahl liegt ständig vor. Und mit Traffic hat das nichts zu tun oder?

Verfasst: 23.02.2007 13:07
von Banger
Xwitz hat geschrieben:Kleiner Tip: SELECT COUNT ist sehr schnell, wenn die Tabellen einen Index haben. Da wird nichts gezählt, die Zeilenzahl liegt ständig vor.
...es sei denn, man filtert z.B. nur aktive Nutzer, dann sollte man zu diesem Zwecke einen Index auf user_active haben.

Wenn Du eh auf ein DBMS zurückgreifst, würde ich an Deiner Stelle auf Flatfiles verzichten, denn diese bedeuten nicht nur jeweils einen zusätzlichen Filehandler pro Seitenaufruf, sondern Du musst Dich beim Update der Daten auch noch um ein gescheites Locking kümmern (Stichwort "Race Condition": zwei User melden sich gleichzeitig an, zwei Skript-Instanzen wollen gleichzeitig das File editieren).
Von der Anwendungsseite her am komfortabelsten wäre sicherlich ein DBMS mit Triggern, welches die "Cache-Daten" eigenständig aggregiert und somit von sich aus für Datenkonsistenz sorgt - aber ok, das führt jetzt zu weit. ;-)

Re: datenbank oder textdatei?

Verfasst: 23.02.2007 13:44
von easygo
Ambience hat geschrieben:c) die anzahl der User in die Datenbank und cachen..(z.b. so wie bei phpBB3 in die config Tabelle oderso)
Würde sich erst richtig lohnen, wenns ne größere (Overall-)Statistik geben soll bei dir.

Als Beispiel: User (männlich/weiblich/witzlos/..), Foren, Themen, Beiträge usw.
oder wenn der Zähler jedesmal x Bedingungen abklappern muss.

Indexieren wär dann zwar ne Alternative, weil schneller beim Lesen..
aber dafür wirds beim Schreiben deutlich langsamer und Indizes müssen halt
nach jeder, kleinen Tabellenänderung neu angelegt werden.
Ambience hat geschrieben:Mir geht es dabei eher darum traffic einzusparen und gleichzeitig sollte evlt. noch dazu die Performance gesteigert werden...
Was du damit sparen kannst, ist Rechnerleistung / dein Server wirds dir hoffentlich danken. :wink:

Verfasst: 23.02.2007 18:20
von Ambience
Jetzt hab ich erstmal den Sinn von zusätzlichen Indexen verstanden.

Es wird eine funktion geben, die alles managed.. wie bei phpbb diese get_db_stat...

zum einen lasse ich mir einmal nur die user die online sind und die gesammtzahl ausgeben

Beim zweiten aufruf wird es allerding eine Full Statistik...

z.b.
User online: (zahl)
Gesamtanzahl aller User: (Zahl)
Gesammtanzahl aller Allianzen (Zahl)
Gesammtanzahl aller überweisungen(Zahl)
Gesammtsumme der überweisungen( Zahl)

etc. etc.

Wie würdet ihr dort vorgehen? - Ich persönlich würde die erste abfrage mit SELECT COUNT machen, wenn es so schnell ist..

Die zweite würde ich wenn es geht genauso machen, und dabei alle 10 Minuten neu cachen...

Was bzw. wie würdet ihr das machen. Wie vllt. schon gesagt, ich schreibe an einem kleinen Browsergame und ich will soviele Queries wie nötig aber so wenig wie möglich machen. Und das Cachen sollte eigentlich nur im Grunde die Lösung für schnelleren Seitenaufbau sein.

Ich will sozusagen einen wirklich reibungslosen ablauf, auch wenn (wer weiß) vllt. einmal 500 Leute gleichzeitig online sind. (Das Spiel wird nur für max. 500 Leute konzipiert<- So nennt man das glaube ich)...

Danke