简介:
欢迎来到小李哥全新亚马逊云科技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数据库中的表进行数据查询
项目搭建具体步骤
- 打开亚马逊云科技控制台,进入DynamoDB服务主页
- 点击Create Table创建一个表
- 为表起名"UserVideoHistory",并根据业务设置分区键"userid"和排序键"lastDateWatched",并选择类型。其他配置选择默认配置后,点击Create Table创建表。
- 创建成功后,进入表,点击"Action"->"Create Item",为DynamoDB数据表添加数据。
- 添加一条userid字段数据"12345-abcd-6789",和lastDateWatched字段数据"1619156406"。再创建三个新的字段videoid、preferredLanguage和supportedDeviceTypes,类型分别为String、String、List,并添加数据"9875-djac-1859"、"English"和["Amazon Fire TV", "Amazon Fire Tablet"]。最后点击Create item添加数据。
- 接下来我们进入DynamoDB主页的"Explore Items"功能,用于查询数据。我们点击查询类型为Query精确搜索,设置搜索条件如下:userid字段为"12345-abcd-6789",lastDateWatched字段为"1619156406",然后点击Run进行搜索
7.通过精确搜索Query我们就可以查询到我们刚刚创建的记录了,点击搜索结果可以看到具体的数据。
如何通过代码创建和调用DynamoDB数据库?
下面是使用 Python SDK boto3
创建一个 DynamoDB 表并利用 query
方法进行搜索的代码示例
python
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云开发/云架构方案!