Frage

Ich habe viele Geodata -Objekte erstellt (Name, Postalcode, Lat, Lon). Jetzt möchte ich sie in eine Sammlung einsetzen, um später nach verschiedenen Einträgen zu suchen.

Alles sollte unverzichtbar/in Memory passieren, sodass keine relationale Datenbank erforderlich sein sollte.

Eine solche Frage sieht aus wie:

  • Finden Sie Lat und Lon mit Namen oder PLZ
  • Finden Sie Objekte zwischen LAT1, LAT2 und LON1, LON2

Welche Sammlung ist die beste für eine solche "einfache" Datenstruktur?

Welche Komplexität wird für eine solche Frage benötigt? Kann Multithreading ein Vorteil sein? Wenn es so ist, welche Sammlung wird bestenfalls für die Gewindesicherheit verwendet?

Gibt es eine Chance, solche Abfragen in eine Key => Value -Datenbank zu schreiben?

War es hilfreich?

Lösung

Sie könnten eine verwenden In-Memory-Datenbank.

Das ist gut, da relationale Datenbanken gut für relationale Abfragen wie diese sind .... :-)


Für hausgemachte reiner Java, Du könntest benutzen:

  1. Map, mit dem Namen als Schlüssel
  2. Map, mit der PLZ als Schlüssel
  3. List<List<"object">> Mit Lat für die erste Liste, LON für die zweite Liste.
    Beide sind sortiert, sodass Sie für jede mithilfe der Binärsuche nach einem Wert suchen und ein Intervall effizient mit zurückgeben können subList.

Dies ist eine Duplizierung für die Schlüssel, jedoch nicht für alle Objekte, da Sie in all diesen Fällen dieselben Instanzobjekte wiederverwenden können.

Multi-Threading ist akzeptabel (wenn Sie es aus anderen Gründen brauchen), aber ich bezweifle, dass Sie es vorstellen müssen, um die Leistung einer einzelnen Suche zu verbessern. Die genannten Datenstrukturen sollten die richtigen Antworten in weniger als einer Millisekunde liefern!

Thread-Safety ist für diese Datenstrukturen kein Problem, da Ihr Anwendungsfall schreibgeschützt zu sein scheint. Wenn Sie in einem Fall die "Objekte" ändern müssen, können Sie nur die "Objekte" selbst schützen, nicht die zum Suchen verwendeten Datenstrukturen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top