2012-11-02 1 views
1

Dans le AWS SDK, il répertorie le code rubis de la forme:AWS SDK liste S3 grands répertoires ne

s3 = AWS::S3.new 
bucket = s3.buckets[bucket_name] 
tree = bucket.as_tree(:prefix => 'myshop/products') 
directories = tree.children.select(&:branch?).collect(&:prefix) 

échouent erreur: « Impossible de trouver le marqueur dans la liste S3 réponse des objets »

Structure du répertoire

/myshop/products/1474472/original.jpg 
/myshop/products/1474472/small.jpg 
/myshop/products/1474472/mini.jpg 
/myshop/products/1333333/original.jpg 
/myshop/products/1333333/small.jpg 
/myshop/products/1333333/mini.jpg 

...

plus de 100 000 obj

Je veux vérifier que le répertoire (par exemple "1474472") a été créé

mon plan: aws-s3-liste-> rubis array-> trouver dans le tableau (array.include?)

!!! besoin de méthode très rapide - bientôt la fin du monde :)

+0

Je ne suis pas familier avec le SDK Ruby, mais S3 vous permet seulement de lister 1000 objets à la fois, alors la liste de 100 000 objets va entraîner au moins 100 requêtes HTTP. Si vous voulez vérifier l'existence d'un objet particulier, l'envoi d'une requête HEAD pour cet objet est le meilleur moyen. Il semble que vous voulez vérifier qu'un ou plusieurs fichiers correspondent à un préfixe donné, ne pouvez-vous pas simplement adapter votre recherche de préfixe existante pour inclure le nom du sous-répertoire? –

+0

salut, aws ping prendre 288 ms - 0,3 sec х 10000 = 3000sec = 50min, je suis très long. – memoris

Répondre

0

Il n'y a pas de choses comme des dossiers dans Amazon S3. C'est un système de fichiers "plat". Jetez un oeil dans this answer. Ce que vous cherchez vraiment, c'est de vérifier si un préfixe donné ("/ myshop/products/1474472", par exemple) existe dans votre compartiment.
Leur API REST le supporte définitivement, jetez un oeil dans the documentation. Vous devez lister les clés (qui seraient les "noms de fichiers") correspondant à un prefix donné, qui peut être passé en paramètre. Vous pouvez également optimiser votre appel en définissant le paramètre max-keys sur 1. Ainsi, si vous recevez un nombre d'éléments différent de zéro dans la réponse, le compartiment contient déjà des fichiers dont le nom commence par le préfixe donné.