Dynamodb 学习

https://github.com/eugenp/tutorials/tree/master/persistence-modules

官方指南
https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/CodeSamples.Java.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/best-practices.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Java.01.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/LSIJavaDocumentAPI.Example.html

proxy

https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-configure-proxy.html

DynamoDB 写入读取容量
https://blog.csdn.net/m0_37263637/article/details/80750399

数据偏移、分区陷阱……我们这样避开DynamoDB的5个坑
https://blog.csdn.net/qq_16229873/article/details/102595262

DynamoDB基本概念
https://zhuanlan.zhihu.com/p/72397412

Amazon DynamoDB 入门5:索引管理及创建
https://blog.csdn.net/czongxiao/article/details/100013120

Dynamodb 学习笔记一(主键、二级索引)
https://blog.csdn.net/wuzhong8809/article/details/91040543

AWS DynamoDB 常用操作
https://blog.csdn.net/m0_37263637/article/details/80523196

【AWS】 DynamoDB Java 高级API 实现增删改查 【附图】
https://blog.csdn.net/wenzhouxiaomayi77/article/details/105123494/

Download NoSQL Workbench
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.settingup.html

Deploying DynamoDB Locally on Your Computer
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.regions.Regions;
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;

/**
 * AWS Config.
 *
 */
@Configuration
public class DynamoDbConfig {

    @Value("${spring.data.aws.access-key}")
    private String amazonAWSAccessKey;

    @Value("${spring.data.aws.secret-key}")
    private String amazonAWSSecretKey;

    @Value("${dynamodb.local.enable}")
    private Boolean dynamodbLocalEnable;

    public AWSCredentialsProvider amazonAWSCredentialsProvider() {
        return new AWSStaticCredentialsProvider(amazonAWSCredentials());
    }

    @Bean
    public DynamoDBMapperConfig dynamoDBMapperConfig() {
        return DynamoDBMapperConfig.DEFAULT;
    }

    @Bean
    public DynamoDBMapper dynamoDBMapper(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig config) {
        return new DynamoDBMapper(amazonDynamoDB, config);
    }

    @Bean
    public AmazonDynamoDB amazonDynamoDB() {

        if (dynamodbLocalEnable) {
            return AmazonDynamoDBClientBuilder.standard().withCredentials(amazonAWSCredentialsProvider())
                    .withEndpointConfiguration(new EndpointConfiguration("http://127.0.0.1:8000/", "us-east-1"))
                    .build();
        } else {
		ClientConfiguration config = new ClientConfiguration();
		config.setProtocol(Protocol.HTTPS);
		config.setProxyHost("xxx.xxx.xxx.xxx");
		config.setProxyPort(80);
		config.setProxyUsername("xxxx");
		config.setProxyPassword("xxxxx");
		return AmazonDynamoDBClientBuilder.standard().withCredentials(amazonAWSCredentialsProvider())
		.withClientConfiguration(config)
		.withRegion(Regions.US_EAST_2)
		.build();

        }

    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey);
    }

}

  

  

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import lombok.ToString;

/**
 * xxxxxxxxxx.
 *
 */
@ToString
@DynamoDBTable(tableName = "user_auth_info")
public class UserAuthInfoDynEntity {

    // xxxxxxxxxx
    private String authToken;

    // xxxxxxxxxx
    private String accountId;

    // xxxxxxx
    private String sbscrbNo;

    // xxxxxxxxxxx
    private String lineId;

    // xxxxxxxxxxxx
    private String simLineId;

    // xxxxxxxxxxxx
    private String lineidId;

    // xxxxxxxxxxxx
    private String authType;

    // xxxxxxxxxxx
    private String accountStatus;

    // xxxxxxxxxxxx
    private String menberStatus;

    // xxxxxxxxx
    private String ekycStatus;

    // xxxxxxxxxxx
    private String expireDate;

    @DynamoDBHashKey(attributeName = "auth_token")
    public String getAuthToken() {
        return authToken;
    }

    public void setAuthToken(String authToken) {
        this.authToken = authToken;
    }

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "index_acount_id",
            attributeName = "account_id")
    public String getAccountId() {
        return accountId;
    }

    public void setAccountId(String accountId) {
        this.accountId = accountId;
    }

    @DynamoDBAttribute(attributeName = "sbscrb_no")
    public String getSbscrbNo() {
        return sbscrbNo;
    }

    public void setSbscrbNo(String sbscrbNo) {
        this.sbscrbNo = sbscrbNo;
    }

    @DynamoDBAttribute(attributeName = "line_id")
    public String getLineId() {
        return lineId;
    }

    public void setLineId(String lineId) {
        this.lineId = lineId;
    }

    @DynamoDBAttribute(attributeName = "sim_line_id")
    public String getSimLineId() {
        return simLineId;
    }

    public void setSimLineId(String simLineId) {
        this.simLineId = simLineId;
    }

    @DynamoDBAttribute(attributeName = "lineid_id")
    public String getLineidId() {
        return lineidId;
    }

    public void setLineidId(String lineidId) {
        this.lineidId = lineidId;
    }

    @DynamoDBAttribute(attributeName = "auth_type")
    public String getAuthType() {
        return authType;
    }

    public void setAuthType(String authType) {
        this.authType = authType;
    }

    @DynamoDBAttribute(attributeName = "account_status")
    public String getAccountStatus() {
        return accountStatus;
    }

    public void setAccountStatus(String accountStatus) {
        this.accountStatus = accountStatus;
    }

    @DynamoDBAttribute(attributeName = "menber_status")
    public String getMenberStatus() {
        return menberStatus;
    }

    public void setMenberStatus(String menberStatus) {
        this.menberStatus = menberStatus;
    }

    @DynamoDBAttribute(attributeName = "ekyc_status")
    public String getEkycStatus() {
        return ekycStatus;
    }

    public void setEkycStatus(String ekycStatus) {
        this.ekycStatus = ekycStatus;
    }

    @DynamoDBAttribute(attributeName = "expire_date")
    public String getExpireDate() {
        return expireDate;
    }

    public void setExpireDate(String expireDate) {
        this.expireDate = expireDate;
    }

}

  

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.Select;
import com.xxxxx.common.dynamodb.entity.UserAuthInfoDynEntity;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * xxxxxxxxxxxx.
 *
 */
@Component
public class UserAuthInfoDynRepository {

    @Autowired
    DynamoDBMapper dynamoDbMapper;

    static final String ACOUNT_INDEX_NAME = "index_acount_id";

    /**
     * xxxxxxx.
     * @param authToken String
     * @return List(UserAuthInfoDynEntity)
     */
    public UserAuthInfoDynEntity search(String authToken) {
        return dynamoDbMapper.load(UserAuthInfoDynEntity.class, authToken);
    }

    /**
     * xxxxxxxxxxxx.
     * @param data UserAuthInfoDynEntity
     */
    public void save(UserAuthInfoDynEntity data) {
        dynamoDbMapper.save(data);
    }

    /**
     * xxxxxxxxxxxxxx
     * @param  accountId String
     * @return List(UserAuthInfoDynEntity)
     */
    public  List<UserAuthInfoDynEntity> searchByAccountIdIndex(String accountId) {
        HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
        eav.put(":account_id", new AttributeValue().withS(accountId));
        DynamoDBQueryExpression<UserAuthInfoDynEntity> queryExpression =
                new DynamoDBQueryExpression<UserAuthInfoDynEntity>()
                .withIndexName(ACOUNT_INDEX_NAME)
                .withConsistentRead(false)
                .withKeyConditionExpression("account_id = :account_id")
                .withSelect(Select.ALL_PROJECTED_ATTRIBUTES)
                .withExpressionAttributeValues(eav);

        return dynamoDbMapper.query(UserAuthInfoDynEntity.class, queryExpression);
    }
}

  

import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.CreateTableResult;
import com.amazonaws.services.dynamodbv2.model.GlobalSecondaryIndex;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeyType;
import com.amazonaws.services.dynamodbv2.model.Projection;
import com.amazonaws.services.dynamodbv2.model.ProjectionType;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class DynamodbInitConfig implements InitializingBean {

    @Autowired
    DynamoDBMapper dynamoDBMapper;

    @Autowired
    AmazonDynamoDB amazonDynamoDB;

    @Override
    public void afterPropertiesSet() throws Exception {
       
        log.info("DynamodbInitConfig afterPropertiesSet ...");
        try {
//            List<String> tableNames = amazonDynamoDB.listTables().getTableNames();
//
////            if (!tableNames.contains("user_auth_info")) {
////                createTable_user_auth_info();
////            }
////            if (!tableNames.contains("token_info")) {
////                createTable_token_info();
////            }
        } catch(Exception e) {
            log.error("DynamodbInitConfig error ", e);
        }
    }

//    private void createTable() {
//
//        List<KeySchemaElement> elements = new ArrayList<KeySchemaElement>();
//        KeySchemaElement keySchemaElement = new KeySchemaElement()
//                .withKeyType(KeyType.HASH)
//                .withAttributeName("name");
//        elements.add(keySchemaElement);
//
//        List<AttributeDefinition> attributeDefinitions = new ArrayList<>();
//
//        attributeDefinitions.add(new AttributeDefinition()
//                .withAttributeName("name")
//                .withAttributeType(ScalarAttributeType.S));
//
//        CreateTableRequest createTableRequest = new CreateTableRequest()
//                .withTableName("Movies")
//                .withKeySchema(elements)
//                .withProvisionedThroughput(new ProvisionedThroughput()
//                        .withReadCapacityUnits(5L)
//                        .withWriteCapacityUnits(5L))
//                .withAttributeDefinitions(attributeDefinitions);
//
//        amazonDynamoDB.createTable(createTableRequest);
//
//
    private void createTable_user_auth_info() {


    // Attribute definitions
    ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();

    attributeDefinitions.add(new AttributeDefinition()
        .withAttributeName("auth_token")
        .withAttributeType("S"));
    attributeDefinitions.add(new AttributeDefinition()
        .withAttributeName("account_id")
        .withAttributeType("S"));

    // Table key schema
    ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
    tableKeySchema.add(new KeySchemaElement()
        .withAttributeName("auth_token")
        .withKeyType(KeyType.HASH));  //Partition key


    // PrecipIndex
    GlobalSecondaryIndex precipIndex = new GlobalSecondaryIndex()
        .withIndexName("index_acount_id")
        .withProvisionedThroughput(new ProvisionedThroughput()
            .withReadCapacityUnits((long) 10)
            .withWriteCapacityUnits((long) 1))
            .withProjection(new Projection().withProjectionType(ProjectionType.ALL));

    ArrayList<KeySchemaElement> indexKeySchema = new ArrayList<KeySchemaElement>();

    indexKeySchema.add(new KeySchemaElement()
        .withAttributeName("account_id")
        .withKeyType(KeyType.HASH));  //Partition key
    ;

    precipIndex.setKeySchema(indexKeySchema);

    CreateTableRequest createTableRequest = new CreateTableRequest()
        .withTableName("user_auth_info")
        .withProvisionedThroughput(new ProvisionedThroughput()
            .withReadCapacityUnits((long) 5)
            .withWriteCapacityUnits((long) 1))
        .withAttributeDefinitions(attributeDefinitions)
        .withKeySchema(tableKeySchema)
        .withGlobalSecondaryIndexes(precipIndex);

    CreateTableResult table = amazonDynamoDB.createTable(createTableRequest);
    log.info(table.getTableDescription().toString());
}

    private void createTable_token_info() {

        // Attribute definitions
        ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>();

        attributeDefinitions.add(new AttributeDefinition()
            .withAttributeName("account_id")
            .withAttributeType("S"));

        // Table key schema
        ArrayList<KeySchemaElement> tableKeySchema = new ArrayList<KeySchemaElement>();
        tableKeySchema.add(new KeySchemaElement()
            .withAttributeName("account_id")
            .withKeyType(KeyType.HASH));  //Partition key

        CreateTableRequest createTableRequest = new CreateTableRequest()
            .withTableName("token_info")
            .withProvisionedThroughput(new ProvisionedThroughput()
                .withReadCapacityUnits((long) 5)
                .withWriteCapacityUnits((long) 1))
            .withAttributeDefinitions(attributeDefinitions)
            .withKeySchema(tableKeySchema);

        CreateTableResult table = amazonDynamoDB.createTable(createTableRequest);
        log.info(table.getTableDescription().toString());
    }


}

  

  

原文地址:https://www.cnblogs.com/dunkbird/p/13801430.html