Rolf b: 50 Mio Datensätze Zuordnung, Abfragen, Performance

Beitrag lesen

Direkt gestreut? Was ist das, eine Mischung aus Direktzugriff und Hashing? Du wirst wohl eher eine Datei mit direktem Zugriff meinen (d.h. die Speicherposition wird eineindeutig und kollisionsfrei aus den Dateninhalten bestimmt, bei Hashing kann es Kollisionen geben).

Aber warum brauchst Du überhaupt eine Fragentabelle? Wenn User A gegen User B spielt und gleichzeitig irgendwo anders der User C gegen User D, spricht doch nichts dagegen, wenn beide die gleiche Frage bekommen. Der Fragengenerator muss ein paar Fragen auswürfeln und dann für A UND B (bzw. für C UND D) prüfen, ob ihnen diese Fragen neu sind. Um das zu prüfen, brauche ich keine übergreifende Fragentabelle, nur die gespielten Fragen pro User.

Allerdings haben wir ja mittlerweile auch gelernt, dass sich die Fragen in der App wiederholen und das Thema vom App-Hersteller gar nicht angegangen wurde. Die haben sich diese Riesen-DB lieber gespart :) Insofern ist unser Gespräch rein akademisch, aber das macht ja auch Spaß...

Für den User halte ich den Ansatz mit einer Tabelle pro User für nicht so gut, weil man dann eine Direktzugriffsdatei pro User braucht und dann das Problem bekommt, 50.000.000 Dateien für die App zu managen (ist vielleicht kein Prob für Unix, für Windows wär's eins). Also, wenn man es schon ohne DB machen will, dann lieber eine Riesendatei (bzw. über Nummernkreise der Usernummer in mehrere Riesendateien partitionieren) und da einen zusammenhängenden Bereich pro User reservieren, in dem sich die Map der gespielten Fragen findet. Als einfache Lösung ein Byte pro Frage, als etwas kniffligere Lösung ein Bit pro Frage (siehe meinen Bitmap-Vorschlag von oben). Kleines Problem ist, dass gelöschte User Löcher in der Datei hinterlassen, dafür bräuchte man entweder eine Logik, die freiwerdende Usernummern wiederverwendet oder man schaltet eine Indirektion ein und verwendet zum Positionieren in der Direktzugriffsdatei Blocknummern, die man beim Registrieren dem User zuordnet.

Ob sich das dann performancemäßig lohnt, oder ob man die User-Fragen-Map doch wieder als Spalte in der User-Tabelle aufnimmt - wer weiß...

Rolf