Mailinglisten-Archive |
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