Tôi đã cố gắng thực thi kết hợp duy nhất của các khóa băm và phạm vi và đi qua bài đăng này. Tôi thấy rằng nó không hoàn toàn trả lời câu hỏi của tôi nhưng chắc chắn chỉ cho tôi đi đúng hướng. Đây là một nỗ lực để dọn dẹp các đầu lỏng lẻo.
Dường như DynamoDB thực sự thực thi kết hợp duy nhất của khóa băm và phạm vi theo thiết kế. Tôi xin trích dẫn
"Tất cả các mục trong bảng phải có giá trị cho thuộc tính khóa chính và Amazon DynamoDB đảm bảo rằng giá trị cho tên mà là duy nhất"
từ http://aws.amazon.com/dynamodb/ dưới phần với Primary Key tiêu đề.
Trong các thử nghiệm của riêng tôi bằng cách sử dụng putItem với aws-sdk cho các nút, tôi đã có thể đăng hai mục giống nhau mà không tạo ra lỗi. Khi tôi kiểm tra cơ sở dữ liệu, chỉ có một mục được chèn vào thực tế. Dường như cuộc gọi thứ hai tới putItem với cùng một kết hợp băm và dải ô được xử lý giống như bản cập nhật cho mục gốc. Tôi cũng đã nhận được lỗi "Không thể mong đợi một thuộc tính có giá trị được chỉ định trong khi mong đợi nó không tồn tại" khi tôi cố gắng đặt tùy chọn tồn tại = false trên khóa băm và phím phạm vi với các giá trị được đặt. Để giải quyết lỗi này, tôi đã xóa giá trị dưới khóa băm và phạm vi dự kiến và bắt đầu tạo lỗi xác thực khi tôi cố gắng chèn cùng một khóa hai lần.
Vì vậy, lệnh chèn của tôi trông như thế này (sẽ khác nhau cho Java, nhưng hy vọng bạn sẽ có được ý tưởng)
{ "TableName": "MyTableName",
"Item" : {
"HashKeyFieldName": {
"S": HashKeyValue
},
"RangeKeyFieldName": {
"N": currentTime.getTime().toString()
},
"OtherField": {
"N": "61404032632"
}
},
"Expected": {
"HashKeyFieldName" : { "Exists" : false},
"RangeKeyFieldName" : { "Exists" : false}
}
}
Trong khi ban đầu tôi đã cố gắng để làm một chèn có điều kiện để kiểm tra nếu có một giá trị băm và giá trị phạm vi giống như những gì tôi đã cố gắng để chèn, bây giờ tôi chỉ cần kiểm tra xem HashField và RangeField tồn tại ở tất cả. Nếu chúng tồn tại, điều đó có nghĩa là tôi đang cập nhật một mục thay vì chèn.
Câu hỏi thực sự cũ, nhưng dynamodb có phiên bản tăng nguyên tử, hãy xem xét điều đó (chủ yếu cho những người cuộn dây ở đây) –
Tài liệu cập nhật nguyên tử tại đây: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/ API_UpdateItem.html – Deemoe