如何在不下载文件的情况下搜索amazon S3存储桶中的文件内容

时间:2013-02-28 03:51:21

标签: java file amazon-web-services amazon-s3 download

我有 n个上传到amazon S3的文件我需要* 搜索 *这些文件基于出现的字符串在其< strong>内容,我尝试了一种方法,从S3桶中将文件下载转换为字符串,然后在内容中搜索单词,但如果它们超过五到六个文件需要花费大量时间上面的过程,

是他们的任何其他方式,请提前帮助谢谢。

5 个答案:

答案 0 :(得分:3)

如果您的文件包含CSV,TSV,JSON,Parquet或ORC,您可以查看AWS的Athena:https://aws.amazon.com/athena/

从他们的介绍:

  

Amazon Athena是一种快速,经济高效的交互式查询服务   这使得在没有数据的情况下分析S3中的数PB数据变得容易   要管理的仓库或集群。

不太可能帮助你,因为听起来你可以通过纯文本进行搜索。

以为我会提到它,因为它可能会帮助其他人解决类似的问题。

答案 1 :(得分:1)

都能跟得上!

如果您无法从对象元数据(例如文件名)推断出匹配的位置,那么您将无法下载&amp;手动搜索。如果你有空闲带宽,我建议你一次下载几个文件来加快速度。

答案 2 :(得分:1)

单词NO !!

我认为你可以做的就是在本地缓存文件,以便你不必一次又一次地下载文件

您可以使用Last-Modified标头来检查本地文件是否脏,然后再次下载

答案 3 :(得分:0)

我不熟悉Amazon S3,但处理搜索远程文件的一般方法是使用indexing,索引本身存储在远程服务器上。这样,每个搜索将使用索引来推断相对较少数量的潜在匹配文件,并且仅将直接扫描这些文件以验证它们是否确实匹配。根据您的搜索条件和模式的复杂程度,甚至可以完全避免直接文件扫描。

那就是说,我不知道Amazon S3是否有一个你可以使用的索引引擎,或者是否有补充库为你做这些,但这个概念很简单,你应该能够自己做一些工作没有太多的工作。

修改

通常,每个文件中存在的标记都是索引的标记。例如,如果您要搜索“foo bar”,索引将告诉您哪些文件包含“foo”,哪些文件包含“bar” 。这些结果的横截面将是包含“foo”“bar”的文件。您必须直接扫描这些文件以选择“foo”“bar”按正确顺序彼此相邻的那些文件(如果有)。

在任何情况下,下载到客户端的数据量远远少于下载和扫描所有内容,尽管这也取决于文件的结构以及搜索模式的样子。

答案 4 :(得分:0)

我的建议,因为你似乎拥有这些文件,就是根据内容手动索引它们。如果存在大量“关键字”或与每个文件关联的元数据,您可以使用轻量级数据库来帮助自己,您将在其中执行查询并获取用户正在查找的确切文件。这将保留带宽并且速度更快,但代价是维护一种“索引”系统。

另一个选项(如果每个文件不包含太多元数据)将重新组织您的存储桶中的文件,添加“自动索引”它们的前缀,如下所示:

/foo/bar/randomFileContainingFooBar.dat /foo/zar/anotherRandomFileContainingFooZar.dat。

这样你最终可能会扫描整个存储桶以找到你需要的文件集(这就是为什么我只在你有很少的元数据时才建议这个选项),但你只会下载匹配的文件,这是仍然比你原来的方法好多了。