Ich habe eine große Sammlung von Daten, ungefähr 10 Millionen Einträge und ein Teil meines Programms erforderte sehr viele Mitgliedschaftskontrollen ...
%Vor%im Moment habe ich Daten als Wörterbuch Einträge mit allen ihren Werten gleich '1'
Ich habe auch ein Programm, das einen Algorithmus verwendet, um die gleichen Informationen herauszufinden, aber jetzt ist es langsamer als die Wörterbuch-Methode, aber ich erwarte, dass die Größe der Daten weiter wächst ...
Für meine aktuelle Wörterbuchlösung würde (Daten) als ein gefrorenes Set eingeben, oder Set (oder etwas anderes?) wäre schneller?
Und für die Zukunft, um herauszufinden, wann ich zu meinem Programm wechseln muss, weiß jemand, wie die Geschwindigkeit des Überprüfens der Mitgliedschaft mit dem Vergrößern der Größe eines Typs zusammenhängt, der hashable ist? Ist ein Wörterbuch mit 1 Milliarde Einträgen noch schnell?
Überhaupt
Wenn Sie erwarten, dass die Daten weiter wachsen, können Sie kein fixedset verwenden.
Eine Menge wäre kleiner als die eines Wörterbuchs, um zu testen, ob ein Element darin existiert. Es wäre in der Geschwindigkeit vergleichbar mit einem Wörterbuch-Lookup, da die Schlüssel und Items eines Sets beide für den Speicher gehashed und immer eindeutig sind. Wenn Sie keine mit dem Benutzernamen verknüpften Daten benötigen, verwenden Sie einen Satz.
Praktisch gesprochen ...
Wenn Sie mit so vielen Einträgen arbeiten, verschieben Sie die Daten in eine Datenbank . Sie werden schließlich keinen Speicher mehr haben, wenn Sie versuchen, all das im Speicher zu speichern und zu lesen. Mit einer Datenbank können Sie eine spezifische Abfrage zur Überprüfung der Mitgliedschaft ausgeben. Ernst. Legen Sie diese Daten in eine Datenbank.
Für diese Datenmenge hat RyPeck Recht - eine DB wird die Arbeit viel besser machen.
Noch ein Punkt: Etwas erscheint mir seltsam in dem, was du geschrieben hast: Wenn Sie ein Wörterbuch verwenden, um die Objekte der Mitgliedschaften zu speichern, wie lautet der Wert des Schlüssel-Wert-Paars in dem Wörterbuch "1"? Sollte das Schlüssel-Wert-Paar des Wörterbuchs nicht lauten: "id of a" - "a" wobei "a" das Objekt ist.
Es gibt mehrere Bytes Overhead pro Eintrag in einem Hash-fähig (ob Wörterbuch oder Satz macht keinen großen Unterschied), so für Milliarden von Einträgen werden Sie in Swapping laufen, es sei denn, Sie haben 32 + Gb Speicher für die Anwendung. Ich würde anfangen, nach einer schnellen DB zu suchen
Bei frozenset müssen Sie auch alle Daten zum Zeitpunkt der Erstellung in einer akzeptablen Form im Speicher haben, was wahrscheinlich die benötigte Speichermenge verdoppelt
Tags und Links python dictionary set hash