این برنامه نمونه را بسازید تا بفهمید پایگاه داده ها چقدر می توانند آسان باشند.
نکات کلیدی
- DynamoDB یک پایگاه داده قدرتمند NoSQL است که توسط AWS ارائه شده است که می تواند حجم زیادی از داده های متنوع را بدون به خطر انداختن عملکرد، دوام یا قابلیت اطمینان مدیریت کند.
- برای شروع کار با DynamoDB در Node.js، باید بسته client-dynamodb را از aws-sdk نصب کرده و اعتبار خود را پیکربندی کنید.
- DynamoDB به شما این امکان را می دهد که به راحتی جداول ایجاد کنید، داده ها را بنویسید و بخوانید، رکوردها را به روز کنید و رکوردها را با استفاده از روش ها و پارامترهای مشتری حذف کنید. برای توسعه کارآمد برنامه انعطاف پذیری و مقیاس پذیری را ارائه می دهد.
بخش بزرگی از توسعه برنامه های مدرن به ترکیبی از زبان های برنامه نویسی قوی و پایگاه های داده قدرتمند نیاز دارد.
یکی از راه حل هایی که خدمات وب آمازون (AWS) ارائه می دهد DynamoDB است، ابزاری که می تواند مدیریت داده های شما را متحول کند. با استفاده از آن، می توانید به سرعت یک پایگاه داده برای مدیریت حجم زیادی از داده های متنوع تهیه کنید.
DynamoDB چیست؟
AWS خدماتی را برای نیازهای مختلف پایگاه داده ارائه می کند، مانند Amazon RDS برای پایگاه های داده رابطه ای و DocumentDB برای پایگاه های داده اسناد مانند MongoDB. DynamoDB یک پایگاه داده NoSQL برای ذخیره داده ها در قالب کلید-مقدار است.
DynamoDB می تواند حجم زیادی از داده ها را در زیرساخت های توزیع شده بدون به خطر انداختن عملکرد، دوام یا قابلیت اطمینان مدیریت کند. این یک مدل انعطافپذیر ارائه میکند و به شما امکان میدهد دادهها را چه ساختاریافته یا بدون ساختار به راحتی ذخیره و جستجو کنید.
می توانید از DynamoDB به عنوان پایگاه داده برای انواع مختلف برنامه ها استفاده کنید. می توانید مستقیماً از کنسول وب AWS و به صورت برنامه نویسی از طریق AWS-CLI یا از برنامه های وب با استفاده از AWS-SDK به آن دسترسی داشته باشید.
شروع کار با DynamoDB در Node.js
ابزارهای زیادی برای ساختن APIهای Backend در Node.js وجود دارد و شما می توانید هنگام کار با هر یک از این ابزارها، پایگاه داده را برای API خود انتخاب کنید. Node.js پشتیبانی گسترده ای از خدمات خارجی از جمله پایگاه های داده مانند AWS DynamoDB ارائه می دهد.
تنها چیزی که برای دسترسی به یک سرویس AWS از برنامه Node خود نیاز دارید، بسته مشتری aws-sdk برای آن سرویس است. به عنوان مثال، برای دسترسی به DynamoDB، باید بسته client-dynamodb را تحت aws-sdk نصب کنید.
برای نصب بسته این دستور را در فهرست پروژه خود اجرا کنید:
npm install @aws-sdk/client-dynamodb
پس از نصب aws-sdk/client-dynamodb در پروژه Node.js، باید ناحیه جدول DynamoDB خود را قبل از تعامل با آن به پیکربندی اضافه کنید. شما این کار را هنگام مقداردهی اولیه مشتری DynamoDB انجام خواهید داد.
اگر قبلاً AWS-CLI را روی رایانه خود نصب و استفاده کرده اید، احتمالاً اعتبارنامه AWS را قبلاً در محیط خود تنظیم کرده اید و SDK به طور خودکار مقادیر شما را از محیط دریافت می کند.
اما اگر این کار را نکرده اید، می توانید به سرویس AWS Identity Access Management (IAM) در کنسول خود بروید و یک کاربر جدید ایجاد کنید. پس از ایجاد کاربر، می توانید شناسه کلید دسترسی و کلید مخفی را که اعتبار شخصی شما هستند، دریافت کنید.
با اجرای دستورات ترمینال زیر برای پلتفرم خود، این اعتبارنامه ها را به محیط خود اضافه کنید:
در یونیکس، لینوکس یا macOS:
export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'
در ویندوز (CMD):
set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'
در ویندوز (PowerShell):
$env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'
سپس در پروژه Node.js خود، یک فایل جدید ایجاد کنید و نام آن را dynamodb.js بگذارید. در این فایل، یک کلاینت جدید AWS DynamoDB را با استفاده از کد زیر ایجاد کنید:
const { DynamoDB } = require('@aws-sdk/client-dynamodb')
const region = "us-east-1" // your preferred region
const client = new DynamoDB({ region })
خیلی ساده! AWS اطمینان حاصل می کند که هیچ یک از اعتبارنامه های امنیتی خود را در کد خود فاش نمی کنید، بنابراین در حالی که کد بالا سعی می کند کلاینت را ایجاد کند، ابتدا کلید دسترسی و کلید مخفی را از محیط شما می خواند.
کلاینت تازه ایجاد شده شما را قادر می سازد تا عملیات مختلفی مانند ایجاد جداول و خواندن و نوشتن داده ها را انجام دهید.
DynamoDB مانند سایر پایگاههای داده NoSQL فاقد طرحواره است، بنابراین همیشه میتوانید ویژگیهای جدید (فیلدها) را در هر نقطه به جدول اضافه کنید. به همین دلیل است که هنگام ایجاد جدول DynamoDB فقط باید ویژگی هایی را اضافه کنید که به عنوان کلیدهای اصلی به کار می روند.
کد زیر را که یک جدول جدید (Customer) در 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();
فیلد AttributeDefinitions جایی است که شما ویژگی های کلیدی جدول و انواع آنها را تعریف می کنید. ویژگی Email در اینجا دارای نوع S است که به این معنی است که فیلد انتظار یک رشته را به عنوان مقدار خود دارد. سه نوع ویژگی موجود عبارتند از S، N و B (رشته، عدد و باینری).
برای تعریف کلیدهای اولیه که به یافتن و سازماندهی سریع موارد کمک می کند، به KeySchema نیاز دارید. DynamoDB انتظار دارد ویژگیهایی که هنگام ایجاد جدول اضافه میکنید، ویژگیهای کلیدی باشند، بنابراین ایمیل در اینجا کلید اصلی است. باید آن را به KeySchema اضافه کنید و KeyType آن (HASH) را مشخص کنید.
مقدار KeyType دیگر RANGE است که برای مرتب سازی کلیدها استفاده می شود. کلیدهای مرتب سازی در مواردی مفید هستند که ممکن است داده هایی با همان کلیدهای HASH در یک جدول داشته باشید، و می خواهید آنها را بر اساس برخی داده های اضافی مانند تاریخ یا رنگ گروه بندی کنید، می توانید داده های اضافی را به یک کلید RANGE تبدیل کنید.
سومین پارامتر مهم در کد بالا ProvisionedThroughput است. این جایی است که تعداد خواندن و نوشتن هایی را که می خواهید DynamoDb در جدول اجازه دهد در هر ثانیه تعیین کنید.
هنگامی که کد بالا را اجرا می کنید، باید خروجی به شکل زیر دریافت کنید:
اگر داشبورد جداول DynamoDB خود را در کنسول وب بررسی کنید، جدول را میبینید که یا هنوز آماده شده است یا از قبل وضعیت آن فعال است.
همیشه نیازهای برنامه خود را هنگام تعیین ReadCapacityUnits و WriteCapacityUnits در نظر بگیرید زیرا یک مقدار نامناسب می تواند منجر به مشکلات عملکرد یا هزینه های بالای صورتحساب در حساب شما شود.
هنگامی که مطمئن شدید جدول از قبل فعال است، می توانید عملیات CRUD را روی آن انجام دهید.
در زیر چند نمونه کد وجود دارد که نحوه نوشتن و خواندن داده ها از جدول مشتری را به شما نشان می دهد.
- داده ها را به جدول اضافه کنید. برای نوشتن داده ها در جدول، به روش putItem کلاینت نیاز دارید. کد زیر یک مشتری جدید را به جدول Customer در DynamoDB اضافه می کند. const createCustomer = ناهمگام (مشتری) => { const params = { TableName: “Customer”، Item: customer } client.putItem(params, (err, data) => ر) } else { console.log(data) } })}const customerData = { Name: { “S”: “Timilehin O.” }، ایمیل: { “S”: “timtim@example.com” }، سن: { “N”: “18”}، Country: { “S”: “Nigeria” }}createCustomer(customerData) شئ params شامل TableName که جدولی است که در آن می نویسید و فیلد Item که حاوی داده هایی است که با انواع خاص آنها اضافه می کنید. به فیلدهای جدیدی که در ابتدا در جدول نبودند توجه کنید، DynamoDB به این صورت انعطاف پذیر عمل می کند. می توانید داده های موجود در پایگاه داده خود را در کنسول خود به صورت زیر مشاهده کنید:
- داده ها را از جدول بخوانید. DynamoDB به شما امکان می دهد داده ها را به روش های مختلف بخوانید. عملکرد اسکن SDK کل جدول را می خواند، در حالی که getItem فقط داده های خاص را می خواند. برای مثال، کد زیر همه مشتریان را دریافت میکند: const getAllCustomers = async () => { const params = { TableName: “Customer” } const customers = await client. scan(params) console.log(custom)} کاربر را بر اساس مقدار ایمیل دریافت میکند: const getCustomerByEmail = ناهمگام (ایمیل) => { const params = { TableName: “Customer”، Key: { Email: { “S”: ایمیل همیشه مورد نیاز است. خیابان customer = منتظر client.getItem(params) console.log(customer)}getCustomerByEmail(“timtim@example.com”)
- داده ها را در جدول به روز کنید. برای بهروزرسانی دادههای موجود در جدول، از تابع updateItem SDK استفاده کنید. کد زیر نحوه بهروزرسانی یک رکورد خاص را نشان میدهد: const updateCustomerLocation = ناهمگام (ایمیل، سن) => { const params = { TableName: “Customer”, Key: { Key: { Key: { Key: { : { UpdateExpression: SET Age = :newAge»، ExpressionAttributeValues: { ‘:newAge’: { “N”: سن } }، ReturnValues: بهروزرسانی را کلاینت: آوا به ما بهروزرسانی شد. dateItem(params) console.log(updatedCustomer.Attributes) } شما همچنین می توانید با ساخت عبارات به روز رسانی از داده های به روز رسانی خود، تابع خود را پویا کنید. انعطاف پذیری DynamoDB به شما این امکان را می دهد که هر عملیات را مطابق با نیاز خود انجام دهید.
- حذف داده ها از جدول برای حذف یک رکورد از DynamoDB، به تابع deleteItem و کلید رکورد خاص نیاز دارید. نحوه پیادهسازی آن به این صورت است: const deleteCustomer = async (ایمیل) => { const params = { TableName: “Customer”, Key: { Email: { “S”: ms em } خطا، داده ) => { if (اشتباه) { console.error(err) } else { console.log(“Customer deleted with موفقیت”) } ” delete time C@e
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": "timtim@example.com" },
Age: { "N": "18"},
Country: { "S": "Nigeria" }
}
createCustomer(customerData)
const getAllCustomers = async () => {
const params = {
TableName: "Customer"
}
const customers = await client.scan(params)
console.log(customers)
}
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("timtim@example.com")
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)
}
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("timtim@example.com")
ساخت اپلیکیشن های کارآمد با DynamoDB
خدمات وب آمازون به پیشرفت خود ادامه می دهد. این یک پلت فرم قابل دسترسی را فراهم می کند که می توانید از آن برای ارائه راه حل های دیجیتالی کارآمد و ایمن استفاده کنید. اگر به دنبال پایگاه داده ای هستید تا بدون نگرانی در مورد زیرساخت یا امنیت اجرا شود، DynamoDB انتخاب عالی است.
شما اکنون به تمام آنچه برای شروع با DynamoDB در Node.js نیاز دارید مجهز شده اید و می توانید با اطمینان DynamoDB را برای برنامه بعدی Node.js خود انتخاب کنید.