Domanda

ho creato molti oggetti geodati (nome, postalCode, lat, lon). Ora voglio metterli in una raccolta per la ricerca per le diverse voci in seguito.

Tutto ciò dovrebbe accadere ad oggetti / in memoria, quindi non shouln't sia la necessità di un database relazionale.

Un tale query appare come:

  • Trova lat e lon per nome o plz
  • Trova oggetti tra LAT1, LAT2 e LON1, LON2

Che collezione è la migliore per un tale datastructure "semplice"?

Quello che la complessità è necessario per una query? Può multithreading essere un vantaggio? Se lo è, che la raccolta viene utilizzato al meglio per la sicurezza filo?

C'è la possibilità di scrivere tali query in un database di valore chiave =>?

È stato utile?

Soluzione

È possibile usare un database in memoria .

Questo è un bene, come i database relazionali sono buone per le query relazionali come questi ....: -)


Per fatta in casa Java puro , è possibile utilizzare:

  1. Map, con il nome come chiave
  2. Map, con la plz come chiave
  3. List<List<"object">> con LAT per la prima lista, LON per il secondo elenco.
    Entrambi sono ordinati, quindi per ogni è possibile cercare un valore utilizzando binario-search, e restituire un intervallo in modo efficiente con subList.

Ciò equivale a una duplicazione per le chiavi, ma non per tutti gli oggetti, come è possibile riutilizzare gli stessi oggetti istanza in tutti questi casi.

Multi-threading è accettabile (se il vostro bisogno per altri motivi), ma dubito è necessario introdurre per migliorare le prestazioni di una singola ricerca. Le strutture di dati menzionati dovrebbero fornire le risposte corrette in meno di un millisecondo!

Discussione di sicurezza non è un problema per queste strutture di dati, come il vostro caso d'uso sembra essere di sola lettura. Se è necessario modificare gli "oggetti" in qualche caso, allora è possibile proteggere solo gli "oggetti" stessi, non le strutture dati utilizzate per la ricerca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top