শর্ডিং কী এবং এটি গুরুত্বপূর্ণ কেন?


196

আমি মনে করি যে আমি আপনার কাটানো ডেটা (শার্ডস )টিকে সামগ্রিকভাবে মোকাবেলা করার পক্ষে একটি প্রাসঙ্গিক বিষয়টিকে বোঝায় যা সহজেই ফিরিয়ে দেওয়া শ্যাডিংটি বুঝতে পারি। এটা কি সঠিক?

আপডেট : আমার ধারণা আমি এখানে লড়াই করছি। আমার মতে অ্যাপ্লিকেশন স্তরটির কোনও ব্যবসা থাকা উচিত না যেখানে ডেটা সংরক্ষণ করা উচিত। সর্বোপরি এটি কোনও ধরণের ধারালো ক্লায়েন্ট হওয়া উচিত। উভয় প্রতিক্রিয়া জবাব দিয়েছে তবে কী নয় কেন এটি গুরুত্বপূর্ণ দিক। সুস্পষ্ট পারফরম্যান্স লাভের বাইরে এর কী প্রভাব রয়েছে? এই লাভগুলি কি এমভিসি লঙ্ঘনকে অফসেট করতে যথেষ্ট? খুব বড় স্কেল অ্যাপ্লিকেশনগুলিতে শার্পিং বেশিরভাগই গুরুত্বপূর্ণ বা এটি কি ছোট স্কেলগুলির ক্ষেত্রে প্রযোজ্য?


1
এই ওয়েবিনারগুলির মধ্যে একটির কি সহায়ক হবে? vimeo.com/26742356 slideshare.net/rightscale/... vimeo.com/32541189

উত্তর:


193

ভাগ করা একটি ডাটাবেসের "অনুভূমিক বিভাজন" এর অন্য একটি নাম। এটি পরিষ্কার হয়ে যাওয়ার জন্য আপনি সেই শব্দটির জন্য অনুসন্ধান করতে চাইতে পারেন।

উইকিপিডিয়া থেকে :

অনুভূমিক বিভাজন একটি নকশার নীতি, যার মাধ্যমে ডাটাবেস টেবিলের সারিগুলি কলাম দ্বারা বিভাজন (স্বাভাবিককরণ হিসাবে) পৃথক পৃথকভাবে রাখা হয়। প্রতিটি পার্টিশন একটি শার্ডের অংশ গঠন করে, যা পরিবর্তে একটি পৃথক ডাটাবেস সার্ভার বা শারীরিক অবস্থানের উপর অবস্থিত হতে পারে। সুবিধাটি হ'ল প্রতিটি টেবিলের সারি সংখ্যা হ্রাস পেয়েছে (এটি সূচকের আকার হ্রাস করে, ফলে অনুসন্ধানের কার্যকারিতা উন্নত করে)। যদি শারডিংটি তথ্যের কিছু বাস্তব-বিশ্বের উপর ভিত্তি করে থাকে (যেমন ইউরোপীয় গ্রাহকরা বনাম আমেরিকান গ্রাহকরা) তবে সহজেই এবং স্বয়ংক্রিয়ভাবে উপযুক্ত শার্পের সদস্যতা নির্ধারণ করা সম্ভব হবে এবং কেবল প্রাসঙ্গিক শারডকেই জিজ্ঞাসা করা যেতে পারে।

শারডিং সম্পর্কে আরও কিছু তথ্য:

প্রথমত, প্রতিটি ডাটাবেস সার্ভার একই টেবিল কাঠামোযুক্ত, অভিন্ন। দ্বিতীয়ত, ডেটা রেকর্ডগুলি যৌক্তিকভাবে একটি শার্পড ডাটাবেসে বিভক্ত হয়। পার্টিশনযুক্ত ডাটাবেসের বিপরীতে, প্রতিটি সম্পূর্ণ ডেটা রেকর্ড কেবলমাত্র একটি ডাটাবেসে সম্পাদিত সমস্ত CRUD অপারেশন সহ কেবলমাত্র একটি শार्ডে (ব্যাকআপ / অপ্রয়োজনীয়তার জন্য মিররিং না থাকলে) উপস্থিত থাকে। আপনি ব্যবহৃত পরিভাষা পছন্দ করতে পারেন না তবে এটি লজিকাল ডাটাবেসকে ছোট অংশে সংগঠিত করার বিভিন্ন উপায়ে উপস্থাপন করে।

আপডেট: আপনি এমভিসি ভঙ্গ করবেন না। যেখানে ডেটা সংরক্ষণ করবেন তা সঠিক শারদ নির্ধারণের কাজটি আপনার ডেটা অ্যাক্সেস স্তর দ্বারা স্বচ্ছভাবে সম্পন্ন হবে। সেখানে আপনাকে আপনার ডাটাবেসটি শারড করার জন্য ব্যবহৃত মানদণ্ডের ভিত্তিতে সঠিক শারড নির্ধারণ করতে হবে d (আপনার অ্যাপ্লিকেশনটির কয়েকটি কংক্রিটের উপর ভিত্তি করে আপনাকে যখন ম্যানুয়ালি ডাটাবেসটিকে কিছু আলাদা শারডে ছড়িয়ে দিতে হবে।) তারপরে সঠিক শার্পটি ব্যবহার করার জন্য আপনাকে ডাটাবেস থেকে / ডেটা লোড করার সময় এবং সংরক্ষণ করার সময় আপনাকে যত্ন নিতে হবে।

হয়তো এই উদাহরণে জাভা কোড সঙ্গে এটি কিছুটা পরিষ্কার (এটা সম্বন্ধে তোলে হাইবারনেট shards প্রকল্প), কিভাবে এই একটি বাস্তব জগতে দৃশ্যকল্প কাজ হবে।

" why sharding" কে সম্বোধন করার জন্য: এটি মূলত কেবলমাত্র প্রচুর ডেটা সহ খুব বড় স্কেল অ্যাপ্লিকেশনগুলির জন্য। প্রথমত, এটি ডাটাবেস প্রশ্নের জন্য প্রতিক্রিয়া বার হ্রাস করতে সহায়তা করে। দ্বিতীয়ত, আপনি একটি বড় সার্ভারের পরিবর্তে আপনার ডেটা হোস্ট করতে আরও সস্তা, "লোয়ার-এন্ড" মেশিন ব্যবহার করতে পারেন যা সম্ভবত আর যথেষ্ট নয়।


1
আমাকে ক্ষমা করুন তবে ডেটাবেস কোথায় ডেটা সঞ্চয় করবে তা নির্ধারণ করা উচিত নয়। এটি প্রয়োগ স্তরের কোডকে প্রভাবিত করে?
ojblass

6
অনুভূমিক বিভাজন থেকে এটি কীভাবে আলাদা তা আমি দীর্ঘদিন ধরে বোঝার চেষ্টা করে এসেছি এবং আপনার উত্তর প্রবন্ধের লিঙ্কটি প্রমাণ করে যে কোনও পার্থক্য নেই। যেহেতু কেউ থিও শ্লোসনাগলের পোস্টে মন্তব্যে বলেছেন, "... আপনি যদি কোনও traditionalতিহ্যবাহী ডাটাবেস সংস্কৃতি থেকে অনুভূমিক বিভাজন করছেন, আপনি যদি ওয়েব সংস্কৃতি থেকে থাকেন, তবে এটি 'ভাগাভাগি' ..."
Andreister

@ অ্যান্ড্রিস্টার আমি যা পড়ছি তার থেকে শার্পিংটি ধারণাগতভাবে পৃথক যে এটি একাধিক লজিকাল বা ফিজিক্যাল নোড জুড়ে অনুভূমিক স্কেলিং দ্বারা সংজ্ঞায়িত হয়েছে (আমার বোঝার ক্ষেত্রে (মাইএসকিউএল) একাধিক ডাটাবেস, সম্ভবত বিভিন্ন লজিক্যাল হার্ডওয়্যারে রাখা হয়েছে)। অনুভূমিক বিভাজন একটি কম নির্দিষ্ট শব্দ, যার মধ্যে "ভাগ করে নেওয়া" একটি উপসেট। আবার মাইএসকিউএলকে উদাহরণ হিসাবে ব্যবহার করে, একটি মাইএসকিউএল পার্টিশনটি একক ডিবি উদাহরণ দ্বারা পরিচালিত হয়, যা অ্যাপ্লিকেশনটিতে 100% স্বচ্ছ। একটি শারডিং পদ্ধতির মধ্যে একটি প্রক্সি বা এমন একটি অ্যাপ্লিকেশন জড়িত যা বুদ্ধি করে কোন উদাহরণটি বেছে নিয়েছিল।
NateDaint

উইকিপিডিয়া অনুসারে "প্রতিটি পৃথক পার্টিশনকে একটি শারড বা ডাটাবেস শারড হিসাবে উল্লেখ করা হয়।" যা উত্তরের পাঠ্য থেকে কিছুটা আলাদা যা বলে যে "প্রতিটি বিভাজন একটি শারডের অংশ গঠন করে"।
কেভিন হুইলার

আপনি যে উইকি নিবন্ধটি উল্লেখ করেছেন সেগুলি এই দুটি শর্তের মধ্যে সামান্য পার্থক্য করে। অনুভূমিক পার্টিশনটি এক বা একাধিক টেবিলকে সারি অনুসারে বিভক্ত করে তোলে, সাধারণত স্কিমা এবং একটি ডাটাবেস সার্ভারের একক দৃষ্টিতে। / *** / ভাগ করে নেওয়া এর বাইরে চলে যায়: এটি একইভাবে সমস্যাযুক্ত টেবিল (গুলি) বিভক্ত করে, তবে এটি স্কিমার সম্ভাব্য একাধিক উদাহরণগুলিতে এটি করে। en.wikipedia.org/wiki/...
Peeter Kokk

38

আপনার যদি এমন কোনও ডিবিএমএস-এর কাছে প্রশ্ন থাকে যার জন্য লোকেশনটি বেশ সীমাবদ্ধ রয়েছে (বলুন, কোনও ব্যবহারকারী কেবল 'যেখানে ইউজারনেম = _ my_username' দিয়ে নির্বাচন করেন) এটি এএম থেকে শুরু হওয়া সমস্ত ব্যবহারকারীর নাম একটি সার্ভারে এবং সমস্ত এনজেড থেকে রেখে দেওয়া বুদ্ধিমান হয় অন্যদিকে. এটির মাধ্যমে আপনি কিছু প্রশ্নের জন্য লিনিয়ার স্কেলিংয়ের কাছাকাছি পান।

দীর্ঘ গল্প সংক্ষিপ্ত : ভাগ করে নেওয়া মূলত উভয়কে সমানভাবে ভারসাম্য বজায় রাখার জন্য বিভিন্ন সার্ভারে টেবিল বিতরণের প্রক্রিয়া।

অবশ্যই এটি বাস্তবে অনেক জটিল। :)


সুতরাং শর্ডিং আপনি যে ডেটা সংরক্ষণ করছেন তার নকশাকে প্রভাবিত করে ... দুঃখিত যদি আমি বেশ কিছু না বুঝতে পারি।
ojblass

এটি কি এক অনুভূমিক বিভাজন নয়?
হারুনুরহান

18

Sharding অনুভূমিক (হয় সারি জ্ঞানী ) ডাটাবেসের পার্টিশন হিসাবে উল্লম্ব (উল্টোদিকে কলাম জ্ঞানী ) পার্টিশন যা স্বাভাবিক । এটি খুব বড় ডাটাবেসগুলিকে ছোট, দ্রুত এবং আরও সহজে পরিচালিত অংশগুলিতে ডেটা শার্ড বলে আলাদা করে। এটি বিতরণ ব্যবস্থা অর্জনের একটি প্রক্রিয়া।

কেন আমাদের বিতরণ সিস্টেমের প্রয়োজন?

  • অব্যবহারযোগ্যতা বৃদ্ধি পেয়েছে।
  • আরও সহজ প্রসারণ।
  • অর্থনীতি: একক বৃহত কম্পিউটারের শক্তি সহ ছোট কম্পিউটারের নেটওয়ার্ক তৈরি করতে কম ব্যয় হয়।

আপনি এখানে আরও পড়তে পারেন: বিতরণ ডাটাবেসের সুবিধা

কিভাবে শারডিং বিতরণ সিস্টেম অর্জনে সহায়তা করে?

আপনি একটি অনুসন্ধান সূচকে এন পার্টিশনে বিভক্ত করতে পারেন এবং প্রতিটি সূচি পৃথক সার্ভারে লোড করতে পারেন। আপনি যদি একটি সার্ভারকে জিজ্ঞাসা করেন তবে আপনি ফলাফলগুলির 1 / Nth পাবেন। সুতরাং সম্পূর্ণ ফলাফল সেট পেতে, একটি সাধারণ বিতরণ করা অনুসন্ধান সিস্টেম একটি অগ্রিগেটর ব্যবহার করে যা প্রতিটি সার্ভার থেকে ফলাফল সংগ্রহ করে এবং তাদের একত্রিত করে। একজন অগ্রিগেটর প্রতিটি সার্ভারে কোয়েরি বিতরণ করে। এই ডেটাগ্রেটার প্রোগ্রামটিকে বড় ডেটা টার্মিনোলজিতে ম্যাপ্রেডস বলা হয় । অন্য কথায়, ডিস্ট্রিবিউটেড সিস্টেমগুলি = ভাগ করে নেওয়া + ম্যাপ্রেইডস (যদিও অন্যান্য জিনিসও রয়েছে)।

নীচে একটি চাক্ষুষ প্রতিনিধিত্ব। বিতরণ সিস্টেম


7

খুব বড় স্কেল অ্যাপ্লিকেশনগুলিতে শার্পিং বেশিরভাগই গুরুত্বপূর্ণ বা এটি কি ছোট স্কেলগুলির ক্ষেত্রে প্রযোজ্য?

একক ডাটাবেস সার্ভার দ্বারা পরিবেশন করা যেতে পারে যদি আপনার প্রয়োজনগুলি অতীত হয় তবে ভাগ করে নেওয়া উদ্বেগ। যদি আপনার শারডযোগ্য ডেটা থাকে এবং আপনার অবিশ্বাস্যরূপে উচ্চতর স্কেলাবিলিটি এবং কার্য সম্পাদনের প্রয়োজনীয়তা থাকে তবে এটি একটি ফোলা সরঞ্জাম। আমি অনুমান করব যে আমার পুরো 12 বছরে আমি একজন সফ্টওয়্যার পেশাদার হয়েছি, আমি এমন একটি পরিস্থিতির মুখোমুখি হয়েছি যা শার্লিং থেকে উপকৃত হতে পারে। এটি অত্যন্ত সীমিত প্রয়োগযোগ্যতার সাথে একটি উন্নত প্রযুক্তি।

তদুপরি, ভবিষ্যতে সম্ভবত একটি বিশাল অবজেক্ট "ক্লাউড" এর মতো মজাদার এবং আকর্ষণীয় কিছু হতে চলেছে যা সমস্ত সম্ভাব্য পারফরম্যান্সের সীমাবদ্ধতাগুলি মুছে ফেলেছে, তাই না? :)


যেখানে আপনার
শারডিং

4

শেয়ারিংটি মূলত গুগল ইঞ্জিনিয়ারদের দ্বারা তৈরি করা হয়েছিল এবং গুগল অ্যাপ ইঞ্জিনে অ্যাপ্লিকেশন লেখার সময় আপনি এটি দেখতে বেশ ভারী ব্যবহার করতে পারেন। যেহেতু আপনার ক্যোয়ারীগুলি কতগুলি সংস্থান করতে পারে তার পরিমাণের উপর কঠোর সীমাবদ্ধতা রয়েছে এবং যেহেতু অনুসন্ধানগুলি নিজেরাই কঠোর সীমাবদ্ধতা রাখে, তাই শার্পিংকে কেবল উত্সাহ দেওয়া হয় না তবে প্রায় স্থাপত্য দ্বারা প্রয়োগ করা হয়।

ডেটা সত্তাগুলির প্রতি বিতর্ক হ্রাস করার জন্য আর একটি স্থানের শারডিং ব্যবহার করা যেতে পারে। বিশেষত এটি গুরুত্বপূর্ণ যখন সেই ডেটাগুলির টুকরা যা প্রায়শই লিখিত হয় সেগুলি সন্ধানের জন্য স্কেলযোগ্য সিস্টেমগুলি তৈরি করার সময় কারণ তারা সবসময় বাধা হয়ে থাকে। একটি ভাল সমাধান হ'ল সেই নির্দিষ্ট সত্তাটি বন্ধ করে দেওয়া এবং একাধিক অনুলিপিগুলিতে লেখা, তারপরে মোট পড়ুন। এই "শার্পযুক্ত কাউন্টার আর্ট জিএই এর একটি উদাহরণ: http://code.google.com/appengine/articles/sharding_counters.html


7
<< শেয়ারিংটি মূলত গুগল ইঞ্জিনিয়ারদের দ্বারা তৈরি করা হয়েছিল >> - সত্য নয়। গুগল ১৯৯৯ সালে প্রতিষ্ঠিত হয়েছিল schola ফিরে ফিরে শারডিং সম্পর্কে কথা বলছি।
ক্রেজি গ্লিউ

3

ভাগ করে নেওয়া অনুভূমিক বিভাজন ছাড়াও আরও অনেক কিছু করে। উইকিপিডিয়া নিবন্ধ অনুসারে ,

অনুভূমিক পার্টিশনটি এক বা একাধিক টেবিলকে সারি অনুসারে বিভক্ত করে তোলে, সাধারণত স্কিমা এবং একটি ডাটাবেস সার্ভারের একক দৃষ্টিতে। এটি সূচকের আকার হ্রাস করে (এবং এইভাবে অনুসন্ধানের প্রয়াস) কমানোর মাধ্যমে একটি সুবিধা প্রদান করতে পারে তবে শর্তাবলীর অনুসন্ধানের প্রথম প্রয়োজন ছাড়াই কোন নির্দিষ্ট সারিটি কোন বিভাগে পাওয়া যাবে তা সনাক্ত করার জন্য কিছু স্পষ্ট, মজবুত, অন্তর্নিহিত উপায় রয়েছে যেমন, ক্লাসিক 'গ্রাহকগণ' এবং 'গ্রাহকরা ওয়েস্ট' সারণীর উদাহরণ, যেখানে তাদের জিপ কোড ইতিমধ্যে নির্দেশ করে যে তারা কোথায় পাওয়া যাবে।

ভাগ করা এর বাইরে চলে যায়: এটি একইভাবে সমস্যাযুক্ত টেবিল (গুলি) বিভক্ত করে, তবে এটি স্কিমার সম্ভাব্য একাধিক উদাহরণগুলিতে এটি করে। সুস্পষ্ট সুবিধাটি হ'ল বড় পার্টিশনযুক্ত টেবিলের জন্য অনুসন্ধানের লোডটি এখন একই লজিক্যাল সার্ভারে একাধিক সূচী নয়, একাধিক সার্ভারগুলিতে (যৌক্তিক বা শারীরিক) বিভক্ত হতে পারে।

এছাড়াও,

একাধিক বিচ্ছিন্ন দৃষ্টান্তগুলিতে শর্টগুলি বিভক্ত করতে সাধারণ অনুভূমিক পার্টিশনগুলির চেয়ে বেশি প্রয়োজন requires দক্ষতার আশা-লাভগুলি হারাবে, যদি ডাটাবেস অনুসন্ধান করার জন্য উভয় দৃষ্টান্ত অনুসন্ধান করা প্রয়োজন, কেবলমাত্র একটি সাধারণ মাত্রা সারণী পুনরুদ্ধার করতে। পার্টিশন ছাড়িয়েও, শর্ডিংটি সার্ভারগুলিতে বড় পার্টিশনেবল টেবিলগুলি বিভক্ত করে তোলে, যখন ছোট টেবিলগুলি সম্পূর্ণ ইউনিট হিসাবে প্রতিলিপি করা হয়


1

আমার মতে অ্যাপ্লিকেশন স্তরটির কোনও ব্যবসা থাকা উচিত না যেখানে ডেটা সংরক্ষণ করা উচিত

এটি একটি ভাল নিয়ম তবে বেশিরভাগ জিনিসগুলির মতো সর্বদা সঠিক হয় না।

আপনি যখন আপনার স্থাপত্যগুলি করেন আপনি দায়িত্ব এবং সহযোগিতা দিয়ে শুরু করেন with একবার আপনি আপনার কার্যকরী আর্কিটেকচারটি নির্ধারণ করার পরে আপনাকে অ-কার্যকরী শক্তির ভারসাম্য বজায় রাখতে হবে।

যদি এই অ-কার্যক্ষম শক্তিগুলির মধ্যে একটি বৃহত্তর স্কেলিবিলিটি হয় তবে আপনার এই স্টোরের বিমূর্ততা এখন আপনার অ্যাপ্লিকেশন স্তরের মধ্যে ফাঁস হয়ে যাওয়ার অর্থ এই বাহিনীটি সরবরাহ করার জন্য আপনাকে আপনার আর্কিটেকচারটি মানিয়ে নিতে হবে।


1
অ্যাপ্লিকেশন স্তরটি এখনও ডেটা অ্যাক্সেস যুক্তি এবং ব্যবসায়ের নিয়মের পৃথকীকরণ তৈরি করতে পারে। এর অর্থ কেবলমাত্র "অ্যাপ্লিকেশন স্তর" স্তরের মধ্যে অতিরিক্ত ধারণাগত স্তর রয়েছে।
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.