一起来!白嫖Amazon DynamoDB!!!

news2024/11/15 11:12:54

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.coloradmin.cn/o/510234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tiechui_lesson08_内存的分配和链表

主要是将链表结构的使用,在内核开发中使用起来比较方便的一种数据结构【LIST_ENTRY】。 一、内存的分配 主要是学习一些基本操作。现在推荐使用的动态分配函数【ExAllocatePoolWithTag】 PVOID tempbuffer ExAllocatePoolWithTag(NonPagedPool, 0x1000, xxaa); …

DJ4-6 层次选路

目录 一、层次选路的基本概念 二、域内路由选择 1、RIP* 2、OSPF 三、域间路由选择 BGP 1、AS 互连 2、AS 域间选路任务 3、示例:在 1d 上设置转发表 4、示例:在多个 AS 中做出选择 5、BGP 会话与通告 6、传播可达信息 7、路径属性和 BGP 路…

马蹄集第四期oj

目录 供水管线 黑客小码哥 逆序 来给单词分类 前k小数(进阶) 前K小数 线段树 队列安排 一元多项式的加法 快排变形 供水管线 难度:钻石 0时间限制:1秒 巴占用内存:128M 在个城市之间原本要规划修建许多条下水管道…

提高开发团队能力 这4点很重要

组建开发团队,提高开发团队能力的前提是需要选对人,不仅需与专业匹配,与公司文化相匹配,更与管理者相匹配。 而团队能力的提升需要重点关注:流程化,标准化、工具化和持续赋能。尤其通过流程化、标准化和工具…

TIM输入捕获-STM32

TIM输入捕获-STM32 IC(Input Capture) 输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕…

Unity 自建package包流程

目录 1.在工程Asset 同级目录下创建文件夹 名字随便起 2.在文件夹中添加package.json 文件 3.在unity中选中PackageManager 4.打开vs 新建一个项目 5.开始编写代码 6.修改dll路径 7.打个dll 1.在工程Asset 同级目录下创建文件夹 名字随便起 eg: 2.在文件夹中添加package…

《MySQL 必知必会》课程笔记(三)

怎么创建和修改数据表? 创建和修改数据表,是数据存储过程中的重要⼀环。我们不仅需要把表创建出来,还需要正确地设置限定条件,这样才能确保数据的一致性和完整性。同时,表中的数据会随着业务需求的变化而变化&#xf…

docker ngxin

安装docker环境 官方安装 官方安装 Install Docker Engine on CentOS | Docker Documentation sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli container…

在滴滴和字节跳动划水4年,过于真实了...

先简单交代一下吧,沅哥是某不知名211的本硕,18年毕业加入滴滴,之后跳槽到了头条,一直从事测试开发相关的工作。之前没有实习经历,算是四年半的工作经验吧。 这四年半之间他完成了一次晋升,换了一家公司&am…

你有了一套采购系统,就数字化转型了吗?

我觉得完全没有达到,我们觉得要把这个系统要应用起来,用得好才能够说明你这个系统真正地做了数字化转型的。 甄云作为采购数字化服务商,在服务客户时,深有感触。 流程断点,但没有充分采购数字化价值 我这边讲一个故事…

Python系列之Linux 安装

目录 一、认识Python 1.1 为什么要学python ? 1.2 Python优点 1.3 Python应用场景 二、源码安装 三、RPM安装 一、认识Python 1.1 为什么要学python ? python的哲学: 明确,优雅,简单 python更强大,执行效率比shell高。 python可以跨平台,可移…

计算机网络的三种交换方式

1.计算机网络的三种交换方式 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 个人理解:交换(Switch)可以理解为切换开关,将交换机中某两个开关打开,使得连接此两个开关的双方建立通信通道 如…

VolSDF

Volume Rendering of Neural Implicit Surfaces(VolSDF):神经隐式曲面的体渲染 摘要:一个神经隐式表面体积渲染框架,将体积密度建模为几何形状的函数来实现表面重建。定义的体积密度函数作为拉普拉斯的累积分布函数&am…

git 解决 “fatal: Could not read from remote repository.“

现象 在使用Git将本地仓库推送到远程仓库的时候,发生了如下错误:“fatal: Could not read from remote repository.” 原因 出现这错误一般是以下两种原因: 客户端与服务端未生成 ssh key客户端与服务端的ssh key不匹配 为解决以上问题&a…

斯坦福2023【FrugalGPT】减少大模型的商业化应用成本

文章目录 主要解决问题采用什么方法Prompt adaptationLLM approximationLLM cascade 实验结论讨论与展望 FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance 主要解决问题 这篇文章主要是要解决如何降低调用大语言模型的成本(Chat…

NMOS双向转换电路实测以及上升沿尖峰处理

NMOS双向转换电路实测以及上升沿尖峰处理 NMOS双向转换电路 &#x1f527;采用的是5V供电的STC8H单片机输出PWM波形&#xff0c;经过上面的电平转换电路测量低压端的波形。 ✨在做3.3V <>5V 电平转换电路方案验证时&#xff0c;输入5V PWM波形和输出波形的波形上升沿有尖…

[Java基础练习-002]综合应用(基础进阶),如果你会做,那说明你java入门了,

本篇的练习是一个综合性的练习&#xff0c;结合了各个知识点&#xff0c;比如选择结构、循环结构、数组等java基础知识。综合性运用比较强。 目录 1、进阶练习一、学习网站&#xff08;主要考察选择结构、输入语句&#xff09; 2、进阶练习二&#xff08;选择结构、循环&#…

SELinux详解

文章目录 SELinux详解什么是SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号主要的关系&#xff1a;自主访问控制(DOC)以策略规则制定特定进程读取特定文件&#xff1a;强制访问控制(MAC) SELinux的运行模式安全上下文进程与文件SELinux类型字段的相关性…

QQ邮箱 网易邮箱及企业邮箱开通SMTP/POP3及设置授权码

一 、什么是 POP3/IMAP/SMTP 服务 POP3 &#xff08;Post Office Protocol - Version 3&#xff09;协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。 IMAP &#xff08;Internet Message Access Protocol&#xff09;协议用于支持使用电子邮件客户端交互式存…

Windows Nvm+Node.js安装

前言 在windows系统下安装的是nvm-windows&#xff0c;nvm只支持安装在在Linux和Mac系统下。之前在Linux上安装过&#xff0c;最近在Windows上安装&#xff0c;特记录一下。 下载 下载地址&#xff1a;传送门 安装Nvm 双击exe文件&#xff0c;选定安装路径&#xff0c;下…