所以我知道这是一个常见的问题,但似乎没有任何好的答案。
我有一个带有gobs的桶(我不知道有多少)其中的文件数量。它们都在2k以内。
1)如何确定我有多少这些文件没有列出? 我已经使用了s3cmd.rb,aws / s3和jets3t的东西,我能找到的最好的是一个计算前1000条记录的命令(真正对它们执行GETS)。
我一直在使用jets3t的applet,因为它非常适合使用,但即使我无法列出所有对象,因为我的堆空间不足。 (可能是因为它正在对所有这些进行GETS并将它们保存在记忆中)
2)我怎样才能删除一个桶? 我见过的最好的事情是一个并行的删除循环,这有问题,因为有时它会尝试删除相同的文件。这就是我遇到的所有'deleteall'命令。
你们曾经吹嘘自己拥有数百万张图片/ txts?如果要删除它会发生什么?
3)最后,是否有替代答案?所有这些文件都是txt / xml文件所以我甚至不确定S3是如此关注 - 也许我应该把它移到一个文档数据库中?
它归结为亚马逊S3 API直接缺少2个非常重要的操作 - COUNT和DEL_BUCKET。 (实际上有一个删除存储桶命令,但只有当存储桶为空时它才有效)如果有人提出了一个不吸引这两个操作的方法,我很乐意放弃许多赏金。
更新
回答几个问题。我问这个的原因是我在过去一年左右的时间里已经存储了数十万,更像是数百万的2k txt和xml文档。几个月前的最后一次,我希望删除它确实需要DAYS这样做的存储桶,因为存储桶必须是空的才能删除它。这是一个如此痛苦的屁股,我担心在没有API支持的情况下再次这样做。
更新
这会晃动房子!
http://github.com/SFEley/s3nuke/
我在几分钟内就完成了一对价值1-2k档的好几个演出。
答案 0 :(得分:1)
我肯定不是那些吹嘘承载数百万张图片/ txts的家伙之一,因为我只有几千张,这可能不是你想要的答案,但我看了看这一段时间。
根据我的记忆,有一个名为HEAD的API命令,它获取有关对象的信息,而不是检索GET所做的完整对象,这可能有助于计算对象。
至于删除Buckets,在我看的时候,API肯定声明存储桶必须是空的,所以你需要先删除所有对象。
但是,我从未使用这些命令中的任何一个,因为我使用S3作为备份,最后我编写了一些例程,将我想要的文件上传到S3(因此该部分是自动化的),但从未打扰过等式的恢复/删除/文件管理方面。为此使用Bucket Explorer,它完成了我所需要的一切。在我的情况下,不值得花时间50美元,我可以得到一个我需要的程序。可能还有其他人也这样做(例如CloudBerry)
在您的情况下,使用Bucket Explorer,您可以右键单击存储桶并选择删除或右键单击并选择属性,它将计算对象的数量和它们占用的大小。它当然不会下载整个对象。 (例如,我看到的最后一个桶是12Gb和大约500个文件,下载12GB需要几个小时,而大小和计数会在一两秒内返回)。如果有限制,那肯定不是1000。
希望这有帮助。
答案 1 :(得分: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_文件。每个文件将运行一个s3cmd。
这需要一段时间,但不是几天。
答案 2 :(得分:0)
1)关于您的第一个问题,您可以在不实际检索它们的情况下列出存储桶中的项目。您可以使用SOAP和REST API执行此操作。如您所见,您可以定义要列出的最大项目数和从(标记)开始列表的位置。阅读更多相关信息here。
我不知道分页的任何实现,但特别是对于REST接口,用任何语言实现它都非常容易。
2)我认为删除存储桶的唯一方法是先从所有项目中清空它。另请参阅此question。
3)我会说S3非常适合存储大量文件。但这取决于你想做什么。你打算还存储二进制文件吗?您是否需要执行任何查询或仅列出文件就足够了?
答案 3 :(得分:0)
我从桶中删除了数十万个文件时遇到了同样的问题。启动EC2实例以运行并行删除可能是值得的,因为S3的延迟很低。我认为有一些资金要托管一堆EC2服务器,并指示人们快速删除存储桶。 (至少在亚马逊改变API之前)
答案 4 :(得分:0)
旧线程,但仍然相关,因为我正在寻找答案,直到我想出这个。我想使用基于GUI的工具(即没有代码)进行文件计数。我碰巧已经使用一个名为3Hub的工具进行拖动和放大丢弃与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个文件,并在不到一分钟的时间内完成了文件计数。
我想知道是否有人找到了更好的方法,因为这需要花费一些时间来处理数十万个文件。
答案 5 :(得分:0)
计算S3存储桶中的对象:
转到AWS Billing,然后报告,然后转到AWS Usage报告。 选择Amazon Simple Storage Service,然后选择Operation StandardStorage。 下载CSV文件,其中包含UsageTypeCount的UsageType,其中列出了每个存储桶的项目计数。
答案 6 :(得分:0)
aws s3 ls s3://mybucket/ --recursive | wc -l
aws s3 rm --recursive s3://mybucket/ && aws s3 rb s3://mybucket/
这将删除所有项目,然后是存储桶。