তবে তা কি সত্যিই গুরুত্বপূর্ণ? বিবেচনা করুন যে ইউআইকে এপিআইতে একটি নেটওয়ার্ক কল করতে হবে; এটি বেশ বড় (মিলি সেকেন্ডের আকারের ক্রম)। ডেটাবেসগুলি জিনিসগুলিকে মেমরিতে রাখার জন্য এবং খুব দ্রুত খুব দ্রুত পড়ার জন্য অনুকূলিত করা হয় (উদাঃ এসকিউএল সার্ভার লোড করে এবং র্যামে সমস্ত কিছু রাখে এবং যদি সম্ভব হয় তবে আপনার প্রায় সমস্ত নিখরচায় র্যাম গ্রহণ করে)।
যুক্তিটা
তত্ত্বগতভাবে, আপনি সঠিক। তবে এই যুক্তি সহ কয়েকটি ত্রুটি রয়েছে:
আপনি যা বলেছেন তা থেকে, আপনি যদি নিজের অ্যাপটিকে প্রকৃতপক্ষে পরীক্ষিত / প্রোফাইল করেছিলেন তবে তা অস্পষ্ট। অন্য কথায়, আপনি কি আসলেই জানেন যে অ্যাপ থেকে API এ নেটওয়ার্ক স্থানান্তর সবচেয়ে ধীর উপাদান? কারণ এটি স্বজ্ঞাত, এটি সহজেই অনুমান করা যায় যে এটি। তবে পারফরম্যান্স নিয়ে আলোচনা করার সময় আপনার কখনই ধরে নেওয়া উচিত নয়। আমার নিয়োগকর্তায়, আমি পারফরম্যান্সের নেতৃত্ব। আমি যখন প্রথম যোগদান করেছি, লোকেরা বাধা কী হতে হবে সে সম্পর্কে স্বজ্ঞানের ভিত্তিতে সিডিএন, প্রতিলিপি ইত্যাদি সম্পর্কে কথা বলতে থাকে। দেখা যাচ্ছে, আমাদের বৃহত্তম পারফরম্যান্সের সমস্যাগুলি হ'ল খারাপ ডাটাবেস কোয়েরি করছিল।
আপনি বলছেন যেহেতু ডাটাবেসগুলি ডেটা পুনরুদ্ধারে ভাল, যে প্রয়োজনীয়ভাবে ডেটাবেস শিখর কার্য সম্পাদন করে চলেছে, সর্বোত্তমভাবে ব্যবহৃত হচ্ছে, এবং এটির উন্নতি করার জন্য কিছুই করা যায় না। অন্য কথায়, ডাটাবেসগুলি দ্রুত হতে ডিজাইন করা হয়েছে, সুতরাং এটি সম্পর্কে আমার কখনই চিন্তা করা উচিত নয়। চিন্তার আরেকটি বিপজ্জনক লাইন। এটি যেমন গাড়ি বলতে বোঝানো হয় তাড়াতাড়ি চলাচল করে, তাই তেল পরিবর্তন করার দরকার নেই।
এই চিন্তাভাবনাটি একবারে একটি একক প্রক্রিয়া ধরে নেয় বা অন্যভাবে রাখে, কোনও সহানুভূতি হয় না। এটি ধরে নেওয়া হয় যে একটি অনুরোধ অন্য অনুরোধের কার্য সম্পাদন করতে পারে না। সংস্থানগুলি ভাগ করা হয়, যেমন ডিস্ক আই / ও, নেটওয়ার্ক ব্যান্ডউইথ, সংযোগ পুল, মেমরি, সিপিইউ চক্র ইত্যাদি Therefore অতএব, একটি ডেটাবেস কল একটি ভাগ করা উত্সের ব্যবহার হ্রাস করা অন্যান্য অনুরোধগুলি ধীর হওয়ার কারণ হতে পারে। আমি যখন আমার বর্তমান নিয়োগকর্তার সাথে প্রথম যোগদান করেছি, পরিচালনা বিশ্বাস করেছিল যে 3 সেকেন্ডের ডাটাবেস কোয়েরি টিউন করা সময়ের অপচয় ছিল waste 3 সেকেন্ড এত কম, কেন এতে সময় নষ্ট করবেন? আমরা কি সিডিএন বা সংক্ষেপণ বা অন্য কিছু দিয়ে আরও ভাল থাকব না? তবে আমি যদি 1 সেকেন্ডে 3 সেকেন্ডের ক্যোয়ারী চালাতে পারি তবে একটি সূচক যুক্ত করে বলুন, এটি 2/3 কম ব্লকিং, কোনও থ্রেড দখল করতে 2/3 কম সময় ব্যয় করেছে এবং আরও গুরুত্বপূর্ণ, ডিস্ক থেকে কম ডেটা পড়েছে,
তত্ত্বটি
একটি প্রচলিত ধারণা রয়েছে যে সফ্টওয়্যার কর্মক্ষমতা কেবল গতি সম্পর্কে ।
খাঁটি গতির দৃষ্টিকোণ থেকে আপনি ঠিক বলেছেন। একটি সিস্টেম কেবল তার ধীর উপাদান হিসাবে তত দ্রুত। যদি আপনি নিজের কোড প্রোফাইল করেন এবং খুঁজে পেয়েছেন যে ইন্টারনেটটি সবচেয়ে ধীর উপাদান, তবে বাকি সমস্ত কিছুই স্পষ্টতই ধীর অংশ নয়।
যাইহোক, উপরোক্ত হিসাবে, আমি আশা করি আপনি কীভাবে রিসোর্স কনটেন্ট, ইনডেক্সিং এর অভাব, খারাপ লিখিত কোড ইত্যাদি পারফরম্যান্সে আশ্চর্যজনক পার্থক্য তৈরি করতে পারেন তা দেখতে পাবেন।
অনুমান
গত এক জিনিস. আপনি উল্লেখ করেছেন যে অ্যাপ্লিকেশন থেকে এপিআইতে কোনও নেটওয়ার্ক কলের তুলনায় একটি ডাটাবেস কলটি সস্তা হওয়া উচিত। তবে আপনি আরও উল্লেখ করেছেন যে অ্যাপ এবং এপিআই সার্ভারগুলি একই ল্যানে রয়েছে। অতএব, উভয়ই কি নেটওয়ার্ক কল হিসাবে তুলনীয় নয়? অন্য কথায়, আপনি কেন ধরে নিচ্ছেন যে এপিআই ট্রান্সফার হ'ল ডেটাবেস ট্রান্সফারের চেয়ে ধীরে ধীরে কমার অর্ডার যখন তাদের উভয়েরই একই রকম ব্যান্ডউইথ থাকে? অবশ্যই প্রোটোকল এবং ডেটা স্ট্রাকচারগুলি পৃথক, আমি এটি পেয়েছি তবে আমি এই ধারণাটি নিয়ে বিতর্ক করি যে সেগুলি ভিন্ন মাত্রার অর্ডার।
যেখানে এটি মুরকি পায়
এই পুরো প্রশ্নটি "একাধিক" বনাম "একক" ডাটাবেস কল সম্পর্কে। তবে এটি স্পষ্ট নয় যে কয়টি একাধিক। উপরে আমি যা বলেছিলাম তার কারণে, সাধারণ নিয়ম হিসাবে, আমি প্রয়োজনীয় হিসাবে কম কয়েকটি ডাটাবেস কল করার পরামর্শ দিই। তবে এটি কেবল একটি আঙ্গুলের নিয়ম।
এখানে কেন:
- ডেটাবেসগুলি ডেটা পড়তে দুর্দান্ত। এগুলি স্টোরেজ ইঞ্জিন eng যাইহোক, আপনার ব্যবসার যুক্তি আপনার প্রয়োগে বাস করে lives আপনি যদি এমন কোনও নিয়ম তৈরি করেন যে প্রতিটি API কল ঠিক এক ডাটাবেস কলটিতে ফলাফল দেয় তবে আপনার ব্যবসায়িক যুক্তি ডাটাবেসে শেষ হতে পারে। হতে পারে যে ঠিক আছে। প্রচুর সিস্টেম এটি করে। কিন্তু কিছু না। এটি নমনীয়তা সম্পর্কে।
- কখনও কখনও ভাল decoupling অর্জন করতে, আপনি 2 ডাটাবেস কল পৃথক করতে চান। উদাহরণস্বরূপ, সম্ভবত প্রতিটি এইচটিটিপি অনুরোধ জেনেরিক সুরক্ষা ফিল্টারের মাধ্যমে প্রবর্তিত যা ডিবি থেকে যাচাই করে যে ব্যবহারকারীর সঠিক অ্যাক্সেসের অধিকার রয়েছে। যদি তারা তা করে থাকে তবে সেই URL এর জন্য উপযুক্ত ফাংশনটি সম্পাদন করতে এগিয়ে যান। এই ফাংশনটি ডাটাবেসের সাথে যোগাযোগ করতে পারে।
- একটি লুপে ডাটাবেস কল করা। একারণে আমি জিজ্ঞাসা করেছি যে কতগুলি একাধিক। উপরের উদাহরণে, আপনার কাছে 2 টি ডাটাবেস কল থাকবে। 2 ঠিক আছে। 3 ভাল হতে পারে। এন ভাল না। আপনি যদি লুপটিতে ডাটাবেসকে কল করেন তবে আপনি এখন পারফরম্যান্স লিনিয়ার তৈরি করেছেন যার অর্থ লুপের ইনপুটটিতে আরও বেশি সময় লাগবে। সুতরাং স্পষ্টতই বলা যায় যে, API নেটওয়ার্ক সময়টি ধীরতম সম্পূর্ণরূপে আপনার 1% ট্র্যাফিকের মতো অনাবৃতকে পর্যবেক্ষণ করে না-এমনটি এখনও আবিষ্কার হয়নি এমন একটি লুপের কারণে যে ডাটাবেসটিকে 10,000 বার কল করে।
- কখনও কখনও এমন কিছু জিনিস রয়েছে যেমন কিছু জটিল গণনার মতো আপনার অ্যাপ্লিকেশনটি আরও ভাল। আপনাকে ডাটাবেস থেকে কিছু তথ্য পড়তে হবে, কিছু গণনা করতে হবে, তারপরে ফলাফলের উপর ভিত্তি করে, দ্বিতীয় ডাটাবেস কলটিতে প্যারামিটারটি পাস করতে হবে (সম্ভবত কিছু ফলাফল লিখতে হবে)। যদি আপনি কেবলমাত্র ডাটাবেসগুলিকে একবার কল করার প্রয়োজনে সেগুলিকে একক কল (সঞ্চিত পদ্ধতির মতো) সাথে সংযুক্ত করে থাকেন তবে আপনি নিজেকে এমন কোনও কিছুর জন্য ডাটাবেস ব্যবহার করতে বাধ্য করেছেন যা অ্যাপ্লিকেশন সার্ভারের চেয়ে ভাল হতে পারে।
- লোড ব্যালেন্সিং: আপনার কাছে 1 টি ডাটাবেস (সম্ভবত) এবং একাধিক লোড ভারসাম্যযুক্ত অ্যাপ্লিকেশন সার্ভার রয়েছে। অতএব, অ্যাপ্লিকেশন যত বেশি কাজ করে এবং ডাটাবেস তত কম করে, স্কেল করা সহজতর কারণ সেটআপ ডাটাবেসের প্রতিরূপের চেয়ে অ্যাপ্লিকেশন সার্ভার যুক্ত করা সহজ easier পূর্বের বুলেট পয়েন্টের উপর ভিত্তি করে, এসকিউএল ক্যোয়ারী চালানোর জন্য এটি বোধগম্য হতে পারে, তারপরে অ্যাপ্লিকেশনটিতে সমস্ত গণনা করুন যা একাধিক সার্ভারে বিতরণ করা হয়েছে, এবং তারপরে ফলাফলটি লেখার পরে লিখুন। এটি আরও ভাল থ্রুপুট দিতে পারে (সামগ্রিক লেনদেনের সময় একই থাকলেও)।
টি এল; ডিআর
টিএলডিআর: ল্যানের মাধ্যমে আমরা ইতিমধ্যে কোনও নেটওয়ার্ক কল করার সময় একাধিক ডাটাবেস কলগুলি নিয়ে চিন্তিত হওয়া কি সত্যই গুরুত্বপূর্ণ? যদি তাই হয় তবে কেন?
হ্যাঁ, তবে কেবল একটি নির্দিষ্ট পরিমাণে। ব্যবহারিক ব্যবহারের সময় আপনার ডাটাবেস কলগুলির সংখ্যা হ্রাস করার চেষ্টা করা উচিত তবে কলগুলি একত্রিত করবেন না যা কেবল একে অপরের সাথে সংযুক্ত করার জন্য কিছু নয় of এছাড়াও, যে কোনও মূল্যে ডাটাবেসটিকে একটি লুপে কল করা এড়ানো উচিত।