Pergunta

Eu criei muitos objetos geodatos (nome, código postal, lat, LON). Agora eu quero colocá -los em uma coleção para procurar diferentes entradas posteriormente.

Tudo deve acontecer objetivado/em memória, para que não haja necessidade de um banco de dados relacional.

Essa consulta parece:

  • Encontre Lat e Lon pelo nome ou por favor
  • Encontre objetos entre Lat1, Lat2 e LON1, LON2

Qual coleção é a melhor para uma dados de dados "simples"?

Que complexidade é necessária para essa consulta? O multithreading pode ser um benefício? Se for, qual coleção é usada na melhor das hipóteses para segurança de threads?

Existe uma chance de escrever essas consultas em um banco de dados de chave => value?

Foi útil?

Solução

Você poderia usar um Banco de dados na memória.

Isso é bom, pois os bancos de dados relacionais são bons para consultas relacionais como essas .... :-)


Para caseiro Java puro, você poderia usar:

  1. Map, com o nome como chave
  2. Map, com o PLZ como chave
  3. List<List<"object">> com LAT para a primeira lista, Lon para a segunda lista.
    Ambos são classificados, portanto, para cada um, você pode procurar um valor usando pesquisa binária e retornar um intervalo com eficiência com subList.

Isso equivale a uma duplicação para as teclas, mas não para todos os objetos, pois você pode reutilizar os mesmos objetos de instância em todos esses casos.

Multi-threading é aceitável (se você precisar por outros motivos), mas duvido que você precise apresentá -lo para melhorar o desempenho de uma única pesquisa. As estruturas de dados mencionadas devem fornecer as respostas corretas em menos de um milissegundo!

Segurança de threads não é um problema para essas estruturas de dados, pois seu caso de uso parece ser somente leitura. Se você precisar modificar os "objetos" em alguns casos, poderá proteger apenas os "objetos", não as estruturas de dados usadas para pesquisar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top