背景:我们目前正在AWS S3上存储我们的文件(主要是图像(。在我们的客户端应用程序上,需要将一批文件一起上传到s3(500+个文件(,在上传文件之前,我们总是通过用文件id ping s3来检查s3中是否存在这些文件,并逐个查看头是否存在(假设没有其他方法来检查客户端是否存在文件(。这显然会影响客户端应用程序的性能。
我们的尝试:在AWS上,我们创建了一个存储在DynamoDB(云数据库(上的索引表,该表跟踪所有具有当前S3存储桶的文件名(假设每个文件的文件名都是唯一的((例如,使用lambda插入和删除文件插入和删除记录(。我们想做的是,在从客户端上传文件之前,我们希望对云数据库运行查询/扫描,并检查跟踪记录中是否存在文件名列表。注意:非常重要的是,我们不想逐一检查文件名的存在,因为与我们现有的解决方案相比,它不会有太大改进。如果数据库中存在文件名,我们希望检查它们的列表。(就像在两个文件名列表之间进行dif(
挑战:对于NoSQL数据库,不可能在列表中使用进行查询记录。
我想获得更多关于如何实现我们想要做的事情的想法。
我们目前正在考虑一些选项:1.我们使用关系数据库来代替NoSQL数据库,这样我们就可以在列表中进行表连接或查询文件名2.我们没有在NoSql DB上保留文件名列表,而是在不同的单元格上保留哈希结果,并将哈希结果检索到客户端集,然后客户端将进行列表比较。
我的英语不好,我的理解是:如果存在文件名,并且文件名为db hashkey,则需要检查文件名列表。
您可以使用batchLoad来获取结果。但是要小心,batckLoad api有计数限制
如果DynamoDB表的大小很小,您可以执行扫描操作,并使用"IN"运算符设置文件名的过滤表达式
您可能还需要考虑使用Elasticache来提高解决方案的可扩展性,而不是针对每个请求都使用DynamoDB。并且,您可以有两个lambda函数,一个用于在S3 bucket更新时更新DynamoDB,另一个用于使用基于DynamoDB流的DynamoDB更新来更新Elasticache。一旦缓存被更新,S3之前的后续查找将找到最新的更新。在这种方法中需要记住的几点是异步更新和最终的一致性。因此,您可能需要了解客户端如何处理它。