如何在S3中保存数百万个文件,以便以后在键/路径值上进行任意快速搜索

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

我的公司在S3存储桶中有数百万个文件,因此我经常必须搜索其键/路径包含一些文本的文件。这是一个极其缓慢的过程,因为我必须遍历所有文件。

我不能使用前缀,因为感兴趣的文本并不总是在开头。我看到其他帖子(herehere)说这是S3 API中的已知限制。这些帖子来自3年前,所以我的第一个问题是:这个限制是否仍然存在?

假设答案是肯定的,那么我的下一个问题是,考虑到我期望对数百万个S3文件进行类似正则表达式的任意搜索,是否存在针对变通办法的最佳实践?我见过有人说您可以将密钥名称存储在关系数据库,Elasticsearch或平面文件中。这些方法是否比其他方法更普遍?

而且,出于好奇,为什么S3不能在服务(S3)中支持这种基本用例,而该服务却是整个AWS平台的既定核心产品?我注意到Google Cloud上的GCS也有类似的限制。很难对关键字名称字符串进行大规模搜索吗?

amazon-s3
2个回答
0
投票

S3是对象存储,概念上类似于文件系统。我永远不会尝试根据文件系统中的文件名创建类似数据库的环境,我也不会在S3中。

尽管如此,如果这是您所拥有的,那么我将从运行代码开始,以将所有当前文件名放入某种数据库中。 DynamoDB无法按正则表达式查询,但PostgreSQL,MySQL,Aurora和ElasticSearch都可以。因此,从列出每个文件开始,然后将文件名和S3位置放入类似数据库的结构中。然后,创建一个Lambda,通知其任何更改(有关更多信息,请参见this link),这些更改将在添加或删除文件时对后备存储执行适当的操作。

根据您的需求,ElasticSearch具有查询的超级灵活性,并且可能更适合这些类型的查询。但是传统的关系数据库也可以使之工作。

最后,您需要一个到后备存储的接口来进行查询。这可能需要某种服务器。作为与Lambda的API网关,这可能很简单,也可能更复杂。


0
投票

您可能考虑使用Amazon S3 Inventory,它可以提供包含存储桶中所有对象列表的每日或每周CSV文件。

然后您可以将该文件加载到数据库中,甚至编写脚本来解析它。或者甚至可以在Excel中使用它。

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