2010-01-29 5 views
2

J'ai une application Java qui doit afficher de grandes quantités de données (de l'ordre de 1 million de points de données). Les données n'ont pas toutes besoin d'être affichées en même temps mais seulement lorsqu'elles sont demandées par un utilisateur. L'application est une application de bureau qui ne s'exécute pas avec un serveur d'applications ou qui utilise une base de données centralisée.Java traitant de grandes quantités de données

Mon idée était d'exécuter une base de données sur la machine et de charger les données là-dedans. La base de données ne sera lue que la plupart du temps, je devrais donc pouvoir indexer pour aider à optimiser les requêtes. Si je cours sur un système local, je ne suis pas sûr si je devrais essayer d'implémenter de la mise en cache (je ne suis pas sûr de la vitesse à laquelle les requêtes vont s'exécuter, je travaille actuellement dessus).

Est-ce une manière logique d'aborder le problème ou y aurait-il de meilleures approches?

Merci, Jeff

Répondre

2

L'affichage et les données sont deux choses différentes.

Vous ne donnez aucun détail sur l'un ou l'autre, mais il est possible de générer l'affichage en arrière-plan, en introduisant les données une tranche à la fois, puis en les affichant lorsqu'elles sont prêtes. Beaucoup de choses peuvent causer des problèmes de mémoire, alors vous devez faire attention. La base de données aidera à persister des choses, mais il ne vous aidera pas à obtenir dix livres de données dans votre sac de mémoire de cinq livres. MISE À JOUR: Si les individus ne lisent que quelques points à la fois, et que l'affichage n'est pas un problème, alors je dirais que n'importe quelle base de données sera capable de le gérer si vous indexez la table de manière appropriée. Un million de lignes n'est pas beaucoup pour une base de données capable.

+0

La partie d'affichage sera minimale.Seulement quelques points de données seront affichés à la fois, donc je ne suis pas trop préoccupé par cette partie maintenant. Fondamentalement, je vais récupérer une petite quantité de données (les enregistrements sont constitués de quelques chiffres et chaînes, rien de trop grand) d'un grand ensemble. –

+2

Je pense que si vous en montrez seulement quelques-unes à un moment donné, une base de données serait géniale. Interroger une table pour 10s de points au sein de millions devrait être assez rapide pour toute implémentation DB (correctement indexée bien sûr). – Matt

0

Eh bien, dépend de la taille des données. 1 million d'entiers par exemple n'est pas beaucoup, mais 1 million de structures de données/classes ou autre chose, disons, 1000 octets de taille, c'est beaucoup.

Pour les petites données: gardez-les en mémoire Pour les données volumineuses: je pense que l'utilisation de la base de données serait bonne.

Juste mon avis :)

modifier:

Bien sûr, il dépend aussi de la vitesse que vous voulez atteindre. Si vous avez vraiment besoin d'une vitesse élevée et que les données sont volumineuses, vous pouvez également mettre en mémoire cache certaines d'entre elles en mémoire et laisser le reste dans la base de données.

1

Cela dépend vraiment de vos données. Est-ce que plusieurs instances demandent les données? Sinon, il vaut vraiment la peine de chercher une base de données SQLite simple comme stockage. C'est juste un fichier unique sur votre système de fichiers. Pas besoin de configurer un serveur.

+0

Merci pour l'entrée. Ce sera une instance unique pour l'instant, donc je vais jeter un oeil à SQLite. Puis-je utiliser derby ou un autre Java java intégré? Je n'ai pas utilisé sql Lite auparavant. –

+0

C'est assez simple. Consultez le fil suivant pour une introduction: http://stackoverflow.com/questions/41233/java-and-sqlite Une autre base de données que vous pouvez consulter est HSQLDB (lien à l'intérieur d'une autre réponse dans ce fil). Celui-ci est un moteur de base de données relationnel écrit en Java également basé sur un seul fichier. –

Questions connexes