Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) datenbank optimieren, logdaten, merge, mysql (edit)
 
Reply to this topicStart new topicStart Poll
> Wie Tabellen optimal gestalten?, Es geht um Mysql
Borsti
Geschrieben am: Mo 9.01.2006, 17:06
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 2.12.2005


Hallo,

ich schreibe gerade an einem Bannertausch script, hierbei stellt sich mir das Problem der Datenbank optimierung! Das heißt ich möchte ja jeden view und klick speichern damit die angemeldeten user eine statistik bekommen können. Und das ja am besten noch für jede Stunde! Doch wenn man die daten so abspecihern würde bekämme man ja schnell millionen von datensätzen zusammen, bei einem solchen Netztwerk!

Jetzt meine frage gibt es schon tutorial oder artikel die sich mit diesem problem befassen oder habt ihr ideen wie die ungefähre strucktur in einem solchen netzwerk ausehen muss damit man nicht unmengen an daten hat und das laden ewig dauert!

Ich sag mal eine stunden auswertung der views und klicks ist nicht unbedingt erforderlich!

MFG



--------------------
http://www.ppcps.de *Pocket PC, PDA und Smartphones
Top
PMUsers WebsiteICQAOLYahooMSN
Top
 
 
Roberto Zehnder
#2 Geschrieben am: Mo 9.01.2006, 17:25 (+00:18)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 438
Mitglied seit: 8.10.2005


Also möglichkeit wäre, eine tabelle mit id des Banners und halt 24 zusätzliche Spalten für die 24 Stunden, oder willst du für jeden Tag immer rückblickend auch noch die einzelnen Stunde auswerten können?


--------------------
Wir von Zeweb bieten Ihnen einen rundum Service für die Homepage an.
Gerne übernehmen wir aber auch ihren PHP Programmier Auftrag.
=========================================================
Captcha Tutorials => stoppt-den-spam.info
Top
PMEmail PosterUsers Website
Top
 
Joel
Enzian Media GmbH
#3 Geschrieben am: Mo 9.01.2006, 18:09 (+00:44)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1433
Mitglied seit: 17.06.2004


QUOTE

Also möglichkeit wäre, eine tabelle mit id des Banners und halt 24 zusätzliche Spalten für die 24 Stunden

-> Nein mach das nicht.

Ich würde eine Tabelle machen, bei dem jeder User geloggt wird:

id (integer) | id_banner (integer) | host (varchar) | views (integer) | time (datetime)

id -> unique / schlüssel
id_banner + host -> unique
id_banner -> index
time -> index

Dann würde ich bei jedem load überprüfen ob es datensätze gibt, welche älter als eine Stunde sind. Falls ja, diese mit einem Insert in eine generellere Tabelle übertragen. Da genau diese einzelnen Klicks so viele Daten verursachen.

Beispiel:
id_banner | hour (varchar -> yy:mm:dd hh) | klicks | views

So hast du eine Klicksperre (z.B. eine stunde, damit ein user nicht mehrmals auf den gleichen banner klicken kann...) und zudem das Volumen der Daten verringert.


--------------------
EagleFind.com - Die visuelle Suchmaschine
Enzian Media bietet Entwicklung von Websites, Videos und Webcam-Streaming.

Suxedoo
Top
PMUsers WebsiteICQ
Top
 
Borsti
#4 Geschrieben am: Mo 9.01.2006, 21:48 (+03:38)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 2.12.2005


danke für eure Antworten!

@madox

so in etwa habe ich mir das auch gedacht aber auch da kommen ja gigantische daten mengen heraus!

weil ich ja folgende unterscheidungen brauche:

- views klicks und pi pro stunde, tag, woche, monat, jahr
- Publisher website id wo der klick herkam
- Advertiser anzeige id

und das kann ja denn schnell große datenmengen ausmachen besonders da man ja jeden klick usw. pro stunde zurück verfolgen können soll.

Wie viele datensätze kann den eine mysql Tabelle im schnitt so beherbergen damit man normale querys noch in einer akzeptablen zeit erhält? (mal abgesehen von der hardware)


MFG


--------------------
http://www.ppcps.de *Pocket PC, PDA und Smartphones
Top
PMUsers WebsiteICQAOLYahooMSN
Top
 
Sascha Ahlers
#5 Geschrieben am: Di 10.01.2006, 00:32 (+02:44)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1699
Mitglied seit: 27.12.2004


Also, ich habe es in etwa über eine Kombination von beiden Methoden gemacht...


@Borsti:

Nun, wenn Du es so machen möchtest, wie Joel Janser es Dir vorschlägt, solltest Du (nach Möglichkeit) besser mit Merge-Tabellen arbeiten (dies musst jedoch Du entscheiden). Sprich für den ersten Monat lässt Du die Log-Daten in Tabelle "log_2006_01" schreiben, und im nächsten Monat in "log_2006_02". Damit werden die Tabellen nicht zu all zu groß, und es ist unwahrscheinlicher, dass die Preformence später zu sehr in Keller geht. Um Platz zu sparen kannst Du dann auch die Tabellen aus dem abgeschlossenden Monat komprimieren. [1]
Um diese Tabellen zusammen fassen zu können, kann dann eine Merge-Tabelle angelegt werden.

Voraussetzungen für diese Methode sind:
  • Alle Tabellen müssen die gleiche Definition aufweisen.
  • Alle Tabellen müssen vom Typ MyISAM sein.
  • Vor MySQL 4.1.1 müssen alle Tabellen in der gleichen Datenbank liegen, ab Version 4.1.1 gibt es diese Beschränkung nicht mehr.


Beispiel (SQL-Syntax):
CODE

/* Tabelle für den ersten Monat */
CREATE TABLE log_2006_01 (
  id INTEGER NOT NULL PRIMARY KEY,
  id_banner INTEGER NOT NULL,
  host VARCHAR(63),
  views INTEGER,
  time DATETIME
);

/* Tabelle für den zweiten Monat */
CREATE TABLE log_2006_02 (
  id INTEGER NOT NULL PRIMARY KEY,
  id_banner INTEGER NOT NULL,
  host VARCHAR(63),
  views INTEGER,
  time DATETIME
);

/* Merge Tabelle */
CREATE TABLE log_2006 (
  id INTEGER NOT NULL PRIMARY KEY,
  id_banner INTEGER NOT NULL,
  host VARCHAR(63),
  views INTEGER,
  time DATETIME
) TYPE = MERGE UNION = (log_2006_01, log_2006_02) INSERT METHOD = NO;


Die Option INSERT METHOD kann drei Werte haben NO, FIRST und LAST.
  • NO → Es ist kein Einfügen über die Merge-Tabelle erlaubt (Standard-Wert).
  • FIRST → Daten werden immer in die erste angebende Tabelle geschrieben (siehe UNION).
  • LAST → Daten werden immer in die letzte Angebende Tabelle geschrieben (siehe UNION).

Einige Beschränkungen weisen die Merge-Tabellen jedoch auf:
  • REPLACE-Queries funktionieren nicht.
  • AUTO_IMCREMENT-Spalten werden bei dem Einfügen über die Merge-Tabelle nicht aktualisiert.
  • DROP TABLE log_2006 löscht nur die Merge-Tabelle.



MfG Sascha Ahlers

[1] Nach der Komprimierung sind keine schreibenden Zugriffe mehr möglich, dafür müsste die Tabelle erst wieder dekomprimiert werden. Auch müssen die zu komprimierenden Tabellen vorher aus der Merge-Tabelle herausgenommen werden, nach abgeschlossenden Komprimierung können diese dann wieder hinzugefügt werden.


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Borsti
#6 Geschrieben am: Di 10.01.2006, 00:48 (+00:15)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 2.12.2005


Vielen dank!

Das ist ja echt eine geniale idee wub.gif
Das kann man ja wunderbar dynamisch machen.
Und man hat dann ja wirklich alle daten schon in einzelne Segmente (Monat) aufgeteilt.

Das ganze könnte man ja auch ohne Merge Tabelle machen oder?
Trotzdem, kennst du vieleicht ein tutorial oder artikel der merge Tabellen ausführlich erklärt!

Also vielen, vielen dank der tip war das was ich gesucht habe. Da ist die nacht ja heute gerettet und kann zum programmieren genutzt werden. biggrin.gif

MFG


--------------------
http://www.ppcps.de *Pocket PC, PDA und Smartphones
Top
PMUsers WebsiteICQAOLYahooMSN
Top
 
Sascha Ahlers
#7 Geschrieben am: Di 10.01.2006, 02:18 (+01:30)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1699
Mitglied seit: 27.12.2004


QUOTE (Borsti @ Di 10.1.2006, 0:48)
[...] Trotzdem, kennst du vieleicht ein tutorial oder artikel der merge Tabellen ausführlich erklärt! [...]

Nein, ich kenne leider keine Tutorials oder Artikel zu dem Thema, da ich mich selber dort eher auf meine Beiden MySQL-Bücher verlasse oder der MySQL-Dokumentation.
Alles andere habe ich über die Jahre zuvor in erlernt, hauptsächlich dadurch, weil ich mich für Funktionsabläufe von Anwendungen interessiert habe.

Theoretisch kann man es auch ohne eine Merge-Tabelle machen, aber wenn man eine Übersicht über ein Jahr erstellen möchte, ist eine Merge-Tabelle außerordentlich hilfreich dabei.



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Borsti
#8 Geschrieben am: Di 10.01.2006, 05:04 (+02:46)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 2.12.2005


QUOTE (Sascha Ahlers @ Di 10.1.2006, 2:18)
Nein, ich kenne leider keine Tutorials oder Artikel zu dem Thema, da ich mich selber dort eher auf meine Beiden MySQL-Bücher verlasse oder der MySQL-Dokumentation.
Alles andere habe ich über die Jahre zuvor in erlernt, hauptsächlich dadurch, weil ich mich für Funktionsabläufe von Anwendungen interessiert habe.

Schade auch, dann wird man wohl selber googlen dürfen. wink.gif

QUOTE
Theoretisch kann man es auch ohne eine Merge-Tabelle machen, aber wenn man eine Übersicht über ein Jahr erstellen möchte, ist eine Merge-Tabelle außerordentlich hilfreich dabei.


Mann kann doch dann die abfrage per "JOIN" machen oder habe ich da jetzt einen denk fehler?



So bin dann erstmal in den federn! biggrin.gif
Bis morgen!


--------------------
http://www.ppcps.de *Pocket PC, PDA und Smartphones
Top
PMUsers WebsiteICQAOLYahooMSN
Top
 
Sascha Ahlers
#9 Geschrieben am: Di 10.01.2006, 13:02 (+07:58)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1699
Mitglied seit: 27.12.2004


QUOTE (Borsti @ Di 10.1.2006, 5:04)
[...] Mann kann doch dann die abfrage per "JOIN" machen oder habe ich da jetzt einen denk fehler? [...]

Ich mein nicht. JOIN ist doch eher dafür gedacht um Tabellen untereinander zu verknüfen, um darauß einen kompletten Datensatz zu bilden. Ich denke aber nicht, dass es dafür geeignet ist mehrere Tabellen nach einzelnen Datensätzen abzufragen. Dazu müssten einzelne Abfragen erstellt werden, und über die Anwendung entsprechend zusammengefügt werden (, wenn keine Merge-Tabelle benutzt wird).



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Borsti
#10 Geschrieben am: Di 10.01.2006, 22:18 (+09:16)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 2.12.2005


Hi,

nach gründlicher recherche im inet muss ich die recht geben. rolleyes.gif

Werde dann wohl merge tabellen nutzen. Nach bisherigem lesen scheinen diese ja auch recht bequem zu erstellen und verwalten sein.

Also wenn es probleme gibt dann melde ich mich wieder ansonsten, danke euch allen für euere hilfe! Bin mir ein ganzes stück klarer über die strucktur geworden.

MFG


--------------------
http://www.ppcps.de *Pocket PC, PDA und Smartphones
Top
PMUsers WebsiteICQAOLYahooMSN
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/10020

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
MySQL Abfrage von zwei Tabellen webdoktor 154 6 Do 31.07.2008, 15:26
MySQL Ausgabe zwei Tabellen Brian Folte 233 5 Do 17.04.2008, 12:16
PHP Tabellen <tr> einfügen Brian Folte 253 5 Di 15.04.2008, 15:17
Speisekarte interessant gestalten Jan-Remmer Harms 2140 16 Fr 19.10.2007, 11:55
Tabellen anlegen matador 161 3 Mi 27.06.2007, 19:38
Tabellen mit css Webi 282 2 Mi 24.01.2007, 08:34
Tabellen-Problem? vendy 409 6 Di 29.08.2006, 06:56
Kann man in MySQL Tabellen kopieren? stud3 3699 18 Sa 13.05.2006, 10:49
Gutscheine optimal im Internet verteilen, wie? Yel Nats 404 1 Di 11.04.2006, 10:35
mysql temporäre Tabellen Tuemmel 1371 0 Fr 24.02.2006, 16:31




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]