2009-03-31 10 views
9

así que sé que esto es una pregunta común pero simplemente no parece haber ningún buenas respuestas para ella.¿Cómo elimino/cuento objetos en un cubo s3?

Tengo un cubo con pegotes (no tengo idea de cuántos) número de archivos en ellos. Todos están dentro de 2k por pieza.

1) ¿Cómo averiguo cuántos de estos archivos tengo SIN el listado ellos? He utilizado el s3cmd.rb, AWS/s3, y esas cosas jets3t y lo mejor que puedo encontrar es un comando para contar los primeros 1000 registros (en realidad llevar a cabo llega a ella).

He estado usando el applet de jets3t porque es realmente agradable trabajar con él, pero incluso eso no puedo enumerar todos mis objetos porque me quedo sin espacio. (Presumiblemente CAUSA Es peforming entra en contacto con todos ellos y mantenerlos en la memoria)

2) ¿Cómo puedo eliminar sólo un cubo? Lo mejor que he visto es un bucle de eliminación en paralelo y eso tiene problemas porque a veces intenta eliminar el mismo archivo. Esto es lo que hacen todos los comandos 'deleteall' que he encontrado.

Qué hacen ustedes que han hecho alarde de alojamiento millones de imágenes/txts ?? ¿Qué sucede cuando quieres eliminarlo?

3) Por último, ¿hay respuestas alternativas a esto? Todos estos archivos son archivos txt/xml, así que ni siquiera estoy seguro de que S3 sea una preocupación, ¿tal vez debería mover esto a una base de datos de documentos?

Lo que se reduce a esto es que amazon S3 API simplemente está perdiendo 2 operaciones muy importantes: COUNT y DEL_BUCKET. (en realidad hay un comando de eliminación de cubos, pero solo funciona cuando el contenedor está vacío). Si a alguien se le ocurre un método que no apetece para hacer estas dos operaciones, con mucho gusto dejaría muchas recompensas.

ACTUALIZACIÓN

Sólo para responder a algunas preguntas. La razón por la que pregunto esto es por el año pasado estuve almacenando cientos de miles, más como millones de documentos 2k txt y xml. La última vez, hace un par de meses, quise borrar el cubo que literalmente llevó DAYS porque el cubo debe estar vacío antes de poder eliminarlo. Esto fue un dolor de cabeza. Temo tener que hacer esto de nuevo sin el apoyo de la API.

ACTUALIZACIÓN

este oscila la casa!

http://github.com/SFEley/s3nuke/

I rm'd un buen par de conciertos por valor de archivos 1-2K en cuestión de minutos.

Respuesta

1

No soy ciertamente uno de esos "chicos que se han jactado de alojar millones de imágenes/txts", ya que solo tengo unos pocos miles, y esta puede no ser la respuesta que estás buscando, pero busqué en esto hace un tiempo.

Por lo que recuerdo, hay un comando API llamado HEAD que obtiene información sobre un objeto en lugar de recuperar el objeto completo que es lo que hace GET, lo que puede ayudar a contar los objetos.

En cuanto a la eliminación de Cubos, en el momento en que estaba buscando, la API definitivamente indicó que el cubo tenía que estar vacío, por lo que primero debe eliminar todos los objetos.

Pero nunca usé ninguno de estos comandos, porque estaba usando S3 como copia de seguridad y al final escribí algunas rutinas que cargaron los archivos que deseaba S3 (por lo que esa parte se automatizó), pero nunca me molestó con el lado de restauración/eliminación/gestión de archivos de la ecuación. Para eso uso Bucket Explorer, que hizo todo lo que necesito. En mi caso, no valía la pena pasar el tiempo cuando por $ 50 puedo obtener un programa que hace todo lo que necesito. Probablemente haya otros que hagan lo mismo (por ejemplo, CloudBerry)

En su caso, con el Explorador de cubos, puede hacer clic derecho en un balde y seleccionar eliminar o hacer clic derecho y seleccionar propiedades y contará el número de objetos y el tamaño que toman. Ciertamente no descarga todo el objeto. (Por ejemplo, el último cubo que miré era de 12 Gb y alrededor de 500 archivos y tardaría horas en descargar 12 GB, mientras que el tamaño y el recuento se devolvían en uno o dos segundos). Y si hay un límite, entonces ciertamente no es 1000.

Espero que esto ayude.

0

1) En cuanto a su primera pregunta, puede enumerar los artículos en un cubo sin recuperarlos realmente. Puede hacerlo con las API SOAP y REST. Como puede ver, puede definir la cantidad máxima de elementos a enumerar y la posición desde la que comenzar el listado (el marcador). Obtenga más información al respecto here.

No conozco ninguna implementación de la paginación, pero especialmente para la interfaz REST sería muy fácil implementarla en cualquier idioma.

2) Creo que la única manera de eliminar un depósito es primero vaciarlo de todos los artículos. Ver alse esto question.

3) Yo diría que S3 es muy adecuado para almacenar una gran cantidad de archivos. Sin embargo, depende de lo que quieras hacer. ¿Planea también almacenar archivos binarios? ¿Necesitas realizar alguna consulta o simplemente listar los archivos es suficiente?

+0

incluso enumerar las llaves en 1000 veces o lo que sea que fue el número - eso llevó una eternidad - más de una tarde y finalmente lo maté después de que me aburrí y noté que mi montón estaba demasiado lleno. – eyberg

+0

No creo que haya una llamada API para obtener el número de elementos. Probablemente haya utilizado una herramienta que también obtiene el contenido de los archivos, por eso tardó tanto. Solo use Fiddler o alguna otra herramienta para enviar la solicitud de canasta GET (vea el enlace REST API en mi respuesta). No debería tomar mucho tiempo recuperar el xml. Me temo que no tengo un cubo tan grande para probarlo yo mismo. – kgiannakakis

1

"Lista" no recuperará los datos. Yo uso s3cmd (un script de Python) y yo hubiera hecho algo como esto:

s3cmd ls s3://foo | awk '{print $4}' | split -a 5 -l 10000 bucketfiles_ 
for i in bucketfiles_*; do xargs -n 1 s3cmd rm < $i & done 

Pero primero comprobar cuántos archivos bucketfiles_ que se obtiene. Habrá un s3cmd ejecutándose por archivo.

Llevará un tiempo, pero no días.

+0

De hecho, probé este método. Acabo de llegar a la conclusión de que S3 no puede admitir la eliminación de cubos en este momento, y que con su horrenda velocidad de acceso deja un sabor extremadamente amargo en mi boca para S3. – eyberg

+0

s3cmd del 's3cmd ls s3: // Mybigbucket/somepattern | awk '{print $ 4}' '. Sí, esto es doloroso – BozoJoe

0

Tuve el mismo problema al eliminar cientos de miles de archivos de un depósito. Puede valer la pena iniciar una instancia de EC2 para ejecutar la eliminación paralela porque la latencia de S3 es baja. Creo que hay que ganar algo de dinero alojando un montón de servidores EC2 y cargando a las personas para que borren cubos rápidamente. (Al menos hasta que Amazon se ponga a cambiar la API)

0

Tema antiguo, pero sigue siendo relevante ya que estaba buscando la respuesta hasta que me di cuenta de esto. Quería un conteo de archivos usando una herramienta basada en GUI (es decir, sin código). Ya uso una herramienta llamada 3Hub para arrastrar & transferencias desde y hacia S3. Quería saber cuántos archivos tenía en un cubo en particular (no creo que la facturación lo desglose por cubos).

So, using 3Hub, 
- list the contents of the bucket (looks basically like a finder or explorer window) 
- go to the bottom of the list, click 'show all' 
- select all (ctrl+a) 
- choose copy URLs from right-click menu 
- paste the list into a text file (I use TextWrangler for Mac) 
- look at the line count 

tuve 20521 archivos en el balde y lo hizo el recuento de archivos en menos de un minuto.

Me gustaría saber si alguien ha encontrado una forma mejor, ya que esto tomaría algún tiempo en cientos de miles de archivos.

0

Contar objetos en un contenedor de S3:

Ir a AWS de facturación, a continuación, informa, a continuación, los informes de uso de AWS. Seleccione Amazon Simple Storage Service, luego Operation StandardStorage. Descargue un archivo CSV que incluye un UsageType de StorageObjectCount que enumera el recuento de elementos para cada segmento.

+0

¿Dónde está la segunda forma de contar? – Volte

Cuestiones relacionadas