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

问题描述 投票:2回答:5

我有n个文件上传到亚马逊S3我需要*搜索*这些文件基于其内容中出现的字符串,我尝试了一种方法从S3桶转换输入流转换为字符串然后搜索中的单词内容,但如果它们超过五到六个文件,则需要花费大量时间来完成上述过程,

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

java file amazon-web-services amazon-s3 download
5个回答
0
投票

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

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

编辑:

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

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


2
投票

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

从他们的介绍:

Amazon Athena是一种快速,经济高效的交互式查询服务,可以轻松分析S3中的数PB数据,而无需管理数据仓库或集群。

不太可能帮助你,因为它听起来像你有纯文本搜索。

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


1
投票

不!

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


1
投票

单词NO !!

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

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


0
投票

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

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

/foo/把人/random file containing foobar.大唐 /foo/杂糅/another random file containing foo za入.大唐.

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

© www.soinside.com 2019 - 2024. All rights reserved.