我有一个装满了上千份文件的桶。我如何搜索水桶?


当前回答

我做了如下的事情来在我的桶中寻找模式

def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
    var s3Client = new AmazonS3Client()
    var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
    var objectListing: ObjectListing = null
    var res: List[String] = List()

    do {
      objectListing = s3Client.listObjects(listObjectsRequest)
      res = res ++ objectListing.getCommonPrefixes
      listObjectsRequest.setMarker(objectListing.getNextMarker)
    } while (objectListing.isTruncated)
    res
  }

对于较大的存储桶,这会消耗太多时间,因为所有对象摘要都由Aws返回,而不仅仅是匹配前缀和分隔符的对象。我正在寻找提高性能的方法,到目前为止,我只发现我应该命名键,并将它们正确地组织在桶中。

其他回答

考虑到你在AWS…我认为你会想要使用他们的CloudSearch工具。把你想要搜索的数据放到他们的服务中…让它指向S3密钥。

http://aws.amazon.com/cloudsearch/

S3没有原生的“搜索此桶”,因为实际内容是未知的-此外,由于S3是基于键/值的,因此没有原生的方法可以一次访问多个节点,而更传统的数据存储提供了一个(SELECT * FROM…(在SQL模型中)。

您需要做的是执行ListBucket以获得bucket中对象的列表,然后遍历每个项,执行您实现的自定义操作—这就是您的搜索。

下面是一个使用AWS CLI搜索文件名的简短而丑陋的方法:

aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-

我是这样做的: 我在s3中有数千个文件。 我在列表中看到一个文件的属性面板。你可以看到该文件的URI,我复制粘贴到浏览器-这是一个文本文件,它呈现得很好。我用手边的uuid替换了url中的uuid文件就出来了。

我希望AWS有更好的方法来搜索文件,但这对我来说很管用。

这里要补充一点:现在已经3年了,但当你输入“如何搜索S3 Bucket”时,这篇文章是谷歌的顶部。

也许你正在寻找一些更复杂的东西,但如果你在这里试图弄清楚如何简单地通过标题找到一个对象(文件),这是疯狂的简单:

打开桶,选择右边的“none”,并开始输入文件名。

http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html