我正在开发一个广泛使用DynamoDB的个人项目,这是我以前从未使用过的,我发现自己遇到了以下问题:“我应该使用哪个DynamoDB客户端对象进行读/写操作?”
例如,我已经遇到了三个提供某种程度写入功能的不同类:AmazonDynamoDBClient,DynamoDB和表(参见下面的链接方向).基于我的理解,它们构建在彼此之上,因为您可以得到如下表:
Table table = new DynamoDB(new AmazonDynamoDBClient()).getTable("TableName");
但是,当我想执行写入(无论是’更新’还是’放’)时,AmazonDynamoDBClient提供
c.putItem(PutItemRequest r);
//or
c.updateItem(UpdateItemRequest r);
//or
c.batchWriteItem(BatchWriteItemRequest r);
DynamoDB提供
d.batchWriteItem(BatchWriteItemSpec s);
和表提供
t.putItem(Item);
// or
t.putItem(PutItemSpec s);
// or
t.updateItem(UpdateItemSpec s);
正如您所看到的,在如何使用每个类写入表中方面存在很多重叠.此外,差异客户端对象(例如,“请求”系列和“规范”系列)存在不同类型的请求对象,每种请求对象具有填充其选项的非常不同的方法.这使我无法使用一个请求,然后将其传递给我的类碰巧手头的任何客户端.
我该如何选择何时使用哪个客户端(以及相关的方法和请求对象)?我最初的评估是单独使用AmazonDynamoDB客户端,因为它是提供我所需功能的最简单对象(乍一看).
注意:我还没有足够的声誉链接到所有3个类,但可以从DynamoDB API页面的getTable()方法返回类型访问Table.
最佳答案 看到:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AboutJava.html
低级别是你想基本上自己做所有的DDB调用,并给你最大的控制.高级将事物映射到您直接使用的Java对象中,并将您正在执行的操作编组到较低级别.该文件是一种新的.
put和update之间的区别在于put需要项目的整个主体,在更新的情况下,您只需要更改的属性.
批处理操作通常是为了延迟目的而进行的(即,一次更新300条记录与更新记录300次).
如果它仅适用于宠物项目,我建议从低级api开始,以便您可以了解Dynamo在API级别可以做什么.