کار با اسکن در DynamoDB

  • 2021-12-28

یک عمل اسکن در آمازون DynamoDB هر مورد را در یک جدول یا یک شاخص ثانویه می خواند. به طور پیش فرض ، یک عملیات اسکن تمام ویژگی های داده را برای هر مورد در جدول یا فهرست باز می گرداند. شما می توانید از پارامتر ProjectionExpression استفاده کنید تا اسکن فقط برخی از ویژگی ها را به جای همه آنها بازگرداند.

اسکن همیشه یک مجموعه نتیجه را برمی گرداند. در صورت یافتن موارد تطبیق ، مجموعه نتیجه خالی است.

یک درخواست اسکن واحد می تواند حداکثر 1 مگابایت داده را بازیابی کند. به صورت اختیاری ، DynamoDB می تواند یک عبارت فیلتر را در این داده ها اعمال کند و نتایج را قبل از بازگشت به کاربر باریک کند.

موضوعات موضوعاتی

عبارات فیلتر برای اسکن

اگر نیاز به اصلاح بیشتر نتایج اسکن دارید ، می توانید به صورت اختیاری یک بیان فیلتر ارائه دهید. یک عبارت فیلتر مشخص می کند که کدام موارد در نتایج اسکن باید به شما برگردانده شود. تمام نتایج دیگر دور ریخته می شوند.

بیان فیلتر پس از اتمام اسکن اعمال می شود اما قبل از بازگشت نتایج. بنابراین ، یک اسکن بدون توجه به اینکه یک بیان فیلتر وجود دارد ، همان مقدار ظرفیت خواندن را مصرف می کند.

یک عمل اسکن می تواند حداکثر 1 مگابایت داده را بازیابی کند. این حد قبل از ارزیابی بیان فیلتر اعمال می شود.

با اسکن ، می توانید هرگونه ویژگی را در یک عبارت فیلتر مشخص کنید - از جمله کلید پارتیشن و مرتب سازی ویژگی های کلید.

نحو برای یک بیان فیلتر با یک بیان شرایط یکسان است. عبارات فیلتر می توانند از همان مقایسه ها ، توابع و اپراتورهای منطقی به عنوان یک بیان شرط استفاده کنند. برای اطلاعات بیشتر در مورد اپراتورهای منطقی ، به اپراتور مقایسه و مرجع عملکرد مراجعه کنید.

مثال زیر رابط خط فرمان AWS (AWS CLI) جدول موضوع را اسکن می کند و فقط مواردی را که آخرین بار توسط یک کاربر خاص ارسال شده است ، باز می گرداند.

محدود کردن تعداد موارد در مجموعه نتیجه

عملیات اسکن به شما امکان می دهد تعداد مواردی را که در نتیجه باز می گردد محدود کنید. برای انجام این کار ، پارامتر حد را روی حداکثر تعداد مواردی که می خواهید عملکرد اسکن بازگردد ، قبل از ارزیابی بیان فیلتر تنظیم کنید.

به عنوان مثال ، فرض کنید که یک جدول را با مقدار حد 6 و بدون بیان فیلتر اسکن می کنید. نتیجه اسکن شامل شش مورد اول از جدول است.

حال فرض کنید که یک عبارت فیلتر را به اسکن اضافه می کنید. در این حالت ، DynamoDB بیان فیلتر را به شش مورد بازگردانده شده اعمال می کند و مواردی را که مطابقت ندارند ، دور می کنند. نتیجه اسکن نهایی بسته به تعداد موارد فیلتر شده شامل شش مورد یا کمتر است.

پیج نتایج

DynamoDB نتایج حاصل از عملیات اسکن را شرح می دهد. با صفحه بندی ، نتایج اسکن به "صفحات" داده هایی که از نظر اندازه 1 مگابایت (یا کمتر) هستند تقسیم می شوند. یک برنامه می تواند صفحه اول نتایج ، سپس صفحه دوم و غیره را پردازش کند.

یک اسکن تنها مجموعه ای از نتیجه را برمی گرداند که در حد اندازه 1 مگابایت قرار می گیرد.

برای تعیین اینکه آیا نتایج بیشتری وجود دارد و برای بازیابی آنها یک صفحه به طور همزمان ، برنامه ها باید موارد زیر را انجام دهند:

نتیجه اسکن سطح پایین را بررسی کنید:

اگر نتیجه حاوی یک عنصر LastEvaluatedKey است ، به مرحله 2 ادامه دهید.

اگر در نتیجه آخرین مورد مورد ارزیابی وجود نداشته باشد ، دیگر موارد دیگری برای بازیابی وجود ندارد.

یک درخواست اسکن جدید با همان پارامترهای قبلی ایجاد کنید. با این حال ، این بار ، آخرین مقدار کلید را از مرحله 1 بگیرید و از آن به عنوان پارامتر ExcluSivestartKey در درخواست اسکن جدید استفاده کنید.

درخواست اسکن جدید را اجرا کنید.

به عبارت دیگر ، آخرین مورد از پاسخ اسکن باید به عنوان کلید اختصاصی برای درخواست اسکن بعدی استفاده شود. اگر در پاسخ اسکن یک عنصر LastEvaluatedKey وجود نداشته باشد ، صفحه نهایی نتایج را بازیابی کرده اید..

برای مشاهده این رفتار می توانید از AWS CLI استفاده کنید. AWS CLI درخواست های اسکن سطح پایین را به طور مکرر به DynamoDB ارسال می کند ، تا زمانی که LastevaluatedKey دیگر در نتایج وجود ندارد. مثال AWS CLI را در نظر بگیرید که کل جدول فیلم ها را اسکن می کند اما فقط فیلم ها را از یک ژانر خاص برمی گرداند.

به طور معمول ، AWS CLI به طور خودکار صفحه بندی را انجام می دهد. با این حال ، در این مثال ، پارامتر AWS CLI-صفحه اندازه تعداد موارد در هر صفحه را محدود می کند. پارامتر-Debug اطلاعات سطح پایین را در مورد درخواست ها و پاسخ ها چاپ می کند.

نتایج صفحه بندی شما نیز بر اساس پارامترهای ورودی که منتقل می کنید متفاوت خواهد بود.

با استفاده از AWS DynamoDB اسکن-قیمت-جدول-نام-MAX-ATEMS 1 NextToken را برمی گرداند

با استفاده از AWS DynamoDB اسکن-قیمت-جدول-نام-LIMIT 1 یک کلید مورد ارزیابی را برمی گرداند.

همچنین توجه داشته باشید که استفاده از-شروع به طور خاص به ارزش NextToken نیاز دارد.

اگر مثال را اجرا کنید ، اولین پاسخ از DynamoDB شبیه به موارد زیر است.

آخرین مورد در پاسخ نشان می دهد که همه موارد بازیابی نشده اند. سپس AWS CLI درخواست اسکن دیگری را برای DynamoDB صادر می کند. این الگوی درخواست و پاسخ ، تا پاسخ نهایی ادامه دارد.

عدم وجود LastevaluatedKey نشان می دهد که موارد دیگری برای بازیابی وجود ندارد.

SDK های AWS پاسخ های دینامودب سطح پایین (از جمله حضور یا عدم حضور در آخرین ارزیابی شده) را کنترل می کنند و انتزاع های مختلفی را برای نتایج اسکن پیج ارائه می دهند. به عنوان مثال ، رابط کاربری SDK برای Java Document ، پشتیبانی java. util. iterator را فراهم می کند تا بتوانید یک بار از نتایج یک بار عبور کنید.

برای مثال کد به زبان های مختلف برنامه نویسی ، به راهنمای شروع Amazon DynamoDB و مستندات AWS SDK برای زبان خود مراجعه کنید.

شمارش موارد در نتایج

علاوه بر مواردی که با معیارهای شما مطابقت دارند ، پاسخ اسکن حاوی عناصر زیر است:

ScedcedCount - تعداد موارد ارزیابی شده ، قبل از استفاده از هر اسکنفیلتر. یک مقدار زیاد اسکن با نتایج تعداد چند یا NO ، نشان دهنده عملکرد اسکن ناکارآمد است. اگر در درخواست از فیلتر استفاده نکرده اید ، ScededCount همان تعداد است.

تعداد - تعداد مواردی که باقی مانده است ، پس از بیان فیلتر (در صورت وجود) استفاده شد.

اگر از بیان فیلتر استفاده نمی کنید ، اسکن و شمارش دارای یک مقدار یکسان هستند.

اگر اندازه مجموعه نتیجه اسکن از 1 مگابایت بزرگتر باشد ، اسکن شده و تعداد فقط تعداد جزئی از کل موارد را نشان می دهد. برای بازیابی تمام نتایج باید چندین عمل اسکن انجام دهید (به صفحه بندی نتایج مراجعه کنید).

هر پاسخ اسکن حاوی اسکن و تعداد مواردی است که توسط آن درخواست اسکن خاص پردازش شده است. برای به دست آوردن جمع بزرگ برای همه درخواست های اسکن ، می توانید در حال اجرا از هر دو اسکن و شمارش باشید.

واحدهای ظرفیت مصرف شده توسط اسکن

می توانید هر جدول یا شاخص ثانویه را اسکن کنید. عملیات اسکن واحدهای ظرفیت خواندن را به شرح زیر مصرف می کند.

اگر اسکن کنید DynamoDB واحدهای ظرفیت خواندن را از.
جدول ظرفیت خواندن تهیه شده جدول.
شاخص ثانویه جهانی ظرفیت خواندن ارائه شده شاخص.
شاخص ثانویه محلی ظرفیت خوانده شده جدول پایه.

به‌طور پیش‌فرض، عملیات اسکن هیچ داده‌ای درباره میزان ظرفیت خواندن مصرف‌شده بر نمی‌گرداند. با این حال، می توانید پارامتر ReturnConsumedCapacity را در یک درخواست Scan برای به دست آوردن این اطلاعات مشخص کنید. در زیر تنظیمات معتبر برای ReturnConsumedCapacity آمده است:

هیچ - هیچ داده ظرفیت مصرفی برگردانده نمی شود.(این پیش فرض است.)

TOTAL - پاسخ شامل تعداد کل واحدهای ظرفیت خواندن مصرف شده است.

شاخص ها - پاسخ تعداد کل واحدهای ظرفیت خواندن مصرف شده را به همراه ظرفیت مصرف شده برای هر جدول و شاخصی که به آن دسترسی داشت، نشان می دهد.

DynamoDB تعداد واحدهای ظرفیت خواندن مصرف شده را بر اساس اندازه آیتم محاسبه می کند، نه بر اساس مقدار داده ای که به یک برنامه بازگردانده می شود. به همین دلیل، تعداد واحدهای ظرفیت مصرف شده یکسان است، چه همه ویژگی‌ها (رفتار پیش‌فرض) را درخواست کنید یا فقط برخی از آنها (با استفاده از یک عبارت نمایشی). چه از یک عبارت فیلتر استفاده کنید یا نه، این عدد نیز یکسان است. اسکن حداقل واحد ظرفیت خواندن را مصرف می کند (0. 5 با پیش فرض در نهایت سازگار، 1. 0 با کاملاً سازگار) برای هر پارتیشن درگیر در سرویس درخواست - این شامل پارتیشن هایی می شود که هیچ موردی ندارند.

سازگاری را برای اسکن بخوانید

یک عملیات اسکن به طور پیش‌فرض در نهایت خواندن‌های ثابتی را انجام می‌دهد. این بدان معنی است که نتایج Scan ممکن است تغییرات ناشی از عملیات PutItem یا UpdateItem اخیراً تکمیل شده را منعکس نکند. برای اطلاعات بیشتر، Read Consency را ببینید.

اگر به خواندن های کاملاً ثابت نیاز دارید، از زمانی که اسکن شروع می شود، پارامتر ConsistentRead را در درخواست Scan روی true تنظیم کنید. این تضمین می کند که تمام عملیات نوشتن که قبل از شروع اسکن انجام شده است در پاسخ اسکن گنجانده شده است.

تنظیم ConsistentRead روی true می‌تواند در پشتیبان‌گیری از جدول یا سناریوهای تکرار، در ارتباط با DynamoDB Streams مفید باشد. ابتدا از Scan with ConsistentRead که روی true تنظیم شده است استفاده می کنید تا یک کپی ثابت از داده های جدول بدست آورید. در طول اسکن، DynamoDB Streams هر فعالیت اضافی را که روی جدول رخ می دهد، ثبت می کند. پس از اتمام اسکن، می توانید فعالیت نوشتن را از جریان به جدول اعمال کنید.

یک عملیات اسکن با ConsistentRead که روی true تنظیم شده است، در مقایسه با باقی ماندن ConsistentRead در مقدار پیش فرض (نادرست) دو برابر واحدهای ظرفیت خواندن مصرف می کند.

اسکن موازی

به طور پیش فرض، عملیات اسکن داده ها را به صورت متوالی پردازش می کند. Amazon DynamoDB داده ها را با افزایش 1 مگابایت به برنامه برمی گرداند و یک برنامه عملیات اسکن اضافی را برای بازیابی 1 مگابایت داده بعدی انجام می دهد.

هرچه جدول یا نمایه در حال اسکن بزرگتر باشد، زمان بیشتری برای تکمیل اسکن طول می کشد. علاوه بر این، یک اسکن متوالی ممکن است همیشه نتواند به طور کامل از ظرفیت خروجی خواندن تدارک دیده شده استفاده کند: حتی اگر DynamoDB داده‌های یک جدول بزرگ را در چند پارتیشن فیزیکی توزیع می‌کند، عملیات اسکن تنها می‌تواند یک پارتیشن را در یک زمان بخواند. به همین دلیل، توان عملیات اسکن توسط حداکثر توان یک پارتیشن محدود می شود.

برای رسیدگی به این مسائل، عملیات اسکن می‌تواند یک جدول یا فهرست ثانویه را به‌طور منطقی به بخش‌های متعدد تقسیم کند، با چندین کارگر برنامه‌ای که بخش‌ها را به صورت موازی اسکن می‌کنند. هر کارگر می تواند یک thread (در زبان های برنامه نویسی که از multithreading پشتیبانی می کنند) یا یک فرآیند سیستم عامل باشد. برای انجام یک اسکن موازی، هر کارگر درخواست اسکن خود را با پارامترهای زیر صادر می کند:

بخش - بخشی که توسط یک کارگر خاص اسکن می شود. هر کارگر باید از یک مقدار متفاوت برای بخش استفاده کند.

Totalsegments - تعداد کل بخش ها برای اسکن موازی. این مقدار باید همان تعداد کارگرانی باشد که برنامه شما از آن استفاده می کند.

نمودار زیر نشان می دهد که چگونه یک برنامه چند رشته ای یک اسکن موازی را با سه درجه موازی سازی انجام می دهد.

در این نمودار ، برنامه سه موضوع را تخم ریزی می کند و هر موضوع را به یک عدد اختصاص می دهد.. و داده ها را به موضوع اصلی برنامه برمی گرداند.

مقادیر مربوط به بخش و توتال در مورد درخواست های اسکن فردی اعمال می شود و می توانید در هر زمان از مقادیر مختلف استفاده کنید. ممکن است لازم باشد با این مقادیر و تعداد کارگرانی که استفاده می کنید آزمایش کنید تا برنامه شما به بهترین عملکرد خود برسد.

اسکن موازی با تعداد زیادی از کارگران می تواند به راحتی تمام توان تهیه شده را برای جدول یا شاخص اسکن شده مصرف کند. بهتر است در صورتی که جدول یا شاخص نیز باعث افزایش فعالیت خواندن یا نوشتن از سایر برنامه ها شود ، از چنین اسکن هایی جلوگیری کنید.

برای کنترل میزان داده های برگشتی در هر درخواست ، از پارامتر حد استفاده کنید. این می تواند به جلوگیری از موقعیت هایی که یک کارگر تمام توان تأمین شده را با هزینه همه کارگران دیگر مصرف می کند ، کمک کند.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.