DynamoDB使用AWS SDK用于JavaScript/node.js
#aws #javascript #node #dynamodb

什么是dynamodb?

Amazon DynamoDB是一个完全管理的NOSQL数据库服务。它使您可以使用大数据。它提供了以下功能:

  • 无缝按需缩放。
  • 无限的并​​发读/写操作。
  • 单位毫秒延迟。
  • dax(缓存服务)的微秒延迟。
  • 容错,支持跨区域复制和高度可扩展。
  • 可以在很大程度上以高量和频率处理非结构化的数据。
  • 根据您为每个表提供的容量定价。

dynamoDB必须具有一个主键。

dynamodb中的数据类型

  1. 标量类型:代表一个可以是字符串,数字,二进制,布尔值或null的值。
  2. 设置类型:表示可以SE String Set,Number Set或Binary Set的多个标量值。
  3. 文档类型:它具有复杂的结构,带有嵌套属性,ca是映射或列表。

在Node.js/javascript中使用DynamoDB与AWS SDK一起使用的先决条件

首先确保系统中安装了AWS-CLI以及AWS环境变量和设置配置。您可以通过简单地运行命令:AWS - Version。

检查此问题。

转到终端并运行指令:

  1. npm init
  2. npm安装AWS -SDK - save

使用AWS SDK

在DynamoDB中的基本表操作
  • 列表DynamoDB表
//referencing sdk in js file
const AWS = require("aws-sdk");
//specifying aws region where dynamodb table will be created
AWS.config.update({ region: 'us-east-1' });
//instantiate dynamodb class
const dynamodb = new AWS.DynamoDB();
//listing tables
dynamodb.listTables({}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 描述表
dynamodb.describeTable({
     TableName: "demo_sdk"
 }, (err, data)=>{
     if(err) {
         console.log(err);
     } else {
         console.log(JSON.stringify(data, null, 2));// '2' is to beautify the output 
     }
 });
  • 创建表

在此处提供的吞吐量允许大规模可预测的性能。它是定价的主要因素,在读取容量单位(RCU)和写入容量单位(WCUS)中定义。

1个容量单位=每秒请求1

dynamodb.createTable({
    TableName: "demo_sdk",
    AttributeDefinitions: [
        {
            AttributeName: "id",
            AttributeType: "S" //string
        },
        {
            AttributeName: "timestamp",
            AttributeType: "N" //number
        }
    ],
    KeySchema: [
        {
            AttributeName: "id",
            KeyType: "HASH"
        },
        {
            AttributeName: "timestamp",
            KeyType: "RANGE"
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});
  • 更新表
//Changing read capacity units from 1 to 2 for the table
dynamodb.updateTable({
    TableName: "demo_sdk",
    ProvisionedThroughput: {
        ReadCapacityUnits: 2,
        WriteCapacityUnits: 1
    }
}, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

  • 删除表
dynamodb.deleteTable({
    TableName: "demo_sdk"
}, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

您可以使用DynamoDB的描述函数在每个操作后查看更改。所有更改将通过仅编写几行代码而无需手动单击和执行繁琐的任务而反映在AWS管理控制台中。


如果您仔细仔细浏览了代码段的语法,那不是很简单吗?因此,假设您现在已经有了一些使用AWS SDK进行dynamoDB,那么我们会跳到更多详细的表操作。

早些时候,我们使用了使用低级编程方法的AWS.DYNAMODB类。现在,我们将使用另一类的DynamoDB,即Aws.dynamodb.documentclient,在使用项目时为我们提供了高级访问权限。我们说,它提供了高级访问,因为它将用户的所有不必要详细信息提取到将内部dynamoDB数据类型映射到JavaScript数据类型中。

高级访问表操作

  • 放置项目

AWS SDK和AWS区域的实例化将与以前的代码相同。

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.put({
    TableName: 'demo_sdk',
    Item: {
// specify attributes as key value pairs
        user_id: 'first',
  //timestamp is the primary key
        timestamp: 3,
        title: 'The Secret',
        content: 'Book'
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 更新项目

想要更新项目条目,但是不想浪费时间搜索和修改其价值吗? DynamoDB也为此提供了一个解决方案,即docclient.update函数。

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.update({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'first',
        timestamp: 3
    },
    UpdateExpression: 'set #old = :new',
    ExpressionAttributeNames: {
        '#old': 'The Secret' 
    },
    ExpressionAttributeValues: {
       //Title of item is updated
        ':new': "Hall of Games"
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 删除项目

一旦您开始看到代码语法中的模式,就可以独自编写它变得很容易,因此请自己尝试一下,然后比较您的代码。

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.delete({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'first',
        timestamp: 3
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 批次写入项目

此功能可以帮助我们立即将多个项目放置或删除多个项目,从而使我们的工作在使用大量表条目时变得更加简单。

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.batchWrite({
    RequestItems: {
        'demo_sdk': [
            {
              // deletes item , here, only one
                DeleteRequest: {
                    Key: {
                        user_id: 'first',
                        timestamp: 3
                    }
                }
            },
            {
              // inserting two items in the table
                PutRequest: {
                    Item: {
                        user_id: 'new',
                        timestamp: 1,
                        title: 'To Kill a MockingBird',
                        content: 'Harper Lee'
                    }
                }
            },
            {
                PutRequest: {
                    Item: {
                        user_id: 'two',
                        timestamp: 2,
                        title: 'Harry Potter',
                        content: 'J.K Rowling'
                    }
                }
            }
        ]
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 获取项目
const docClient = new AWS.DynamoDB.DocumentClient();
// to get an item with the corresponding key parameters
docClient.get({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'two',
        timestamp: 2
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});
  • 查询项目
const docClient = new AWS.DynamoDB.DocumentClient();
//here we specify th query condition or the where clause, for instance if we
// have multiple table entries for a user_id and want to get all those items at
//once (in this case we don't, but for the sake of learning XD)
docClient.query({
    TableName: 'demo_sdk',
// condition is: user_id must be equal to the value of expression attribute id
    KeyConditionExpression: "user_id = :id",
    ExpressionAttributeValues: {
        ":id": "new"
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

摘要:

您已经熟悉了对AWS DynamoDB的基本了解,然后进一步学习了如何使用AWS SDK使用简单的JavaScript代码与DynamoDB一起使用。进一步了解了DynamoDB的类别以及低级别和高级表操作,例如:创建表,删除表,描述表,放置项目,获取项目,删除项目,批次写入项目,查询项目并更新项目。

参考:

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html


谢谢您的阅读!
github链接:https://github.com/rashi2911/dynamo-db-aws-sdk