মাইএসকিউএল টেবিলগুলি শাড়িংয়ের জন্য সর্বোত্তম পদ্ধতির এটি না করা যদি না এটি সম্পূর্ণরূপে অনিবার্য না হয়।
আপনি যখন কোনও অ্যাপ্লিকেশন লিখছেন, আপনি সাধারণত এমনভাবে করতে চান যা বেগ, বিকাশকের গতি সর্বাধিক করে তোলে। আপনি কেবল প্রয়োজন হলে বিলম্বের জন্য (উত্তর প্রস্তুত হওয়া পর্যন্ত সময়) বা থ্রুপুট (প্রতি ইউনিট উত্তরগুলির সংখ্যা) এর জন্য অনুকূলিত হন।
আপনি পার্টিশন করেন এবং তারপরে বিভিন্ন হোস্টগুলিতে পার্টিশনগুলি নির্ধারণ করে (= শারড) কেবল তখনই যখন এই সমস্ত পার্টিশনের যোগফল আর একক ডাটাবেস সার্ভারের ক্ষেত্রে ফিট করে না - কারণ এটি হয় লেখেন বা পড়েছেন।
রাইটিং কেসটি হ'ল ক) লেখার ফ্রিকোয়েন্সি এই সার্ভারগুলিকে স্থায়ীভাবে ডিস্কগুলি ওভারলোড করে দিচ্ছে বা খ) অনেকগুলি রাইটিং চলছে যাতে এই প্রতিলিপিটি স্থায়ীভাবে স্থায়ীভাবে চলে যায়।
শারডিংয়ের জন্য পঠনের ক্ষেত্রে ডেটের আকারটি এত বড় হয় যে এর কার্যকরী সেটটি আর মেমরির সাথে খাপ খায় না এবং বেশিরভাগ সময় স্মৃতি থেকে পরিবেশন করার পরিবর্তে ডেটা ডিস্কে আঘাত শুরু করে।
আপনি শুধুমাত্র যখন আছে ঠিকরা আপনার এটা করতে।
আপনি যে মুহুর্তটি তীক্ষ্ণভাবে দেখবেন, আপনি তার জন্য একাধিক উপায়ে অর্থ প্রদান করছেন:
আপনার এসকিউএল এর বেশিরভাগটি আর ঘোষণামূলক নয়।
সাধারণত, এসকিউএল-তে আপনি কোন ডাটাবেসটি ডেটাবেসকে বলছেন এবং সেই স্পেসিফিকেশনটিকে ডেটা অ্যাক্সেস প্রোগ্রামে পরিণত করার জন্য এটি অপটিমাইজারের কাছে রেখে যান। এটি একটি ভাল জিনিস, কারণ এটি নমনীয় এবং কারণ এই ডেটা অ্যাক্সেস প্রোগ্রামগুলি লিখে বিরক্তিকর কাজ যা বেগকে ক্ষতি করে।
তীক্ষ্ণ পরিবেশের সাথে আপনি সম্ভবত নোড বি এর ডেটার বিপরীতে নোড এ এর একটি টেবিলে যোগ দিচ্ছেন, বা আপনার নোডের চেয়ে বড় টেবিল নোড এ এবং বিতে রয়েছে এবং নোড বি এবং সিতে থাকা ডেটার বিপরীতে এটি থেকে ডেটা যুক্ত করছেন সমাধান করার জন্য আপনি ম্যানুয়ালি অ্যাপ্লিকেশন সাইড হ্যাশ-ভিত্তিক যোগদানের রেজোলিউশনগুলি লিখতে শুরু করছেন (বা আপনি মাইএসকিউএল ক্লাস্টারটি পুনরায় উদ্ভাবন করছেন), যার অর্থ আপনি প্রচুর এসকিউএল দিয়ে শেষ করেন যা আর ঘোষণাযোগ্য নয়, তবে পদ্ধতিগত উপায়ে এসকিউএল কার্যকারিতা প্রকাশ করছেন (যেমন আপনি লুপগুলিতে নির্বাচন নির্বাচন করুন)।
আপনি প্রচুর নেটওয়ার্কে বিলম্ব করছেন।
সাধারণত, একটি এসকিউএল কোয়েরি স্থানীয়ভাবে সমাধান করা যেতে পারে এবং অপ্টিমাইজার স্থানীয় ডিস্ক অ্যাক্সেসের সাথে সম্পর্কিত ব্যয় সম্পর্কে জানে এবং কোয়েরিটি এমনভাবে সমাধান করে যাতে তার জন্য ব্যয়গুলি হ্রাস করে।
তীক্ষ্ণ পরিবেশে, প্রশ্নগুলি হয় একাধিক নোডে নেটওয়ার্ক জুড়ে মূল-মান অ্যাক্সেসগুলি চালিয়ে সমাধান করা হয় (আশা করি বাচানো কী অ্যাক্সেস সহ এবং রাউন্ড ট্রিপে স্বতন্ত্র কী দৃষ্টিকোণ নয়) বা WHERE
ধারাটির অংশগুলি নোডের দিকে এগিয়ে নিয়ে যেতে পারে যেখানে তারা পারে প্রয়োগ করা হবে (যাকে 'কন্ডিশন পুশডাউন' বলা হয়) বা উভয়ই।
তবে সর্বোত্তম ক্ষেত্রেও এর মধ্যে আরও অনেকগুলি নেটওয়ার্ক রাউন্ড ট্রিপ জড়িত যা একটি স্থানীয় পরিস্থিতি এবং এটি আরও জটিল। বিশেষত যেহেতু মাইএসকিউএল অপ্টিমাইজার নেটওয়ার্ক বিলম্বিতা সম্পর্কে মোটেই কিছুই জানে না (ঠিক আছে, মাইএসকিউএল ক্লাস্টারটি আস্তে আস্তে আরও ভাল হয়ে উঠছে, তবে ক্লাস্টারের বাইরে ভ্যানিলা মাইএসকিউএল এর জন্য এখনও সত্য)।
আপনি এসকিউএল এর প্রচুর অভিব্যক্তি শক্তি হারাচ্ছেন।
ঠিক আছে, এটি সম্ভবত কম গুরুত্বপূর্ণ, তবে বিদেশী কী সীমাবদ্ধতা এবং ডেটা অখণ্ডতার জন্য অন্যান্য এসকিউএল প্রক্রিয়াগুলি একাধিক শারড প্রসারিত করতে অক্ষম।
মাইএসকিউএলের এমন কোনও এপিআই নেই যা কার্যক্রমে থাকা অ্যাসিনক্রোনাস অনুসন্ধানগুলিকে অনুমতি দেয়।
যখন একই ধরণের ডেটা একাধিক নোডে থাকে (উদাহরণস্বরূপ নোডস এ, বি এবং সি এর ব্যবহারকারী ডেটা), অনুভূমিক প্রশ্নগুলি প্রায়শই এই সমস্ত নোডের বিরুদ্ধে সমাধান করা প্রয়োজন ("90 দিনের জন্য লগইন করা হয়নি এমন সমস্ত ব্যবহারকারী অ্যাকাউন্টগুলি সন্ধান করুন" অথবা আরও"). ডেটা অ্যাক্সেসের সময় নোডের সংখ্যার সাথে সামঞ্জস্যভাবে বৃদ্ধি পায়, যদি না একাধিক নোডকে সমান্তরালভাবে জিজ্ঞাসা করা যায় এবং ফলাফলগুলি যখন আসবে তখন এটি সংহত হয় ("মানচিত্র-হ্রাস")।
এর পূর্বশর্ত হ'ল একটি অ্যাসিনক্রোনাস যোগাযোগ API, যা মাইএসকিউএলের জন্য ভাল কার্যকারী আকারে বিদ্যমান নয়। বিকল্পটি শিশু প্রসেসগুলিতে প্রচুর কাঁটাচামচ এবং সংযোগ, যা একটি seasonতু পাসে স্তন্যপান বিশ্বের ভিজিট করে।
একবার আপনি শারডিং শুরু করলে ডেটা স্ট্রাকচার এবং নেটওয়ার্ক টপোলজি আপনার অ্যাপ্লিকেশনটির পারফরম্যান্স পয়েন্ট হিসাবে দৃশ্যমান হয়। যুক্তিসঙ্গতভাবে ভাল সম্পাদন করার জন্য, আপনার অ্যাপ্লিকেশনটির এই বিষয়গুলি সম্পর্কে সচেতন হওয়া দরকার এবং এর অর্থ হল যে কেবলমাত্র অ্যাপ্লিকেশন স্তরের শারডিং অর্থবোধ করে।
আপনি যদি অটো-শার্ক করতে চান (উদাহরণস্বরূপ প্রাথমিক কীগুলি নিয়ে কোন সারিটি কোন নোডে চলে যায় তা নির্ধারণ করে) বা আপনি যদি কোনও ম্যানুয়াল উপায়ে কার্যকরীভাবে বিভক্ত করতে চান (তবে এক্সওয়াইজ ব্যবহারকারী গল্পের সাথে সম্পর্কিত টেবিলগুলি এখানে যেতে চান) তবে প্রশ্নটি আরও মাস্টার, যখন অ্যাবসি এবং ডিএফ সম্পর্কিত টেবিলগুলি সেই মাস্টারে যায় ")।
ফাংশনাল শর্ডিংয়ের সুবিধা রয়েছে যে, যদি এটি সঠিকভাবে করা হয় তবে বেশিরভাগ সময় এটি বেশিরভাগ বিকাশকারীদের কাছে অদৃশ্য থাকে কারণ তাদের ব্যবহারকারীর গল্প সম্পর্কিত সমস্ত সারণী স্থানীয়ভাবে উপলব্ধ হবে। এটি তাদের যথাসম্ভব ঘোষিত এসকিউএল থেকে এখনও লাভবান হতে দেয় এবং কম নেটওয়ার্কের বিলম্বিতাও পোহাতে পারে কারণ ক্রস-নেটওয়ার্ক স্থানান্তর সংখ্যা ন্যূনতম রাখা হয়।
ফাংশনাল শর্ডিংয়ের অসুবিধা রয়েছে যে এটি কোনও একক টেবিলকে এক উদাহরণের চেয়ে বড় হতে দেয় না এবং এর জন্য ডিজাইনারের ম্যানুয়াল মনোযোগ প্রয়োজন।
ফাংশনাল শর্ডিংয়ের সুবিধা রয়েছে যে এটি প্রচলিত কোডবেজে তুলনামূলকভাবে খুব সহজেই সম্পন্ন হয় যা অনেকগুলি পরিবর্তন যে খুব বেশি বড় নয় large http://Booking.com বিগত বছরগুলিতে এটি একাধিকবার করেছে এবং এটি তাদের পক্ষে ভাল কাজ করেছে।
আপনার প্রশ্নটির দিকে তাকিয়ে সমস্ত কিছু বলার পরেও আমি বিশ্বাস করি যে আপনি ভুল প্রশ্ন জিজ্ঞাসা করছেন, বা আমি আপনার সমস্যার বিবৃতিটিকে পুরোপুরি ভুল বুঝছি।