Amazon DynamoDb使用说明

学习参考资料链接
  1. [Server Endpoint][https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html] 设置

    比如我们的DynamoDb使用的区域是:
    Amazon DynamoDb使用说明_第1张图片
    这里我们选用的是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'");
  1. [IAM的设置][https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/access_policies.html]
    Amazon DynamoDb使用说明_第2张图片
    Amazon DynamoDb使用说明_第3张图片
    Amazon DynamoDb使用说明_第4张图片
    Amazon DynamoDb使用说明_第5张图片
    把生成的credentials 放在这个目录(自己创建的)中:
    Amazon DynamoDb使用说明_第6张图片
    【注】:若IDEA 版本必须是2018.3版以上的,

需要依赖的jar


    com.amazonaws
    aws-java-sdk
    1.11.431

需要的plugin
Amazon DynamoDb使用说明_第7张图片
Amazon DynamoDb使用说明_第8张图片
Amazon DynamoDb使用说明_第9张图片

  1. 如上操作后即可使用IDEA对Amazon Db的操作;

  2. 相关的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,上面都是可以跑通的;

  3. [解决 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());

那如果看你这张表是否有排序键呢?如下图:
Amazon DynamoDb使用说明_第10张图片
也可以:
Amazon DynamoDb使用说明_第11张图片
重点是整理的如下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 账户凭证配置 ,上面都是有介绍的

你可能感兴趣的:(AWS)