IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Indexation permanente d'un serveur de fichiers


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut Indexation permanente d'un serveur de fichiers
    Salut à tous !

    juste une petite question sur les possibilités offertes par Java :

    J'ai besoin d'avoir une base de donnée contenant tous les noms, chemins et dates de dernières modifications de tous les fichiers présents sur mon serveur.
    Seulement il y en a une énorme quantité (+100 000 et bientôt plus), et le traitement prend quelque minutes.

    Le problème c'est que j'ai besoin d'avoir une base presque toujours à jours et si je lance mon programme qui remplit ma base de données que toutes les heures, ma base n'est pas a jour des fichiers crées et/ou modifier durant la dernière heure.
    Seulement si je lance mon programme tous les 10min, mon programme va lire et relire indéfiniment les fichiers présent sur mon serveur, et donc le ralentir continuellement...

    Comment puis-je faire pour avoir une base constamment à jour ? Existe-t-il un moyen d'obtenir seulement les nouveaux fichiers (et ceux modifiés) depuis la dernière exécution du programme ? Ou alors lire dans le snapshot du serveur, ou quelque chose comme ça ?

    Je suis perdu la...

  2. #2
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Le seul moyen, c'est d'intercepter les appels de l'OS au système de fichier ; dans tous les autres cas, tu n'as aucune garantie de détecter toutes les modifications.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Java 7 (pas encore sorti) fournira un système de "watch" sur des fichiers et/ou dossier. Reste à savoir si ça supportera la charge d'un serveur complet.

    Maintenant, en général, l'OS fournis déjà un service d'indexation, il serait peut être plus utile de l'utiliser. Sous linux tu as par exemple "locate" qui indexe tous les fichiers.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    775
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 775
    Par défaut
    Bonjour,

    Déjà il faudrait voir s'il n'y a pas une solution applicative simple à mettre en place. L'application met à jour un fichier ou créé un nouveau fichier et en même temps modifie l'index.

    Tout dépend de ce qui tourne sur ton serveur.

  5. #5
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    ça ne s'appelle pas une solution de gestion documentaire ?
    Genre Alfresco ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    D'abord, merci à tous pour vos réponses !

    Les fichiers en questions sont modifier par différents utilisateurs par divers logiciels, donc aucune possibilité de mettre a jour ma base lors d'une modification.

    Je pense que je doit checker mon serveur toutes les heures par exemple et mettre a jour ma base.

    Le problème c'est que soit je ré-insert TOUS les fichiers, cela qui me prendra une petite heures :
    récupérer récursivement tous mes fichiers : environ 4 min, c'est correcte.
    Mais insérer en base ces 100000 fichiers prend environ 1 heure

    Ou bien, 2ème solution : pour chaque fichier je vérifie qu'il est en base, si oui je vérifie si la date de dernière modification a changer, si oui j'Update. Ce qui fait 3 requêtes multiplier par 100000 fichiers :/

    Si le programme dure plus d' une heure, je pourrais pas l’exécuter toute les heures, mais toutes les N heures par exemple, et ma base ne sera pas a jour avant ces N heures...

    Quelqu'un a-t-il une idée pour augmenter les performances des ces insertion ou Update massif ? j'ai entendu parler de Spring qui est efficace mais je connais pas...

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    je crois que vous sous estimez la vitesse à laquelle les requetes SQL de recherche vont être exécutées.

    Et il n'est pas nécessaire de faire tourner votre application toutes les N heures, vous pouvez aussi la faire tourner en boucle (avec une pause si vous n'avez rien trouvé de neuf).

    Autre détail, vosu devez stocker le fichier dans la DB ou juste son existance + dates de modifications?

  8. #8
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Personne n'a lu ce qu'était Alfresco.
    C'est une solution de GED. Vous pouvez y poser vos fichier via FTP, CIFS ou aussi en appelant un WebScript.
    Les dates de mise à jour, la gestion de l'arborescence et les recherches (lucene) sont des fonctionnalités présentes par défaut dans la solution.

    Vouloir réinventer la roue n'est pas toujours le meilleur moyen.
    Attention : Si votre solution doit gérer quelques millions de documents, renseignez-vous plus en profondeur sur les best-practice d'Alfresco.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    NeptuS : Pour des raison interne à l'entreprise, Alfresco ne peut être envisagé, mais merci pour l'idée.

    tchize_ : Je dois seulement stocker Nom, Chemin, Date de dernière modification, c'est tout mais pas le fichier.
    Je vais essayer ma deuxième solution dans ce cas, peut être que 3 select seront plus efficace que 1 insert pour chaque fichier. Merci !!
    Néanmoins, notre serveur de fichier étant déjà beaucoup sollicité, je ne pense pas qu'un programme qui irait lire de manière permanente ce serveur soit une bonne idée...

  10. #10
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    De toutes façons, c'est clair qu'il est absurde de vérifier 100.000 fichiers alors que seule une infime partie sera modifiée ; il est clair qu'il faut intercepter d'une manière ou d'une autre les accès au système de fichiers ; si Alfresco (ou un autre) le fait, pourquoi pas ? Mais il doit y avoir encore plus simple, genre un module à ajouter au serveur... Il y a peut-être déjà un log, sur ce serveur, qu'il suffit d'analyser...

  11. #11
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Un proxy ?
    Si, au lieu "d'écouter" ce qu'il se passe sur le serveur, tu passe par un proxy qui va avoir la charge :
    1 - d'enregistrer tes infos en base
    2 - de poser le fichier au bon endroit

    Alors tu n'as plus de problème.
    Attention : bloquer l'accès direct au serveur de fichiers

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Par défaut
    Bonjour,

    L'OS sur le quel tourne votre programme ne peut-il faire le travail à votre place ?
    L'idée et de lancer une commande qui retourne la liste des fichiers modifiés depuis une certaine date/heure.

    Sous Unix/Linux la commande find peu peut-être le faire (je n'ai pas vérifié).

    Bonnes recherches

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Je ne crois pas que les selects soient nécessaire dans votre cas. Comme l'ensemble des données dans la DB correspondent à vos critères de test, mettez systématiquement à jour le row avec la donnée actuelle. C'est idiot dans votre cas de faire un select de la date et de la taille pour les comparer à l'actuel et voir si il faut faire un update


    Si vous n'avez pas la possibilité de vous insérer dans le trajet (par exemple en fournissant une serveur FTP à la alfresco), Je ne saurais que trop vous recommander avant de vous lancer dans le bazard de faire des tests avec les betas de java 7 pour voir si le watchservice ne conviendrais pas à vos besoins. Son role est justement d'intercepter les appels filesystem. Vous mettez votre liste de répertoires à surveiller dedans et c'est partis.

    Comme il devrait sortir fin aout si ma mémoire est bonne, ca pourrait vous convenir.

  14. #14
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    En y repensant, je me dis que ce que tu veux c'est juste un log (qui peut être vu comme une base de données contenant tous les accès). Dans ce cas, l'appli java client est là juste pour analyser le log et faire la présentation. Je ne peux pas croire qu'un serveur modifie un fichier sans qu'il y ait moyen d'avoir un log quelque part, sans programmation. Du coup peu importe le délai entre deux mises à jour d'une éventuelle base de données des fichiers...

    Et, euh : http://mail.openjdk.java.net/piperma...ly/000106.html

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Merde, j'ai raté sa sortie hier

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    Citation Envoyé par stephane.combes Voir le message
    L'OS sur le quel tourne votre programme ne peut-il faire le travail à votre place ?
    L'idée et de lancer une commande qui retourne la liste des fichiers modifiés depuis une certaine date/heure.
    Sous Unix/Linux la commande find peu peut-être le faire (je n'ai pas vérifié).
    L'OS est un Windows Serveur 2003 et pourrait potentiellement changer un jour, donc je ne peux pas explorer cette solution...


    Citation Envoyé par tchize_ Voir le message
    Si vous n'avez pas la possibilité de vous insérer dans le trajet (par exemple en fournissant une serveur FTP à la alfresco), Je ne saurais que trop vous recommander avant de vous lancer dans le bazard de faire des tests avec les betas de java 7 pour voir si le watchservice ne conviendrais pas à vos besoins. Son role est justement d'intercepter les appels filesystem. Vous mettez votre liste de répertoires à surveiller dedans et c'est partis.

    Comme il devrait sortir fin aout si ma mémoire est bonne, ca pourrait vous convenir.
    En effet tchize, sur le principe c'est exactement ce dont j'ai besoin (merci pour tes conseils).
    Néanmoins, Java 7 est peu être trop récent, il y à encore peu ou pas de tuto/aide, et certains utilisateurs ont des problèmes inconnu :
    http://developpef.blogspot.com/2011/...race-java.html

    Ici, il dit : "Ce code fonctionne correctement lors de la modification du fichier avec Notepad (de Windows). Mais dès que l'on essaie de modifier le fichier avec un autre éditeur (Notepad++ ou Eclipse), le WatchService réagit à deux évènements de modification."

    Dans mon cas, les fichiers sont modifiés par des progiciels bien spécifique, je ne veux pas courir le risque qu'une modification ne soit pas ou mal détectée.
    De plus, le watch se ferais sur environ 100Go pour environ 100 000 fichiers...

    Je vais donc opté pour une vérification régulière de mes répertoire (cela occupe mes serveur seulement 3 ou 4 minutes)...


    ps: désolé du retard mais j'étais en congés

  17. #17
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Si j'ai bien compris, le but du jeu est de verifier si un fichier est modifié d'après son heure de modification (sachant que dans ce cas, il est possible de faire une modification qui passera inapercue). Si c'est bien ca, le plus simple est de stocker l'heure de derniere modification d'un fichier et ne mettre à jour que ceux qui ont changé depuis le dernier indexage (ca fait beaucoup moins que tout re-inclure). Bien sur, il faudra aussi gerer le cas des fichiers supprimes. Mais pour ca, il suffira de faire une requete / repertoire, ce qui sera beaucoup mieux qu'une requete / fichier...


    Et au pire, s'il faut verifier tous les fichiers, il vaut mieux les recuperer par blocs plutot que 1 par 1 (il est plus efficace de faire 1 requete qui revoit 10 lignes qui 10 requetes qui renvoient 1 ligne)...

  18. #18
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par BobbyWeb Voir le message
    En effet tchize, sur le principe c'est exactement ce dont j'ai besoin (merci pour tes conseils).
    Néanmoins, Java 7 est peu être trop récent, il y à encore peu ou pas de tuto/aide, et certains utilisateurs ont des problèmes inconnu :
    http://developpef.blogspot.com/2011/...race-java.html
    JE vois pas en quoi c'est un problème. L'application (notepad++ / eclipse) fait plusieurs modifications consécutive du fichier, tu reois donc plusieurs events. A toi de trier les event. L'avantage est que t'as presque aucune chage pour java, contrairement à un scan régulier qui, en plus, pourrait tomber au milieu d'un modif ou sur un fichier verrouillé.

    Quand aux bugs de jeunesse de java 7, a toi de voir combien de temps tu va mettre à faire la release de ton application. Si c'est dans 6 mois, on aura vraissemblablement 1 ou deux release bugfix de java 7, puisque oracle tourne sur des cycles de 3 mois il me semble.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    Dans ce cas, ça m'intéresse !

    Aurais-tu de la doc ou un lien (tuto ?) pour m'aider ? Je ne connais pas du tout ce service...

    Dans mon précédent lien, il n'y a rien de commenté, difficile de comprendre le principe (un copier/coller ne m'intéresse pas).

  20. #20
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Fichier d'index avec HTACCES sur serveur IIS
    Par alas70 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 26/07/2009, 21h35
  2. [Reseau] Serveur de fichier, domaine interne, firewall, back
    Par nico33307 dans le forum Développement
    Réponses: 2
    Dernier message: 01/09/2005, 16h38
  3. Serveur de fichier Samba - problème accès Win XP
    Par rohstev dans le forum Réseau
    Réponses: 2
    Dernier message: 10/06/2005, 09h10
  4. Mise en place d'un serveur de fichier Samba/RedHat
    Par shaun_the_sheep dans le forum Réseau
    Réponses: 2
    Dernier message: 11/01/2005, 09h22
  5. Serveur de fichier Linux
    Par MrEddy dans le forum Réseau
    Réponses: 3
    Dernier message: 07/04/2004, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo