Contents

Korzystanie z AWS DynamoDB w aplikacji Node.js

Kluczowe wnioski

DynamoDB to wyjątkowo solidne i wydajne rozwiązanie bazodanowe NoSQL dostarczane przez Amazon Web Services (AWS), które jest w stanie zarządzać znacznymi ilościami różnorodnych informacji przy jednoczesnym zachowaniu optymalnego poziomu wydajności, odporności i niezawodności.

Aby zainicjować korzystanie z usługi bazy danych NoSQL firmy Amazon, znanej jako DynamoDB, w środowisku Node.js, konieczne jest uzyskanie modułu client-dynamodb z AWS SDK i ustalenie odpowiednich ustawień uwierzytelniania w celu uzyskania dostępu do platformy.

DynamoDB zapewnia proste podejście do tworzenia tabel, manipulowania danymi poprzez różne operacje, takie jak zapisywanie, odczytywanie, aktualizowanie i usuwanie rekordów, a wszystko to przy użyciu parametrów zdefiniowanych przez użytkownika. Funkcja ta promuje adaptacyjność i skalowalność w projektowaniu aplikacji, zwiększając ogólną wydajność.

Wykorzystanie szeregu solidnych języków programowania w połączeniu z potężnymi bazami danych jest niezbędne dla znacznej części współczesnych aplikacji.

Amazon Web Services zapewnia innowacyjne rozwiązanie znane jako DynamoDB, które ma potencjał do przekształcenia zarządzania danymi poprzez umożliwienie szybkiego tworzenia baz danych zdolnych do wydajnej obsługi znacznych i zróżnicowanych zbiorów danych.

Czym jest DynamoDB?

Amazon Web Services zapewnia różnorodne rozwiązania spełniające różne wymagania dotyczące baz danych, w tym Amazon Relational Database Service (RDS) dla tradycyjnych relacyjnych baz danych oraz Amazon DocumentDB, który obsługuje dokumentowe bazy danych podobne do MongoDB. Ponadto DynamoDB jest przykładem nierelacyjnej lub NoSQL bazy danych, która przechowuje dane przy użyciu systemu przechowywania klucz-wartość.

DynamoDB jest w stanie efektywnie zarządzać znacznymi ilościami informacji rozproszonych w rozproszonej sieci, zachowując jednocześnie wyjątkowy poziom wydajności, wytrzymałości i niezawodności. System prezentuje adaptowalną strukturę, która umożliwia proste przechowywanie i pobieranie zarówno ustrukturyzowanych, jak i nieustrukturyzowanych danych.

DynamoDB to wszechstronne rozwiązanie bazodanowe, które może być wykorzystywane w wielu domenach. Dostęp do niego można uzyskać zarówno za pośrednictwem konsoli zarządzania AWS, jak i interfejsu wiersza poleceń AWS (CLI), a także zintegrować z aplikacjami internetowymi wykorzystującymi zestaw AWS Software Development Kit (SDK).

Getting Started With DynamoDB in Node.js

Node.js oferuje zróżnicowaną gamę opcji tworzenia interfejsów programowania aplikacji (API) i zapewnia użytkownikom elastyczność w wyborze preferowanej bazy danych do integracji w tym kontekście.Ponadto Node.js obsługuje wiele usług zewnętrznych, takich jak DynamoDB firmy Amazon Web Services, zapewniając programistom szeroki wybór opcji w celu spełnienia ich specyficznych wymagań.

Aby wykorzystać usługę Amazon Web Services (AWS) w aplikacji Node, wystarczy odpowiedni pakiet SDK klienta specyficzny dla tej konkretnej usługi. Przykładowo, w celu interakcji z DynamoDB, należy pobrać i zainstalować moduł client-dynamodb , który znajduje się w pakiecie aws-sdk .

Aby wykonać polecenie w określonym katalogu projektu, wykonaj następujące kroki:1. Przejdź do żądanego katalogu projektu za pomocą terminala lub wiersza polecenia.2. Wpisz odpowiednie polecenie instalacji wymaganego pakietu i naciśnij enter.3. Rozpocznie się proces instalacji, a po jego zakończeniu należy zweryfikować, czy pakiet został pomyślnie zainstalowany, sprawdzając jego obecność w systemie plików projektu.

 npm install @aws-sdk/client-dynamodb

Aby wykorzystać tabelę DynamoDB w projekcie Node.js przy użyciu pakietu aws-sdk/client-dynamodb , konieczne jest określenie położenia geograficznego tabeli poprzez włączenie jej regionu do ustawień konfiguracyjnych klienta przed jakąkolwiek interakcją. Ta aktualizacja konfiguracji powinna zostać wykonana podczas procesu inicjalizacji klienta DynamoDB.

Jeśli wcześniej zainstalowałeś i korzystałeś z AWS CLI na swoim urządzeniu komputerowym, jest wysoce prawdopodobne, że już ustanowiłeś poświadczenia AWS w ustawieniach środowiskowych. W takim przypadku powiązany zestaw programistyczny (SDK) płynnie pobierze te wartości ze wspomnianego środowiska bez żadnych dodatkowych działań wymaganych z Twojej strony.

Jeśli nie utworzyłeś jeszcze użytkownika IAM w konsoli Amazon Web Services (AWS), możesz to zrobić, przechodząc do usługi AWS Identity and Access Management (IAM). Po utworzeniu nowego konta użytkownika otrzymasz unikalny identyfikator klucza dostępu i odpowiadający mu klucz tajny, służący jako zindywidualizowane poświadczenia dostępu do różnych zasobów w ekosystemie AWS.

Aby włączyć te klucze uwierzytelniające do swojego obszaru roboczego, można wykonać następujące instrukcje wiersza poleceń w systemie operacyjnym:

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'

W projekcie Node.js utwórz nowy plik zatytułowany “dynamodb.js”.W tym pliku należy użyć następujących linii kodu, aby zainicjować instancję klienta Amazon Web Services (AWS) DynamoDB:

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

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

const client = new DynamoDB({ region })

AWS zapewnia, że wrażliwe informacje bezpieczeństwa są odpowiednio chronione, zapobiegając ujawnieniu takich danych w samym kodzie. W związku z tym, podczas próby nawiązania połączenia z klientem, jak pokazano wcześniej, niezbędne klucze dostępu i tajne klucze są pobierane ze źródła środowiskowego, a nie bezpośrednio osadzone w kodzie.

Niedawno utworzony klient ułatwia wiele funkcji, takich jak tworzenie tabel i operacje wprowadzania/wyjścia danych.

DynamoDB działa w oparciu o architekturę bez schematu, podobną do innych baz danych NoSQL, która pozwala na płynne dodawanie nowych atrybutów lub pól do istniejącej tabeli bez ponoszenia znacznych kosztów ogólnych. W związku z tym po utworzeniu tabeli DynamoDB konieczne jest wyznaczenie określonych atrybutów, które będą działać jako klucze podstawowe w celu ułatwienia wydajnego wyszukiwania danych i zarządzania nimi.

Rzeczywiście, zagłębmy się w przykład kodu, który konstruuje nową tabelę zatytułowaną “Customer” w ramach usługi DynamoDB firmy Amazon:

 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 określenia podstawowych cech struktury tabeli poprzez zdefiniowanie jej podstawowych atrybutów wraz z ich odpowiednimi typami danych. W tym konkretnym przypadku atrybut Email jest oznaczony jako posiadający typ danych oparty na łańcuchu znaków, oznaczony skrótem “S”. Inne dostępne typy atrybutów obejmują wartości numeryczne reprezentowane przez “N” i dane binarne charakteryzowane przez “B”.

Aby efektywnie pobierać i porządkować dane w tabeli DynamoDB, konieczne jest ustanowienie schematu klucza podstawowego, który wyznacza jeden lub więcej atrybutów jako unikalny identyfikator dla każdego elementu. W tym przypadku, ponieważ wyznaczyliśmy “Email” jako klucz podstawowy, powinien on zostać uwzględniony w KeySchema z określonym KeyType “HASH”. Pozwala to DynamoDB skutecznie identyfikować i lokalizować określone rekordy na podstawie ich adresu e-mail.

Inną alternatywną opcją dla atrybutu KeyType jest typ Range, który służy jako mechanizm sortowania, gdy jest stosowany do nieunikalnych wartości hash w tabeli bazy danych. W sytuacjach, gdy wiele rekordów posiada identyczne wartości hash, wykorzystanie kluczy zakresu umożliwia grupowanie tych rekordów w oparciu o dodatkowe informacje wyróżniające, takie jak daty lub kolory. Stosując tę metodę, można skutecznie organizować dane w bardziej uporządkowany sposób, unikając jednocześnie potencjalnych konfliktów, które mogą powstać w wyniku użycia tylko kluczy hash.

Trzeci istotny aspekt w wyżej wymienionym kodzie dotyczy ProvisionedThroughput, który określa dozwoloną szybkość operacji odczytu i zapisu dla określonej tabeli DynamoDB w przeliczeniu na sekundę.

Po wykonaniu powyższego kodu można spodziewać się danych wyjściowych w postaci:

/pl/images/dynamodb_create_table_console.jpg

Po przejściu do pulpitu nawigacyjnego tabel DynamoDB w interfejsie internetowym AWS Management Console można zaobserwować, że tabela jest w trakcie procesu aprowizacji lub została pomyślnie utworzona i obecnie wykazuje stan “aktywny” lub “aprowizowany”.

Określając odpowiednie wartości dla ReadCapacityUnits i WriteCapacityUnits, ważne jest, aby dokładnie ocenić specyficzne wymagania aplikacji, aby uniknąć potencjalnych problemów z wydajnością lub zawyżonych opłat na koncie.

Po ustaleniu, że tabela jest aktywna, możesz wykonywać różne operacje obejmujące tworzenie, odczytywanie, aktualizowanie i usuwanie danych w tej tabeli.

Podane przykłady demonstrują proces zapisywania i pobierania informacji z

⭐ Dodaj dane do tabeli . Aby zapisać dane do tabeli, potrzebna jest metoda 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, która jest tabelą, do której piszesz, oraz pole Item, które zawiera dane, które dodajesz wraz z ich określonymi typami. Zwróć uwagę na nowe pola, które początkowo nie znajdowały się w tabeli, w ten sposób DynamoDB działa elastycznie. Dane w bazie danych można wyświetlić w konsoli w następujący sposób: /pl/images/dynamodb_table_data_screen.jpg

⭐ Odczyt danych z tabeli . DynamoDB umożliwia odczytywanie danych na różne sposoby. Funkcja skanowania SDK odczytuje całą tabelę, podczas gdy getItem odczytuje 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)
}

Podczas gdy poniższy kod pobiera użytkownika według wartości e-mail:

 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]")

⭐ Aktualizacja danych w tabeli . Aby zaktualizować istniejące dane w tabeli, należy użyć funkcji updateItem SDK. Poniższy kod demonstruje, jak zaktualizować określony rekord:

  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 uczynić swoją funkcję dynamiczną, budując wyrażenia aktualizacji z danych aktualizacji. Elastyczność DynamoDB pozwala na obsługę każdej operacji zgodnie z własnymi potrzebami.

⭐ Usuwanie danych z tabeli . Aby usunąć rekord z DynamoDB, potrzebna jest funkcja deleteItem i klucz konkretnego rekordu.Oto jak go 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]")

Budowanie wydajnych aplikacji za pomocą DynamoDB

Amazon Web Services nadal cieszy się dużym powodzeniem i oferuje przyjazną dla użytkownika platformę do opracowywania skutecznych, niezawodnych usług cyfrowych przy jednoczesnym zapewnieniu solidnych środków bezpieczeństwa. Rozwiązanie DynamoDB stanowi idealną opcję dla osób poszukujących usprawnionej bazy danych, która wymaga minimalnego zarządzania infrastrukturą bazową lub protokołami ochrony.

Zdobyłeś niezbędną wiedzę i narzędzia, aby rozpocząć korzystanie z DynamoDB w ramach projektu Node.js, co pozwoli Ci podjąć świadomą decyzję dotyczącą jego wdrożenia w przyszłych przedsięwzięciach.