Salut à tous !
Je suis nouveau sur ce forum, donc j'espère que j'ai bien placé mon post ! Sinon je m'en excuse et j'essaierai de faire le nécessaire pour le positionner à l'emplacement voulut.
Donc je vous explique rapidement mon problème
J'ai créé une application java qui parcourt des milliers de fichiers et qui en fait une signature numérique (md5), afin de détecter un fichier ajouté/modifié/supprimé.
Je dispose de plusieurs machines linux, c'est pour cela que je souhaite exécuter mon programme sur chaque machine (via SSH), afin d'aller plus vite ! Car pour l'instant sur une seule machine ça me prendrait environ 2 mois à tout parcourir et signer.
Bref, ce module étant réalisé, je suis en train de développer une autre application qui se chargera de répartir les répertoires à parcourir sur chaque machines.
J'ai dans ma base de données MySql une table qui contient les répertoires à parcourir ainsi que leurs poids.
J'ai donc calculé la taille moyenne qu'une machine peut parcourir (Poids total de tous les répertoires, divisé par le nombre de machines disponibles), et j'aimerai faire un petit algo qui va remplir la troisième colonne de ma table, à savoir le nom de la machine attribué au répertoire.
J'ai donc créé une classe DirectoryToParse qui contient 3 attributs : path, size et machineNumber.
J'ai également créé un Vector qui contient tous les directory sous forme d'objet DirectoryToParse trié par size croissant.
J'ai donc pensé à faire ça :
Le premier objet de mon Vector a-t-il une size supérieure à la taille moyenne qu'une machine peut parcourir ?
__oui -> Alors j'attribue une machine pour ce seul directory
__non -> Alors, le premier objet de mon Vector (avec la size la plus petite) + le dernier objet de mon vector (avec la size la plus grande) sont-t-il supérieur à la taille moyenne ?
______oui -> Ok j'attribue ces deux directory à une machine
______non -> idem avec premier objet + deuxième + dernier ?
__________ oui -> ...
__________non -> ...
Je pense que vous avez tous remarqué le problème dans mon algo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public static void createAllProcesses() { int nbOfPrecesses = 0; long totalSizeToParse = DBUtils.getTotalSizeToParse(); long maxSizeOfAProcess = totalSizeToParse / Constants.Constants.getNbOfEngine(); Vector list = new Vector(DBUtils.getListToParse()); int nbOfElement = list.size(); for (int i = 1; i <= nbOfElement; i++) { Model.DirectoryToParse firstDirectoryObject = (DirectoryToParse) list.get(i); long size = firstDirectoryObject.Size; if (size>=maxSizeOfAProcess) { nbOfPrecesses++; firstDirectoryObject.processNb = nbOfPrecesses; } else { while (size <= maxSizeOfAProcess) { Model.DirectoryToParse secondDirectoryObject = (DirectoryToParse) list.get(nbOfElement); nbOfElement--; long secondSize = secondDirectoryObject.Size; if (secondSize + size >= maxSizeOfAProcess) { nbOfPrecesses++; firstDirectoryObject.processNb = nbOfPrecesses; secondDirectoryObject.processNb = nbOfPrecesses; } } } } }
Il faut que je fasse une méthode récursive, à savoir une méthode qui s'appelle elle-même (j'espère ne pas dire de bêtises), cependant je n'arrive pas à savoir quelle partie du code isoler dans une méthode et comment l'organiser. Elle doit prendre en paramètre une size je suppose, mais je sais pas là je bloque...
J'espère avoir réussi à expliquer mon problème de manière assez claire..
Si vous avez des idées même si cela implique de changer totalement la logique de mon appli, je suis preneur !
Je trouve que ce que je fais n'est pas du tout propre donc je suis preneur pour toute suggestion !
Petites infos supplémentaires pouvant être importante :
Java: 1.7
IDE: NetBeans
Platform: Red Hat 5
BDD: MySql
Connector: JDBC
Merci à tous !
Partager