Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务,提供快速且可预测的性能,同时还能够实现无缝扩展。使用 DynamoDB,您可以免除操作和扩展分布式数据库的管理工作负担,因而无需担心硬件预置、设置和配置、复制、软件修补或集群扩展等问题。DynamoDB 还提供静态加密,这消除了在保护敏感数据时涉及的操作负担和复杂性。

背景

有时需要将DynamoDB中的数据完全拷贝下来。需要用到扫描操作。

Amazon DynamoDB 中的 Scan 操作读取表或二级索引中的每个项目。默认情况下,Scan 操作返回表或索引中每个项目的全部数据属性。但是,单个 Scan 请求最多可检索 1 MB 数据。对于大表需要进行多次扫描操作。且需要注意的是读取限制,如果超出限制,那么就会告警。

我的表格结构如下

JAVA环境的配置

(1)JDK和maven环境就不说了。

(2)将用户的认证相关内容放入配置文件当中,也可以直接写在代码当中(后面解决方法二就是直接写的)

(3)maven配置

因为用到了写入csv文件,因此引入了csv相关工具包。

<dependencyManagement><dependencies><dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-bom</artifactId><version>1.11.327</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-dynamodb</artifactId></dependency><dependency><groupId>net.sourceforge.javacsv</groupId><artifactId>javacsv</artifactId><version>2.0</version></dependency></dependencies>

解决方法(一)小容量读取

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;public class DynamoDBUtils {public static void main(String[] args) throws IOException {AWSCredentials credentials = new PropertiesCredentials(new File("src/main/resources/key.properties"));AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion("us-east-1").build();ScanRequest scanRequest = new ScanRequest().withTableName("yucheng");ScanResult result = client.scan(scanRequest);for (Map<String, AttributeValue> item : result.getItems()) {System.out.println(item);String query = item.get("query").getS();System.out.println(query);List<AttributeValue> asin_list = item.get("asin_list").getL();for (AttributeValue value : asin_list) {System.out.print(value.getS() + " ");}System.out.println();}}
}

读取结果如下。

解决方法(二)大容量读取


import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;import java.util.List;
import java.util.Map;import com.csvreader.CsvWriter;public class DynamoDBUtils {private static String region = "us-east-1";//替换成自己的private static String AWS_ACCESS_KEY_ID = "XXXXXX";//替换成自己的private static String AWS_SECRET_ACCESS_KEY = "XXXXXXXXXXX";//替换成自己的public static void main(String[] args) {try {f();} catch (InterruptedException | IOException e) {e.printStackTrace();}}public static void f() throws IOException, InterruptedException {String filePath = "XXXX.tsv";//替换成自己的AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion(region).build();CsvWriter csvWriter = new CsvWriter(filePath, '\t', Charset.forName("UTF-8"));int count = 0;Map<String, AttributeValue> lastKeyEvaluated = null;do {count++;if (count % 10 == 0) {System.out.println(count);}ScanRequest scanRequest = new ScanRequest().withTableName("yucheng").withExclusiveStartKey(lastKeyEvaluated);ScanResult result = client.scan(scanRequest);for (Map<String, AttributeValue> item : result.getItems()) {String query = item.get("query").getS();List<AttributeValue> asinList = item.get("asin_list").getL();List<String> asins = new ArrayList<>();for (AttributeValue value : asinList) {asins.add(value.getS());}String[] line = new String[2];line[0] = query;line[1] = String.join(",", asins);csvWriter.writeRecord(line);}lastKeyEvaluated = result.getLastEvaluatedKey();//为了控制频率,需要将此处进行一个暂停,不然DynamoDB承受不住就会告警Thread.sleep(40000);} while (lastKeyEvaluated != null);csvWriter.close();}}

【AWS】DynamoDB扫描操作获取表全部数据相关推荐

  1. PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本

    如何实现PHP获取表单数据与HTML嵌入PHP脚本 导语:如何实现PHP获取表单数据与HTML嵌入PHP脚本,下面是小编给大家提供的操作讲解,大家可以参考阅读,更多详情请关注应届毕业生考试网. 常用的 ...

  2. react如何获取表单数据

    react如何获取表单数据? 分为两种情况:第一种是每次输入都会更新状态第二种是只有用到的时候才获取(会用大量的ref,不推荐) 这里主要介绍第一种 //这是我们要操作的数据state = {resu ...

  3. 观看慕课老师milanlover视频Tomcat装在Servlet的三种情况+Servlet获取表单数据+Servlet相对路径

    在src新建TestServlet1: package servlet;import java.io.IOException; import java.io.PrintWriter;import ja ...

  4. python获取表单数据的代码_使用flask和python从html表单获取表单数据

    我正在尝试在按下submit时从文本字段中获取表单数据,以便将其放入json格式并作为另一个页面访问json数据,该页面将是localhost:5000/info.每次我试图用request.form ...

  5. AWS DynamoDB 常用操作

    在上篇blog 简单介绍了 DynamoDB 初步使用.但DynamoDb实际上使用与mongodb 有很大差异,这里自己用到一些操作方式(查询 更新 批量删除)做一些说明. 所有操作均基于:node ...

  6. 微信小程序之获取表单数据

    前言:微信小程序中很多地方运用到了表单,很多时候我们需要把表单中的内容提取出来返回给后台,这里我随便写了一点 注意点: 1.所有的input  textarea button全部包含在form表单元素 ...

  7. PHP获取表单数据的方法有几种,php怎么获取表单数据

    php获取表单数据的几种方法: 一.用file_get_contents以get方式获取内容,需要输入内容为:<?php $url='http://www.domain.com/?para=12 ...

  8. servlet获取表单数据

    1.sevlet获取表单数据 在很多的情况下,我们需要在浏览器,Web服务器和后台程序之间传递数据.浏览器使用两种方法可将这些信息传递到Web服务器,分别为Get方法和Post方法. 2.Get方法, ...

  9. DML操作(表中数据)

    DML是什么? 通过DML实现表中数据的操作 插入数据:insert 查询数据:select 更新数据:update 删除数据:delete 插入数据insert 语法:insert into 表名( ...

最新文章

  1. vuecli启动的服务器位置,webpack – 在vue cli 3生成的项目中启动dev服务器
  2. 【知识积累】BufferedImage类实现图片的切分
  3. 转:openTSDB 2.0 安装
  4. HashMap底层实现和原理
  5. 存储器间接寻址方式_8086中的数据存储器寻址模式
  6. Codeforces Round #580 (Div. 1)(CF1205)A-E
  7. GH4169高温合金执行什么标准
  8. linux中磁盘的管理(挂载,分区,配额,加密)
  9. RuntimeError: mat1 dim 1 must match mat2 dim 0
  10. Pycharm删除键、复制粘贴键失灵解决方案
  11. 解决intellij IDEA设置浏览器路径之后重启失效的问题
  12. 6p14推挽胆机20w功放电路图_6P14推挽双输出牛胆机
  13. 成功在虚拟机里面安装MAC苹果系统
  14. 现代公关无需遮遮掩掩,明火执仗开干就行
  15. 机器人学:齐次变换矩阵
  16. java socket实现的简易的聊天工具demo
  17. 自制免费防关联浏览器,免费指纹浏览器的解决方案
  18. 杰理之在开机、播提示音、关机,会有噗声【篇】
  19. table2excel.js兼容ie问题
  20. 分布式事务的六种处理方式

热门文章

  1. 如何重命名磁盘盘符名?
  2. Python 自定义函数和参数类型
  3. PyQt4编程之简短地做出多个选择框
  4. PyQt4编程之自定义插槽
  5. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(DOM)
  6. Spring Cloud Alibaba:一步一步教你搭建Nacos集群
  7. SpringBoot @Cacheable缓存注解的使用
  8. 3级联动 ajax java_ajax实现三级联动的基本方法
  9. qt designer python显示_请问在python怎么使用qtdesigner设计的ui?
  10. 手写一个简单的线程池MyThreadPool