📜  AWS DynamoDB – 使用查询(1)

📅  最后修改于: 2023-12-03 15:13:34.420000             🧑  作者: Mango

AWS DynamoDB – 使用查询

AWS DynamoDB是亚马逊网站服务的一种NoSQL数据库,它被设计为可扩展、高度可用和灵活的数据库解决方案。DynamoDB提供了两种主要的数据检索方式:查询和扫描。本文将重点讲解如何使用查询功能。

查询基础

查询是DynamoDB中常用的一种数据检索方式,它允许您检索符合指定条件的数据。要进行查询,需要为您的表创建必要的索引,并使用索引指定您要查询的数据。DynamoDB支持两种类型的索引:全局二级索引和本地二级索引。

全局二级索引

全局二级索引是一个允许您在表中创建任意索引的工具。通过使用第二个分区键,您可以以表的任何属性为基础创建索引。全局二级索引是跨分区键完全分区的,允许在任何数据分卷中存储和查询。全局二级索引允许您查询表中的任何项目,但对写入和读取的性能影响较大,因为它们要求额外的存储和使用较多的吞吐量。

本地二级索引

本地二级索引是一种便于查询表中特定项目的工具。本地二级索引使用与主键相同的分区键,但允许使用不同的排序键来创建一个新的索引。本地二级索引是表内分区的,它们允许您在分区键值上查询。这种类型的索引仅适用于单个表。

查询示例

下面是一个查询的示例,假设我们有一个存储用户数据的表,包含以下列:userId、userName、age、city、isActive。假设我们希望查询符合以下条件的所有用户:age大于等于18岁且来自北京的用户。

// 创建表
aws dynamodb create-table \
    --table-name UserTable \
    --attribute-definitions \
        AttributeName=userId,AttributeType=S \
        AttributeName=city,AttributeType=S \
      AttributeName=isActive,AttributeType=N \
    --key-schema AttributeName=userId,KeyType=HASH \
    --billing-mode PAY_PER_REQUEST \
    --global-secondary-indexes 'IndexName=AgeCityIndex,KeySchema=[{AttributeName=age,KeyType=HASH},{AttributeName=city,KeyType=RANGE}],Projection={ProjectionType=ALL}'
    
// 插入数据
aws dynamodb put-item \
    --table-name UserTable \
    --item '{"userId": {"S": "01"}, "userName": {"S": "Alice"}, "age": {"N": "20"}, "city": {"S": "Beijing"}, "isActive": {"N": "1"}}'

aws dynamodb put-item \
    --table-name UserTable \
    --item '{"userId": {"S": "02"}, "userName": {"S": "Bob"}, "age": {"N": "17"}, "city": {"S": "Beijing"}, "isActive": {"N": "1"}}'

// 查询
aws dynamodb query \
    --table-name UserTable \
    --index-name AgeCityIndex \
    --key-condition-expression 'age >= :age and city = :city' \
    --expression-attribute-values '{":age": {"N": "18"}, ":city": {"S": "Beijing"}}'

上述示例演示了如何创建一个名为UserTable的表,并在其中插入两个用户记录。然后,我们使用查询操作检索符合指定条件的用户数据。在这个操作中,我们使用名为AgeCityIndex的全局二级索引,并使用key-condition-expression定义了查询条件。

结论

查询是DynamoDB中获取数据的重要工具。了解如何有效地使用这项功能可以帮助您优化并提高数据库查询的效率。通过使用索引,您可以提高检索数据的速度,从而使数据库更加高效和可扩展。