[Server Endpoint][https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html] 设置
比如我们的DynamoDb使用的区域是:
这里我们选用的是Amazon DynamoDB用的Endpoint
这里我使用的是dynamodb.us-west-2.amazonaws.com,协议选择的HTTP,Https走不通目前AWS中工程师没有给出具体理由;
见代码:
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration
("http://dynamodb.us-west-2.amazonaws.com", "us-west-2"))
.build();
static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
需要依赖的jar
com.amazonaws
aws-java-sdk
1.11.431
如上操作后即可使用IDEA对Amazon Db的操作;
相关的CRUD 操作;
Amazon DynamoDB据我向AWS开发人员请教时了解到是没有封装类似于MongoDB的分页操作的,具体的分页操作可见[分页链接][https://www.talentica.com/blogs/dynamo-db-pagination/] 估计你也不会看;
相关的DynamoDb SDK的文档[链接1][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/DynamoDB.html] [链接2][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html][链接3][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html] [链接4][[https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBMapper.CRUDExample1.html] [链接5][https://www.programcreek.com/java-api-examples/?api=com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper]可做参考,
但是如上官方链接估计使用或多或少都是有问题的,具体的操作还得我提交的demo,上面都是可以跑通的;
[解决 PKIX:unable to find valid certification path to requested target][http://www.ibloger.net/article/3024.html]
【注】如何在控制台创建表的时候,要注意如果使用排序健则用封装好的DynamoDbMapper只能插入数据,查询数据时跟AWS工程师调了半天也没有查出数据,查询的时候需要带上主键和排序键 才能查出,若是用原生的API查询出来是很苦逼的,代码如下:
Table table = dynamoDB.getTable(tableName);
System.out.println("--- "+tableName+" ---");
Map key = new HashMap();
key.put("id", new AttributeValue().withN(120+""));//主键 withN:表示传入的是数字
key.put("Title", new AttributeValue().withS("Book 120 Title"));//排序键 withS:表示传入的字符串
GetItemRequest getItemRequest = new GetItemRequest()
.withTableName(tableName)
.withKey(key);
GetItemResult result = client.getItem(getItemRequest);
System.out.println(result.getItem());
那如果看你这张表是否有排序键呢?如下图:
也可以:
重点是整理的如下Demo:
package com.tcl.amazondemo.DynamoDb;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.model.*;
import com.tcl.amazondemo.DynamoDb.Entity.Book;
import java.text.SimpleDateFormat;
import java.util.Arrays;
public class IotDynamoDb {
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration
("http://dynamodb.us-west-2.amazonaws.com", "us-west-2"))
.build();
static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
public static void main(String[] args) throws InterruptedException {
/*创建表*/
String tableName = "SimpleD";
String primeKey = "ariti";
/*主键类型*/
ScalarAttributeType scalarAttributeType = ScalarAttributeType.S;
createTable(tableName,primeKey,scalarAttributeType);
/*批量插入*/
// insertBatchIntoDynamoDb();
// System.out.println("批量插入成功!");
/*插入一行记录*/
// insertDynamoDb();
// System.out.println("插入成功!");
/*更新一行记录*/
// updateDynamoDb();
/*批量删除记录*/
// deleteBatchDynamoDb();
/*删除一条记录*/
// deleteDynamoDb();
}
private static void createTable(String tableName, String primeKey,ScalarAttributeType scalarAttributeType) throws InterruptedException {
DynamoDB dynamoDB = new DynamoDB(client);
System.out.println("Attempting to create table; please wait...");
Table table = dynamoDB.createTable(tableName,
Arrays.asList(new KeySchemaElement(primeKey, KeyType.HASH) // Partition
// key
// new KeySchemaElement("Subject", KeyType.RANGE)
), // Sort key
Arrays.asList(new AttributeDefinition(primeKey, scalarAttributeType)
// new AttributeDefinition("Subject", ScalarAttributeType.S)
),
new ProvisionedThroughput(10L, 10L));
table.waitForActive();
System.out.println("Success. Table status: " + table.getDescription().getTableStatus());
}
private static void deleteDynamoDb() {
DynamoDBMapper mapper = new DynamoDBMapper(client);
Book book1 = mapper.load(Book.class, 111);
mapper.delete(book1);
System.out.println("删除完成");
}
private static void deleteBatchDynamoDb() {
DynamoDBMapper mapper = new DynamoDBMapper(client);
Book book1 = mapper.load(Book.class, 110);
Book book2 = mapper.load(Book.class, 999);
System.out.println("Deleting two books from the ProductCatalog table.");
mapper.batchDelete(Arrays.asList(book1, book2));
System.out.println("批量删除完成");
}
private static void updateDynamoDb() {
DynamoDBMapper mapper = new DynamoDBMapper(client);
Book itemRetrieved = mapper.load(Book.class, 999);
itemRetrieved.setISBN("3333333333");
mapper.save(itemRetrieved);
DynamoDBMapperConfig config = DynamoDBMapperConfig.builder()
.withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
.build();
Book updatedItem = mapper.load(Book.class, 999, config);
System.out.println("Retrieved the previously updated item:");
System.out.println(updatedItem);
}
public static void insertBatchIntoDynamoDb(){
DynamoDBMapper mapper = new DynamoDBMapper(client);
Book book1 = new Book();
book1.setId(110);
book1.setInPublication(true);
book1.setISBN("1123");
book1.setTitle("GOOD");
book1.setProductCategory("1234");
book1.setPrice(100);
book1.setPageCount(10);
Book book2 = new Book();
book2.setId(111);
book2.setInPublication(false);
book2.setISBN("8888");
book2.setTitle("GOOD");
book2.setProductCategory("1234");
book2.setPrice(100);
book2.setPageCount(10);
System.out.println("Adding three books to ProductCatalog table.");
mapper.batchSave(Arrays.asList(book1, book2));
}
public static void insertDynamoDb(){
DynamoDBMapper mapper = new DynamoDBMapper(client);
Book book1 = new Book();
book1.setId(999);
book1.setInPublication(false);
book1.setISBN("777");
book1.setTitle("GOOD1");
book1.setProductCategory("1224");
book1.setPrice(1000);
book1.setPageCount(110);
System.out.println("Adding three books to ProductCatalog table.");
mapper.save(book1);
}
}
package com.tcl.amazondemo.DynamoDb.Entity;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
@DynamoDBTable(tableName = "iot_test_db")
public class Book {
private int id;
private String title;
private String ISBN;
private int price;
private int pageCount;
private String productCategory;
private boolean inPublication;
// Partition key
@DynamoDBHashKey(attributeName = "id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@DynamoDBAttribute(attributeName = "Title")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@DynamoDBAttribute(attributeName = "ISBN")
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
@DynamoDBAttribute(attributeName = "Price")
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@DynamoDBAttribute(attributeName = "PageCount")
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
@DynamoDBAttribute(attributeName = "ProductCategory")
public String getProductCategory() {
return productCategory;
}
public void setProductCategory(String productCategory) {
this.productCategory = productCategory;
}
@DynamoDBAttribute(attributeName = "InPublication")
public boolean getInPublication() {
return inPublication;
}
public void setInPublication(boolean inPublication) {
this.inPublication = inPublication;
}
@Override
public String toString() {
return "Book [ISBN=" + ISBN + ", price=" + price + ", product category=" + productCategory + ", id=" + id
+ ", title=" + title + "]";
}
}
【如果没有时间如下概念可忽略】:
DynamoDB 是一种完全托管的 NoSQL 数据库,支持文档和键值两种存储模式;它拥有灵活的数据模型、可靠的性能以及自动的吞吐容量扩展功能,这使其成为移动、Web、游戏、广告技术、物联网和众多其他应用程序的不二之选。
DynamoDB为aws下一个NoSql数据库,用于处理简单key-value数据。DynamoDB也支持索引,目前一个表结构最多支持5个索引
新建一个文件夹:安装AWS-SDK
npm install aws-sdk
设置AWS 凭证要使用 访问 Amazon Web Services,您必须使用 AWS 账户凭证配置 ,上面都是有介绍的