Použití AWS DynamoDB v aplikaci Node.js

Klíčové věci

  • DynamoDB je výkonná NoSQL databáze nabízená AWS, která dokáže zpracovat velké množství různorodých dat bez kompromisů ve výkonu, trvanlivosti nebo spolehlivosti.
  • Chcete-li začít s DynamoDB v Node.js, musíte nainstalovat balíček client-dynamodb z aws-sdk a nakonfigurovat své přihlašovací údaje.
  • DynamoDB umožňuje snadno vytvářet tabulky, zapisovat a číst data, aktualizovat záznamy a mazat záznamy pomocí metod a parametrů klienta. Nabízí flexibilitu a škálovatelnost pro efektivní vývoj aplikací.

Velká část vývoje moderních aplikací potřebuje kombinaci robustních programovacích jazyků a výkonných databází.

Jedním z řešení, které Amazon Web Services (AWS) nabízí, je DynamoDB, nástroj, který může způsobit revoluci ve správě dat. S jeho pomocí můžete rychle zřídit databázi pro zpracování velkého množství různorodých dat.

Co je DynamoDB?

AWS nabízí služby pro různé databázové potřeby, jako je Amazon RDS pro relační databáze a DocumentDB pro databáze dokumentů, jako je MongoDB. DynamoDB je databáze NoSQL pro ukládání dat ve formátu klíč-hodnota.

DynamoDB dokáže zpracovat velké množství dat napříč distribuovanou infrastrukturou, aniž by došlo ke snížení výkonu, odolnosti nebo spolehlivosti. Nabízí flexibilní model, který vám umožní snadno ukládat a dotazovat data, ať už jsou strukturovaná nebo nestrukturovaná.

DynamoDB můžete použít jako databázi pro různé typy aplikací. Můžete k němu přistupovat přímo z webové konzole AWS a programově přes AWS-CLI, nebo z webových aplikací pomocí AWS-SDK.

Začínáme s DynamoDB v Node.js

V Node.js existuje mnoho nástrojů pro vytváření backendových rozhraní API a při práci s kterýmkoli z těchto nástrojů si můžete vybrat databázi pro své rozhraní API. Node.js poskytuje širokou podporu pro externí služby včetně databází jako AWS DynamoDB.

Vše, co potřebujete pro přístup ke službě AWS z aplikace Node, je klientský balíček aws-sdk pro tuto službu. Například pro přístup k DynamoDB musíte nainstalovat balíček client-dynamodb pod aws-sdk.

Spusťte tento příkaz v adresáři projektu a nainstalujte balíček:

 npm install @aws-sdk/client-dynamodb

Po instalaci aws-sdk/client-dynamodb do vašeho projektu Node.js musíte do konfigurace přidat oblast vaší tabulky DynamoDB, než s ní začnete pracovat. To provedete při inicializaci klienta DynamoDB.

Pokud jste na svém počítači již dříve nainstalovali a používali AWS-CLI, pravděpodobně již máte ve svém prostředí nastavené přihlašovací údaje AWS a SDK automaticky získá vaše hodnoty z prostředí.

Ale pokud ne, můžete jít do AWS Identity Access Management (IAM) službu ve vaší konzoli a vytvořte nového uživatele. Po vytvoření uživatele můžete získat ID přístupového klíče a tajný klíč, což jsou vaše osobní přihlašovací údaje.

Přidejte tato pověření do svého prostředí spuštěním následujících příkazů terminálu pro vaši platformu:

V systémech Unix, Linux nebo macOS:

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

V systému Windows (CMD):

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

V systému Windows (PowerShell):

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

Poté v projektu Node.js vytvořte nový soubor a pojmenujte jej dynamodb.js. V tomto souboru vytvořte instanci nového klienta AWS DynamoDB pomocí následujícího kódu:

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

const region = "us-east-1"

const client = new DynamoDB({ region })

Docela jednoduché! AWS zajišťuje, že ve svém kódu neodhalujete žádné z vašich bezpečnostních pověření, takže zatímco se výše uvedený kód pokouší vytvořit klienta, nejprve přečte přístupový klíč a tajný klíč z vašeho prostředí.

Nově vytvořený klient umožňuje provádět různé operace, jako je vytváření tabulek a čtení a zápis dat.

DynamoDB je bez schématu stejně jako ostatní databáze NoSQL, takže do tabulky můžete kdykoli přidat nové atributy (pole). To je důvod, proč stačí přidat atributy, které budou sloužit jako primární klíče do tabulky DynamoDB při jejím vytváření.

Podívejte se na následující kód, který vytvoří novou tabulku (zákazník) v 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();

Pole AttributeDefinitions je místo, kde definujete klíčové atributy tabulky a jejich typy. Atribut Email zde má typ S, což znamená, že pole očekává jako hodnotu řetězec. Tři dostupné typy atributů jsou S, N a B (String, Number a Binary).

KeySchema potřebujete k definování primárních klíčů, které pomáhají rychle najít a uspořádat položky. DynamoDB očekává, že atributy, které přidáte při vytváření tabulky, budou klíčovými atributy, takže primárním klíčem je zde e-mail. Musíte jej přidat do KeySchema a zadat jeho KeyType (HASH).

Další dostupná hodnota KeyType je RANGE, která se používá pro klíče řazení. Třídicí klíče jsou užitečné v případech, kdy můžete mít data se stejnými HASH klíči v tabulce a chcete je seskupit podle některých dalších dat, jako je datum nebo barva, můžete z těchto extra dat vytvořit klíč RANGE.

Třetím důležitým parametrem ve výše uvedeném kódu je ProvisionedThroughput. Zde definujete počet čtení a zápisů, které má DynamoDb povolit na stole za sekundu.

Když spustíte výše uvedený kód, měli byste získat výstup, který vypadá takto:

Pokud zkontrolujete řídicí panel tabulek DynamoDB ve webové konzoli, uvidíte, že tabulka je buď stále zajišťována, nebo je již ve stavu aktivní.

Při zadávání jednotek ReadCapacityUnits a WriteCapacityUnits vždy zvažte potřeby vaší aplikace, protože nevhodná hodnota může vést k problémům s výkonem nebo vysokým fakturačním nákladům na vašem účtu.

Jakmile jste si jisti, že tabulka je již aktivní, můžete na ní provádět operace CRUD.

Následuje několik příkladů kódu, které ukazují, jak zapisovat a číst data z tabulky Zákazník.

  • Přidejte data do tabulky. K zápisu dat do tabulky potřebujete klientovu metodu putItem. Níže uvedený kód přidá nového zákazníka do tabulky Customer v 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)

    Objekt params obsahuje TableName, což je tabulka, do které zapisujete, a pole Item, které obsahuje data, která přidáváte, s jejich specifickými typy. Všimněte si nových polí, která původně v tabulce nebyla, takto funguje DynamoDB flexibilně. Data ve vaší databázi můžete zobrazit ve vaší konzoli takto:

  • Přečtěte si data z tabulky. DynamoDB umožňuje číst data různými způsoby. Funkce skenování SDK čte celou tabulku, zatímco getItem čte pouze konkrétní data. Například kód níže získá všechny zákazníky:
     const getAllCustomers = async () => {
        const params = {
            TableName: "Customer"
        }

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

    Zatímco následující kód získá uživatele pomocí e-mailové hodnoty:

     const getCustomerByEmail = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

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

    getCustomerByEmail("[email protected]")

  • Aktualizujte údaje v tabulce. Chcete-li aktualizovat existující data v tabulce, použijte funkci updateItem sady SDK. Následující kód ukazuje, jak aktualizovat konkrétní záznam:
      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)
     }

    Můžete také zvolit, aby byla vaše funkce dynamická vytvořením aktualizačních výrazů z vašich aktualizačních dat. Flexibilita DynamoDB vám umožňuje zvládnout každou operaci podle vašich potřeb.

  • Odstraňte data z tabulky. Pro smazání záznamu z DynamoDB potřebujete funkci deleteItem a klíč konkrétního záznamu. Postup implementace:
     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]")

  • Vytváření efektivních aplikací s DynamoDB

    Amazon Web Services nadále prosperuje. Poskytuje dostupnou platformu, kterou můžete použít k poskytování efektivních a bezpečných digitálních řešení. DynamoDB je perfektní volbou, pokud hledáte databázi, kterou byste mohli provozovat bez obav o infrastrukturu nebo zabezpečení.

    Nyní jste vybaveni vším, co potřebujete, abyste mohli začít s DynamoDB v Node.js, a můžete si s jistotou vybrat DynamoDB pro svou další aplikaci Node.js.