Quelle est la façon la plus efficace de charger des données à partir d'un fichier à une collection à la demande?

StackOverflow https://stackoverflow.com/questions/2434971

Question

Je travaille sur un projet java qui sera permet aux utilisateurs pour analyser plusieurs fichiers avec potentiellement des milliers de lignes. Les informations analysées seront stockées dans des objets différents qui alors seront ajoutés à une collection.

Depuis l'interface graphique ne nécessite pas de charger tous ces objets à la fois et de les garder en mémoire, je suis à la recherche d'un moyen efficace de charger / décharger des données à partir de fichiers, de sorte que les données ne sont chargées dans la collection lorsqu'un utilisateur le demande.

Je suis d'options d'évaluation en ce moment. J'ai aussi pensé au cas où, après le chargement d'un sous-ensemble des données dans la collecte et la présentation sur l'interface graphique, la meilleure façon de recharger l'a observé précédemment données. Relancez la collection analyseur / Peupler / GUI Populate? ou probablement trouver un moyen de garder la collection en mémoire, ou linéariser / désérialiser la collection elle-même?

Je sais que des sous-ensembles de chargement / déchargement de données peuvent se compliquer si une sorte de filtrage des données est effectuée. Disons que je filtre sur l'identification, donc mon nouveau sous-ensemble contiendra des données de deux sous-ensembles analysés précédents. Ce serait pas un problème est que je garde une copie maître de l'ensemble des données en mémoire.

J'ai lu que google-collections sont bonnes et efficaces lors de la manipulation de grandes quantités de données et méthodes d'offre qui simplifient beaucoup de choses afin que cela pourrait offrir une solution de rechange pour me permettre de garder la collection en mémoire. Ceci est juste de parler en général. La question de ce que la collecte à utiliser est une chose distincte et complexe.

Savez-vous quelle est la recommandation générale sur ce type de tâche? Je voudrais savoir ce que vous avez fait avec des scénarios similaires.

Je peux fournir plus de détails si nécessaire.

Était-ce utile?

La solution

Vous pouvez intégrer une base de données dans l'application, comme HSQLDB . De cette façon, vous analysez les fichiers la première fois et ensuite utiliser SQL pour faire querys simples et complexes.

  

HSQLDB (HyperSQL DataBase) est le   principal moteur SQL de base de données relationnelle   écrit en Java. Il dispose d'un pilote JDBC   et prend en charge la norme ANSI-92 presque complète SQL   (BNF sous forme d'arborescence) ainsi que de nombreux SQL: 2008   améliorations. Il offre un petit, rapide   moteur de base de données qui offre en mémoire   et des tables et des supports sur disque   modes Embarqués serveur .   En outre, il inclut des outils tels   en tant que ligne de commande outil SQL et GUI   outils de recherche.

Autres conseils

Si vous avez des tonnes de données, beaucoup de fichiers, et vous êtes à court de mémoire, vous pouvez faire une analyse initiale du fichier à indexer. Si le fichier est divisé en dossiers par sauts de ligne, et vous savez lire l'enregistrement, vous pouvez indexer vos enregistrements par des emplacements d'octets. Plus tard, si vous voulez lire un certain ensemble de indeces, vous feriez une recherche rapide pour trouver l'octet Ranges vous devez lire, et lire ceux de la InputStream du fichier. Lorsque vous n'avez pas besoin de ces articles plus, ils seront GCed. Vous ne serez jamais contenir plus d'objets que vous avez besoin dans le tas.

Ce serait une solution simple. Je suis sûr que vous pouvez trouver une bibliothèque pour vous offrir plus de fonctionnalités.

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