Pergunta

Eu estou trabalhando em um projeto Java que permite aos usuários para analisar vários arquivos com potencialmente milhares de linhas. A informação será analisada armazenados em diferentes objectos, os quais serão então adicionadas a uma colecção.

Uma vez que a GUI não vai exigir para carregar todos esses objetos de uma vez e mantê-los na memória, eu estou procurando uma maneira eficiente de dados de carga / descarga de arquivos, de modo que os dados só é carregado para a coleção quando um solicitações de usuários de TI.

Eu sou apenas opções de avaliação no momento. Eu também pensava no caso em que, depois de carregar um subconjunto dos dados na coleção, e apresentá-lo na GUI, a melhor maneira de recarregar os dados anteriormente observados. Volte a executar o analisador / coleta Populate / Preencher GUI? ou, provavelmente, encontrar uma maneira de manter a coleção na memória, ou serialize / desserializar a coleção em si?

Eu sei que subconjuntos de carga / descarga de dados pode ficar complicado se algum tipo de filtragem de dados é realizada. Vamos dizer que eu filtro em ID, por isso o meu novo subconjunto irá conter dados de dois subconjuntos analisados ??anteriores. Isso não seria problema é que manter uma cópia mestra de todo os dados na memória.

Eu li que google-coleções são bons e eficiente ao lidar com grandes quantidades de dados e métodos de oferta que muitas Simplifique de coisas de modo que este pode oferecer uma alternativa que me permita manter a coleção na memória. Este é apenas conversa geral. A questão sobre o que coleção para uso é uma coisa separada e complexo.

Você sabe qual é a recomendação geral sobre este tipo de tarefa? Eu gostaria de ouvir o que você fez com cenários semelhantes.

Eu posso fornecer mais detalhes, se necessário.

Foi útil?

Solução

Você pode incorporar um banco de dados para o aplicativo, como HSQLDB . Dessa forma, você analisar os arquivos pela primeira vez e, em seguida, usar SQL para fazer simples e complexos querys.

HSQLDB (HyperSQL DataBase) é o levando SQL motor de banco de dados relacional escrito em Java. Ele tem um driver JDBC e suporta quase cheio ANSI-92 SQL (Formato BNF árvore) além de muitos SQL: 2008 melhorias. Ele oferece um pequeno, rápido motor de banco de dados que oferece in-memory e mesas e suportes baseados em disco incorporado e modos de servidor . Além disso, inclui ferramentas tais como uma ferramenta SQL linha de comando e GUI ferramentas de consulta.

Outras dicas

Se você tem toneladas de dados, os lotes de arquivos, e você é curto na memória, você pode fazer uma varredura inicial do arquivo para indexá-lo. Se o arquivo é dividido em registros por avanços de linha, e você sabe como ler o registro, você poderia índice seus registros por locais bytes. Mais tarde, se você queria ler um determinado conjunto de indeces, você iria fazer uma pesquisa rápida para descobrir quais faixas de byte você precisa ler, e ler os de InputStream do Arquivo. Quando você não precisa desses itens mais, eles serão GCed. Você nunca vai realizar mais itens do que você precisa para o heap.

Esta seria uma solução simples. Tenho certeza que você pode encontrar uma biblioteca para lhe fornecer mais recursos.

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