一起来!白嫖Amazon DynamoDB!!!

news/2024/11/8 22:50:12/

Amazon DynamoDB简介

Amazon DynamoDB是由Amazon Web Services(AWS)提供的一种快速、灵活、全托管的NoSQL数据库服务,支持文档和键/值数据模型。它具有自动扩展、低延迟、高可靠性、高吞吐量等特点,能够处理从几个字节到几TB的数据,同时还具备强大的安全和监控功能。关键是有Amazon账号就可以有免费的套餐可以使用,貌似试用期有12个月,所以今天我们来白嫖一下这个免费的产品。

DynamoDB的优势

  1. 快速响应:DynamoDB支持读写操作的低延迟,读取操作的平均响应时间可以在几毫秒内完成。
  2. 强大的可扩展性:DynamoDB是一种可水平扩展的数据库,可以根据需要自动增加或减少容量,从而满足不同的负载需求。
  3. 简单易用:DynamoDB使用简单的API和数据模型,易于使用和学习。
  4. 高可用性:DynamoDB提供了多种数据备份和复原功能,使其在遇到任何故障或灾难时都能够快速恢复。
  5. 灵活性:DynamoDB支持多种数据类型和数据模型,并支持多种查询和索引方式。
  6. 支持多种数据访问方式:DynamoDB支持RESTful API、SDK、CLI等多种访问方式。

适用场景

DynamoDB主要适用于OLTP(联机事务处理)场景,更适合处理具有以下特点的应用程序:

  1. 数据集比较小(每个项目小于1MB)
  2. 需要频繁的读写操作
  3. 需要高可用性和低延迟的响应
  4. 需要可伸缩性和弹性

免费额度

DynamoDB 的免费套餐提供 25GB 的存储空间,以及 25 个预置的写入容量单位和 25 个预置的读取容量单位 (WCU、RCU),足以处理每月 2 亿个请求

写入和读取容量单位可以通过表的其他设置选项卡中进行查看,注意不要超过免费额度,不然会产生费用。

请添加图片描述

我们这里从一个表的创建、数据的C(增加)R(查询)U(更新)D(删除)来演示DynamoDB的入门使用。

创建表

为了简单,这里直接采用控制台的方式进行创建,当然也可以用Amazon提供的SDK等方式,进入DynameDB的控制台页面,点击创建表,按照页面提示输入信息即可。

请添加图片描述

输入表的名称,因为DynamoDB是一个无模式数据库,在创建表时只需要表名和主键即可,主键代表数据的唯一性,记住这两个配置项目,后面的程序代码中需要使用到。其他的配置暂时按照默认推荐的参数即可。

增加数据

增加数据,控制台页面也提供了增加的操作,但在实际应用中,一般都是由应用产生,并推送到数据库进行数据的存储,所以这里使用python,演示如何连接到DynamoDB,并且增加数据项。

import boto3# 指定AWS访问密钥和凭证
ACCESS_KEY = 'your-access-key'
SECRET_KEY = 'your-secret-key'
REGION = 'ap-east-1'# 创建DynamoDB客户端
dynamodb = boto3.resource('dynamodb',region_name=REGION,aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY)

这里需要提供Amazon的访问秘钥凭证和地区,通过boto3.resource,来创建一个DynamoDB客户端,注意需要安装boto3库。可以通过pip install boto3进行安装

# 获取DynamoDB表
table = dynamodb.Table('demo')
# 将文本内容插入到DynamoDB表中
table.put_item(Item={'id': '1','text': "HelloWorld"}
)

这里的demo就是我们的一开始创建的表名,Item里面的id就是我们的主键,因为是无模式的数据库,后面的字段内容想如何增加就增加,支持字符串、整型、数组等常见的编程语言基本类型。

运行之后,成功的会返回http信息,格式为json,示例如下:

{'ResponseMetadata': {'RequestId': 'K02UHKKO2KQ9R2LV0T201OBDGBVV4KQNSO5AEMVJF66Q9ASUAAJG','HTTPStatusCode': 200,'HTTPHeaders': {'server': 'Server','date': 'Wed, 10 May 2023 07:38:15 GMT','content-type': 'application/x-amz-json-1.0','content-length': '2','connection': 'keep-alive','x-amzn-requestid': 'K02UHKKO2KQ9R2LV0T201OBDGBVV4KQNSO5AEMVJF66Q9ASUAAJG','x-amz-crc32': '2745614147'},'RetryAttempts': 0}}

查询数据

查询数据支持整表扫描,加条件,支持结果分页,这里以整表扫描为例

table = dynamodb.Table('demo')
response = table.scan()
items = response['Items']
print(items)

查询结果如下:

[{'id': '1', 'text': 'HelloWorld'}]

可以看到数据已经插入到Dynamodb中了。

这个例子使用了 scan 方法来查询整个表,因为没有指定查询条件。在 DynamoDB 中,scan 方法可以用来查询整个表或者一个表中的部分数据。需要注意的是,scan 方法会扫描整个表,可能会比较慢,而且可能会消耗较多的读取容量单位(RCUs)和查询容量单位(WCUs),因此需要谨慎使用。如果你的表中有很多数据,最好使用查询条件来缩小查询范围。

更新数据

# 定义要更新的项的主键
key = {'id': '1'}# 更新数组,追加一个新的整数
table.update_item(Key=key,UpdateExpression='SET #attrName = :attrValue',ExpressionAttributeNames={'#attrName': 'text'},ExpressionAttributeValues={':attrValue': 'HelloWorld updated!'}
)

更新成功后,同样也会返回http信息,格式为json。

{'ResponseMetadata': {'RequestId': 'FG893L8TT0CNB6JFEIMS85K2INVV4KQNSO5AEMVJF66Q9ASUAAJG','HTTPStatusCode': 200,'HTTPHeaders': {'server': 'Server','date': 'Wed, 10 May 2023 07:47:26 GMT','content-type': 'application/x-amz-json-1.0','content-length': '2','connection': 'keep-alive','x-amzn-requestid': 'FG893L8TT0CNB6JFEIMS85K2INVV4KQNSO5AEMVJF66Q9ASUAAJG','x-amz-crc32': '2745614147'},'RetryAttempts': 0}}

删除数据

删除数据可以使用delete_item方法,将主键传进去即可。

# 定义需要删除的数据的主键
item_key = {'id': '1'}# 删除数据
response = table.delete_item(Key=item_key)

同样也会返回http信息,格式为json。

{'ResponseMetadata': {'RequestId': 'URK27CJH123CVJSP970M635AAFVV4KQNSO5AEMVJF66Q9ASUAAJG','HTTPStatusCode': 200,'HTTPHeaders': {'server': 'Server','date': 'Wed, 10 May 2023 08:02:11 GMT','content-type': 'application/x-amz-json-1.0','content-length': '2','connection': 'keep-alive','x-amzn-requestid': 'URK27CJH123CVJSP970M635AAFVV4KQNSO5AEMVJF66Q9ASUAAJG','x-amz-crc32': '2745614147'},'RetryAttempts': 0}}

总结

以上演示了对DynamoDB的入门基本使用,由于是Amazon的免费试用的产品,就闲下来研究了下,还没有进行过线上产品的实战,请有需要的小伙伴可以进行尝试,可以用来自有博客数据的存储,物联网采集数据存储场景,相信是一个非常不错的NoSQL数据库的替代。

我这里有一个分享的notebook文件,有需要的测试验证的,可以用我的notebook进行线上测试体验。

https://colab.research.google.com/drive/1Bk5Jj8DZqQJ2i5X2bUbuM5qJOLLx6-df?usp=sharing


http://www.ppmy.cn/news/66720.html

相关文章

闪耀的钥匙:PHP 与访问修饰符

文章目录 参考描述访问修饰符访问修饰符PHP 与访问修饰符publicprotectedprivate 继承中的重写规则可见性举个栗子未重写父类的受保护成员前将受保护成员重写为公有成员将受保护成员重写为私有成员 为什么不允许子类成员设置比父类成员更严格的访问限制? final 关键…

【译】Java 内存泄露的构造和检测

1. 概述 在 Java 应用程序中,内存泄漏会导致严重的性能下降和系统故障。开发人员必须了解内存泄漏的发生原因以及如何识别和解决它们。 在本教程中,我们将提供一个使用失效的监听器问题作为示例来创建 Java 内存泄漏的指南。我们还将讨论各种检测内存泄…

简单随机微分方程数值解

1.随机微分方程求解:dX(t) − αXtdt σdWt 法一:Euler-Maruyama %% %O-U过程 %dX(t)-alpha*Xt*dtsigma*dWt,X|t0X0 %alpha2,sigma1,X01 % 设置初始参数 T 1; % 时间区间长度 N 1000; % 离散化的时间步数 dt T/N; …

linux device tree 中断属性

/* * 设备树的中断属性 */ interrupt-controller /* 中断控制器 */ #interrupt-cells /* 表明引用这个中断控制器的话需要多少个 cell */ #interrupt-cells<1> /* 其它节点要使用这个中断控制器时&#xff0c;只需要一个 cell 来表明使用&quo…

【C语言】扫雷游戏

这里写目录标题 前言1.初始化棋盘2.展示棋盘3.布置雷4.开始扫雷4.1判断输赢4.2扫雷时连续性展开4.3展示玩法 5.整体代码展示5.1 game.h头文件展示5.2 game.c源文件展示5.3 text.c源文件展示 所属专栏&#xff1a;C语言 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyan…

Java14-常用类:字符串,日期类,比较器

一&#xff1a;字符串&#xff1a;String 1.概述&#xff1a; String&#xff1a;字符串&#xff0c;使用一对""引起来表示。 1.String 声明 为final的&#xff0c;不可被继承 2.String 实现了Serializable接口&#xff1a;表示字符串是支持序列化的。 实现了Co…

Linux系统结构

UNIX/Linux 系统可以粗糙地抽象为 3 个层次&#xff0c;底层是系统内核&#xff08;Kernel&#xff09;&#xff1b;中间层是Shell层&#xff0c;即命令解释层&#xff1b;高层则是应用层。 &#xff08;1&#xff09;内核层 内核层是 UNIX/Linux 系统的核心和基础&#xff0c…

ChatGPT入门到高级【第六章】

第一章&#xff1a;Chatgpt的起源和发展 1.1 人工智能和Chatbot的概念 1.2 Chatbot的历史发展 1.3 机器学习技术在Chatbot中的应用 1.4 Chatgpt的诞生和发展 第二章&#xff1a;Chatgpt的技术原理 2.1 自然语言处理技术 2.2 深度学习技术 2.3 Transformer模型 2.4 GPT模型 第…