dynamodb:如何在向表添加记录的同时向键字段添加自动递增数字

Nah*_*rje 1 java amazon-dynamodb

我想通过控制台将动态数字添加到dynamodb中表的关键字段,例如0,1,2,...

我有contact_us想要的列,其列具有自动ID增量。请帮我解决一下这个。

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;

public class ContactUs extends HttpServlet {

    String con_id;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
           // ...
           // ...

           Map<String, AttributeValue> item = newRecord();
           //System.out.println(item);

           // ...

           dbObject.addRecord(item, "contact_us");

        }catch (Exception e) {
           // TODO: handle exception
           e.printStackTrace();
        }
    }

    private Map<String, AttributeValue> newRecord() {
        Map<String, AttributeValue> item = new HashMap<String, AttributeValue>();
        con_id = getConID();
        dateTimeTimestamp = new SysDateTimeTimestamp();
        //Need to add con_id which will be auto id.
        item.put("con_id", new AttributeValue(con_id));
        // ...
        // ...

        return item;
    }

    @DynamoDBHashKey(attributeName = "con_id")
    @DynamoDBAutoGeneratedKey
    public String getConID(){
       return con_id;
    }

    public void setConID(String con_id){
       this.con_id = con_id;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我收到con_id值空白。

not*_*est 5

请参考此链接。根据DynamoDB中的最佳做法,建议不要使用以1递增的整数来生成表的哈希键。为了使表能够根据所提供的容量进行扩展,请求应该在关键空间中平均分配。

推荐的方法是使用UUID。如果您使用的是AWS Java SDK,则可以使用@DynamoDBAutoGeneratedKey来自动生成哈希密钥。哈希键应定义为字符串。密钥将以标准UUID格式生成,这将有助于在密钥空间中扩展和扩展数据。

@DynamoDBAutoGeneratedKey的示例类:-

import java.io.Serializable;

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;

@DynamoDBTable(tableName = "Order")
public class Order implements Serializable {

    private static final long serialVersionUID = -3534650012619938612L;

    private String orderId;

    private String productName;

    @DynamoDBHashKey(attributeName = "orderId")
    @DynamoDBAutoGeneratedKey
    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    @DynamoDBAttribute(attributeName = "productName")
    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

}
Run Code Online (Sandbox Code Playgroud)

创建订单方法:-

public Boolean createOrder(String productName) {

        DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);

        Order order = new Order();
        order.setProductName(productName);

        dynamoDBMapper.save(order);


        return true;

    }
Run Code Online (Sandbox Code Playgroud)

dynamoDBClient使用Spring 进行了配置。

@Autowired
private AmazonDynamoDBClient dynamoDBClient;
Run Code Online (Sandbox Code Playgroud)

此代码已成功测试。如果正确配置了dynamoDBClient,它应该可以工作。