当前位置: 首页 > news >正文

aws dynamodb 使用awsapi和PartiQL掌握dynamodb的CRUD操作

总结一下

  • dynamodb通常和java等后端sdk结合使用
  • 使用的形式可以是api或partiql语法调用
  • dynamodb的用法不难,更重要的是维护成本,所需的服务集成,技术选型等
  • 和大数据结合场景下有独特优势

之后可能再看看java sdk中DynamoDBMapper的写法,以及对标产品documentdb的比较

创建dynamodb表

创建表

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/create-table.html

  • 主键可包含一个属性(分区键)或两个属性(分区键和排序键)。需要提供每个属性的属性名称、数据类型和角色:HASH (针对分区键) 和 RANGE (针对排序键)
  • 使用预置模式,则必须指定表的初始读取和写入吞吐量设置
/// 预配置表
aws dynamodb create-table \--table-name Music \--attribute-definitions \AttributeName=Artist,AttributeType=S \AttributeName=SongTitle,AttributeType=S \--key-schema \AttributeName=Artist,KeyType=HASH \AttributeName=SongTitle,KeyType=RANGE \--provisioned-throughput \ReadCapacityUnits=5,WriteCapacityUnits=5 \--table-class STANDARD# --table-class STANDARD_INFREQUENT_ACCESS// 按需表
aws dynamodb create-table \--table-name Music \--attribute-definitions \AttributeName=Artist,AttributeType=S \AttributeName=SongTitle,AttributeType=S \--key-schema \AttributeName=Artist,KeyType=HASH \AttributeName=SongTitle,KeyType=RANGE \--billing-mode=PAY_PER_REQUEST

控制台创建默认表的配置如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGso1Yks-1678515745623)(assets/image-20230311111037435.png)]

查看表

  • 对按需表调用 DescribeTable 时,读取容量单位和写入容量单位设置为 0
aws dynamodb describe-table --table-name Music

此时的最佳实践是开启Point-in-time recovery(dynamodb的自动备份),避免意外的写入和删除

  • 可以按需恢复到最近35天(无法修改,禁用在开启需要从0开始计算天数)中的任意时间点

  • 备份方式为增量备份

  • 开启时间点恢复不影响api的性能

  • 支持跨region还原表

  • 删除开启时间点还原的表,会自动创建一个备份快照(保留 35 天)

aws dynamodb update-continuous-backups \ --table-name Music \ --point-in-time-recovery-specification \ PointInTimeRecoveryEnabled=true

写入item

插入item有两种视图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iiqkYI07-1678515745625)(assets/image-20230311112037750.png)]

dynamodb api插入item

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/put-item.html#examples

cat > item.json << EOF
{"Artist": {"S": "No One You Know"},"SongTitle": {"S": "Howdy"},"AlbumTitle": {"S": "Somewhat Famous"},"Awards": {"N": "0"}
}
EOF
aws dynamodb put-item \--table-name MusicCollection \--item file://item.json \--return-consumed-capacity TOTAL \--return-item-collection-metrics SIZE
// output
{"ConsumedCapacity": {"TableName": "Music","CapacityUnits": 1.0}
}

PartiQL插入item

aws dynamodb execute-statement --statement "INSERT INTO Music \VALUE  {'Artist':'Oh My Hony','SongTitle':'Call Me Today', 'AlbumTitle':'Somewhat Famous', 'Awards':'1'}"

读取item

dynamodb api读取item

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/get-item.html

--consistent-read | --no-consistent-read (boolean)

Determines the read consistency model: If set to true , then the operation uses strongly consistent reads; otherwise, the operation uses eventually consistent reads.

aws dynamodb get-item \--consistent-read \--table-name Music \--key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}'

PartiQL读取item

aws dynamodb execute-statement --statement "SELECT * FROM Music   \WHERE Artist='Acme Band' AND SongTitle='Happy Day'"

更新item

dynamodb api更新item,逻辑上先查询再修改

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dynamodb/update-item.html

aws dynamodb update-item \--table-name Music \--key '{ "Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}' \--update-expression "SET AlbumTitle = :newval" \--expression-attribute-values '{":newval":{"S":"Updated Album Title1"}}' \--return-values ALL_NEW

PartiQL更新item

aws dynamodb execute-statement --statement "UPDATE Music  \SET AlbumTitle='Updated Album Title'  \WHERE Artist='Acme Band' AND SongTitle='Happy Day' \RETURNING ALL NEW *"

查询item

dynamodb api查询item

aws dynamodb query \--table-name Music \--key-condition-expression "Artist = :name" \--expression-attribute-values  '{":name":{"S":"Acme Band"}}'

这里必须指定key表达式,否则会报错

An error occurred (ValidationException) when calling the Query operation: ExpressionAttributeValues can only be specified when using expressions: FilterExpression and KeyConditionExpression are null

PartiQL查询item

aws dynamodb execute-statement --statement "SELECT * FROM Music   \WHERE Artist='Acme Band'"

更新dynamodb表

支持的操作有

  • 修改表的预置吞吐量设置
  • 更改表的读/写容量模式。
  • 在表上操作全局二级索引
  • 在表上启用或禁用 DynamoDB Streams

修改读写模式

https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/switching.capacitymode.html

类型位置模式转换
按需模式 => 预置模式
读写模式控制台根据表和全局二级索引在过去 30 分钟内占用的读写容量估计初始预配置容量值
读写模式CLI 或 SDK用户通过cw查看历史使用情况(ConsumedWriteCapacityUnitsConsumedReadCapacityUnits 指标)以确定新的吞吐量设置
按需模式 <= 预置模式
读写模式任意无需指定预期应用程序执行的读取和写入吞吐量
预置模式 => 按需模式
自动扩缩CLI 或 SDK可能会保留自动扩缩设置
自动扩缩控制台会删除自动扩缩设置
按需模式 <= 预置模式
自动扩缩CLI 或 SDK保留先前的 Auto Scaling 设置
自动扩缩控制台建议设置,目标利用率:70%,最小预置容量:5 个单位,最大预置容量:区域最大值
  • 从按需模式更新为预置模式

    • 控制台修改,根据表和全局二级索引在过去 30 分钟内占用的读写容量估计初始预配置容量值
    • CLI 或 SDK,用户通过cw查看历史使用情况(ConsumedWriteCapacityUnitsConsumedReadCapacityUnits 指标)以确定新的吞吐量设置
  • 从预置模式更新为按需模式

    • 无需指定预期应用程序执行的读取和写入吞吐量

关于自动扩缩

  • 从预置模式更新为按需模式

    • 控制台会删除自动扩缩设置

    • cli则可能会保留自动扩缩设置

  • 从按需模式更新为预置模式

    • 控制台建议设置,目标利用率:70%,最小预置容量:5 个单位,最大预置容量:区域最大值
    • cli保留先前的 Auto Scaling 设置

创建全局二级索引

创建全局二级索引是更新表操作的一种

dynamodb api创建索引

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dynamodb/update-table.html#examples

If you are adding a new global secondary index to the table, AttributeDefinitions must include the key element(s) of the new index.

cat > gsi-updates.json << EOF
[{"Create": {"IndexName": "AlbumTitle-index","KeySchema": [{"AttributeName": "AlbumTitle","KeyType": "HASH"}],"ProvisionedThroughput": {"ReadCapacityUnits": 10,"WriteCapacityUnits": 5},"Projection": {"ProjectionType": "ALL"}}}
]
EOF
aws dynamodb update-table \--table-name Music \--attribute-definitions AttributeName=AlbumTitle,AttributeType=S \--global-secondary-index-updates file://gsi-updates.json

控制台查看

 aws dynamodb describe-table --table-name Music | grep IndexStatus

在这里插入图片描述

查询全局二级索引

dynamodb api查询GSI

aws dynamodb query \--table-name Music \--index-name AlbumTitle-index \--key-condition-expression "AlbumTitle = :name" \--expression-attribute-values  '{":name":{"S":"Somewhat Famous"}}'

PartiQL查询GSI

aws dynamodb execute-statement --statement "SELECT * FROM ‘Music’.‘AlbumTitle-index’  \WHERE AlbumTitle='Somewhat Famous'"

删除表

aws dynamodb delete-table --table-name Music

查看吞吐量配额

https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/ServiceQuotas.html#default-limits-throughput

  • 预置吞吐量配额是表容量加上其所有全局二级索引容量的总和
$ aws dynamodb describe-limits
{"AccountMaxReadCapacityUnits": 80000,"AccountMaxWriteCapacityUnits": 80000,"TableMaxReadCapacityUnits": 40000,"TableMaxWriteCapacityUnits": 40000
}

相关问题

节流问题

https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ProvisionedThroughput.Troubleshooting

  • DynamoDB 仅向 CloudWatch 报告分钟级指标,然后将这些指标计算为一分钟的总和并取平均值。但是 DynamoDB 本身会应用每秒的速率限制。可能由于微突增产生限流

  • 当 2 个数据点在 1 分钟内超过所配置的目标利用率值时,可以触发自动扩缩,如果峰值间隔超过 1 分钟,则可能无法触发自动扩缩。在触发自动扩缩之后,都会调用 UpdateTable API

    img

  • 对于按需表,如果吞吐量在 30 分钟内超出先前峰值的两倍,则可能发生节流

  • 生成的“热分区”超过了每分区每秒 3000 RCU 或 1000 WCU 的限制,这可能会导致节流

相关文章:

aws dynamodb 使用awsapi和PartiQL掌握dynamodb的CRUD操作

总结一下 dynamodb通常和java等后端sdk结合使用使用的形式可以是api或partiql语法调用dynamodb的用法不难&#xff0c;更重要的是维护成本&#xff0c;所需的服务集成&#xff0c;技术选型等和大数据结合场景下有独特优势 之后可能再看看java sdk中DynamoDBMapper的写法&…...

【C++学习】类和对象(上)

前言&#xff1a; 由于之前电脑“嗝屁”了&#xff0c;导致这之前一直没有更新博客&#xff0c;今天才拿到电脑&#xff0c;在这里说声抱歉。接下来就进入今天的学习&#xff0c;在之前我们已经对【C】进行了初步的认识&#xff0c;有了之前的知识铺垫&#xff0c;今天我们将来…...

一文带你深入理解【Java基础】· Java反射机制(下)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…...

JVM的几种GC

GC JVM在进行GC时&#xff0c;并不是对这三个区域统一回收。大部分时候&#xff0c;回收都是新生代~ 新生代GC&#xff08;minor GC&#xff09;&#xff1a; 指发生在新生代的垃圾回收动作&#xff0c;因为Java对象大多都具备朝生夕灭的特点&#xff0c;所以minor GC发生得非…...

掌握Shell脚本的if语句,让你的代码更加精准和高效

前言 大家好&#xff0c;我是沐风晓月&#xff0c;本文首发于csdn&#xff0c; 作者: 我是沐风晓月。 文章收录于 我是沐风晓月csdn专栏 【系统架构实战】专栏中的【shell脚本入门到精通】专栏。 本专栏从零基础带你层层深入&#xff0c;学会shell脚本&#xff0c;不是梦。 &…...

音质好的蓝牙耳机有哪些?音质最好的蓝牙耳机排行

说起当代人外出必备是数码产品&#xff0c;蓝牙耳机肯定存在。不管是听歌还是追剧&#xff0c;蓝牙耳机在音质上的表现也是越来越好了。下面&#xff0c;我来给大家推荐几款音质好的蓝牙耳机&#xff0c;一起来看看吧。 一、南卡小音舱蓝牙耳机 参考价&#xff1a;259 蓝牙版…...

一次Android App NDK崩溃问题的分析及解决

文章目录小结NDK崩溃的问题通过logcat查看崩溃日志提取tombstone的记录通过ndk-stack来输出日志取得的日志分析并解决分析使用add2line定位具体报错的行数解决参考小结 最近碰一次Android App NDK崩溃的问题&#xff0c;这个NE&#xff08;Native Exception&#xff09;是从ND…...

因果图判定表法

因果图&判定表法 在了解了等价类和边界值比较适宜搭档的测试用例方法之后 接下来我们来了解另外一队就是因果图和判定表 因果图会产生判定表法 因果图法 等价类划分法和边界值分析方法都是着重考虑输入条件而不考虑输入条件的各种组合、输入条件之间的相互制约关系。例…...

Oracle 数据库相关信息清单列表

Oracle 数据库相关信息清单列表 一、设置Oracle安装目录 Oracle基目录(ORACLE_BASE):D:\databases\oracle\oracle_11g\app\Administrator 软件位置(ORACLE_HOME):D:\databases\oracle\oracle_11g\app\Administrator\product\11.2.0\dbhome_1 数据库文件位置:D:\databa…...

射频资料搜集--推荐几个网站和链接

https://picture.iczhiku.com/resource/eetop/wHKYFQlDTRRShCcc.pdfhttps://picture.iczhiku.com/resource/eetop/wHKYFQlDTRRShCcc.pdfVCO pulling的资料 模拟滤波器与电路设计手册 - 射频微波仿真 - RF技术社区 Practical RF Amplifier Design Using the Available Gain Pr…...

B1048 数字加密

decription 本题要求实现一种数字加密方法。首先固定一个加密用正整数 A&#xff0c;对任一正整数 B&#xff0c;将其每 1 位数字与 A 的对应位置上的数字进行以下运算&#xff1a;对奇数位&#xff0c;对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 …...

Qt使用FFmpeg播放视频

一、使用场景 因为项目中需要加载MP4播放开机视频&#xff0c;而我们的设备所使用的架构为arm架构&#xff0c;其中缺乏一些多媒体库。安装这些插件库比较麻烦&#xff0c;所以最终决定使用FFmpeg播放视频。 二、下载编译ffmpeg库 2.1 下载源码 源码下载路径&#xff1a;http…...

Win32 ListBox控件

Win32 ListBox控件 创建ListBox控件 创建窗口函数 HWND CrateWindowEx(DWORD dwExStyle , // 窗口的扩展风格,基本没用LPCTSTR lpClassName, // 已经注册的窗口类名称LPCTSTR lpWindowName, // 窗口标题栏的名字DWORD dwStyle, // 窗口的基本风格int x, // 左上角水平坐标int …...

最大值池化与均值池化比较分析

1 问题在深度学习的卷积网络过程中&#xff0c;神经网络有卷积层&#xff0c;池化层&#xff0c;全连接层。而池化层有最大值池化和均值池化两种情况&#xff0c;而我们组就在思考&#xff0c;最大值池化和均值池化有什么区别呢&#xff1f;两者的模型准确率是否有所不同&#…...

统计学 多元线性回归

文章目录统计学 多元线性回归多元线性回归模型拟合优度显著性检验线性关系检验回归系数检验多重共线性及其处理多重共线性的问题多重共线性的识别与处理变量选择利用回归方程进行预测哑变量回归统计学 多元线性回归 多元线性回归模型 多元线性回归模型&#xff1a;设因变量为…...

tar和gzip压缩和解压

打包和压缩的区别&#xff1a;打包&#xff1a;将多文件 封装在一起压缩&#xff1a;将多文件 封装在一起 通过特定的算法 将冗余的数据 进行删除tar默认是打包命令&#xff0c;如果想用tar进行压缩 必须加选项1、gzip格式压缩&#xff1a;tar zcvf 压缩包包名 文件1 文件2 文件…...

搭建Docker企业私有仓库

什么是仓库 仓库&#xff08;Repository&#xff09;是存储和分发 Docker 镜像的地方。镜像仓库类似于代码仓库&#xff0c;Docker Hub 的命名来自 GitHub&#xff0c;Github 是我们常用的代码存储和分发的地方。同样 Docker Hub 是用来提供 Docker 镜像存储和分发的地方。 谈…...

[NOIP2009 提高组] 最优贸易(C++,tarjan,topo,DP)

题目描述 $C 国有国有国有 n 个大城市和个大城市和个大城市和 m$ 条道路&#xff0c;每条道路连接这 nnn个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 mmm 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的…...

计算机网络:移动IP

移动IP相关概念 移动IP技术是移动结点&#xff08;计算机/服务器&#xff09;以固体的网络IP地址&#xff0c;实现跨越不同网段的漫游功能&#xff0c;并保证了基于网络IP的网络权限在漫游中不发生任何改变。移动结点&#xff1a;具有永久IP地址的设备。归属代理&#xff08;本…...

binutils工具集——GNU binutils工具集简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 GNU binutils是一个二进制工具集&#xff0c;主要包括&#xff1a; ld&#xff0c;GNU链接器。as&#xff0c;GNU汇编器。addr2line&#xff0c;把地址转化为文件名和行号。nm&#xff0c;列出目标文件的符…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...