零基础上手 Amazon DynamoDB:NoSQL 数据库服务的核心概念与快速搭建指南
零基础上手 Amazon DynamoDB:NoSQL 数据库服务的核心概念与快速搭建指南
Amazon DynamoDB原理分析
Amazon DynamoDB 快速灵活NoSQL数据库服务,可以配置 NoSQL Workbench、Global tables 等关键特性,具备安全、备份恢复等能力,能将表数据导出,与 Amazon S3、Amazon Glue Elastic Views 等其他亚马逊云科技服务集成,实现数据的分析、洞察提取及日志监控等更多功能
- 完全托管:亚马逊云科技涵盖数据库运维全流程,从硬件管理、备份恢复到更新扩展,开发者不需要操心底层设施,聚焦业务逻辑开发,大幅简化部署与维护
- 高性能低延迟:依托 SSD 存储与分布式架构,实现个位数毫秒级稳定响应,轻松支撑每秒数百万请求,适配实时应用、高并发场景(如电商秒杀、游戏互动 )
- 弹性自动扩展:可根据负载自动调整计算与存储资源,按需模式下无需手动配容量,预置模式也能灵活优化,支持跨可用区复制,兼顾性能与高可用,从容应对业务波峰波谷
亚马逊云科技账号注册
1、亚马逊云科技官网账号注册
2、进入注册页面(使用电子邮件地址进行注册)
进入 创建亚马逊云科技账户页面(如果最近登录过 亚马逊云科技,请选择登录控制台。如果未显示创建新亚马逊云科技账户,请首先选择登录其他账户,然后选择创建新亚马逊云科技账户)
根用户电子邮件地址 中,输入电子邮件地址,编辑亚马逊云科技账户名称,然后选择验证电子邮件地址,该地址会收到一封包含验证码的亚马逊云科技验证电子邮件
- 安全验证
- 验证电子邮件地址(输入收到的代码,然后选择验证,可能需要几分钟才会收到代码,检查电子邮件和垃圾邮件文件夹中是否有验证码电子邮件)
3、设置用户信息
- 创建密码:输入根用户密码和确认根用户密码,然后选择继续
- 添加您的联系信息:选择个人或企业(个人账户和企业账户具有相同的特性和功能)
4、添加付款信息( 账单信息页面上,输入付款方式的信息,然后选择验证并添加,必须先添加有效的支付方式才能继续注册)
5、用户信息验证(选择接收验证码的联系方式、选择电话号码的国家或地区代码)
6、客户验证与激活账户(选择亚马逊云科技支持服务计划)
7、注册成功
Amazon DynamoDB创建NoSQL 表
1、亚马逊云科技账号注册成功登录后,进入控制台页面
2、搜索栏中输入DynamoDB并选择打开DynamoDB控制台
3、使用 DynamoDB 控制台创建表
4、表名字创建
5、Partition key(分区键) 文本框中输入 Artist
- Partition key:分布式数据库或存储系统中用于将数据分散存储到不同物理分区(Partition)的核心属性,通过分区键,系统将数据水平切分,实现数据的分布式存储与并行处理
6、 Sort key文本框中,输入songTitle
- Sort key:数据库或分布式系统中用于对数据进行有序排列的属性或属性组合,通常与分区键(Partition key)配合使用,在分区内对数据实现二次排序,使数据存储和查询更具规律性
7、表启用DynamoDB自动扩缩(表启用自动扩缩是指系统可根据实际工作负载自动调整表的吞吐量容量,无需手动干预)
- Settings(设置):提供两种配置方式,“Default settings(默认设置)” 快速建表方案,建表后也能修改;“Customize settings(自定义设置)” 可利用高级功能,让 DynamoDB 更贴合业务需求
- Table class(表类型):依据工作负载和数据访问模式优化成本,“DynamoDB Standard(标准型)” 通用默认类型,适合频繁访问、读写操作占主要成本的表;“DynamoDB Standard - IA(低频访问型)” 推荐给存储不常访问数据、存储成本占主导的表
8、DynamoDB读写容量设置
Capacity mode容量模式:
On - demand(按需模式):按实际读写操作计费,简化账单管理,适合流量不可预测或波动大的场景
Provisioned(预配置模式):需要提前分配读写容量,可主动优化成本,适合流量可预测、有固定资源规划的场景
Read capacity(读容量):可以设置 Auto scaling(自动扩缩)能根据实际流量动态调整预配置的吞吐量,还可设置最小 / 最大容量单位、目标利用率
9、DynamoDB配置预览(二级索引与 预估读写容量成本配置界面)
10、DynamoDB 静态加密配置(DynamoDB 存储的用户数据默认静态加密,默认由 DynamoDB 管理加密密钥,无额外费用)
加密密钥管理方式:
- Owned by Amazon DynamoDB:密钥由 DynamoDB 拥有和管理,无附加费用
- Amazon managed key:密钥存储在用户账户,由 Amazon KMS 管理,会产生 Amazon KMS 费用,别名
aws/dynamodb
- Stored in your account, and owned and managed by you:密钥由用户自行存储、拥有和管理,会产生 Amazon KMS 费用
11、标签Tags配置
- 功能:标签是键值对,可分配给亚马逊云科技资源,用于控制资源访问、跟踪亚马逊云科技支出
- 当前状态:该资源无关联标签(No tags… ),可点击 Add new tag 添加,最多还能加 50 个
12、上诉步骤完成后即可点击创建表,这样就使用 DynamoDB 控制台创建了一个 NoSQL 表,如果要删除表安装如下步骤即可
13、DynamoDB 为数据库创建DDB On-demand backup按需备份(适合定期备份和长期数据保留需求)
- 配置备份-创建备份即可
DynamoDB操作NoSQL 表
1、Maven 项目的 pom.xml 中添加 Amazon SDK 依赖
<dependencies><dependency><groupId>software.amazon.awssdk</groupId><artifactId>dynamodb</artifactId><version>2.17.217</version></dependency> </dependencies>
2、配置亚马逊云科技凭证
- ACCESS_KEY:需要填写自己的亚马逊云科技访问密钥
- SECRET_KEY:需要填写自己的亚马逊云科技访问凭证
DynamoDbClient ddb = DynamoDbClient.builder().region(Region.US_WEST_2) // 替换为实际区域.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("ACCESS_KEY", "SECRET_KEY"))).build();
3、连接 DynamoDB 并获取表引用
public class DynamoDBMusicExample {private static final String TABLE_NAME = "Music";private static final DynamoDbClient ddb = DynamoDbClient.create(); }
添加数据(PutItem)
通过向 DynamoDB 的
Music
表插入一条记录,包含主键SongId
(S001)、Artist
(周杰伦)及Title
(青花瓷),通过构建PutItemRequest
并调用putItem
方法完成操作Map<String, AttributeValue> item = new HashMap<>(); item.put("SongId", AttributeValue.builder().s("S001").build()); item.put("Artist", AttributeValue.builder().s("周杰伦").build()); item.put("Title", AttributeValue.builder().s("青花瓷").build());PutItemRequest request = PutItemRequest.builder().tableName("Music").item(item).build();ddb.putItem(request);
查询数据(GetItem)
通过从 DynamoDB 的
Music
表查询一条记录,首先创建一个包含主键SongId
(S001)和Artist
(周杰伦)的 Map 作为查询条件,然后构建GetItemRequest
请求并指定表名和主键,最后通过DynamoDbClient
执行查询并打印结果Map<String, AttributeValue> key = Map.of("SongId", AttributeValue.builder().s("S001").build(),"Artist", AttributeValue.builder().s("周杰伦").build() );GetItemRequest request = GetItemRequest.builder().tableName("Music").key(key).build();Map<String, AttributeValue> item = ddb.getItem(request).item(); System.out.println(item);
更新数据(UpdateItem)
通过更新 DynamoDB 的
Music
表中主键为SongId=S001
和Artist=周杰伦
的记录,将Title
字段的值修改为"青花瓷 (新版)"UpdateItemRequest request = UpdateItemRequest.builder().tableName("Music").key(Map.of("SongId", AttributeValue.builder().s("S001").build(),"Artist", AttributeValue.builder().s("周杰伦").build())).updateExpression("SET Title = :title").expressionAttributeValues(Map.of(":title", AttributeValue.builder().s("青花瓷(新版)").build())).build();ddb.updateItem(request);
删除数据(DeleteItem)
通过从 DynamoDB 的
Music
表中删除主键为SongId=S001
和Artist=周杰伦
的记录DeleteItemRequest request = DeleteItemRequest.builder().tableName("Music").key(Map.of("SongId", AttributeValue.builder().s("S001").build(),"Artist", AttributeValue.builder().s("周杰伦").build())).build();ddb.deleteItem(request);
总结
Amazon DynamoDB作为完全托管的 NoSQL 数据库,通过分布式架构实现毫秒级低延迟与弹性自动扩展,适配高并发实时场景,开发者可通过控制台快速创建表,定义分区键与排序键构建数据模型,按需选择 On - demand 或预配置容量模式优化成本,并启用自动扩缩、静态加密及标签管理提升运维效率,并且借助 Java SDK 可简洁实现增删改查操作,但是开发时需要遵循凭证安全管理、最小权限原则及异常处理等问题,即可轻松构建高性能无服务器应用,亚马逊云科技官网体验。
友情提示:如果决定不再使用服务的话,记得要在控制台关闭服务,以防超过免费额度产生扣费