পার্টিশন বনাম ডাটাবেস শারডিং


166

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

স্ট্যাকওভারফ্লো বিশেষজ্ঞরা কি আমাকে বেসিকগুলি সঠিকভাবে পেতে সহায়তা করতে পারেন?

  • শারডিং এবং পার্টিশনের মধ্যে পার্থক্য কী ?
  • এটি কি সত্য যে 'সমস্ত শারডযুক্ত ডাটাবেসগুলি মূলত বিভাজন করা হয় (বিভিন্ন নোডের উপরে), তবে সমস্ত বিভাজনযুক্ত ডাটাবেসগুলি প্রয়োজনীয়ভাবে শার্প করা হয় না' ?

উত্তর:


130

টেবিল বা ডাটাবেস জুড়ে ডেটা বিভাজনের জন্য পার্টিশন করা আরও সাধারণ শব্দ। ভাগ করা একটি নির্দিষ্ট ধরনের পার্টিশন যা অংশকে অনুভূমিক বিভাজন বলে of

এখানে আপনি একাধিক উদাহরণ বা সার্ভার জুড়ে স্কিমার প্রতিলিপি তৈরি করেছেন, কোন ধরণের যুক্তি বা সনাক্তকারী ব্যবহার করে কোন সন্ধানের জন্য সার্ভার বা ডেটা সন্ধান করতে হবে তা জানতে know এই ধরণের একটি সনাক্তকারীকে প্রায়শই "শারড কী" বলা হয়।

একটি সাধারণ, কী-কম যুক্তি হ'ল ডেটা ভাগ করার জন্য বর্ণমালা ব্যবহার করা। AD উদাহরণস্বরূপ 1, EG উদাহরণ 2। গ্রাহকের ডেটা এটির জন্য উপযুক্ত, তবে পার্টিশনটি বিবেচনা না করে যদি কিছু অক্ষর অন্যদের চেয়ে বেশি সাধারণ হয়।

আর একটি সাধারণ কৌশল হ'ল একটি কী-সিঙ্ক্রোনাইজেশন সিস্টেম বা যুক্তি ব্যবহার করুন যা দৃষ্টান্তগুলিতে অনন্য কীগুলি নিশ্চিত করে।

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

এখানে পাশাপাশি দেখুন: http://www.quora.com/Whats-the-difference-between-sharding-and-partition


16
ভাগ করে নেওয়া এক ধরণের এইচপি । এটি এইচপি নয়।
NoChance

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

48

দেখে মনে হচ্ছে এটি আপনার উভয় প্রশ্নের উত্তর দিয়েছে:

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

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

উত্স: উইকি ঠিকরা

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

সূত্র: মঙ্গোডিবি


41

আমি এটিতেও ডাইভিং করে চলেছি এবং যদিও বিষয়টি সম্পর্কে আমি অনেকদূর রেফারেন্স দিয়েছি, এমন কয়েকটি মূল তথ্য আছে যা আমি জড়ো করেছি এবং আমি ভাগ করতে চাইছি এমন পয়েন্টগুলি:

একটি পার্টিশনটি একটি লজিকাল ডাটাবেস বা এর উপাদান উপাদানগুলিকে পৃথক স্বতন্ত্র অংশে বিভক্ত করে। ডেটাবেস পার্টিশন সাধারণত পরিচালনা, কার্য সম্পাদন বা প্রাপ্যতার কারণে লোড ব্যালেন্সিংয়ের জন্য করা হয়।

https://en.wikipedia.org/wiki/Partition_(database)

ভাগ করে নেওয়া একধরণের পার্টিশন, যেমন অনুভূমিক পার্টিশন (এইচপি)

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

https://en.wikipedia.org/wiki/Shard_(database_architecture)

আমি কোরা সম্পর্কিত টনি বাকোর উত্তরটি সত্যিই পছন্দ করি যেখানে তিনি আপনাকে স্কিমার (কলাম এবং সারিগুলির পরিবর্তে) বিবেচনা করতে বাধ্য করেন। তিনি বলেছেন যে ...

" অনুভূমিক বিভাজন ", বা শারডিং, স্কিমাটির অনুলিপি [অনুলিপি] করছে, এবং তারপরে একটি শার্ড কী এর উপর ভিত্তি করে ডেটা ভাগ করছে।

" উল্লম্ব পার্টিশন " এর মধ্যে স্কিমা বিভাজন জড়িত (এবং ডেটা যাত্রার পাশাপাশি চলে)।

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

ওরাকল এর ডেটাবেস পার্টিশন গাইডিংয়ে কিছু সুন্দর পরিসংখ্যান রয়েছে। আমি নিবন্ধটি থেকে কয়েকটি অংশ নকল করেছি।

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

একটি টেবিল বিভাজন যখন

কখন কোনও টেবিলটি বিভাজন করবেন সে সম্পর্কে এখানে কিছু পরামর্শ রয়েছে:

  • 2 জিবি-র বেশি টেবিলগুলি সর্বদা বিভাজনের প্রার্থী হিসাবে বিবেচনা করা উচিত।
  • Historicalতিহাসিক ডেটাযুক্ত টেবিলগুলিতে, নতুন পার্টিশনে নতুন ডেটা যুক্ত করা হয়েছে। একটি সাধারণ উদাহরণ একটি .তিহাসিক সারণি যেখানে কেবলমাত্র চলতি মাসের ডেটা আপডেটযোগ্য এবং অন্যান্য 11 মাস কেবল পঠিত হয়।
  • যখন কোনও টেবিলের সামগ্রীগুলি বিভিন্ন ধরণের স্টোরেজ ডিভাইসগুলিতে বিতরণ করা প্রয়োজন।

পার্টিশন ছাঁটাই

পার্টিশন ব্যবহার করে পারফরম্যান্স উন্নত করার জন্য পার্টিশন ছাঁটাই সবচেয়ে সহজ এবং সবচেয়ে গুরুত্বপূর্ণ উপায় sub পার্টিশন ছাঁটাই প্রায়শই বিভিন্ন মাত্রার অর্ডার দ্বারা ক্যোয়ারি কার্যকারিতা উন্নত করতে পারে। উদাহরণস্বরূপ, ধরুন কোনও অ্যাপ্লিকেশনটিতে অর্ডারগুলির সারণী রয়েছে যাতে ordersতিহাসিক রেকর্ড রয়েছে এবং এই টেবিলটি সপ্তাহের মধ্যে বিভাজন হয়ে গেছে। এক সপ্তাহের জন্য আদেশের জন্য অনুরোধ করা একটি ক্যোয়ারী কেবলমাত্র অর্ডার সারণীর একক পার্টিশনে অ্যাক্সেস করতে পারে। যদি অর্ডার সারণীতে 2 বছরের historicalতিহাসিক ডেটা থাকে, তবে এই ক্যোয়ারিতে 104 পার্টিশনের পরিবর্তে একটি বিভাজন অ্যাক্সেস করতে পারে। পার্টিশন ছাঁটাইয়ের কারণে এই ক্যোয়ারী 100 গুণ দ্রুত সম্পাদন করতে পারে।

বিভাজন কৌশল

  • পরিসর
  • কাটা
  • তালিকা

আপনি তাদের পাঠ্য পড়তে পারেন এবং তাদের চিত্রগুলি ভিজ্যুয়ালাইজ করতে পারেন যা সবকিছুকে বেশ ভালভাবে ব্যাখ্যা করে।

এবং সবশেষে, এটি বোঝা গুরুত্বপূর্ণ যে ডাটাবেসগুলি অত্যন্ত সংস্থানীয় সংস্থান:

  • সিপিইউ
  • ডিস্ক
  • ইনপুট / আউটপুট
  • স্মৃতি

অনেক ডিবিএর ইচ্ছাই একই মেশিনে বিভক্ত হয়, যেখানে পার্টিশনগুলি সমস্ত সংস্থান ভাগ করে দেবে তবে ডেটা এবং / অথবা সূচককে আলাদা করে ডিস্ক এবং আই / ও-তে উন্নতি করে।

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

https://en.wikipedia.org/wiki/Shared_nothing_architecture


"" অনুভূমিক বিভাজন ", বা শারডিং, স্কিমাটির অনুলিপি [অনুলিপি করছে] এবং তারপরে একটি শার্ড কী এর উপর ভিত্তি করে ডেটা ভাগ করছে" " - এটি টোটোলজিক্যাল।
8bitjunkie

সুতরাং একটি আয়না আছে, এবং এটি খণ্ডিত হয়, তাই ব্যুৎপত্তি।
mckenzm

5

1 মিলিয়ন সারি এবং 100 কলাম সহ ডাটাবেসে একটি সারণী বিবেচনা করুন পার্টিশনে আপনি টেবিলটিকে 2 বা ততোধিক সংখ্যক সারণীতে বিভক্ত করতে পারেন যেমন সম্পত্তি রয়েছে:

  1. 0.4 মিলিয়ন সারি (টেবিল 1), 0.6 মিলিয়ন সারি (টেবিল 2)

  2. 1 মিলিয়ন সারি এবং 60 টি কলাম (টেবিল 1) এবং 1 মিলিয়ন সারি এবং 40 টি কলাম (টেবিল 2)

    এর মতো একাধিক মামলা হতে পারে

এটি সাধারণ বিভাজন

তবে ভাগ করে নেওয়া কেবলমাত্র 1 ম কেসকে বোঝায় যেখানে আমরা সারিগুলির ভিত্তিতে ডেটা ভাগ করি। যদি আমরা টেবিলটিকে একাধিক সারণিতে বিভক্ত করে থাকি তবে আমাদের কাছে স্কিমার একাধিক অনুরূপ অনুলিপি বজায় রাখা দরকার যেমন আমাদের একাধিক টেবিল রয়েছে।


1

Sharding একটি বিশেষ ক্ষেত্রে অনুভূমিক পার্টিশন , যখন একাধিক ডাটাবেসের দৃষ্টান্ত জুড়ে পার্টিশন প্রসারিত হচ্ছে। যদি একটি ডেটাবেস শ্যাার্ড করা হয়, এর অর্থ এটি সংজ্ঞা অনুসারে বিভক্ত।


1

বিভাজন সম্পর্কে কথা বলার সময় দয়া করে শব্দ প্রতিলিপি বা প্রতিলিপি ব্যবহার করবেন না। প্রতিলিপি একটি পৃথক ধারণা এবং এই পৃষ্ঠার আওতার বাইরে। আমরা যখন বিভাজন নিয়ে কথা বলি তখন আরও ভাল শব্দটি বিভক্ত হয় এবং যখন আমরা শারডিংয়ের কথা বলি তখন আরও ভাল শব্দ বিতরণ করা হয়। পার্টিশনে (সাধারণত এবং সাধারণভাবে সর্বদা বোঝা যায় না) বড় ডেটা সেট টেবিলের সারিগুলিকে দুটি বা আরও বেশি বিচ্ছিন্ন (কোনও সারি ভাগ করে না নেওয়া) গ্রুপগুলিতে বিভক্ত করা হয়। আপনি প্রতিটি গ্রুপকে একটি পার্টিশন বলতে পারেন। এই গোষ্ঠীগুলি বা সমস্ত পার্টিশনগুলি একবার আরডিএমবি ইনস্ট্যান্সের নিয়ন্ত্রণে থাকে এবং এটি সমস্ত যৌক্তিক। প্রতিটি গোষ্ঠীর ভিত্তি হ্যাশ বা ব্যাপ্তি ইত্যাদি হতে পারে আপনার যদি কোনও টেবিলে দশ বছরের ডেটা থাকে তবে আপনি বছরের প্রতিটি তথ্য আলাদা আলাদা পার্টিশনে সংরক্ষণ করতে পারেন এবং এটির ভিত্তিতে পার্টিশনের সীমানা নির্ধারণ করে এটি অর্জন করা যেতে পারে নন-নাল কলাম CREATE_DATE। একবার আপনি ডিবিটিকে জিজ্ঞাসা করলেন তারপরে আপনি যদি 01-01-1999 এবং 31-12-2000 এর মধ্যে কোনও তৈরি তারিখ নির্দিষ্ট করেন তবে কেবলমাত্র দুটি পার্টিশন হিট হবে এবং এটি ক্রমিক হবে। আমি বিলিয়ন + রেকর্ডের জন্য ডিবি তে একই কাজ করেছি এবং এসকেএল ইত্যাদি ব্যবহার করে 30 সেকেন্ড থেকে 50 মিলি বর্গ সময় আসেনি। ভাগ করে নেওয়া হ'ল আপনি প্রতিটি পার্টিশনকে আলাদা নোড / মেশিনে হোস্ট করেন। এখন পার্টিশন / শার্ডের ভিতরে অনুসন্ধান সমান্তরালে ঘটতে পারে।


0

অনুভূমিক পার্টিশন যখন অন্য ডাটাবেস উদাহরণে স্থানান্তরিত হয় * একটি ডাটাবেস শ্যাড হয়ে যায় ।

ডাটাবেস উদাহরণটি একই মেশিনে বা অন্য কোনও মেশিনে থাকতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.