0

我有一个产品表,其中包含 ID、名称和一些我想用来过滤的其他属性(例如颜色、类型、制造商)。

我想将 ID 设置为主键,将名称设置为排序键,并考虑如何处理其他查询,例如 api/products?color=X&type=Y&manufacturer=Z

为每个属性(颜色、类型、制造商)创建全局二级索引会是一个好的解决方案吗?因此,对于这样的请求,我将执行 3 个查询,这些查询将返回 3 个带有 ID 的记录列表,我将使用它们来根据主键进行查询。

4

2 回答 2

1

将两个相似的不同事物分开是很有用的:查询和搜索。如果您希望您的 API 提供查询功能,那么带有几个 GSI 的 DynamoDB 应该可以满足您的大部分需求。

如果您希望您的 API 仅搜索一堆数据,那么 IMO 您正在远离标准数据库并进入搜索引擎领域,因此可能值得关注 AWS CloudSearch 或 Elasticsearch 或类似Algolia的东西专门为搜索而设计的技术。

对于 DynamoDB 设计,我推荐这个关于高级设计模式的视频:https ://www.youtube.com/watch?v=HaEPXoXVf2k

在大约 1-2 小时内,您将学到很多关于使用 DynamoDB 的知识,包括有关如何在其上建模关系访问模式的最佳实践。大约 50 分钟后,您可以看到一个大型示例表,您可以从中收集设计决策以实现一组特定的访问模式。

于 2019-01-22T01:46:31.790 回答
0

就像@Michael - sqlbot 所说,首先,您应该考虑DynamoDB 不是正确选择的可能性。

为了帮助您,我强烈建议您阅读文档(如果您还没有)。DynamoDB 是一个非常强大的 NoSQL 数据库系统,但它也可能非常棘手。

有了这样简单的案例,您应该能够在没有 GSI 的情况下解决它。请记住,每次在基表中添加/更新/删除项目时,使用 GSI 可能会导致消耗额外的 WCU。请记住,GSI 最终是一致的,这可能是也可能不是问题,具体取决于您的情况。

您可能还想考虑其他 NoSQL 解决方案,例如 Cassandra、MongoDB、CouchDB 等。

于 2019-01-21T23:19:13.377 回答