2011-06-18 5 views
2

J'écris une application qui stocke (potentiellement des millions d'objets) dans un compartiment S3. Mon application prendra l'objet le plus récent (à peu près), le traitera et l'écrira dans le même compartiment. J'ai besoin d'un moyen d'accéder aux clés et de nommer de nouveaux objets afin que l'application puisse facilement accéder aux objets les plus récents.Obtenir les toutes dernières clés S3 en premier

Je sais que je peux le faire correctement en mettant des métadonnées dans SimpleDB, mais je n'ai pas besoin de consistance dure. C'est ok si l'application attrape un objet qui n'est pas tout à fait le plus récent. J'ai juste besoin de l'application pour avoir tendance à saisir les nouvelles clés plutôt que les anciennes. Donc, j'essaie de rester simple en utilisant S3 seul.

Existe-t-il un moyen d'accéder et de trier les métadonnées S3? Ou pourrait-il y avoir un schéma pour nommer les objets qui auraient ce dont j'ai besoin (puisque je sais que S3 liste les clés dans l'ordre lexicographique et que boto peut gérer la pagination).

Répondre

1

Le versionnage de s3 aide vraiment ici. Si ce sont vraiment les mêmes choses, vous pouvez activer le versioning pour votre bucket, récupérer les données de votre clé, les modifier et les stocker dans la même clé.

vous devez utiliser boto est

bucket.get_all_versions(prefix='yourkeynamehere') 

vous obtenez des versions sur, les plus récents en premier, si bien que cette fonction ne gère pas la pagination, vous pouvez simplement obtenir le premier indice et vous avez le version la plus récente Si vous voulez revenir plus loin et avoir besoin de la pagination, boto propose également une fonction list_versions() qui prend aussi un préfixe et vous donnera un jeu de résultats qui parcourra toutes les versions sans que vous ayez à vous en soucier . Si ces objets ne sont pas vraiment le "même" objet, cela n'a pas d'importance parce que s3 ne stocke pas les diffs - il stocke le tout à chaque fois. Si vous avez plusieurs «types» d'objets, vous pouvez avoir plusieurs jeux de versions dont vous pouvez tirer les plus récents. J'ai utilisé le versionnage et j'en suis plutôt content.

Questions connexes