Javascript/Node.js için AWS SDK kullanan DynamoDB

Dec 30 2022
DynamoDB nedir? Amazon DynamoDB, tümüyle yönetilen bir NoSQL veritabanı hizmetidir. Büyük Veri ile çalışmanıza olanak tanır.

DynamoDB nedir?

Amazon DynamoDB, tümüyle yönetilen bir NoSQL veritabanı hizmetidir. Büyük Veri ile çalışmanıza olanak tanır. Aşağıdaki gibi özellikler sağlar:

  • İsteğe bağlı sorunsuz ölçeklendirme
  • Sınırsız eşzamanlı okuma/yazma işlemleri
  • Tek haneli milisaniye gecikme
  • DAX ( önbelleğe alma hizmeti) ile mikrosaniye gecikme
  • Hataya dayanıklı, bölgeler arası çoğaltmayı destekler ve yüksek oranda ölçeklenebilir
  • Büyük ölçüde yapılandırılmamış verileri yüksek hacim ve sıklıkta işleyebilir
  • Her tablo için tedarik ettiğiniz kapasiteye göre fiyatlandırma.

DynamoDB'deki Veri Türleri

1. Skaler Türler : Dizi , sayılar, ikili, boole veya boş olabilen tam olarak bir değeri temsil eder.

2. Küme Tipleri : Dizi seti, sayı seti veya ikili set olarak seçilebilen çoklu skaler değerleri temsil eder.

3. Doküman Tipleri : Harita veya liste olabilen iç içe özniteliklere sahip karmaşık bir yapıya sahiptir.

DynamoDB'yi Node.js/ Javascript'te AWS SDK ile kullanmak için Ön Koşullar

Öncelikle aws-cli'nin, aws ortam değişkeni ve ayarlanan yapılandırmalarla birlikte sisteminizde kurulu olduğundan emin olun. Bunu sadece şu komutu çalıştırarak kontrol edebilirsiniz: aws — version.

Terminale gidin ve talimatları çalıştırın:

  1. npm başlangıç
  2. npm kurulum aws-sdk — -kaydet
  1. DynamoDB tablolarını listeleme
  2. //referencing sdk in js file
    const AWS = require("aws-sdk");
    //specifying aws region where dynamodb table will be created
    AWS.config.update({ region: 'us-east-1' });
    //instantiate dynamodb class
    const dynamodb = new AWS.DynamoDB();
    //listing tables
    dynamodb.listTables({}, (err, data)=>{
        if(err) {
            console.log(err);
        } else {
            console.log(data);
        }
    });
    

    dynamodb.describeTable({
         TableName: "demo_sdk"
     }, (err, data)=>{
         if(err) {
             console.log(err);
         } else {
             console.log(JSON.stringify(data, null, 2));// '2' is to beautify the output 
         }
     });
    

1 kapasite birimi = saniyede 1 istek

dynamodb.createTable({
    TableName: "demo_sdk",
    AttributeDefinitions: [
        {
            AttributeName: "id",
            AttributeType: "S" //string
        },
        {
            AttributeName: "timestamp",
            AttributeType: "N" //number
        }
    ],
    KeySchema: [
        {
            AttributeName: "id",
            KeyType: "HASH"
        },
        {
            AttributeName: "timestamp",
            KeyType: "RANGE"
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

//Changing read capacity units from 1 to 2 for the table
dynamodb.updateTable({
    TableName: "demo_sdk",
    ProvisionedThroughput: {
        ReadCapacityUnits: 2,
        WriteCapacityUnits: 1
    }
}, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

dynamodb.deleteTable({
    TableName: "demo_sdk"
}, (err, data) => {
    if(err) {
        console.log(err);
    } else {
        console.log(JSON.stringify(data, null, 2));
    }
});

Kod parçacıklarının sözdizimini dikkatlice incelerseniz, oldukça basit, değil mi? Artık dynamodb için AWS SDK kullanmaya biraz hakim olduğunuzu varsayarsak, biraz daha ayrıntılı tablo işlemlerine geçeceğiz.

Daha önce düşük seviyeli programlama yaklaşımını kullanan AWS.DynamoDB sınıfını kullandık. Şimdi başka bir dynamodb sınıfı olan AWS.DynamoDB.DocumentClient kullanacağız, öğelerle çalışırken bize üst düzey erişim sağlar. Dahili DynamoDB veri türlerinin JavaScript veri türlerine eşlenmesi gibi tüm gereksiz ayrıntıları kullanıcıdan soyutladığı için yüksek düzeyde erişim sağladığını söylüyoruz.

Üst Düzey Erişim Tablosu İşlemleri

  1. Öğe koy

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.put({
    TableName: 'demo_sdk',
    Item: {
// specify attributes as key value pairs
        user_id: 'first',
  //timestamp is the primary key
        timestamp: 3,
        title: 'The Secret',
        content: 'Book'
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

Öğe girişini güncellemek istiyor ancak değerini aramak ve değiştirmekle zaman kaybetmek istemiyor musunuz? DynamoDB bunun için de docClient.update işlevi olan bir çözüm sunar.

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.update({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'first',
        timestamp: 3
    },
    UpdateExpression: 'set #old = :new',
    ExpressionAttributeNames: {
        '#old': 'The Secret' 
    },
    ExpressionAttributeValues: {
       //Title of item is updated
        ':new': "Hall of Games"
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

Kodun sözdiziminde deseni görmeye başladığınızda, kendi başınıza yazmak oldukça kolay hale gelir, bu yüzden bunu kendiniz deneyin ve ardından kodunuzu karşılaştırın.

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.delete({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'first',
        timestamp: 3
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

Bu işlev, birden fazla öğeyi bir kerede koymamıza veya silmemize yardımcı olarak, büyük tablo girişleriyle çalışırken işimizi çok daha basit hale getirir.

const docClient = new AWS.DynamoDB.DocumentClient();
docClient.batchWrite({
    RequestItems: {
        'demo_sdk': [
            {
              // deletes item , here, only one
                DeleteRequest: {
                    Key: {
                        user_id: 'first',
                        timestamp: 3
                    }
                }
            },
            {
              // inserting two items in the table
                PutRequest: {
                    Item: {
                        user_id: 'new',
                        timestamp: 1,
                        title: 'To Kill a MockingBird',
                        content: 'Harper Lee'
                    }
                }
            },
            {
                PutRequest: {
                    Item: {
                        user_id: 'two',
                        timestamp: 2,
                        title: 'Harry Potter',
                        content: 'J.K Rowling'
                    }
                }
            }
        ]
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

const docClient = new AWS.DynamoDB.DocumentClient();
// to get an item with the corresponding key parameters
docClient.get({
    TableName: 'demo_sdk',
    Key: {
        user_id: 'two',
        timestamp: 2
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

const docClient = new AWS.DynamoDB.DocumentClient();
//here we specify th query condition or the where clause, for instance if we
// have multiple table entries for a user_id and want to get all those items at
//once (in this case we don't, but for the sake of learning XD)
docClient.query({
    TableName: 'demo_sdk',
// condition is: user_id must be equal to the value of expression attribute id
    KeyConditionExpression: "user_id = :id",
    ExpressionAttributeValues: {
        ":id": "new"
    }
}, (err, data)=>{
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

AWS DynamoDB'nin ne olduğuna dair temel bir anlayışa aşina oldunuz ve ardından AWS SDK ile basit javascript kodlarını kullanarak dynamodb ile nasıl çalışılacağını öğrendiniz. dynamodb sınıfları ve aşağıdakiler gibi düşük seviyeli ve yüksek seviyeli tablo işlemleri hakkında daha fazla bilgi edinildi: Tablo Oluştur, Tabloyu Sil, Tabloyu Tanımla, Öğe koy, Öğeyi al, Öğeyi sil, Öğeyi Toplu Yaz, Bir öğeyi sorgula ve öğeyi güncelle.

Referanslar:

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

Okuduğunuz için teşekkürler!

Github Bağlantısı:https://github.com/rashi2911/dynamo-db-aws-sdk