Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 是否有合适的AWS服务来维护S3对象的索引?_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Amazon web services 是否有合适的AWS服务来维护S3对象的索引?

Amazon web services 是否有合适的AWS服务来维护S3对象的索引?,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我需要在AWS S3中存储数百万个小JSON对象(每个对象大约2500字节),并且我需要能够以三种不同的方式检索它们: 按时间戳 凭身份证 批量(用于报告、分析) 对象键将按时间戳组织,因此按时间戳范围检索对象将非常快。此外,共享相同时间戳(例如,相同分钟)的对象可以连接到单个S3对象中,每行包含一个JSON对象。组合提高了写入性能,并且与EMR和Athena配合使用也很好 但是,按ID检索的速度将非常慢。我需要一种相对快速地检索大型ID集的方法,例如检索100000个对象的时间戳(给定10

我需要在AWS S3中存储数百万个小JSON对象(每个对象大约2500字节),并且我需要能够以三种不同的方式检索它们:

  • 按时间戳
  • 凭身份证
  • 批量(用于报告、分析)
对象键将按时间戳组织,因此按时间戳范围检索对象将非常快。此外,共享相同时间戳(例如,相同分钟)的对象可以连接到单个S3对象中,每行包含一个JSON对象。组合提高了写入性能,并且与EMR和Athena配合使用也很好

但是,按ID检索的速度将非常慢。我需要一种相对快速地检索大型ID集的方法,例如检索100000个对象的时间戳(给定100000个ID的列表),而无需扫描整个数据集的有效负载


在这种情况下,哪种AWS服务可以提供索引S3内容的最佳方式?

任何数据库都可以实现这一点。亚马逊的DynamoDB数据库将运行得非常好,因为您不必管理服务器。您可以让S3在向bucket添加新文件时向AWS Lambda函数发送事件通知。Lambda函数可以解析文件中需要在DB中存储和索引的信息,然后将其插入DynamoDB表中。无论何时需要从S3检索文件,您都可以通过ID或时间戳范围查询DynamoDB表。

这个问题肯定是基于观点的边缘。我不会冒昧地宣称这是最好的解决方案,但在问题的“哪个AWS服务”方面,这是一个可行的解决方案:我使用RDS for MariaDB实现这一目的,S3>SNS>Lambda事件在RDS上维护索引,包括从S3查找对象元数据并存储该元数据,正确规范化和索引,以及

之所以S3>SNS>Lambda而不仅仅是S3>Lambda,是因为我将SNS主题分散到Lambda和SQS队列,该队列由“第二次查看”审核过程读取,该审核过程验证所有内容都已正确捕获


这仍然是有限的生产使用,在这里,所以我的大部分桶还没有配置。。。但到今天为止,我在t2.micro RDS机器上索引了11803039个对象,到目前为止还没有任何问题。。。因此,它非常值得尊敬,而且也不贵。

在发布此问题后的10个月内,我尝试使用DynamoDB,并使用基于MySQL的解决方案进行了一段时间的尝试,该解决方案甚至投入生产,但存在稳定性问题。最后,我花了一些时间进行重构,找到了一个我最初没有考虑过的解决方案:将索引作为gzip的JSON文件存储在S3本身中,并将它们缓存在需要使用索引进行查询的客户端中。显然,在数据延迟等方面存在一些需要考虑的需求,但总体而言,我发现这种方法是最简单的,在原始问题中描述的用例中性能合理。

DynamoDB不能在ID列表上查询:我错过了“通过大量ID列表查询”你问题的一部分。也许ElasticSearch适合你?或者启动Aurora RDS服务器。实际上,您的链接与查询嵌套列表相关,我不确定这是否适用于您的用例。如果您的ID是DynamoDB表的主键,您可以一次对100条记录(100个ID)执行
BatchGetItem
。您是对的,链接错误,但您明白我的意思。我必须并行地执行1000个BatchGetItem,这会增加供应成本。我想知道是否应该在S3中将列表写入JSON,然后使用Athena进行连接,即使每次扫描整个数据集都是浪费时间的。