Indexing über Datenfelder

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Hallo!

ich habe eine Liste von dicts [{a:1,...},{a:2,...},...] und möchte da performant suchen. Zum Beispiel
find(a=2) ohne alles linear zu durchsuchen. Teilweise kann ich die zu indizierenden Felder vorher erraten (kann also komplexe Indexe aufbauen und pflegen) und teilweise sollten Indexe nur temporär, einmalig erstellt werden. Unter Umständen brauche ich sogar das ganze Äquivalent eines SQL joins gegen eine andere Liste.

Gibt es da Bibliotheken die mir da weiterhelfen? Welche Methoden würdet ihr für die drei Fälle vorschlagen?
BlackJack

@Gerenuk: Einen Index temporär für eine Abfrage aufzubauen macht keinen Sinn -- da ist linear suchen einfacher und schneller. Wenn Du tatsächlich DB-Operationen benötigst, dann solltest Du vielleicht auch tatsächlich eine DB verwenden. SQLite bietet sich da an. Da brauchst Du nicht einmal eine Datei, denn man kann auch "in-memory" Datenbanken anlegen.
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Ein Einmal-Index würde vielleicht doch Sinn machen, wenn ich viele Abfragen über eine sich nicht ändernde Datenmenge habe. Schon sowas wie ein SQL Join. Gut, beim Join gibt es ja wiederrum Sort-Join. Keine Ahnung was besser ist.

Und auf jeden Fall liegen die Daten als Python Klassen vor. Ich könnte sie zwar jedesmal in SQLite laden und dann SQL Operationen nutzen, aber danach müssten die Daten gleich wieder in Python Klassen. Fragt sich, ob das hin und her schnell genug ist.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Von welcher Geschwindigkeit und welcher Menge von Daten geht es denn?
Das Leben ist wie ein Tennisball.
Gerenuk
User
Beiträge: 69
Registriert: Donnerstag 21. Januar 2010, 22:27

Es geht um etwa 500000 Objekte. Meine bisherigen Methoden laufen eigentlich auch schon ohne Optimierung recht gut (3sec für eine Suche über Verlinkte Objekte und 3 Ebenen; die Objekte sind nämlich verlinkt). Aber eine flexible Indexinglösung könnte nochmal einen Faktor an Geschwindigkeit bringen. Im einfachsten Fall mache ich dicts als Indexe, aber vielleicht gibt es ja vorgefertigte Indexing Lösungen für noch cleverere Anwendungen. Insbesonde sollen die drei genannten Fälle abgedeckt werden.
Antworten