我有一张桌子,上面有产品,这些产品具有ID,名称以及我想用来过滤的其他一些属性(例如颜色,类型,制造商)。
我想将ID设置为主键,将name设置为排序键,并考虑如何处理其他查询,例如 api / products?color = X&type = Y&manufacturer = Z
为每个属性(颜色,类型,制造商)创建全局二级索引是否是一个好的解决方案? 因此,对于这样的请求,我将执行3个查询,这些查询将返回3个具有ID的记录列表,这些ID将用于基于主键进行查询。
答案 0 :(得分:0)
就像@Michael-sqlbot所说的那样,首先,您应该考虑DynamoDB不是正确选择的可能性。
为帮助您,我强烈建议您read the documentation(如果您还没有的话)。 DynamoDB是一个非常强大的NoSQL数据库系统,但是它也可能非常棘手。
使用这种简单的情况,您应该能够在没有GSI的情况下解决该问题。请记住,每次在基表中添加/更新/删除项目时,使用GSI可能意味着消耗额外的WCU。并且请记住,GSI最终是一致的,根据您的情况,这可能是问题也可能不是问题。
您可能还需要考虑其他NoSQL解决方案,例如Cassandra,MongoDB,CouchDB等。
答案 1 :(得分:0)
将两个相似的东西分开是很有用的:查询和搜索。如果您希望您的API提供查询功能,那么带有几个GSI的DynamoDB应该可以满足您的大多数要求。
如果您希望您的API仅搜索一堆数据,那么IMO您正在远离标准数据库,进入搜索引擎领域,因此值得一看AWS CloudSearch或Elasticsearch或类似的东西Algolia是专门为搜索设计的技术。
对于DynamoDB设计,我推荐此视频介绍高级设计模式:https://www.youtube.com/watch?v=HaEPXoXVf2k
在大约1-2小时内,您将学习有关使用DynamoDB的很多知识,包括有关如何在其上建立关系访问模式的最佳实践。在大约50分钟的时间内,您会看到一个很大的示例表,从中可以收集设计决策以实现一组特定的访问模式。