Question

J'ai créé de nombreux objets de géodonnées (nom, postalCode, latitude, longitude). Maintenant, je veux les mettre dans une collection pour rechercher différentes entrées plus tard.

Tout devrait se faire orientée objet / en mémoire, donc il shouln't un besoin d'une base de données relationnelle.

une telle requête ressemble à:

  • Trouvez latitude et par nom ou LON plz
  • Rechercher des objets entre LAT1, LAT2 et LON1, LON2

Quelle collection est le meilleur pour une telle structure de données « simple »?

Quelle complexité est nécessaire pour une telle requête? Peut multithreading être un avantage? Dans ce cas, quelle collection est utilisé au mieux pour la sécurité de fil?

Y at-il une chance d'écrire ces requêtes dans une base de données clé => valeur?

Était-ce utile?

La solution

Vous pouvez utiliser un base de données en mémoire .

Ceci est bon que les bases de données relationnelles sont bonnes pour les requêtes relationnelles comme celles-ci ....: -)


Pour home-made Java pur , vous pouvez utiliser:

  1. Map, avec le nom clé
  2. Map, avec le plz comme touche
  3. List<List<"object">> avec LAT pour la première liste, LON pour la deuxième liste.
    sont triés à la fois, donc pour chaque que vous pouvez rechercher une valeur à l'aide-recherche binaire, et retourner un intervalle efficace avec subList.

Cela équivaut à une duplication des clés, mais pas pour tous les objets, que vous pouvez réutiliser les mêmes objets d'instance dans tous ces cas.

Multi-threading est acceptable (si votre besoin pour d'autres raisons), mais je doute que vous devez introduire pour améliorer les performances d'une seule recherche. Les structures de données mentionnées doivent fournir les bonnes réponses en moins d'une milliseconde!

Réentrance n'est pas un problème pour ces structures de données, comme votre cas d'utilisation semblent être en lecture seule. Si vous avez besoin de modifier les « objets » dans certains cas, alors vous ne pouvez protéger eux-mêmes des « objets », et non pas les structures de données utilisées pour la recherche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top