简介:

欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。

我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何如何利用亚马逊云科技NoSQL数据库DynamoDB开发一个视频平台用户观看历史追踪功能。本方案架构图如下:

方案所需基础知识 

什么是亚马逊云科技 DynamoDB?

亚马逊云科技 DynamoDB 是一款全托管的 NoSQL 数据库服务,专为处理需要高性能、高可用性和大规模数据存储的应用而设计。DynamoDB 提供了灵活的键值和文档数据模型,支持自动扩展存储和计算资源,确保应用在各种负载下都能快速响应。由于其完全托管的特性,开发者无需担心底层基础设施的维护,可以专注于应用的开发和优化。

利用 NoSQL 数据库开发的优势

高性能与可扩展性

NoSQL 数据库,如 DynamoDB,能够处理高吞吐量的读写请求,适应大规模用户访问的场景。它支持自动水平扩展,能够根据流量需求动态调整资源,确保应用在高负载下仍能保持快速响应。

灵活的数据模型

与传统关系型数据库不同,NoSQL 数据库提供了更加灵活的数据模型。开发者可以根据业务需求存储和查询结构化或半结构化数据,无需事先定义固定的表结构。这种灵活性使得开发速度加快,适应不断变化的业务需求。

高可用性与持久性

DynamoDB 分布在多个可用区,确保数据的高可用性和持久性。即使在某个区域发生故障,DynamoDB 仍然能够确保数据的安全性和可访问性,支持企业级应用的连续性和可靠性。

简化运维

由于 DynamoDB 是完全托管的服务,开发者无需担心数据库的配置、维护和备份。亚马逊云科技会自动处理这些任务,降低了运维成本和复杂性,使开发团队可以专注于业务逻辑的实现。

成本优化

NoSQL 数据库通常采用按需计费模式,DynamoDB 提供了基于使用量的灵活定价。企业可以根据实际使用情况调整资源配置,避免资源浪费,优化成本支出。

本方案包括的内容

1. 创建一个DynamoDB NoSQL数据库

2. 为DynamoDB数据库动态表添加数据

3. 对DynamoDB数据库中的表进行数据查询

项目搭建具体步骤

1. 打开亚马逊云科技控制台,进入DynamoDB服务主页

2. 点击Create Table创建一个表

3. 为表起名“UserVideoHistory”,并根据业务设置分区键“userid”和排序键“lastDateWatched”,并选择类型。其他配置选择默认配置后,点击Create Table创建表。

4. 创建成功后,进入表,点击“Action”->"Create Item",为DynamoDB数据表添加数据。

5. 添加一条userid字段数据”12345-abcd-6789“,和lastDateWatched字段数据”1619156406“。再创建三个新的字段videoid、preferredLanguage和supportedDeviceTypes,类型分别为String、String、List,并添加数据”9875-djac-1859“、"English"和[”Amazon Fire TV“, "Amazon Fire Tablet"]。最后点击Create item添加数据。

6. 接下来我们进入DynamoDB主页的”Explore Items“功能,用于查询数据。我们点击查询类型为Query精确搜索,设置搜索条件如下:userid字段为”12345-abcd-6789“,lastDateWatched字段为”1619156406“,然后点击Run进行搜索

7.通过精确搜索Query我们就可以查询到我们刚刚创建的记录了,点击搜索结果可以看到具体的数据。

如何通过代码创建和调用DynamoDB数据库?

下面是使用 Python SDK boto3 创建一个 DynamoDB 表并利用 query 方法进行搜索的代码示例

import boto3

# 创建 DynamoDB 客户端
dynamodb = boto3.client('dynamodb')

# 创建一个 DynamoDB 表
table_name = 'MyTable'
try:
    response = dynamodb.create_table(
        TableName=table_name,
        KeySchema=[
            {
                'AttributeName': 'PrimaryKey',
                'KeyType': 'HASH'  # 分区键
            },
            {
                'AttributeName': 'SortKey',
                'KeyType': 'RANGE'  # 排序键
            }
        ],
        AttributeDefinitions=[
            {
                'AttributeName': 'PrimaryKey',
                'AttributeType': 'S'  # 字符串类型
            },
            {
                'AttributeName': 'SortKey',
                'AttributeType': 'S'  # 字符串类型
            }
        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 5,
            'WriteCapacityUnits': 5
        }
    )
    print(f"Table {table_name} is being created.")
except dynamodb.exceptions.ResourceInUseException:
    print(f"Table {table_name} already exists.")

# 等待表创建完成
dynamodb.get_waiter('table_exists').wait(TableName=table_name)
print(f"Table {table_name} is ready.")

# 查询 DynamoDB 表
def query_table(primary_key_value, sort_key_value):
    response = dynamodb.query(
        TableName=table_name,
        KeyConditionExpression='PrimaryKey = :pk and SortKey = :sk',
        ExpressionAttributeValues={
            ':pk': {'S': primary_key_value},
            ':sk': {'S': sort_key_value}
        }
    )
    return response['Items']

# 示例查询
items = query_table('ExamplePrimaryKey', 'ExampleSortKey')
print(f"Queried items: {items}")

代码解释:

创建 DynamoDB 客户端:

boto3.client('dynamodb') 用于创建与 DynamoDB 服务的连接。

创建 DynamoDB 表:

使用 create_table 方法定义表的名称、主键模式(分区键和排序键)以及其属性类型。
ProvisionedThroughput 定义了读取和写入容量单元(RCU 和 WCU)。
等待表创建完成:

dynamodb.get_waiter('table_exists').wait(TableName=table_name) 等待表创建完成。
查询 DynamoDB 表:

使用 query 方法进行查询,根据分区键和排序键来搜索表中的项目。
示例查询:

query_table 函数用来执行查询,并返回匹配的项目列表。

以上就是在亚马逊云科技上创建DynamoDB动态表架构,写入和查询数据的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐