AWS SDK DynamoDB客户端和DocumentClient之间的区别是什么?

49

我想了解AWS SDK DynamoDB客户端和DynamoDB DocumentClient之间的区别?在哪种情况下应该使用DynamoDB客户端而不是DocumentClient?

const dynamoClient = new AWS.DynamoDB.DocumentClient();

vs 

const dynamo = new AWS.DynamoDB();

3个回答

46

我认为最好的方法是通过比较两个执行相同操作的代码示例来回答这个问题。

以下是使用DynamoDB客户端放置项的方法:

var params = {
    Item: {
        "AlbumTitle": {
            S: "Somewhat Famous"
        },
        "Artist": {
            S: "No One You Know"
        },
        "SongTitle": {
            S: "Call Me Today"
        }
    },
    TableName: "Music"
};
dynamodb.putItem(params, function (err, data) {
    if (err) console.log(err)
    else console.log(data);           
});

以下是如何使用 DocumentClient API 放置相同项的方法:

var params = {
    Item: {
        "AlbumTitle": "Somewhat Famous",
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    },
    TableName: "Music"
};

var documentClient = new AWS.DynamoDB.DocumentClient();

documentClient.put(params, function (err, data) {
    if (err) console.log(err);
    else console.log(data);
});

正如你在DocumentClient中所看到的,Item的指定方式更加自然。在所有其他更新DDB操作(update(), delete())和读取操作(get(), query(), scan())返回的项中也存在类似的差异。


16
虽然这个答案比较了两个SDK,但它没有解释哪种情况下应该使用哪个。显然,选择更简单的方式是正确的选择,但为什么存在更复杂的选项呢?是否有一些场景下它比更简单的选项更好用呢? - Kamarey
1
当我们将DDB表导出到S3时,该Json包括像第一个代码示例中的数据类型。因此,我们不想将该ddb json格式转换为自然json格式。我们可以直接使用dynamodb(而不是dynamodb客户端)来使用该json格式。 - Thiwanka Wickramage

22
根据Amazon DynamoDB DocumentClient的发布

使用文档客户端抽象化可以更轻松地使用AWS SDK for JavaScript读写Amazon DynamoDB中的数据。现在,您可以使用本机JavaScript对象而不必将它们注释为AttributeValue类型。

它基本上是使用SDK中调用dynamoDB的简单方式,并且还将带注释的响应数据转换为本机JS类型。通常只有在执行数据库更"特殊"的操作(例如创建表等)时才应使用常规DynamoDB客户端。这些通常超出了CRUD范围。

10
一个具体的例子是在使用DocumentClient时,可以通过':age': 21来指定属性值,而在普通客户端中,需要使用':age': {'N': '21'}来指定。需要注意的是,在普通客户端中,不仅需要告诉客户端该属性的类型(数字为'N'),还需要将值本身(21)作为字符串进行指示,尽管它是一个数值类型。 - jarmod
感谢您的回答。 - Thiwanka Wickramage
你能否使用普通的 JavaScript 对象作为表格输入,而无需在每个字段名称中添加 ":" 吗?这将是理想的。 - Andy N

4
简单来说,DocumentClient只是DynamoDB客户端的包装器。根据其他评论和下面的AWS文档所述,它具有易用性,将带注释的响应数据转换为本地JS类型,并抽象化属性值的概念。
另一个显着的区别是,documentclient的范围仅限于项目级操作,而dynamodb客户端提供了更广泛的操作,除了项目级操作之外。
来自AWS文档客户端文档
引用:
文档客户端通过抽象属性值的概念简化了在Amazon DynamoDB中处理项的过程。此抽象标注了作为输入参数提供的本机JavaScript类型,以及将带注释的响应数据转换为本机JavaScript类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接