2009-03-31 12 views
9

これはよくある質問ですが、そこには良い答えはないようです。s3バケット内のオブジェクトを削除/カウントするにはどうすればよいですか?

私にはゴブが付いたバケツがあります(私はどれくらいの数の手掛かりがありませんか)。彼らはすべて2k個以内です。

1)のファイル数はどれくらいですか?はありません。 私はs3cmd.rb、aws/s3、jets3tのものを使いました。最初の1000レコード(実際にGETSを実行しています)を数えるコマンドがあります。

私はjets3tのアプレットを使用しています。実際にはうまく動作しますが、すべてのオブジェクトをリストすることができないため、ヒープスペースが足りなくなります。 (おそらく、それらをすべてGETSしてメモリに保持しているので)

2)バケットを削除するにはどうすればよいですか? 私が見たことの中で一番良いことは並列化された削除ループであり、問​​題があると同じファイルを削除しようとすることがあることがあります。これは、私が遭遇したすべての 'deleteall'コマンドがやり遂げるものです。

あなたは何百万の画像/ txtsのホスティングを誇っていますか?それを削除したいときはどうなりますか?

3)最後に、これに代わる回答がありますか?これらのファイルはすべてtxt/xmlファイルなので、S3がそんなに気にならないことさえありません。これを文書データベースのソートに移すべきでしょうか?

amazon S3 APIは、2つの非常に重要な操作(COUNTとDEL_BUCKET)を欠いているだけです。 (実際には削除バケットコマンドがありますが、バケツが空の場合にのみ機能します)これら2つの操作を実行しない方法を思いつく人がいると、私は喜んでたくさんの賞金をあきらめます。

UPDATE

ただ、いくつかの質問に答えます。私がこれを尋ねる理由は、私は過去1年間、何百万ものものを保管してきたことで、何百万もの2k txtやXML文書のようなものでした。最後の2〜3ヶ月前に、バケツを削除する前にバケツを空にしなければならないので、文字通りそのバケツを削除することを希望しました。これは、私がAPIサポートなしでこれをやり直さなければならないことを恐れている、お尻のような痛みでした。

UPDATE

これは家を岩!

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

私は数分以内に1-2kファイルの良いカップルのギグの価値をrm'd。

答えて

1

私は数千人しかいないので、ほとんどの人が何百万ものイメージをホストしているとは思っていません。これはあなたが探している答えではないかもしれませんが、私は見ました。これはしばらく前に。

私は覚えていることは、HEADというAPIコマンドがあり、GETが行う完全なオブジェクトを取得するのではなく、オブジェクトの情報を取得することです。

バケットを削除する限り、私が探していた時点で、APIはバケツが空でなければならないと明言していたので、最初にすべてのオブジェクトを削除する必要があります。

私はS3をバックアップとして使用していたので、私はこれらのコマンドのどれも使用しませんでした。そして、私はS3にしたいファイルをアップロードしたルーチンをいくつか書きました。この方程式の復元/削除/ファイル管理側で実行されます。そのためには、私が必要とするすべてを行ったBucket Explorerを使用してください。私の場合、50ドルで私が必要とするすべてのプログラムを手に入れることができる時間を費やす価値はありませんでした。

バケットエクスプローラで、バケットを右クリックして削除を選択するか、右クリックしてプロパティを選択すると、オブジェクトの数がカウントされます。彼らが乗るサイズ。それは確かにオブジェクト全体をダウンロードしません。 (たとえば、最後のバケットは12Gb、約500ファイルだった.12GBをダウンロードするには数時間かかるが、サイズとカウントは2〜2秒で返される)。そして、限界があるならば、それは確かに1000ではありません。

希望がこれを助けます。

0

1)最初の質問に関しては、バケット上のアイテムを実際に取得せずにリストすることができます。 SOAPREST APIの両方でこれを行うことができます。表示されるように、リストする項目の最大数とリストを開始する位置(マーカー)を定義することができます。その詳細については、hereをご覧ください。

ページングの実装についてはわかりませんが、特にRESTインターフェイスの場合、どの言語で実装するのも非常に簡単です。

2)バケットを削除する唯一の方法は、まずすべてのアイテムからそれを空にすることです。これを参照してくださいquestion

3)私は、S3が多数のファイルを格納するのに非常に適していると言います。しかし、あなたがしたいことに依存します。バイナリファイルも保存する予定ですか?クエリを実行する必要がありますか、ファイルをリストするだけで十分ですか?

+0

でも1000回の時にキーを列挙していても、それが何時でも何と言っても午後よりも長くなり、ついに退屈してしまい、ヒープがあまりにも過剰になったことに気づいた。 – eyberg

+0

私は、項目数を取得するAPI呼び出しはないと思います。たぶんあなたはファイルの内容を取得するツールを使用していたでしょう。 Fiddlerなどのツールを使用してGETバケットリクエストを送信してください(私の回答にはREST APIのリンクがあります)。 xmlを元に戻すのに時間がかかりません。私は自分自身でそれをテストするような大きなバケツがないことを恐れている。 – kgiannakakis

1

"リスト"はデータを取得しません。私はs3cmd(Pythonスクリプト)を使用して、私はこのような何かをやっているだろう:

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 

をしかし、最初にあなたが得るどのように多くのbucketfiles_ファイルを確認してください。 1ファイルにつき1つのs3cmdが実行されます。

時間はかかりますが、数日かかることはありません。

+0

私は実際にこの方法を試しました - 私は今、S3がバケットの削除をサポートできないという結論に達しました。そしてそれは恐ろしいアクセス速度でS3のために口に非常に苦い味を残します。 – eyberg

+0

s3cmd del 's3cmd ls s3:// Mybigbucket/somepattern | awk '{プリント$ 4}' 'うん、これは痛いです – BozoJoe

0

バケツから何十万ものファイルを削除するのと同じ問題がありました。 S3へのレイテンシが低いので、並列削除を実行するためにEC2インスタンスを起動することは価値があります。私は、バケットをすばやく削除するために、たくさんのEC2サーバーをホスティングし、人に課金させるためのお金があると思います。 (少なくともAmazonがAPIを変更するまで)

0

古いスレッドですが、これまでのところ私がこれを理解するまで、答えを探していたのと同じです。 GUIベースのツール(コードなし)を使用してファイル数を求めていました。私は既にS3Hubというツールを使って、&のドロップ転送をS3との間でやり取りしています。私は、特定のバケツにのファイルがいくつあるのかを知りたかったのですが、(私はバケツで請求していないと思います)。

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 

私はバケツに20521個のファイルを持っていたし、分未満でファイルカウントをしました。

これは数十万のファイルに時間がかかるため、誰かがより良い方法を見つけたかどうかを知りたいと思います。 S3バケット内のオブジェクトをカウントする

0

ゴーAWS課金に、そして、その後、AWSの使用状況レポートを報告します。 Amazon Simple Storage Serviceを選択し、次にOperation StandardStorageを選択します。 各バケットのアイテム数をリストするStorageObjectCountのUsageTypeを含むCSVファイルをダウンロードします。

+0

2番目のカウント方法は? – Volte

関連する問題