所以,我正在使用带有node.js的AWS Lambda与DynamoDB进行交互,直到现在我都可以进行扫描,使用主键进行查询,等等。
但是,现在我需要进行查询或扫描,我不知道主键,我只有列的名称,我想要按该列过滤的参数和表名。
比如SQL语言:
SELECT * FROM user WHERE user_type = 'Moderator';
我在文档中搜索过,但我仍然不能这样做。有人能帮我吗?
有两种方法可以实现这一点,具体取决于您的应用程序执行此查询的频率以及您对性能的关注程度,我将从最少的努力开始,但最不可扩展,但最具可扩展性。
在不同的情况下,我使用了所有4种方法,需要强调的是“......取决于你的用例......”
DynamoDB是一个NoSQL数据库。 NoSQL数据库与传统的Relational(即SQL)数据库之间的区别在于,您可以获得更快的性能,但这会以牺牲运行复杂查询的灵活性为代价。如果您需要对数据运行复杂查询,则不应使用DynamoDB,因为它不是满足您要求的正确工具。
在DynamoDB中,您只能对关键属性运行查询。否则,您将必须运行扫描以返回整个表格,然后您可以对数据执行任何操作,例如过滤结果。
DynamoDB中的每个表通常至少有一个密钥,即主密钥,也称为哈希密钥或分区密钥。但是你也可以有一个Range Key,也称为Sort Key。在您的示例中,如果UserType是排序键,则在运行查询后,DynamoDB将返回UserType与“Moderator”相等的所有分区中的所有行。
但您也可以在表上定义二级索引。辅助密钥可以是全局辅助密钥,也可以是本地辅助密钥。这为运行查询提供了更大的灵活性。有关更多详细信息,请参阅DynamoDB文档:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html
摘要:如果您无法控制DynamoDB表的设计,那么您可能只是在运行扫描时遇到困难。否则,请考虑重新设计表索引和键以满足您的要求。
您可以使用user_type作为主键创建全局二级索引。然后从索引查询。