ubuntuboy schrieb:
Overhead war mir ja irgendwie bewußt aber um den Faktor 10.
Ich weiß nicht wie dicts in Python intern implementiert werden. Allgemein Skalieren Hash-maps aber nicht so gut, weil es immer das Problem mit Kollisionen gibt. Um das ganze Effizient zu machen, müssen die Kollisionen aufgelöst werden. Sowas kann eventuell deutlich schlimmer als Linear wachsen.
Bei so einem großen Dict, würde ich mir allerdings auch überlegen nicht so etwas wie redis zu verwenden.
Das mit dem redis verstehe ich nicht ganz denn ich nutze die Erweiterung nicht,
Welche Erweiterung? Redis ist eine Datenbank, die komplett im RAM läuft und auch ein Key-Value-Schema bereit stellt. Generell sollte man auch eine Datenbank passend zum Einsatzzweck wählen. Ein Key-Value-Schema ist in einer SQL-Datenbank auch nicht so gut aufgehoben.
leider wird dort nicht auf derlei Details eingegangen und ich bin noch nicht so lange mit Python unterwegs.
Solche Internas sind auch meistens nicht dokumentiert, weil das Implementierungsabhängig ist und nicht in den Sprachbericht kommen. Weiß nicht, ob man zu cpython etwas findet. Eventuell mal googeln.
Was die Größe angeht ich habe hier noch größere Indexe rumliegen und der Server hat auch noch genug Platz im Ram (16GB).
Ja, aber vorsicht: Du kannst nicht davon ausgehen, dass es pauschal einen Faktor 10 gibt, um den das Dict größer ist. Wenn es Quadratisch wächst, kannst du bei einer 1 GB Datei plöztlich mehrere dutzend GB-RAM-Verbrauch haben. Bei solchen Spielchen würde ich mir ein hartes RAM-Limit setzten, weil eine Linux-Kiste schnell mal unbrauchbar wird, wenn man den RAM sprengt.