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

Entrée/Sortie Java Discussion :

Accéder à une donné X dans un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Accéder à une donné X dans un fichier
    Bonjour,

    dans le cadre d'une application, on doit stocker un grand nombre d'informations dans des fichiers et y accéder ensuite de manière aléatoire...

    C'est à dire, que si nous entrons 25000 données on va devoir ensuite aller rechercher ces 25000 données dans le fichier, mais accéder une seule fois à chacun (via la classe Random).

    Le problème est donc, comment accéder à une donnée X dans un fichier...

    On ne peut pas se permettre de faire une boucle pour aller à chaque ligne, ca prendrait beaucoup trop de temps, vu que nous aurons environ 7 fichiers comme ça avec de 20'000 à 150'000 données par fichier...

    On a pensé aux fichiers binaires, c'est possible à réaliser ? Ou alors une autre solution ? Voire même une solution native qui permettent d'aller à une ligne x dans un simple fichier (mais vraiment dans le pire des cas ).

    d'avance

    Si vous voulez des précisions, n'hésitez pas

  2. #2
    Membre régulier Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Je proposerais d'enregistrer tout ton fichier dans un Vector<String> dont chaque String correpsond à une ligne du fichier. Ca va prendre du temp mais cela ne se fera qu'une seule fois au début du programme.

    Ensuite, on tire un nombre aléatoire et on retire le String se trouvant à tel position dans le Vector.
    La forme des pyramides le prouve, l'homme a toujours eu tendance à en faire de moins en moins.

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par BoudBoulMan
    Je proposerais d'enregistrer tout ton fichier dans un Vector<String> dont chaque String correpsond à une ligne du fichier. Ca va prendre du temp mais cela ne se fera qu'une seule fois au début du programme.

    Ensuite, on tire un nombre aléatoire et on retire le String se trouvant à tel position dans le Vector.
    C'est possible en effet, mais je risque d'être limité du coté de la mémoire. Je me rappelle plus des chiffres exacts, mais on doit pas être loin de 500'000 données à stocker... En sachant qu'une données et une chaîne de caractère...

    C'est pour ça que je préfèrerais une méthode stockée.

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Si tes données ont un format bien défini, alors tu peux utiliser un fichier binaire couplé à un fichier d'index faisant correpondre à une clef une position et tu peux aors aller directement à la position voulue grâce à la classe random(je suppose que tes données sont regroupées de telle ou telle façon).

    Ensuite il te suffit de charger ton index ( qui est largement plus petit) en mémoire et et de naviger dans ton gros fichier à l'aide de celui ci.

    Le principal problème viens avant tout de la forme des données que tu dois stocker, de la façon dont elles dont ordonnées...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    Si tes données ont un format bien défini, alors tu peux utiliser un fichier binaire couplé à un fichier d'index faisant correpondre à une clef une position et tu peux aors aller directement à la position voulue grâce à la classe random(je suppose que tes données sont regroupées de telle ou telle façon).

    Ensuite il te suffit de charger ton index ( qui est largement plus petit) en mémoire et et de naviger dans ton gros fichier à l'aide de celui ci.

    Le principal problème viens avant tout de la forme des données que tu dois stocker, de la façon dont elles dont ordonnées...
    Mes données sont des chaînes de caractères de longueur tout à fait variables... Ca peut être des mots ou un ensemble de plusieurs mots...

    Mes données sont pas vraiment regroupées, elles sont extraites de la base de données de manières séquentielles. J'aurai plusieurs fichier pour les stocker, chacun représentant ce qu'est la donnée (un nom, un prénom, ...).

  6. #6
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    +1 pour les indexes. Tu stock dans le fichier index ( ou List selon la taille ) toutes les positions de débuts de ligne.
    Ce fichier index contiendra des variables de type "long", pour permettre à la classe RandomAccessFile de faire le "seek(long position)" voulu puis de récupérer la ligne.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Les bases de données c'est fait pour ce genre de chose.
    Coder un composant qui stocke des lignes dans des fichiers c'est refaire une base, avec les bugs et la sueur en plus

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par the-gtm
    Les bases de données c'est fait pour ce genre de chose.
    Coder un composant qui stocke des lignes dans des fichiers c'est refaire une base, avec les bugs et la sueur en plus
    Tu as peut-être raison, on va peut-être stocker ça dans des tables temporaires...

    On voulait rester sur l'idée de fichier pour s'affranchir d'une table et pour réutiliser les données plus tard.

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Sinon, on a eu une autre idée :

    Employer des fichiers excels et les manipuler avec POI.

    Quelqu'un sait si POI charge tout en mémoire ou non ? Et aussi si on peut accéder à une donnée d'une ligne X

  10. #10
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    POI sur de tels volumes tu peux oublier directement....
    Mieux vaut encore des fichiers textes ou binaires dont tu gère le format.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  11. #11
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    POI sur de tels volumes tu peux oublier directement....
    Mieux vaut encore des fichiers textes ou binaires dont tu gère le format.
    En fait, je viens de tester et ca marche plutôt bien

    J'ai essayé avec un fichier Excel de 30'000 lignes et plusieurs dizaines de milliers d'accès à des lignes aléatoires et c'est concluant, le temps est très faible et la montée en charge très correcte.

    Et pour répondre à ma question, POI charge bel et bien tout en RAM, mais ca reste correct si ce ne sont que des données texte.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Animer une donnée récupérée dans mon fichier JSON
    Par opmqopmq dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/08/2014, 09h30
  2. Réponses: 17
    Dernier message: 07/08/2014, 23h02
  3. Réponses: 2
    Dernier message: 14/05/2007, 09h40
  4. accéder à une variable déclarée dans un autre fichier
    Par sg.forums dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/10/2006, 09h20
  5. Chercher une donnée existante dans un fichier
    Par BXDSPORT dans le forum Langage
    Réponses: 4
    Dernier message: 09/10/2005, 18h04

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