[DB] Reloadsperre - Datenbankaufbau

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hi, ich wollte euch mal fragen
wie man am besten eine Tabelle für eine Reloadsperre gestaltet

D.h. dort werden täglich ca. 1 mio DB abrufe geschehen mit ca. 500.000 oder mehr einträgen.

Was drin sein muss ist
IP / time / kampangen id

denke die 3 sachen währen schon mind. nötig.
Es wird ja geprüft ob die ip bei der kamp. schon inner Reload drin steht wenn nicht
soll noch ein Eintrag in die DB geschrieben werden

1. inner Reloadtabelle
2. inner Klicktabelle (um klicks zu zählen)

Der Aufbau der Klicktabelle währ auch sehr interessant.

id / kampid / time

so das sollte auch mind. dort drin sein, gut währ natürlich noch ein referer
 
Tipps für mehr Performance:
Index richtig setzen (Auf die Kombination von IP und Kampagne)
IPs nicht als Text (varchar o.ä.) sondern als Integer speichern.

Ansonsten sieht der Ansatz so grob richtig aus.
 
Tipps für mehr Performance:
Index richtig setzen (Auf die Kombination von IP und Kampagne)
IPs nicht als Text (varchar o.ä.) sondern als Integer speichern.

Ansonsten sieht der Ansatz so grob richtig aus.

IPs als Int speichern??
Bei mir speichert der die ip dann ohne . (logisch, halt INT) und leider auch nur die ersten 7 Zahlen meiner ip :roll:
 
IPs als Int speichern??
Bei mir speichert der die ip dann ohne . (logisch, halt INT) und leider auch nur die ersten 7 Zahlen meiner ip :roll:

PHP:
$ip = intval( str_replace(".", "", $_SERVER['REMOTE_ADDR']) );

Zum Vergleichen müsstest du das dann auch immer machen.

Nachteil:
Folgende IPs z.B. sind gleich:
15.153.19.187 und 151.53.19.187
1515319187 wird dann ja aus beiden gemacht.


Also ich würde die IPs als VARCHAR(15) speichern.
 
PHP:
$ip = intval( str_replace(".", "", $_SERVER['REMOTE_ADDR']) );

Zum Vergleichen müsstest du das dann auch immer machen.

Nachteil:
Folgende IPs z.B. sind gleich:
15.153.19.187 und 151.53.19.187
1515319187 wird dann ja aus beiden gemacht.

Das meint Veers aber mit sicherheit nicht... ich denke er mein mehr ip2long() (PHP) bzw. INET_ATON() (Mysql).
 
Also ich würde die IPs als VARCHAR(15) speichern.
Dann verbrauchst du 16 Bytes, wo du eigentlich nur 4 Bytes bräuchtest. Macht also einen Mehrverbrauch an Speicher von 300% ;)

Für alle, die nicht wissen, wie besagte Funktionen funktionieren:
Eine IP-Adresse sieht ja so aus xxx.xxx.xxx.xxx, wobei xxx im Bereich 0 ≤ xxx ≤ 255 liegen. Ein Byte hat genauso den Wertebereich von 0 bis 255. Rechnet man jetzt jede einzelne der vier Zahlen der IP-Adresse als ein Byte in einer 4-Byte-long-Zahl, dann kommt das Ergebnis raus.

Noch ein Beispiel:
  • IP-Adresse:
    192.168.178.42
  • Im Hexformat sieht das so aus:
    0xC0.0xA8.0xB2.0x2A
  • Jetzt die Punkte weglassen:
    0xC0A8B22A
  • Und zurück ins Dezimalsystem:
    3232281130 (unsigned long) bzw. -1062686166 (signed long)
 
@theHacker: Ist dann das "Endprodukt" dann genauso "einmalig" wie die IP-Adresse? Und hat es dann nurnoch 4-Byte Speicherverbrauch?