Использование AWS DynamoDB в приложении Node.js

1
компьютеры и технологии 4.webp.webp

Последнее обновление 16.11.2023 — Василий Иванов

Ключевые выводы

  • DynamoDB — это мощная база данных NoSQL, предлагаемая AWS, которая может обрабатывать большие объемы разнообразных данных без ущерба для производительности, долговечности и надежности.
  • Чтобы начать работу с DynamoDB в Node.js, вам необходимо установить пакет client-dynamodb из aws-sdk и настроить свои учетные данные.
  • DynamoDB позволяет легко создавать таблицы, записывать и читать данные, обновлять и удалять записи, используя методы и параметры клиента. Он предлагает гибкость и масштабируемость для эффективной разработки приложений.

Большая часть разработки современных приложений требует сочетания надежных языков программирования и мощных баз данных.

Одним из решений, предлагаемых Amazon Web Services (AWS), является DynamoDB, инструмент, который может произвести революцию в управлении данными. Используя его, вы можете быстро подготовить базу данных для обработки больших объемов разнообразных данных.

Что такое DynamoDB?

AWS предлагает сервисы для различных потребностей баз данных, например Amazon RDS для реляционных баз данных и DocumentDB для баз данных документов, таких как MongoDB. DynamoDB — это база данных NoSQL для хранения данных в формате «ключ-значение».

По теме:  Запросы и мутации GraphQL: в чем разница?

DynamoDB может обрабатывать большие объемы данных в распределенной инфраструктуре без ущерба для производительности, долговечности и надежности. Он предлагает гибкую модель, позволяющую легко хранить и запрашивать данные, как структурированные, так и неструктурированные.

Вы можете использовать DynamoDB в качестве базы данных для различных типов приложений. Вы можете получить к нему доступ непосредственно из веб-консоли AWS и программно через AWS-CLI или из веб-приложений с помощью AWS-SDK.

Начало работы с DynamoDB в Node.js

В Node.js существует множество инструментов для создания серверных API, и вы можете свободно выбирать базу данных для своего API при работе с любым из этих инструментов. Node.js обеспечивает широкую поддержку внешних сервисов, включая такие базы данных, как AWS DynamoDB.

Все, что вам нужно для доступа к сервису AWS из вашего приложения Node, — это клиентский пакет aws-sdk для этого сервиса. Например, для доступа к DynamoDB вам необходимо установить пакет client-dynamodb под aws-sdk.

Запустите эту команду в каталоге вашего проекта, чтобы установить пакет:

 npm install @aws-sdk/client-dynamodb

После установки aws-sdk/client-dynamodb в ваш проект Node.js вам необходимо добавить регион вашей таблицы DynamoDB в конфигурацию, прежде чем взаимодействовать с ней. Вы сделаете это при инициализации клиента DynamoDB.

Если вы уже установили и использовали AWS-CLI на своем компьютере, вероятно, в вашей среде уже установлены учетные данные AWS, и SDK автоматически получит ваши значения из среды.

Но если вы этого не сделали, вы можете перейти к сервису AWS Identity Access Management (IAM) в своей консоли и создать нового пользователя. После создания пользователя вы можете получить идентификатор ключа доступа и секретный ключ, которые являются вашими личными учетными данными.

Добавьте эти учетные данные в свою среду, выполнив следующие команды терминала для вашей платформы:

В Unix, Linux или macOS:

 export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'

В Windows (CMD):

 set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'

В Windows (PowerShell):

 $env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'

Затем вернитесь в проект Node.js и создайте новый файл и назовите его dynamodb.js. В этом файле создайте экземпляр нового клиента AWS DynamoDB, используя следующий код:

 const { DynamoDB } = require('@aws-sdk/client-dynamodb')

const region = "us-east-1" // your preferred region

const client = new DynamoDB({ region })

Довольно просто! AWS следит за тем, чтобы вы не раскрывали какие-либо учетные данные безопасности в своем коде, поэтому, пока приведенный выше код пытается создать клиента, он сначала считывает ключ доступа и секретный ключ из вашей среды.

Недавно созданный клиент позволяет выполнять различные операции, например создавать таблицы, а также читать и записывать данные.

DynamoDB, как и другие базы данных NoSQL, не имеет схемы, поэтому вы всегда можете добавить в таблицу новые атрибуты (поля) в любой момент. Вот почему вам нужно добавлять только атрибуты, которые будут служить первичными ключами к таблице DynamoDB при ее создании.

Посмотрите следующий код, который создает новую таблицу (Клиент) в DynamoDB:

 const createCustomerTable = async () => {
    const params = {
        TableName: "Customer",
        AttributeDefinitions: [
            {
                AttributeName: "Email",
                AttributeType: "S"
            },
        ],
        KeySchema: [
            {
                AttributeName: "Email",
                KeyType: "HASH"
            }
        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 5,
            WriteCapacityUnits: 5
        }
    };

    client.createTable(params, (err, data) => {
        if (err) {
           console.log(err);
        } else {
            console.log(data);
        }
    });
}

createCustomerTable();

В поле AttributeDefinitions вы определяете ключевые атрибуты таблицы и их типы. Атрибут Email здесь имеет тип S, что означает, что поле ожидает строку в качестве значения. Три доступных типа атрибутов: S, N и B (строка, число и двоичный).

Вам нужна KeySchema для определения первичных ключей, которые помогают быстро находить и упорядочивать элементы. DynamoDB ожидает, что атрибуты, которые вы добавляете при создании таблицы, будут ключевыми атрибутами, поэтому электронная почта здесь является первичным ключом. Вы должны добавить его в KeySchema и указать его KeyType (HASH).

Другое доступное значение KeyType — RANGE, которое используется для ключей сортировки. Ключи сортировки полезны в тех случаях, когда в таблице могут быть данные с одинаковыми ключами HASH, и вы хотите сгруппировать их по некоторым дополнительным данным, таким как дата или цвет, вы можете сделать дополнительные данные ключом RANGE.

Третий важный параметр в приведенном выше коде — ProvisionedThroughput. Здесь вы определяете количество операций чтения и записи, которые DynamoDb должен разрешить в таблице в секунду.

Когда вы запустите приведенный выше код, вы должны получить вывод, который выглядит следующим образом:

Если вы проверите панель управления таблицами DynamoDB в веб-консоли, вы увидите, что таблица либо все еще подготавливается, либо уже находится в активном состоянии.

Всегда учитывайте потребности вашего приложения при указании ReadCapacityUnits и WriteCapacityUnits, так как неподходящее значение может привести к проблемам с производительностью или высоким расходам на выставление счетов в вашей учетной записи.

Убедившись, что таблица уже активна, вы можете выполнять с ней операции CRUD.

Ниже приведены примеры кода, показывающие, как записывать и считывать данные из таблицы Customer.

  1. Добавьте данные в таблицу. Чтобы записать данные в таблицу, вам понадобится клиентский метод putItem. Код ниже добавляет нового клиента в таблицу «Клиенты» в DynamoDB.
     const createCustomer = async (customer) => {
        const params = {
            TableName: "Customer",
            Item: customer
        }

        client.putItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log(data)
            }
        })
    }

    const customerData = {
        Name: { "S": "Timilehin O." },
        Email: { "S": "[email protected]" },
        Age: { "N": "18"},
        Country: { "S": "Nigeria" }
    }

    createCustomer(customerData)

    Объект params содержит TableName, который представляет собой таблицу, в которую вы записываете, и поле Item, которое содержит добавляемые вами данные с их конкретными типами. Обратите внимание на новые поля, которых изначально не было в таблице: именно так DynamoDB работает гибко. Вы можете просмотреть данные в вашей базе данных в консоли следующим образом:

  2. Считайте данные из таблицы. DynamoDB позволяет читать данные различными способами. Функция сканирования SDK считывает всю таблицу, а getItem считывает только определенные данные. Например, приведенный ниже код получает всех клиентов:
     const getAllCustomers = async () => {
        const params = {
            TableName: "Customer"
        }

        const customers = await client.scan(params)
        console.log(customers)
    }

    А следующий код получает пользователя по значению адреса электронной почты:

     const getCustomerByEmail = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email } // the type is always required
            }
        }

        const customer = await client.getItem(params)
        console.log(customer)
    }

    getCustomerByEmail("[email protected]")
  3. Обновите данные в таблице. Чтобы обновить существующие данные в таблице, используйте функцию updateItem SDK. Следующий код демонстрирует, как обновить определенную запись:
      const updateCustomerLocation = async (email, age) => {
         const params = {
             TableName: "Customer",
             Key: {
                 Email: { "S": email }
             },
             UpdateExpression: "SET Age = :newAge",
             ExpressionAttributeValues: {
                 ':newAge': { "N": age }
             },
             ReturnValues: "ALL_NEW"
         }

         const updatedCustomer = await client.updateItem(params)
         console.log(updatedCustomer.Attributes)
     }

    Вы также можете сделать свою функцию динамической, создав выражения обновления на основе данных обновления. Гибкость DynamoDB позволяет вам выполнять каждую операцию в соответствии с вашими потребностями.

  4. Удалить данные из таблицы. Чтобы удалить запись из DynamoDB, вам понадобится функция deleteItem и ключ конкретной записи. Вот как это реализовать:
     const deleteCustomer = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

        client.deleteItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log("Customer deleted successfully")
            }
        })
    }

    deleteCustomer("[email protected]")

Создание эффективных приложений с помощью DynamoDB

Amazon Web Services продолжает процветать. Он предоставляет доступную платформу, которую вы можете использовать для предоставления эффективных и безопасных цифровых решений. DynamoDB — идеальный выбор, если вы ищете базу данных, которую можно использовать, не беспокоясь об инфраструктуре и безопасности.

Теперь у вас есть все необходимое для начала работы с DynamoDB в Node.js, и вы можете с уверенностью выбрать DynamoDB для своего следующего приложения Node.js.