سلام دوست عزیز😃👋
به مسابقه «بلهکمپ ۷ - مرحله دوم (DevOps)» خوش آمدی!
نکات مفید برای شرکت در مسابقه:
chatGPT
و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.موفق باشید و بهتون خوش بگذره 😉✌
سلیب پس از پیدا کردن سایت موردنظر در میان انبوهی از وبسایتهای خروجی مسئلهی قبل، به جزیره رسید و نقشهی گنج را پیدا کرد. پس از باز کردن نقشه، متوجه شد که نقشه به زبان عجیب و غریبی (احتمالاً عبری) نوشته شده و قادر به ترجمهی آن نیست. او که میدانست محال است بتواند نقشه را خودش ترجمه کند، به دنبال فردی با دانش عبری گشت. سلیب پس از پرسوجوهای فراوان با علی روبهرو شد که قبول کرد نقشه را برای او ترجمه کند؛ اما در ازای این کار، از او خواست تا تسک iteration فعلی او را برایش انجام دهد. سلیب هماکنون از شما درخواست انجام تسک پاکسازی و بهینه کردن ساختار ردیس شرکت علی را دارد.
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
برای انجام تسک شرکت علی نیاز به نوشتن یک اسکریپت به زبان bash
دارید و اسکریپت شما باید ۴ سطح از پاکسازی که در ادامهی مسئله با جزئیات بیشتری توضیحشان میدهیم را روی دیتای ردیس فعلیشان انجام دهد.
برای حل این تمرین نیاز به دانش کار با دستور redis-cli
را دارید که داکیومنتیشن آن را در این لینک میتوانید مطالعه کنید، همچنین جهت آشنایی با تمامی داده ساختارهای موجود در ردیس هم از این لینک کمک بگیرید.
در این سطح، نیاز است تمامی کلیدهایی از ردیس که شامل حداقل یک کاراکتر کوچک زبان انگلیسی است را به فرم بزرگ تغییر دهد. برای مثال اگر ردیس ما شامل کلیدهای زیر است:
پس از اجرای اسکریپت شما باید به شکل زیر تغییر کنند:
اسکریپت شما پس از تغییر هر کلید باید عبارتی به فرم زیر به فایل output.txt
اضافه کند.
برای مثال، پس از اجرای اسکریپت روی مثال بالا، محتوای فایل output.txt
شامل محتوای زیر باشد:
توجه داشته باشید تحت این عملیات پاکسازی مقدار هیچ کلیدی از ردیس نباید تغییر کند، یعنی پاکسازی شما نباید بههیچوجه باعث از دست رفتن دیتای موجود شود.
نکته پیرامون حفظ دیتا: ممکن است هنگامیکه شما کلید را بهصورت uppercase مینویسید، کلید جدید در ردیس وجود داشته باشد. در این صورت، تا زمانی که به کلیدی که در ردیسمان وجود نداشته باشد نرسیدهایم، عبارت DUPLICATE
را به انتهای کلید جدید اضافه میکنیم. برای مثال اگر ردیس ما شامل کلیدهای زیر باشد:
اسکریپت شما باید کلید redis-key1
را به REDIS-KEY1DUPLICATEDUPLICATE
تغییر دهد. یعنی پس از اجرای اسکریپت شما وضعیت کلیدهای ردیس مانند زیر خواهد بود:
و همچنین محتوای فایل output.txt
شامل محتوای زیر باشد:
در این سطح، نیاز است تا تمامی مقادیری از ردیس که بهصورت رشته هستند و با کاراکتر [
شروع و با کاراکتر ]
تمام میشوند را بهصورت لیست در ردیس ذخیره کند. همچنین پس از تغییر هر مقدار باید عبارتی به فرم زیر به فایل output.txt
اضافه کند.
برای مثال، اگر ردیس ما شامل مقداری مانند زیر است:
پس از اجرای اسکریپت شما باید مقدار کلید مذکور بهصورت دادهساختار لیست پیادهسازیشده در ردیس ذخیره شده باشد و بتوانیم مانند دستور زیر به محتوای آن دسترسی داشته باشیم:
برای مثال پس از اجرای اسکریپت روی مثال بالا، محتوای فایل output.txt
شامل محتوای زیر باشد:
توجه داشته باشید که اسکریپت شما باید ترتیب لیست را حفظ کند و تغییر در ترتیب مقدار مجاز نیست.
توجه داشته باشید که اگر درون مقدار کاراکتر گیومه ("
) وجود داشت، این کاراکتر باید از مقدار جدید حذف شود.
در این سطح، نیاز است تا تمامی مقادیری از ردیس که بهصورت رشته هستند و با کاراکتر (
شروع و با کاراکتر )
تمام میشوند را بهصورت ست در ردیس ذخیره کند. همچنین پس از تغییر هر مقدار باید عبارتی به فرم زیر به فایل output.txt
اضافه کند.
برای مثال اگر ردیس ما شامل مقداری مانند زیر است:
پس از اجرای اسکریپت شما باید مقدار کلید مذکور بهصورت دادهساختار ست پیادهسازیشده در ردیس ذخیره شده باشد و بتوانیم مانند دستور زیر به محتوای آن دسترسی داشته باشیم:
برای مثال، پس از اجرای اسکریپت روی مثال بالا، محتوای فایل output.txt
شامل محتوای زیر باشد:
توجه داشته باشید که اگر درون مقدار کاراکتر گیومه ("
) وجود داشت، این کاراکتر باید از مقدار جدید حذف شود.
در این سطح، نیاز است تمامی مقادیری از ردیس که بهصورت رشته هستند و با کاراکتر {
شروع و با کاراکتر }
تمام میشوند را بهصورت هش در ردیس ذخیره کند. همچنین پس از تغییر هر مقدار باید عبارتی به فرم زیر به فایل output.txt
اضافه کند.
برای مثال اگر ردیس ما شامل مقداری مانند زیر است:
پس از اجرای اسکریپت شما باید مقدار کلید مذکور بهصورت دادهساختار لیست پیادهسازیشده در ردیس ذخیره شده باشد و بتوانیم مانند دستور زیر به محتوای آن دسترسی داشته باشیم:
برای مثال پس از اجرای اسکریپت روی مثال بالا، محتوای فایل output.txt
شامل محتوای زیر باشد:
توجه داشته باشید که اسکریپت شما باید ترتیب لیست را حفظ کند و تغییر در ترتیب مقدار مجاز نیست.
توجه داشته باشید که اگر درون مقدار کاراکتر گیومه ("
) وجود داشت، این کاراکتر باید از مقدار جدید حذف شود.
برای اجرای نمونه نیاز به نصب داکر در سیستم خود دارید. نیازی نیست تا شما درون محتوای فایلهای داکر پروژه هیچ تغییری ایجاد کنید.
درون پروژه اولیه فایلهایی جهت تست اسکریپت شما تهیه شده که در ادامه نحوه کار با هرکدام را بررسی میکنیم. ابتدا اسکریپت خود را در فایل fixer.sh
پیادهسازی کنید. سپس با استفاده از دستور زیر کانتینرهای پروژه اولیه را بالا بیاورید:
پس از اتمام اجرای دستور بالا، دستور زیر را اجرا کنید. این دستور محتوای موجود در فایل redis-data.txt
را به درون ردیس در حال اجرا میریزد.
ساختار زیر به صورت "key":"value"
است:
یعنی مقدار کلید test1
برابر با 1
است.
پس از اتمام اجرای دستور بالا، باید اسکریپت خود را اجرا کنید. برای این کار از دستور زیر استفاده کنید:
حال باید اسکریپت شما اجرا شده باشد و در فایل output.txt
محتوای زیر قابل مشاهده باشد:
توجه داشته باشید که ترتیب خروجی برای سیستم داوری اهمیتی ندارد و تنها نیاز است تا تمامی موارد به هر ترتیب دلخواهی حتما در خروجی وجود داشته باشند.
پس از اتمام اجرای تست، حتما دستور زیر را اجرا کنید تا تمامی کانتینرها متوقف شوند:
"
از مقدارهایی که توسط اسکریپت شما تغییر میکنند، حذف شود.redis
وصل شوید.fixer.sh
وارد نمایید.fixer.sh
را آپلود کنید.