Використання AWS DynamoDB у програмі Node.js

Ключові висновки

  • DynamoDB — це потужна база даних NoSQL, запропонована AWS, яка може обробляти великі обсяги різноманітних даних без шкоди для продуктивності, довговічності та надійності.
  • Щоб розпочати роботу з DynamoDB у Node.js, вам потрібно встановити пакет client-dynamodb із aws-sdk і налаштувати свої облікові дані.
  • DynamoDB дозволяє легко створювати таблиці, записувати та читати дані, оновлювати записи та видаляти записи за допомогою методів і параметрів клієнта. Він пропонує гнучкість і масштабованість для ефективної розробки додатків.

Значна частина розробки сучасних додатків потребує поєднання надійних мов програмування та потужних баз даних.

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

Що таке DynamoDB?

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

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"

const client = new DynamoDB({ region })

Досить просто! AWS гарантує, що ви не розкриваєте свої облікові дані безпеки у своєму коді, тому, поки наведений вище код намагається створити клієнт, він спочатку зчитує ключ доступу та секретний ключ із вашого середовища.

Щойно створений клієнт дає змогу виконувати різні операції, як-от створення таблиць, читання й запис даних.

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

Перегляньте наступний код, який створює нову таблицю (Customer) у 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.

  • Додайте дані в таблицю. Щоб записати дані в таблицю, вам потрібен метод putItem клієнта. Наведений нижче код додає нового клієнта до таблиці Customer у 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. Ви можете переглядати дані у своїй базі даних на консолі таким чином:

  • Прочитати дані з таблиці. 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 }
            }
        }

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

    getCustomerByEmail("[email protected]")

  • Оновіть дані в таблиці. Щоб оновити наявні дані в таблиці, скористайтеся функцією 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 дозволяє виконувати кожну операцію відповідно до ваших потреб.

  • Видалити дані з таблиці. Щоб видалити запис із 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.