Wie indizere ich effektiv Datensätze ?

DagobertDokate

DagobertDokate

Dauergast
137
Hallöchen alle zusammen,

ich habe gerade einen Haufen Daten die ich gerne Indexieren würde (~13.000).
Diese beinhalten einmal einen Namen (String), und einen Key (String).

Mit welcher Datenstruktur Indexiere ich das ganze am besten, so das ich sowohl schnell nach dem Namen als auch nach dem Key suchen kann?
Iwie finde ich gerade keinen passenden Baum :D

lg.
 
Hallo Dagobert,

könntest Du mal bitte erklären , was Du mit "Indexieren" meinst ?
(Bei zwei Feldern eher ein wenig ungewöhlich)

Und dann wäre noch zu klären ,was der Container deiner Daten ist (SQlite, ASCII)

Und dann würde ich noch gerne wissen , wie du indexieren möchtest ?
Im Batch ?

So ganz spontan fällt mir eine SQlite Tabelle ein
 
Zuletzt bearbeitet:
Okay, ein bisschen Ausführlicher:
Ich habe eine Json-Datei mit Gemeinden in DE.
Diese haben einen Namen und ein Gemeindeschlüssel (~13.000 Stück wenn ich das richtig im Kopf habe).

Jetzt habe ich die Gemeinden in einen Radix Trie gesteckt und kann so die Gemeinde nach Namen in ~log(n) suchen.
Nur ist der Aufbau des Trie ziemlich teuer (~2.5 sec auf nem Nexus 7) und der Speicherverbrauch ist auch da (bewerten wir ihn hier erstmal nicht :D).
Jetzt habe ich noch eine GeoFunktion die mir den Gemeindeschlüssel liefert, in dem ich mich gerade befinde. Diese ist so aufgebaut das ich nen R-Tree mit BoundingBoxes habe. Dieser liefert mir also zu einem GeoPunkt den/die passenden Schlüssel zurück.
Es wäre einfach nice wenn ich keinen zweiten Radix Trie bauen müsste um jetzt effizient nach dem Gemeindekey zu suchen, sondern beide Attribute in einem Index berücksichtigen könnte.

Ja das ganze kann im Batch stattfinden, da statisch ;)

Ja ne Datenbank wäre cool :D Dafür müsste ich aber ziemlich tief in die App rein was ich aktuell gerne vermeiden würde.

lg.
 
Hallo Dagobert,

also ich würde Dir wirklich zu einer SqLite raten .

Tabelle incl. Boundings ( lat/lon) erstellen. im Batch einlesen (Index - file wird automatisch generiert) und fertig ist der Käse.

Das wird Dich maximal 1 Stunde kosten und du hättest alles drin .
(Zumal die Suche mit einem entsprechenden Query krachend schnell ist)

Zum Tree : Warum das Rad neu erfinden, wenn es das eh schon auf einem silbernen Tablett gibt ?
 
Naja die DB würde ja ähnlich indexieren. Deswegen erfinde ich das Rat ja nicht neu, sonder frage nach einer Indexstruktur^^
Ich glaube nicht, dass das einbauen einer DB in einer Stunde erledigt wäre. Dafür ist die App einfach zu groß.
Aber ich werde mal gucken, vllt sind meine Schichten ja doch wie ich hoffe und das austauschen geht relativ flott.
Danke für die Hilfe.

lg.
 
Ich glaube nicht, dass das einbauen einer DB in einer Stunde erledigt wäre. Dafür ist die App einfach zu groß.

Alles klar, kein Problem .. :)

Obwohl ich mir noch nicht ganz im Klaren darüber bin , was die Größe einer App mit dem
zusätzlichen Anlegen einer schnöden abgeleiteten Standard-Klasse zu tun hat .. :)

Ich wünsche Dir viel Erfolg
 
Zuletzt bearbeitet:
@markus.tullius : Ich gehe davon aus , dass er wahrscheinlich meint , dass das Einbinden einer SQlite
eine zusätzlich Library/Engine bedeutet und er deshalb vermutet , dass seine grosse App noch grösser wird.
 
Zuletzt bearbeitet:
Ja, aber ich denke, das Konstrukt mit den Radix Trie (Patricia-Trie) ist einfach zu langsam. Außerdem beansprucht das die Lösung mit SQLite wenige Arbeitsspeicher, weil er viel weniger Objekte vorhalten muss.
Dafür sind Datenbanken da, gerade die Sortier- und Suchalgorithmen sind von vielen Entwickler optimiert wurden.
 

Ähnliche Themen

L
Antworten
15
Aufrufe
890
jogimuc
J
C
  • CoderboyPB
Antworten
3
Aufrufe
915
swa00
swa00
OnkelLon
Antworten
13
Aufrufe
1.921
OnkelLon
OnkelLon
Zurück
Oben Unten