# Java > Gnral Java > Persistance des donnes >  Stockage en java : JDBC, Fichier ;GC Collector ?

## bruno_nono

Bonjour,

Je travaille actuellement sur un projet en Java.

Ce projet a pour objectif de calculer au minimum 1 million de montant individuel pour 50 000 individus. 

J'ai rencontr un problme de stockage en java ''head space memory" aprs avoir mis en paramtre -xmx le problme a permis d'augmenter le nombre de donnes  stocker mais pas entirement..

On m'avait alors conseill d'utiliser les randomaccessfile, choses faites, cependant  la sortie le fichier faisait plus de 140 go et les temps de calculs (d  l'criture dans le fichier) avaient t rallongs de 12h. 

Je me suis alors mis en tte la mise en place d'une base de donnes (JDBC) afin de pouvoir stocker l'ensemble des ces montants. N'ayant jamais eu d'exprience oprationnel en base de donnes sur "un tel volume", je viens vers vous afin de savoir si cette solution en est bien une. Comment connatre la capacit maximale de stockage avec une BD (par rapport aux disques durs et aux donnes) et surtout comment prvoir la capacit minimale pour stocker ces informations (en fonction du type de variables...)

J'avais mme pens  faire du grid computing, afin d'amliorer les temps de calculer et stocker sur plusieurs PC en mme temps les rsultats...

Etant junior, le point de vue "mise en place" reste flou!!

Merci d'avance  :;):

----------


## dinobogan

Si tu cris dans ton fichier  chaque rsultat sans buffer, il est normal de "pourrir" les accs disques.
Tu devrais faire le test avec un java.io.BufferedOutputStream en ajustant la taille du buffer. Celui n'crira effectivement sur le disque que lorsque le buffer sera plein, et il crira un grand bloc d'information. Par contre c'est  toi de spcifier la taille du buffer : tu peux dbuter par 8 Mo par exemple.
La difficult est de trouver le juste milieu entre demander rarement un accs disque en criture et crire rapidement le buffer sur disque.

----------


## bruno_nono

Le problme se pose surtout pour la mise en place d'une base de donnes.

la solution du fichier tant moins performante que la DB car je dois stocker d'autres informations relatives aux montants (quel individu, etc...) et surtout pouvoir travailler avec (java, ou des DB)

----------


## Jimmy_

Il y a fichiers et fichiers, de mme qu'une base de donne sans index donnera des solutions toutes pourries. Mais les fichiers indexs c'est un peu la pr-histoire, mais aprs tout si le traitement si prette pourquoi pas.

JDBC n'est qu'une api d'accs a une Datasource. Il te faut utiliser une base de donne, comme Oracle, Mysql, etc ... correctement index.
Pour optimiser encore plus les accs tu peux avoir recours aussi a un cache comme ehcache par exemple.

Aprs il faut aussi rflechir a tes accs, evidement avoir 140Go de donne en RAM est impossible, mais si tu peux dcouper un peu ton algorithme.
Tu peux charger partiellement en RAM par paquet de 1Go par exemple et crire en un seul coup le rsultat. Ca sera plus rapide que de traiter un par un tes enregistrements.

Bref rflechir a une optimisation est un travail complexe, il n'y a pas toujours des outils tout fait pour a.

----------

