Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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 具有多个标记的DynamoDB查询_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Amazon web services 具有多个标记的DynamoDB查询

Amazon web services 具有多个标记的DynamoDB查询,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我对DynamoDB相当陌生,目前我们正在考虑使用DynamoDB将现有项目迁移到无服务器应用程序,我们希望从RDMS数据库中调整以下设置: 表: 项目(ProjectID) 文件(FileID,ProjectID,Filename) 标记(文件ID、标记) 我们希望使用DynamoDB进行查询,以获取具有一个或多个标记(按标记)的特定项目的所有文件。在RDMS中,此查询将非常简单,如下所示: SELECT*FROM Files JOIN Tags ON Tags.FileID=Files.

我对DynamoDB相当陌生,目前我们正在考虑使用DynamoDB将现有项目迁移到无服务器应用程序,我们希望从RDMS数据库中调整以下设置:

表:

  • 项目(ProjectID
  • 文件(FileID,ProjectID,Filename)
  • 标记(文件ID、标记)
我们希望使用DynamoDB进行查询,以获取具有一个或多个标记(按标记)的特定项目的所有文件。在RDMS中,此查询将非常简单,如下所示:

SELECT*FROM Files JOIN Tags ON Tags.FileID=Files.FileID WHERE Files.projectd=?PROJECT AND Tags.Tag=?Tag_1或Tag_2…

目前,我们有以下DynamoDB设置(但仍可以更改):

  • 项目(ProjectID[HashKey],…)
  • 文件(ProjectID[HashKey]、FileID[RangeKey]、…)

也请考虑项目条目的数量是巨大的(在1000到30000之间)和每个项目的文件数量(在50和100之间),并且查询应该非常快。


如何使用DynamoDB查询实现这一点,最好不使用筛选表达式,因为它们是在数据选择之后应用的?如果表文件可以有一个StringSet标记作为列,这将是完美的,但我想这不能用于高效的DynamoDB查询(因此不使用DynamoDB扫描),因为DynamoDB索引只能是String、Binary和Number类型,而不是StringSet类型?这可能是一个适用于(GSI)的用例吗?

有点晚了,刚刚看到这个问题引用了另一个问题

我猜你已经去解决了类似的问题了

DynamoDB表格

  • 项目(ProjectID[HashKey],…)
  • 文件(ProjectID[HashKey]、FileID[RangeKey]、…)
  • 标记(标记[HashKey]、文件ID[RangeKey]、项目ID[LSI排序键])
在FileTags上,您需要FileID来使主键唯一,但是您可以将ProjectID添加为本地二级索引的排序键,因此您可以在Tag+ProjectID上搜索


这是某种数据非规范化,但这就是NoSQL所需要的:-(.例如,如果您的文件要切换到另一个项目,您不仅需要更新文件上的ProjectID,还需要更新所有标记上的ProjectID。

这个问题已经问了将近三年了,但它仍然在Google结果中。因此,如果其他人在这里登陆,可能DynamoDB docs的以下页面可以提供帮助。我只是自己找到了它,没有尝试现在还没有,但它看起来很有希望。似乎比这里的其他回复更新,并且显示了一个很好的解决问题的方法