নিম্নলিখিত অংশটি হচ্ছে ১ম অধ্যায়ের একটি বর্ণনা। মাত্রায় ডাটাবেস কর্মক্ষমতা (একটি খোলা অ্যাক্সেস বই যা বিনামূল্যে পাওয়া যায়)। কিছু অত্যন্ত বাস্তব ডাটাবেস পারফরম্যান্স চ্যালেঞ্জের সাথে জোহানের উচ্চতর ফিকশনাল আন্দোলনগুলি অনুসরণ করুন. আপনি হাসতে থাকবেন. আপনি কাঁদতে থাকবেন. আপনি চিন্তা করবেন যে আমরা এই "চাইসি গল্প" কীভাবে একটি গভীরভাবে প্রযুক্তিগত বইতে কাজ করেছি। মাত্রায় ডাটাবেস কর্মক্ষমতা "হাইব্রিড ক্লাউড", "সার্ভারহীন" এবং "Edge প্রথমে" এর মত চমৎকার বাক্স শব্দগুলির দ্বারা প্রভাবিত, জোয়া সহজেই একটি নতুন কোম্পানির সাথে যোগ দেন এবং তাদের প্রযুক্তির স্ট্যাকের সাথে খুঁজে পেতে শুরু করেন। তার প্রথম প্রকল্প সম্প্রতি তাদের অভ্যন্তরীণ একটি ডাটাবেস সিস্টেমের বাস্তবায়ন থেকে একটি স্থানান্তর শুরু করে, যা গ্রাহক সংখ্যা হিসাবে একই গতিতে পরিমাপ না করে, শিল্পের স্ট্যান্ডার্ড ডাটাবেস ম্যানেজমেন্ট সমাধানগুলির মধ্যে একটি। বিশ্বজুড়ে এসকিউএল জ্ঞান রয়েছে। অ্যাসিড কয়েকটি নতুন ডেটা সুরক্ষা আইনগুলির কারণে, যা বর্তমানে প্রতিবছর প্রদর্শিত হয়, কোম্পানির কাউন্সিল সিদ্ধান্ত নিয়েছে যে তারা তাদের নিজস্ব ডেটা সেন্টার বজায় রাখবে, জনপ্রিয় ক্লাউড সরবরাহকারীদের একটি ব্যবহার করার পরিবর্তে সংবেদনশীল তথ্য সংরক্ষণ করার জন্য। খুব উচ্চ পর্যায়ে, কোম্পানির প্রধান পণ্য শুধুমাত্র দুটি স্তর গঠিত: ফ্রন্টেন্ড, ব্যবহারকারীদের জন্য প্রবেশ পয়েন্ট, যা প্রকৃতপক্ষে তাদের নিজস্ব ব্রাউজারে পরিচালিত হয় এবং তথ্য বিনিময় এবং স্থায়ী করার জন্য সিস্টেমের বাকি অংশের সাথে যোগাযোগ করে। সবকিছু-এলস, সাধারণত "ব্যাকেন্ড" হিসাবে পরিচিত, কিন্তু আসলে লোড ভারসামক, সনাক্তকরণ, অনুমোদন, একাধিক ক্যাশ লেয়ার, ডাটাবেস, ব্যাকআপ, ইত্যাদি অন্তর্ভুক্ত। জোহানের প্রথম উদাহরণীয় কাজটি ছিল ডাটাবেস থেকে বিভিন্ন পরিসংখ্যান সংগ্রহ এবং সংক্ষিপ্ত করার জন্য একটি খুব সহজ পরিষেবা বাস্তবায়ন করা, এবং সেই পরিষেবাটি পুরো ইকো সিস্টেমের সাথে ইন্টিগ্রেশন করা, যাতে এটি বাস্তব সময়ে ডাটাবেস থেকে তথ্য সংগ্রহ করে এবং ডেভওপস টিমগুলি বাস্তবে পরিসংখ্যানগুলি পরীক্ষা করতে পারে। পরিচালকদের প্রভাবিত করার জন্য এবং তাদের নিশ্চিত করার জন্য যে Joan নিয়োগ করা এই চতুর্থাংশে তাদের সর্বোত্তম সিদ্ধান্ত ছিল, Joan প্রথম দিনে একটি ধারণা প্রমাণ বাস্তবায়ন সরবরাহ করার সিদ্ধান্ত নিয়েছে! কোম্পানির অপ্রকাশিত নীতিটি Rust এ সফটওয়্যার লিখতে ছিল, তাই তিনি একটি সংক্ষিপ্ত crates.io অনুসন্ধান থেকে তাদের ডাটাবেসের জন্য প্রথম ড্রাইভার ধরা পড়েছিলেন এবং তার স্ব-প্রকাশিত হ্যাকথোনে বসলেন। দিনটি সত্যিই নরম হয়ে গিয়েছিল, রাস্টের এর্গনোমাইজমায় কেন্দ্রীভূত পরিবেশগত সিস্টেমটি একটি অসাধারণ ডেভেলপার অভিজ্ঞতা প্রদান করে। কিন্তু তারপর জোহান একটি বাস্তব সিস্টেমে তার প্রথম ধোঁয়া পরীক্ষা চালিয়েছিল। অবিশ্বাস হতাশা এবং অসহায়তায় পরিণত হয়েছিল যখন তিনি বুঝতে পেরেছিলেন যে প্রতি তৃতীয় অনুরোধ (প্রতিমাত্রায়) একটি ত্রুটিতে শেষ হয়েছিল, যদিও পুরো ডাটাবেস গ্রুপটি একটি সুস্থ, অপারেশনযোগ্য অবস্থায় রিপোর্ট করা হয়েছিল। দুর্ভাগ্যবশত, ড্রাইভার জোয়া তাড়াহুড়ো করে তার কাজের ভিত্তিতে বেছে নিয়েছিলেন, যদিও ওপেন সোর্স নিজেই, পূর্বে সংগৃহীত, ঐতিহ্যবাহী সি কোডের উপর শুধুমাত্র একটি ছোট প্যাকেজ ছিল, কোনও উৎস পাওয়া যায়নি। এবং তিনি একটি শিক্ষিত অনুমান করেছিলেন যে . কোম্পানির দ্বারা ব্যবহৃত ডাটাবেসে, কীগুলি পরবর্তী রুট অনুরোধগুলিতে উপযুক্ত নোডগুলিতে হ্যাশ করা হয়. যদি একটি হ্যাশ মানটি ভুলভাবে গণনা করা হয়, তাহলে একটি অনুরোধ ভুল নোডে পাঠানো যেতে পারে যা তা অস্বীকার করতে পারে এবং পরিবর্তে একটি ত্রুটি ফেরত দিতে পারে. Wireshark এর বাগ হ্যাশিং কী বাস্তবায়নে থাকতে হবে অনুপস্থিত সোর্স কোডের কারণে দাবিটি যাচাই করতে অক্ষম, জোহান একটি সহজ পথের উপর সিদ্ধান্ত নিয়েছিলেন - মূলত নির্বাচিত ড্রাইভারটি ছেড়ে এবং আনুষ্ঠানিকভাবে সমর্থিত, খোলা সোর্স ড্রাইভারগুলির মধ্যে একটিতে সমাধানটি পুনরায় বাস্তবায়ন করে যা ডাটাবেস সরবরাহকারী দ্বারা সমর্থিত হয়, একটি শক্তিশালী ব্যবহারকারীর ভিত্তি এবং নিয়মিত আপডেট করা হয়। জোহানের পড়াশোনার ডায়েরি, অংশ ১ প্রাথমিক শিক্ষাগুলি অন্তর্ভুক্ত: একটি ড্রাইভার সাবধানে নির্বাচন করুন. এটি আপনার কোডের কর্মক্ষমতা, শক্তিশালীতা এবং নির্ভরযোগ্যতার মূল বিষয়। ড্রাইভারদেরও বাগ আছে, এবং তাদের এড়ানো অসম্ভব। যদি ভাল কারণ না থাকে তবে আনুষ্ঠানিকভাবে সমর্থিত ড্রাইভারকে পছন্দ করুন (যদি এটি থাকে); ওপেন সোর্স ড্রাইভারগুলির সুবিধা রয়েছে: তারা কেবলমাত্র সম্প্রদায়ের দ্বারা যাচাই করা হয় না, তবে তাদের কোডের গভীর পরিদর্শন এবং এমনকি ড্রাইভার কোডটি সংশোধন করতে পারে যাতে ডাবগিংয়ের জন্য আরও ধারণা পাওয়া যায়; একটি সুবিধাজনক রিলিজ সময়সূচী সঙ্গে ড্রাইভার উপর নির্ভর করা ভাল কারণ তারা একটি যুক্তিসঙ্গত সময়ের মধ্যে বাগ সংশোধন (সুরক্ষা দুর্বলতা সহ) পেতে আরো সম্ভব। 3. Wireshark নেটওয়ার্ক প্যাকেটগুলি ব্যাখ্যা করার জন্য একটি মহান উন্মুক্ত সোর্স সরঞ্জাম; আপনি যদি আপনার প্রোগ্রামের হুডের নিচে চোখ রাখতে চান তবে এটি চেষ্টা করুন। প্রারম্ভিক কাজটি অবশেষে সফলভাবে সম্পন্ন হয়েছিল, যা জোহানকে তার প্রথম প্রকৃত কাজটি পেতে প্রস্তুত করে। টুইনিং প্রাথমিক কাজটিতে কাজ করার অভিজ্ঞতার সাথে সশস্ত্র, জোয়া তার নতুন কাজটি কীভাবে পরিকল্পনা করতে শুরু করেছিলেন: একটি ভুল আচরণের অ্যাপ্লিকেশন. অ্যাপ্লিকেশনগুলির মধ্যে একটি বিখ্যাতভাবে পুরো সিস্টেমের জন্য স্থিতিশীলতার সমস্যাগুলি সৃষ্টি করে, যখন কোনও সমস্যা দেখা দেয় তখন অন্যান্য কাজের লোডগুলিকে বিঘ্নিত করে। এই নির্দিষ্ট পরিষেবাটি পুরনো সিস্টেম থেকে ব্যাকআপ করা ডেটা নতুন ডাটাবেসে ইনজেকশন করার জন্য দায়ী ছিল. কারণ কোম্পানিটি খুব তাড়াহুড়ো ছিল না, অ্যাপ্লিকেশনটি কম অগ্রাধিকারের সাথে লিখিত হয়েছিল এবং ব্যবহারকারীর কাজের লোডগুলির সাথে হস্তক্ষেপ না করে। দুর্ভাগ্যবশত, প্রতি কয়েক দিনে একবার কোনও কিছু একটি অ্যানোমালিয়া সৃষ্টি করেছিল। স্বাভাবিকভাবে শান্তিপূর্ণ অ্যাপ্লিকেশনটি তার নিজস্ব ডিজাইনের উপর একটি পরিষেবা অস্বীকার আক্রমণ চালানোর চেষ্টা করছে বলে মনে হয়, অনুরোধগুলির সাথে এটি বর্ষণ করে, যতক্ষণ না ব্যাকআপ এন্ড ইকোসিস্টেমের অন্যান্য যখন জোহান একটি গ্রাফানা ড্যাশবোর্ডে উপস্থাপিত মিটারগুলি দেখেছিলেন, যা স্পষ্টভাবে প্রমাণ করেছিল যে এই অ্যাপ্লিকেশনের দ্বারা উত্পাদিত অনুরোধগুলির হার অস্বাভাবিকতার সময় ঘুরতে শুরু করে, তখন তিনি চিন্তিত হয়েছিলেন কিভাবে পৃথিবীতে এই কাজের লোডটি এমনভাবে আচরণ করতে পারে। যেহেতু সহযোগিতা একটি অ্যাপ্লিকেশন কোচের সাথে ইনবোর্ডিং সেশনগুলির সময় কোম্পানির "সচেতনতা এবং সাংস্কৃতিক ভিত্তি" হিসাবে ব্যাপকভাবে বিজ্ঞাপন করা হয়েছিল, তিনি সিদ্ধান্ত নিয়েছিলেন যে তার সহকর্মী টনি সঙ্গে বিষয়টি আলোচনা করা ভাল। “এই পরিষেবাটি কোনও নতুন অনুরোধ পাঠায় না যখন তাদের মধ্যে ১০০টি ইতিমধ্যে উড়তে যাচ্ছে। “হ্যাঁ, ধন্যবাদ টনি, আপনি একটি প্রিয় - সেরা কখনো কখনো! “, তিনি শেষ করেন এবং কোডটি সংশোধন করার জন্য ফিরে আসেন। রাবার ডাক যার ফলে মূল কারণটি খুঁজে পাওয়া যায় তা বেশ সহজ ছিল: অনুরোধটি প্রকৃতপক্ষে *পুনরুদ্ধার করা হয়নি* একটি টাইমআউট ত্রুটি, কারণ ডাটাবেস সার্ভার কখনোই এই ধরনের একটি প্রতিক্রিয়া প্রেরণ করেনি. অনুরোধটি ড্রাইভারের দ্বারা টাইমআউট হিসাবে যোগ্যতা দেয়া হয়েছিল, এবং প্রত্যাহার করা হয়েছিল. কিন্তু একমাত্র সত্য যে ড্রাইভার একটি নির্দিষ্ট অনুরোধের জন্য একটি প্রতিক্রিয়া অপেক্ষা করে না মানে এই নয় যে ডাটাবেস এটি প্রক্রিয়াকরণ করে! এই জ্ঞানের সাথে, এটি কল্পনা করা সহজ যে একবার 100 অনুরোধ ক্লায়েন্ট পাশে সময় শেষ হলে, অ্যাপ্লিকেশন ভুলভাবে ভাবতে পারে যে তারা এখন আর চলছে না, এবং আনন্দে 100 আরও অনুরোধগুলি ডেটাবেসটিতে প্রেরণ করে, ফ্লাইট অনুরোধগুলির মোট সংখ্যা (অর্থাৎ, সমন্বয়) 200 পর্যন্ত বৃদ্ধি করে। জোহানের পড়াশোনার ডায়েরি, দ্বিতীয় অংশ পড়াশোনা চলছে: ক্লায়েন্ট পক্ষের টাইমআউট প্রোগ্রামারদের জন্য সুবিধাজনক, কিন্তু তারা সার্ভার পক্ষের টাইমআউটগুলির সাথে খারাপভাবে ইন্টারেক্ট করতে পারে। টাইমআউটগুলি ক্লায়েন্ট পক্ষের টাইমআউটগুলি সার্ভার পক্ষের টাইমআউটগুলির চেয়ে প্রায় দ্বিগুণ দীর্ঘ করুন, যদি আপনি অন্যথায় করার অত্যন্ত ভাল কারণ না থাকে তবে কিছু ড্রাইভার একটি সতর্কতা প্রদান করতে সক্ষম হতে পারে যদি তারা সার্ভার পক্ষের টাইমআউটের চেয়ে কম সনাক্ত করে, অথবা এমনকি সার্ভার পক্ষের টাইমআউটটি সংশোধন করতে পারে, তবে সাধারণত এটি নির্দিষ্ট অপ্রত্যাশিত শর্তাবলী অধীনে নির্দিষ্টভাবে স্থিতিশীল সমন্বয়ের সাথে কাজগুলি প্রকৃতপক্ষে পিক্সের কারণ হতে পারে. লগ এবং ড্যাশবোর্ডগুলি পরীক্ষা করা এই ধরনের ক্ষেত্রে সহায়ক, তাই নিশ্চিত করুন যে পর্যবেক্ষণযোগ্যতা সরঞ্জামগুলি ডাটাবেস ক্লাস্টার এবং সমস্ত ক্লায়েন্ট অ্যাপ্লিকেশনগুলির জন্য উভয়ই উপলব্ধ। ক্লায়েন্ট পক্ষের টাইমআউটগুলি যথাযথভাবে সংশোধন করে, অ্যাপ্লিকেশনটি অনেক কম সময় এবং একটি ছোট পরিমাণে নিঃশব্দ করে, কিন্তু এটি এখনও বিতরণ করা সিস্টেমে একটি নিখুঁত নাগরিক ছিল না। এটি মাঝে মাঝে মাঝে একটি শিকারী ডাটাবেস নোড পছন্দ করে এবং তাকে অতিরিক্ত অনুরোধগুলির সাথে বিরক্ত করে থাকে, যখন সাতটি অন্যান্য নোডগুলি উল্লেখযোগ্যভাবে কম লোড করা হয় এবং কাজের লোড পরিচালনা করতে সাহায্য করতে পারে। অন্যান্য সময়ে, তার সমন্বয়টি কনফিগারেশনের দ্বারা প্রত্যাশিতের চেয়ে ঠিক 200% বৃহত্তর হিসাবে রিপোর্ট করা হয়েছিল ফরম্যাট এবং যথাযথভাবে আপডেট রাখা, জোয়াও সেই ব্যথাগুলি হ্রাস করতে সাহায্য করে। এমডিবুক প্রথম সমস্যাটি ছিল শুধুমাত্র একটি ভুল কনফিগারেশন অ-ডিফল্ট লোড ভারসাম্য নীতি, যা সমস্ত উপলব্ধ ব্যাকআপগুলির মধ্যে "কিন্তু কম লোড" ডাটাবেস নোটটি নির্বাচন করার জন্য অত্যন্ত কঠিন চেষ্টা করেছিল, যার ভিত্তিতে হেউরিস্টিক্স এবং পরিসংখ্যানটি মাঝে মাঝে মধ্যে ডাটাবেস নিজেই আপডেট করে। দুর্ভাগ্যবশত, এই নীতিটি "সেরা প্রচেষ্টা" ছিল, এবং সত্যিকারের উপর নির্ভর করে যে ডাটাবেস থেকে আসা পরিসংখ্যানগুলি সবসময় বৈধ ছিল - কিন্তু একটি চাপিত ডাটাবেস নোটটি এতটাই অতিরিক্ত হতে পারে যে এটি সময়মত আপডেট করা পরিসংখ্যানগুলি ফেরত পাঠায় না! যা ড্রাইভারকে ভুয়াভাবে বিশ্বাস করে যে এই নির্দিষ্ট সার্ভারটি আসলে ব্যস্ত ছিল না। দ্বিতীয় সমস্যা (সময়গত দ্বিগুণীকরণ) অন্য একটি ভুল কনফিগারেশনের কারণে হয়েছিল: একটি অতিরিক্ত পরিসংখ্যানগত পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় পুনরায় Whew, কিছুই একটি মানের ডাবগিং সেশন হিসাবে একই সময়ে এন্ডোরফিন ত্রুটি এবং ডোপামিন হ্যাট দেয় যা আশ্চর্যজনক সাফল্যের সাথে শেষ করে (শুধুমাত্র একটি গভীরভাবে প্রযুক্তিগত বইতে একটি চর্বি গল্প লিখতে ব্যতীত, অবশ্যই)। শেষ যদি আপনি এতদূর এগিয়ে গেছেন এবং মধুর ডাটাবেস কর্মক্ষমতা গল্পগুলি যথেষ্ট না পেতে পারেন, তাহলে দেখুন দরিদ্র পুরাতন প্যাট্রিকের কী ঘটেছিল। “এবং যদি আপনি এই হুমকি অনুভূতি মূল্যায়ন করেন, দেখুন পিয়টারের . Editor’s note: ডাটাবেস কর্মক্ষমতার একটি গল্প: প্যাট্রিকের দুর্ভাগ্যবশত সবুজ ফিডোরাস ইঞ্জিনিয়ারিং ব্লগ পোস্ট লিখতে নতুন বই