2011-04-10 4 views
2

Est-il possible de lire un fichier ligne par ligne avec Amazon S3? Je cherche à permettre aux utilisateurs de télécharger des fichiers volumineux quelque part, puis d'avoir du code (probablement exécuté sur Amazon) pour lire leur fichier ligne par ligne et faire quelque chose avec, probablement dans un mode multithread réduit par carte. Ou peut-être juste être capable de charger 1000 lignes à la fois ... Des suggestions?Lire le fichier ligne par ligne dans Amazon S3?

Répondre

1

Amazon S3 prend en charge les demandes de plage mais n'est pas conçu pour lire un fichier ligne par ligne.

Cependant, il ressemble Amazon Elastic MapReduce pourrait être un bon moyen ce que vous recherchez. Les transferts entre les instances S3 et EC2 utilisées seront très rapides et vous pourrez ensuite répartir le travail comme bon vous semble.

0

Voici un extrait exemple en PHP qui semble faire ce que vous demandez (saisit les 1000 premiers lignes fichier.txt et les concaténer). C'est un peu contrit, mais l'idée peut être implémentée dans d'autres langues ou en utilisant d'autres techniques. La clé est de traiter S3 même que vous le feriez pour tout autre système de fichiers comme Windows ou Linux, la seule différence étant que vous utilisez vos touches S3 et définissez les informations d'identification le chemin du fichier à s3: //your_directory_tree/your_file.txt ":

<?php 
    set_time_limit(0); 
    include("gs3.php"); 
    /* fake keys!, please put yours */ 
    define('S3_KEY', 'DA5S4D5A6S4D'); 
    define('S3_PRIVATE','adsadasd'); 

    $f = fopen('s3://mydir/file.txt', 'r'); 
    $c = ""; 
    $d = 0; 

    $handle = @fopen('s3://mydir/file.txt', "r"); 
    if ($handle) { 
     while (($buffer = fgets($handle)) !== false && $d < 1000) { 
      $c .= $buffer; /* concatenate the string (newlines attached)*/ 
      $d += 1; /* increment the count*? 
     } 
     if (!feof($handle)) { 
      echo "Error: unexpected fgets() fail\n"; 
     } 
     else{ 
      print "$c" 
     } 

     fclose($handle); 
    } 
?> 
Questions connexes