Что такое DynamoDB?
Amazon DynamoDB — это полностью управляемая служба базы данных NoSQL. Позволяет работать с большими данными. Он предоставляет такие функции, как:
- Плавное масштабирование по запросу
- Неограниченное количество одновременных операций чтения/записи
- Одноразрядная миллисекундная задержка
- Задержка в микросекундах с DAX (сервис кэширования)
- Отказоустойчивость, поддержка межрегиональной репликации и высокая масштабируемость
- Может обрабатывать в значительной степени неструктурированные данные с большим объемом и частотой
- Цены основаны на емкости, которую вы предоставляете для каждой таблицы.
DynamoDB должен иметь первичный ключ.
Типы данных в DynamoDB
1. Скалярные типы:представляет ровно одно значение, которое может быть строкой, числом, двоичным, логическим значением или нулевым значением.
2. Типы наборов:представляет несколько скалярных значений, которые могут принимать значения набора строк, набора чисел или двоичного набора.
3. Типы документов: Он имеет сложную структуру с вложенными атрибутами, которые могут быть картой или списком.
Необходимые условия для использования DynamoDB с AWS SDK в Node.js/Javascript
Во-первых, убедитесь, что в вашей системе установлен aws-cli вместе с переменной среды aws и настроенными конфигурациями. Вы можете проверить это, просто выполнив команду: aws — version.
Перейдите в терминал и выполните инструкции:
- инициализация нпм
- npm установить aws-sdk — -save
Основные операции с таблицами в DynamoDB с использованием AWS SDK
- Список таблиц DynamoDB
//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); } });
2. Описать таблицы
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 } });
3. Создать таблицу
Выделенная здесь пропускная способность обеспечивает предсказуемую производительность в любом масштабе. Это основной фактор ценообразования, который определяется в единицах емкости чтения (RCU) и единицах емкости записи (WCU).
1 единица емкости = 1 запрос в секунду
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)); } });
4. Обновить таблицу
//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)); } });
5. Удалить таблицу
dynamodb.deleteTable({ TableName: "demo_sdk" }, (err, data) => { if(err) { console.log(err); } else { console.log(JSON.stringify(data, null, 2)); } });
Вы можете просмотреть изменения после каждой операции, используя функцию descriptionTable Dynamodb. Все изменения будут отражены в консоли управления AWS. Для этого нужно написать всего несколько строк кода и не выполнять утомительные действия вручную.
Если вы внимательно изучите синтаксис фрагментов кода, это довольно просто, не так ли? Итак, предполагая, что теперь вы немного освоились с использованием AWS SDK для dynamodb, мы перейдем к более подробным операциям с таблицами.
Ранее мы использовали класс AWS.DynamoDB, который использует низкоуровневый подход к программированию. Теперь мы будем использовать другой класс DynaModb, AWS.DynamoDB.DocumentClient, который предоставляет нам доступ высокого уровня при работе с элементами. Мы говорим, что он обеспечивает доступ высокого уровня, потому что он абстрагирует от пользователя все ненужные детали, такие как сопоставление внутренних типов данных DynamoDB с типами данных JavaScript.
Операции с таблицами доступа высокого уровня
- Поместить элемент
Создание экземпляра aws sdk и региона aws останется таким же, как и в предыдущих кодах.
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); } });
2. Обновить элементы
Хотите обновить запись элемента, но не хотите тратить время на поиск и изменение его значения? DynamoDB также предлагает решение для этого — функцию docClient.update.
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); } });
3. Удаление элементов
Как только вы начинаете видеть шаблон в синтаксисе кода, становится довольно легко написать его самостоятельно, поэтому попробуйте это сами, а затем сравните свой код.
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); } });
4. Пакетная запись элементов
Эта функция помогает нам помещать или удалять несколько элементов одновременно, что значительно упрощает нашу работу при работе с большим набором записей в таблице.
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); } });
5. Получить товар
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); } });
6. Запрос элемента
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, а затем узнали, как работать с Dynamodb, используя простые коды javascript с AWS SDK. Далее вы узнали о классах Dynamodb и операциях с таблицами низкого и высокого уровня, таких как: Создать таблицу, Удалить таблицу, Описать таблицу, Поместить элемент, Получить элемент, Удалить элемент, Пакетно записать элемент, Запросить элемент и обновить элемент.
Ссылки:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html
Спасибо за чтение!
Ссылка на Github: https://github.com/rashi2911/dynamo-db-aws-sdk