phpbar.de logo

Mailinglisten-Archive

70 Mio =?ISO-8859-1?Q?Eintr=E4ge?= in MySQL-DB?

70 Mio Einträge in MySQL-DB?

M.Albrecht mysql-de_(at)_lists.bttr.org
Mon, 11 Mar 2002 16:15:24 +0100


Moin,

> ich habe hier einen Job bei dem ich 70 Mio. Einmal-Passwörter (32 Zeichen
> lang) in eine MySQL-Datenbank legen soll. Gibt ein User ein Passwort ein
> wird dieses - falls vorhanden - aus der DB gelöscht und ist damit verfallen.
> 
> Denkt ihr so einen gigabytegroßen Dartenklotz kann ich MySQL anvertrauen? Es
> geht nur um eine Tabelle in der lediglich zwei Spalten (id, und passwort)
> existieren. Wird das nicht extrem lange dauern zu prüfen ob ein Passwort
> gültig ist? Natürlich würde ich einen Index über die passwort-Spalte
> anlegen.


Da ich selber (siehe meine Mails hier) erhebliche Performance-Probleme mit 
mySQL erfahren habe, würde ich an diese (eher triviale) Aufgabe _nicht_ mit 
einer SQL-Datenbank herangehen (denn es gibt ja eigentlich keinen Bedarf dafür).

Denkanstoß: die Passwörter werden anhand ihrer Anfangsbuchstaben in 
Einzeldateien aufgesplittet (Beispiel: 52 Dateien, jeweils 26 für die Groß- 
und 26 für die Klein-Buchstaben). Damit teilt man die Datenmenge auf schonmal 
  grob 52 lediglich 40MB große Dateien auf (und hat einen "Minimal-Index"). 
Wenn numerische Zeichen zugelassen sind, kann die Aufteilung weiter 
verfeinert werden. Innerhalb der Dateien ist jedes PW 32 Zeichen lang (wird 
also mit Leerzeichen aufgefüllt), dadurch ist, anhand einer Abfrage auf die 
Zeichencodes des eingegebenen Passwortes die (ungefähre) Position innerhalb 
der 40MB-Datei einfach zu finden und mit fseek(position,OFFSET_START) 
angefahren (dort wird ein fgets auf die Zeile gemacht, verglichen, ob dieses 
gefundene PW "größer" oder "kleiner" dem eingegebenen ist und entsprechend 
vorwärts oder rückwärts ge"seek"ed bis zum Treffer). Danach wird die Datei 
ohne die gefundene Zeile neu geschrieben. Wird das eingegebene PW nicht 
gefunden, ist es schon verbraucht.

Das ist - natürlich - nur ein Denkanreiz. Wenn man die benötigten Funktionen 
aber compiliert, ist es mit an Wahrscheinlichkeit grenzender Sicherheit 
erheblich performanter (und resourcensparender!!!) als mySQL.

Marc Albrecht

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive