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

Go Discussion :

Convertir script ruby en Go


Sujet :

Go

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Points : 102
    Points
    102
    Par défaut Convertir script ruby en Go
    Bonjour à tous,

    Suite à mes difficultés avec le split de gros fichiers XML, j'ai fini par trouver et adapter un script Ruby

    Code RUBY : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    require 'xml'
     
    XML_FILE = './exported_0.xml'
     
    # A special file class that we'll write its output in
    # successive files with the same number of items in it
    # (except for the last one which size may vary)
    class SplitFile
      def initialize(template_name, items_per_file)
        @template_name = template_name
        @items_per_file = items_per_file
        @item_count = 0
        @file_index = 0
        @fh = open()
      end
     
      def write(content)
        @fh.write(content)
        @fh.write("\n")
        @item_count += 1
        if @item_count == @items_per_file
          self.close()
          self.open()
        end
      end
     
      def open
        exit if @file_index == 3
        @file_index += 1
        @fh = File.open(self.batch_name(), 'w')
      end
     
      def close
        @fh.close
        @item_count = 0
      end
     
      def batch_name
        @template_name % @file_index
      end
    end
     
    # XML Processor to split the Product records into
    # smaller XML chunks
    class XMLSplitProcessor
     
      def initialize(xml_sourcefile, split_filename_template)
        @split_filename_template = split_filename_template
        @file_handle = SplitFile.new(split_filename_template, 1000)
        @reader = XML::Reader.file(xml_sourcefile)
      end
     
      def run
        while @reader.read do
          self.process_node()
        end
      end
     
      def process_node
        if @reader.name == 'Product' && reader.node_type == XML::Reader::TYPE_ELEMENT
          @file_handle.write(@reader.read_outer_xml)
          @reader.next
        end
      end
     
    end
     
    # Main
    XMLSplitProcessor.new(XML_FILE, "batch_%s.xml").run

    Il tourne en 15min pour un fichier de 20Go.

    A l'avenir je vais avoir des fichiers de l'ordre de 150Go, et je voudrais prendre les devant en optimisant ces 15min.
    C'est pourquoi je me tourne vers le langage Go qui semble à propos.
    Mais je ne connais rien du tout. Du coup je tente de me dépatouiller avec ça, mais il n'y a encore fort peu de doc sur le Go, surtout traitant du XML.
    Si jamais vous avez des idées je suis preneur.

    Merci

  2. #2
    Membre averti Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 226
    Points : 329
    Points
    329
    Par défaut
    Bonjour delta07,

    Si déjà tu fais du Ruby, pourquoi pas plutôt le convertir en Crystal ?

    https://crystal-lang.org/

    Alors je ne sais pas, si c'est Go ou Crystal le plus rapide des deux pour cela, mais c'est sûr que ça sera bien plus rapide qu'en Ruby ;-).

    Voir Rust peut-être que c'est mieux…

    https://www.rust-lang.org/

    Je regarde si j'ai le temps à un moment, je te le convertie ;-)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 100
    Points : 150
    Points
    150
    Par défaut
    Au final, tu as utilisé quoi ?

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Finalement, rien. J'ai gardé mon script tel quel.

    Le reste du process est tellement lent que, 30 ou 15 min pour du split, c'est pareil.

Discussions similaires

  1. Convertir script Python en Ruby
    Par zelegolas2 dans le forum Ruby
    Réponses: 2
    Dernier message: 03/05/2011, 18h53
  2. Packager des scripts Ruby ?
    Par GLDavid dans le forum Ruby
    Réponses: 4
    Dernier message: 03/03/2008, 17h15
  3. Licence Ruby et licence d'un script Ruby
    Par tsing dans le forum Ruby
    Réponses: 2
    Dernier message: 20/02/2008, 22h34
  4. Réponses: 3
    Dernier message: 07/11/2007, 17h26
  5. [VIM] Etendre VIM avec des scripts ruby
    Par swirtel dans le forum Ruby
    Réponses: 3
    Dernier message: 10/03/2007, 15h57

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