Używanie AWS DynamoDB w aplikacji Node.js

  • DynamoDB to potężna baza danych NoSQL oferowana przez AWS, która może obsługiwać duże ilości różnorodnych danych bez uszczerbku dla wydajności, trwałości i niezawodności.
  • Aby rozpocząć pracę z DynamoDB w Node.js, musisz zainstalować pakiet client-dynamodb z aws-sdk i skonfigurować swoje poświadczenia.
  • DynamoDB umożliwia łatwe tworzenie tabel, zapisywanie i odczytywanie danych, aktualizację rekordów i usuwanie rekordów przy użyciu metod i parametrów klienta. Oferuje elastyczność i skalowalność dla efektywnego tworzenia aplikacji.

Duża część tworzenia nowoczesnych aplikacji wymaga połączenia solidnych języków programowania i wydajnych baz danych.

Jednym z rozwiązań oferowanych przez Amazon Web Services (AWS) jest DynamoDB, narzędzie, które może zrewolucjonizować zarządzanie Twoimi danymi. Dzięki niemu można szybko udostępnić bazę danych do obsługi dużej ilości różnorodnych danych.

Co to jest DynamoDB?

AWS oferuje usługi zaspokajające różne potrzeby związane z bazami danych, takie jak Amazon RDS dla relacyjnych baz danych i DocumentDB dla baz danych dokumentów, takich jak MongoDB. DynamoDB to baza danych NoSQL do przechowywania danych w formacie klucz-wartość.

DynamoDB może obsługiwać duże ilości danych w rozproszonej infrastrukturze bez uszczerbku dla wydajności, trwałości i niezawodności. Oferuje elastyczny model, umożliwiający łatwe przechowywanie i wysyłanie zapytań do danych, niezależnie od tego, czy są one ustrukturyzowane, czy nie.

Możesz używać DynamoDB jako bazy danych dla różnych typów aplikacji. Dostęp do niego można uzyskać bezpośrednio z konsoli internetowej AWS oraz programowo poprzez AWS-CLI lub z aplikacji internetowych korzystających z AWS-SDK.

Pierwsze kroki z DynamoDB w Node.js

W Node.js dostępnych jest wiele narzędzi do tworzenia interfejsów API zaplecza, a podczas pracy z dowolnym z tych narzędzi możesz wybrać bazę danych dla swojego interfejsu API. Node.js zapewnia szeroką obsługę usług zewnętrznych, w tym baz danych takich jak AWS DynamoDB.

Wszystko, czego potrzebujesz, aby uzyskać dostęp do usługi AWS z aplikacji Node, to pakiet klienta aws-sdk dla tej usługi. Na przykład, aby uzyskać dostęp do DynamoDB, musisz zainstalować pakiet client-dynamodb w aws-sdk.

Uruchom tę komendę w katalogu projektu, aby zainstalować pakiet:

 npm install @aws-sdk/client-dynamodb

Po zainstalowaniu aws-sdk/client-dynamodb w projekcie Node.js musisz dodać region tabeli DynamoDB do konfiguracji, zanim zaczniesz z nią współdziałać. Zrobisz to podczas inicjowania klienta DynamoDB.

Jeśli już wcześniej instalowałeś i korzystałeś z AWS-CLI na swoim komputerze, prawdopodobnie masz już ustawione poświadczenia AWS w swoim środowisku, a SDK automatycznie pobierze Twoje wartości ze środowiska.

Ale jeśli tego nie zrobiłeś, możesz udać się do Zarządzanie dostępem do tożsamości AWS (IAM) service w konsoli i utwórz nowego użytkownika. Po utworzeniu użytkownika możesz uzyskać identyfikator klucza dostępu i tajny klucz, które są Twoimi osobistymi danymi uwierzytelniającymi.

Dodaj te poświadczenia do swojego środowiska, uruchamiając następujące polecenia terminala dla swojej platformy:

W systemie Unix, Linux lub macOS:

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

W systemie Windows (CMD):

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

W systemie Windows (PowerShell):

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

Następnie wróć do projektu Node.js i utwórz nowy plik i nadaj mu nazwę dynamodb.js. W tym pliku utwórz instancję nowego klienta AWS DynamoDB, używając następującego kodu:

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

const region = "us-east-1"

const client = new DynamoDB({ region })

Dość proste! AWS upewnia się, że nie ujawniasz żadnych danych uwierzytelniających w swoim kodzie, więc gdy powyższy kod próbuje utworzyć klienta, najpierw odczytuje klucz dostępu i tajny klucz z twojego środowiska.

Nowo utworzony klient umożliwia wykonywanie różnych operacji, takich jak tworzenie tabel oraz odczytywanie i zapisywanie danych.

DynamoDB, podobnie jak inne bazy danych NoSQL, nie wymaga schematu, więc zawsze możesz w dowolnym momencie dodać nowe atrybuty (pola) do tabeli. Dlatego podczas jej tworzenia wystarczy dodać tylko atrybuty, które będą służyć jako klucze podstawowe do tabeli DynamoDB.

Sprawdź następujący kod, który tworzy nową tabelę (Klient) w 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 służy do definiowania kluczowych atrybutów tabeli i ich typów. Atrybut Email ma tutaj typ S, co oznacza, że ​​pole oczekuje ciągu jako wartości. Trzy dostępne typy atrybutów to S, N i B (ciąg, liczba i binarny).

Potrzebujesz KeySchema, aby zdefiniować klucze podstawowe, które pomogą szybko znaleźć i uporządkować elementy. DynamoDB oczekuje, że atrybuty dodane podczas tworzenia tabeli będą atrybutami kluczowymi, dlatego kluczem podstawowym jest tutaj e-mail. Musisz dodać go do KeySchema i określić jego KeyType (HASH).

Inną dostępną wartością KeyType jest RANGE, która jest używana do kluczy sortowania. Klawisze sortowania są przydatne w przypadkach, gdy w tabeli znajdują się dane z tymi samymi kluczami HASH i chcesz je pogrupować według dodatkowych danych, takich jak data lub kolor, możesz ustawić dodatkowe dane jako klucz RANGE.

Trzecim ważnym parametrem w powyższym kodzie jest ProvisionedThroughput. W tym miejscu definiujesz liczbę odczytów i zapisów, na które DynamoDb ma zezwalać w tabeli na sekundę.

Po uruchomieniu powyższego kodu powinieneś otrzymać dane wyjściowe wyglądające tak:

Jeśli sprawdzisz pulpit nawigacyjny tabel DynamoDB w konsoli internetowej, zobaczysz, że tabela jest nadal udostępniana lub ma już status aktywny.

Określając jednostki ReadCapacityUnits i WriteCapacityUnits, należy zawsze brać pod uwagę potrzeby aplikacji, ponieważ niewłaściwa wartość może prowadzić do problemów z wydajnością lub wysokich kosztów rozliczeń na koncie.

Gdy masz pewność, że tabela jest już aktywna, możesz wykonać na niej operacje CRUD.

Poniżej przedstawiono kilka przykładów kodu pokazujących, jak zapisywać i odczytywać dane z tabeli Customer.

  • Dodaj dane do tabeli. Aby zapisać dane do tabeli, potrzebujesz metody putItem klienta. Poniższy kod dodaje nowego klienta do tabeli Customer w 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)

    Obiekt params zawiera TableName, czyli tabelę, do której piszesz, oraz pole Item, które zawiera dodawane dane wraz z ich określonymi typami. Zwróć uwagę na nowe pola, których początkowo nie było w tabeli. Dzięki temu DynamoDB działa elastycznie. Możesz przeglądać dane w swojej bazie danych w konsoli w następujący sposób:

  • Odczytaj dane z tabeli. DynamoDB umożliwia odczytywanie danych na różne sposoby. Funkcja skanowania SDK odczytuje całą tabelę, podczas gdy getItem czyta tylko określone dane. Na przykład poniższy kod pobiera wszystkich klientów:
     const getAllCustomers = async () => {
        const params = {
            TableName: "Customer"
        }

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

    Poniższy kod pobiera użytkownika według wartości adresu e-mail:

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

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

    getCustomerByEmail("[email protected]")

  • Zaktualizuj dane w tabeli. Aby zaktualizować istniejące dane w tabeli, użyj funkcji updateItem pakietu SDK. Poniższy kod ilustruje sposób aktualizacji określonego rekordu:
      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)
     }

    Możesz także nadać swojej funkcji dynamikę, budując wyrażenia aktualizacji na podstawie danych aktualizacji. Elastyczność DynamoDB pozwala na obsługę każdej operacji zgodnie z Twoimi potrzebami.

  • Usuń dane z tabeli. Do usunięcia rekordu z DynamoDB potrzebna jest funkcja usuwaniaItem oraz klucz konkretnego rekordu. Oto jak to wdrożyć:
     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]")

  • Tworzenie wydajnych aplikacji przy użyciu DynamoDB

    Usługi internetowe Amazon nadal się rozwijają. Zapewnia dostępną platformę, za pomocą której można dostarczać wydajne i bezpieczne rozwiązania cyfrowe. DynamoDB to idealny wybór, jeśli szukasz bazy danych, którą możesz uruchomić bez martwienia się o infrastrukturę i bezpieczeństwo.

    Masz teraz wszystko, czego potrzebujesz, aby rozpocząć pracę z DynamoDB w Node.js i możesz śmiało wybrać DynamoDB do swojej następnej aplikacji Node.js.