শারডিং সহ গোটচাটি হ'ল অ্যাপ্লিকেশনটিতে কোন্ শার্ডটি কোয়েরি করতে হবে তা জানতে হবে। সাধারণত, এটি ক্লায়েন্টের মতো কোনও কিছুর উপর ঝাঁকিয়ে পড়ে। আমি আমার উত্তর হিসাবে ব্যবহার করতে আমার পুরানো ব্লগ পোস্টগুলির একটি অভিযোজিত করব ।
যখন আপনি প্রচুর ক্লায়েন্টের জন্য অ্যাপ্লিকেশন তৈরি করছেন, তখন ডাটাবেসগুলি ডিজাইনের দুটি সাধারণ উপায় রয়েছে:
- বিকল্প একটি: সমস্ত ক্লায়েন্টকে একই ডাটাবেসে রাখুন
- বিকল্প 2: প্রতি ক্লায়েন্টের জন্য একটি ডেটাবেস তৈরি করুন
সমস্ত ক্লায়েন্টকে একই ডেটাবেসে রাখা
এটি সহজ: স্কিমার শীর্ষে কেবলমাত্র একটি ক্লায়েন্ট টেবিল যুক্ত করুন, লোকেরা কেবল তাদের নিজস্ব ডেটা দেখতে পাবে এবং আমরা চলে যাব তা নিশ্চিত করার জন্য একটি ক্লায়েন্ট ব্যবহারকারীদের টেবিল যুক্ত করুন।
এই পদ্ধতির সুবিধা:
আরও সহজ স্কিমা পরিচালনা। বিকাশকারীরা যখন অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ স্থাপন করে, তাদের কেবল একটি ডাটাবেসে স্কিমা পরিবর্তন করতে হবে। বিভিন্ন গ্রাহক সিঙ্কের বাইরে চলে যাওয়ার বা ভুল সংস্করণ নিয়ে কোনও উদ্বেগ নেই।
আরও সহজ পারফরম্যান্স টিউনিং। আমরা কেবলমাত্র এক জায়গায় সূচির ব্যবহার এবং পরিসংখ্যান পরীক্ষা করতে পারি, সহজেই উন্নতিগুলি বাস্তবায়িত করতে এবং আমাদের সমস্ত ক্লায়েন্ট জুড়ে তাত্ক্ষণিক প্রভাবগুলি দেখতে পারি। কয়েক হাজার বা হাজারো ডাটাবেস সহ, এমনকি ক্ষুদ্রতম পরিবর্তনও সমন্বয় করা কঠিন। আমরা আমাদের প্রক্রিয়া ক্যাশের সামগ্রীগুলি পরীক্ষা করতে পারি এবং আমাদের সম্পূর্ণ অ্যাপ্লিকেশন জুড়ে কোয়েরি বা সঞ্চিত পদ্ধতিগুলি সবচেয়ে নিবিড় তা নির্দিষ্টভাবে জানতে পারি, যদিও আমরা যদি ক্লায়েন্টের জন্য পৃথক ডাটাবেস ব্যবহার করি তবে আমাদের বিভিন্ন কার্যকর প্রয়োগের পরিকল্পনাগুলি জুড়ে আরও কঠিন সময় সংগ্রহ করতে পারে।
একটি বাহ্যিক API তৈরি করা সহজ। আমাদের যদি পণ্য তৈরির জন্য বাইরের লোকদের জন্য আমাদের সম্পূর্ণ ডাটাবেসে অ্যাক্সেস দেওয়ার প্রয়োজন হয়, তবে সমস্ত ডেটা একক ডাটাবেসে থাকলে আমরা আরও সহজ করতে পারি। যদি API কে একাধিক সার্ভারে একাধিক ডাটাবেস থেকে ডেটা গ্রুপিংয়ের সাথে মোকাবিলা করতে হয় তবে এটি বিকাশ এবং পরীক্ষার সময় যুক্ত করে। (অন্যদিকে, সেই "একাধিক সার্ভার" জিনিসটি ওয়ান-ডাটাবেস-বিধি-বিধি-সমস্ত-পরিস্থিতিটির জন্য সীমাবদ্ধতার ইঙ্গিত দিতে শুরু করে: একটি ডাটাবেস সাধারণত আমাদের সমস্ত লোডের প্রভাবকে কেবল একটি ডাটাবেস সার্ভারকে বোঝায়)) আপনার ক্ষেত্রে , পাওয়ারবিআইয়ের সাথে, প্রত্যেকের একটি ডাটাবেসে থাকা সংযোগগুলি পরিচালনা করা আরও সহজ করে তোলে।
সহজতর সহজলভ্যতা এবং দুর্যোগ পুনরুদ্ধার। ডাটাবেস মিররিং, লগ শিপিং, প্রতিলিপি এবং ক্লাস্টারিং পরিচালনা করা সত্যিই সহজ, যদি আমাদের কেবলমাত্র একটি ডাটাবেসই চিন্তিত হতে হয়। আমরা একটি অবকাঠামোগত হ্যাক দ্রুত তৈরি করতে পারি।
প্রতিটি ক্লায়েন্টকে তার নিজস্ব ডেটাবেস বা শ্যাডে রেখে দেওয়া
আপনার এখনও একটি ক্লায়েন্টের তালিকা প্রয়োজন, তবে এখন এটি ডিরেক্টরিতে পরিণত হয় - প্রতিটি ক্লায়েন্টের জন্য, আপনি এতে থাকা শার্পটিকেও ট্র্যাক করেন start সূচনাতে, আপনার অ্যাপ্লিকেশনটি এই টেবিলটি অনুসন্ধান করে এবং এটি র্যামে ক্যাশে করে। যখন কোনও ক্লায়েন্টের জন্য এটির ডেটা প্রয়োজন হয়, এটি সরাসরি সেই শারডের সাথে সংযুক্ত হয় (ডাটাবেস এবং সার্ভার)।
এই পদ্ধতির সুবিধা:
আরও সহজ একক ক্লায়েন্ট পুনরুদ্ধার। ক্লায়েন্টরা অবিশ্বস্ত মিটব্যাগ। (আমার ব্যতীত - তারা নির্ভরযোগ্য মিটব্যাগগুলি)) তাদের সমস্ত ধরণের "ওফস" মুহুর্ত রয়েছে যেখানে তারা তাদের সমস্ত ডেটা সময়মতো ফিরে পেতে চায় এবং যদি তাদের ডেটা সংমিশ্রিত হয় তবে এটি পিছনে একটি বিশাল ব্যথা that's একই টেবিলের অন্যান্য ক্লায়েন্টের ডেটা। একটি একক-ক্লায়েন্ট-ডাটাবেস দৃশ্যে পুনরুদ্ধার করা মস্তিষ্ক-মৃত সহজ: কেবল ক্লায়েন্টের ডাটাবেস পুনরুদ্ধার করুন। আর কেউ আক্রান্ত হয় না।
আরও সহজ ডেটা রফতানি। ক্লায়েন্টরা তাদের ডেটাতে হাত পেতে পছন্দ করে। ভয়ঙ্কর বিক্রেতার লক-ইন দৃশ্যটি এড়িয়ে তারা যে কোনও সময় তাদের ডেটা বের করতে পারে তা জানার সুরক্ষা চায় এবং তারা তাদের নিজস্ব প্রতিবেদন করতে চায়। প্রতিটি ক্লায়েন্টের ডেটা তাদের নিজস্ব ডাটাবেসে বিচ্ছিন্ন করার সাথে আমরা কেবল তাদের নিজস্ব ডাটাবেস ব্যাকআপের একটি অনুলিপি দিতে পারি। আমাদের ডেটা এক্সপোর্ট এপিআই তৈরি করতে হবে না।
আরও সহজ মাল্টি সার্ভার স্কেলিবিলিটি। যখন আমাদের অ্যাপ্লিকেশনটির একটি একক সার্ভার থেকে পাওয়ার চেয়ে আরও বেশি শক্তি প্রয়োজন তখন আমরা একাধিক সার্ভারের মধ্যে ডাটাবেসগুলি ভাগ করতে পারি। আমরা ভৌগলিকভাবে লোডটি ছড়িয়ে দিতে পারি, এশিয়া বা ইউরোপে সার্ভারগুলি ক্লায়েন্টের কাছাকাছি রাখতে putting
প্রতি ক্লায়েন্টের পারফরম্যান্সের পক্ষে আরও সহজ। যদি কিছু ক্লায়েন্ট বিভিন্ন বৈশিষ্ট্য বা প্রতিবেদন ব্যবহার করে তবে আমরা প্রত্যেকের ডেটার আকার বাড়িয়ে না দিয়ে কেবল সেই ক্লায়েন্টদের জন্য সূচি বা সূচকযুক্ত ভিউগুলির একটি বিশেষ সেট তৈরি করতে পারি। মঞ্জুর, এখানে কিছু ঝুঁকি আছে - ক্লায়েন্টদের মধ্যে স্কিমা পার্থক্যের অনুমতি দিয়ে আমরা সবেমাত্র আমাদের কোড মোতায়েনকে কিছুটা ঝুঁকিপূর্ণ এবং আমাদের কার্য সম্পাদন পরিচালনা আরও কঠিন করে তুলেছি।
আরও সহজ সুরক্ষা ব্যবস্থাপনা। যতক্ষণ আমরা সঠিকভাবে ডাটাবেস প্রতি একজন ব্যবহারকারীর সাথে সুরক্ষা লক করেছি, আমাদের ক্লায়েন্ট এক্স ক্লায়েন্ট ওয়াইয়ের ডেটা অ্যাক্সেস করার বিষয়ে চিন্তা করতে হবে না। তবে, আমরা যদি সবার জন্য কেবল একটি একক লগইন ব্যবহার করি, তবে আমরা সত্যিই এই উদ্বেগকে লক্ষ্য করি নি।
সহজ রক্ষণাবেক্ষণ উইন্ডো। বিশ্বব্যাপী পরিবেশে যেখানে গ্রাহকরা বিশ্বজুড়ে ছড়িয়ে ছিটিয়ে রয়েছে, আমরা যদি গ্রুপ বা জোনে এটি করতে পারি তবে গ্রাহকদের রক্ষণাবেক্ষণের জন্য অফলাইনে নেওয়া আরও সহজ take
তোমার জন্য কোনটা সঠিক?
সঠিক কোনও পছন্দ নেই: আপনাকে নিজের কোম্পানির শক্তি এবং দুর্বলতাগুলি জানতে হবে। উদাহরণস্বরূপ আমার দুটি ক্লায়েন্টকে নেওয়া যাক।
হার্ডওয়্যার পারফরম্যান্স টিউনিং এ সংস্থা এ এক্সেলস। তারা হার্ডওয়্যার থেকে বেরিয়ে আসার শেষ মুহুর্তে খুব কার্যকরী হয়ে ওঠে, এবং 12-18 মাসের চক্রে তাদের এসকিউএল সার্ভার হার্ডওয়্যার প্রতিস্থাপন করতে তারা আপত্তি করে না। (তারা প্রতি 4-6 মাসে ওয়েব সার্ভারগুলিকে রিফ্রেশ করে!) তাদের অ্যাকিলিসের হিল চূড়ান্ত সম্মতি এবং সুরক্ষা প্রয়োজনীয়তা। তাদের অবিশ্বাস্য অডিটিংয়ের চাহিদা রয়েছে এবং কয়েক হাজার সার্ভারের কয়েক হাজার ডাটাবেস জুড়ে এই প্রয়োজনীয়তাগুলি পরিচালনা করা তার চেয়ে একক সার্ভারে, একক ডাটাবেসে বুলেটপ্রুফ নিয়ন্ত্রণগুলি প্রয়োগ করা কেবল তাদের পক্ষে সহজ easier তারা একটি ডাটাবেস, একটি সার্ভার, অনেক ক্লায়েন্ট বেছে নিয়েছে।
সংস্থা 2 উন্নয়নের চর্চায় এক্সেলস। হাজার হাজার ডাটাবেস জুড়ে স্কিমা পরিবর্তন এবং কোড মোতায়েন পরিচালনা করা তাদের জন্য সমস্যা নয়। তাদের বিশ্বজুড়ে ক্লায়েন্ট রয়েছে এবং তারা এই ক্লায়েন্টদের জন্য চব্বিশ ঘন্টা ক্রেডিট কার্ড লেনদেন প্রক্রিয়াজাত করছে। তাদের ভৌগলিকভাবে লোড ছড়িয়ে দেওয়ার দক্ষতার প্রয়োজন এবং তারা প্রতি 12-18 মাসে বিশ্বজুড়ে সার্ভারগুলি প্রতিস্থাপন করতে চায় না। তারা প্রতিটি ক্লায়েন্টের জন্য একটি করে ডাটাবেস বেছে নিয়েছিল এবং তারা তাদের অফশোর ক্লায়েন্টদের জন্য এশিয়া এবং ইউরোপে এসকিউএল সার্ভার স্থাপন শুরু করার সাথে সাথে এটি পরিশোধ করে।