Partitioning এবং Bucketing এর মাধ্যমে পারফরমেন্স বাড়ানো

Database Tutorials - অ্যাপাচি প্রেস্টো (Apache Presto) Presto Query Planning এবং Optimization |
202
202

Presto একটি ডিস্ট্রিবিউটেড SQL কোয়েরি ইঞ্জিন হিসেবে বড় ডেটাসেটের উপর দ্রুত কোয়েরি এক্সিকিউশন সক্ষম করার জন্য Partitioning এবং Bucketing প্রযুক্তি ব্যবহার করতে পারে। এই দুটি কৌশল ডেটা প্রসেসিংয়ে পারফরমেন্স উন্নত করতে সাহায্য করে, বিশেষ করে যখন বিশাল পরিমাণে ডেটা ব্যবহৃত হয়।


Partitioning

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

Partitioning কীভাবে কাজ করে?

  1. ডেটা ভাগ করা:
    একটি টেবিলের ডেটাকে নির্দিষ্ট কলামের ভিত্তিতে বিভক্ত করা হয়। উদাহরণস্বরূপ, আপনি একটি sales টেবিলের ডেটাকে date কলামের ভিত্তিতে পার্টিশন করতে পারেন, যাতে শুধুমাত্র নির্দিষ্ট মাস বা বছরের ডেটার উপর কোয়েরি চালানো যায়।
  2. ফাইল আর্কিটেকচার:
    Hive বা Presto অন্যান্য ডেটাবেসের মতোই, পার্টিশনিংয়ের জন্য বিশেষ ফাইল সিস্টেম ব্যবহার করে (যেমন HDFS বা S3)। প্রতিটি পার্টিশন আলাদা ফোল্ডারে সংরক্ষিত থাকে, যা কোয়েরি করার সময় বিশেষভাবে নির্বাচন করা যায়।

Partitioning এর সুবিধা:

  • কোয়েরি পারফরম্যান্স:
    শুধুমাত্র প্রয়োজনীয় পার্টিশনই পড়া হয়, ফলে কোয়েরি দ্রুত চলে।
  • ডেটার ব্যবস্থাপনা:
    ডেটা সহজেই ভাগ করা যায় এবং ব্যবস্থাপনা করা যায়, বিশেষত বড় ডেটাসেটগুলোর ক্ষেত্রে।

Partitioning কনফিগারেশন উদাহরণ:

Hive এবং Presto তে date কলামের ভিত্তিতে sales টেবিলকে পার্টিশন করা:

CREATE TABLE sales (
    id INT,
    product_id INT,
    amount DOUBLE
)
PARTITIONED BY (date STRING)
WITH (
    format = 'ORC'
);

এখানে, sales টেবিলের ডেটা date কলামের ভিত্তিতে পার্টিশন করা হবে।


Bucketing

Bucketing হল একটি ডেটা বিভাজন কৌশল যা ডেটাকে নির্দিষ্ট সংখ্যক ফাইলে ভাগ করে, যাতে প্রতিটি বালতিতে একটি নির্দিষ্ট সংখ্যা বা সীমিত পরিমাণ ডেটা থাকে। এটি সাধারণত hashing বা round-robin ভিত্তিতে কাজ করে।

Bucketing কীভাবে কাজ করে?

  1. ডেটা ভাগ করা:
    Bucketing-এ, ডেটার একটি নির্দিষ্ট কলাম (যেমন user_id বা order_id) এর উপর ভিত্তি করে ডেটা ভাগ করা হয়। Hashing ফাংশন ব্যবহার করে, প্রতিটি ডেটার জন্য একটি নির্দিষ্ট বালতিতে (bucket) ডেটা রাখা হয়।
  2. ফাইল আর্কিটেকচার:
    Bucketing সাধারণত একটি নির্দিষ্ট সংখ্যক ফাইলে (বা buckets) ডেটা ভাগ করে এবং একেকটি ফাইল নির্দিষ্ট আকারে থাকে।

Bucketing এর সুবিধা:

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

Bucketing কনফিগারেশন উদাহরণ:

Hive বা Presto তে user_id কলামের ভিত্তিতে sales টেবিলকে ৫টি বালতিতে ভাগ করা:

CREATE TABLE sales (
    id INT,
    product_id INT,
    amount DOUBLE
)
CLUSTERED BY (user_id) INTO 5 BUCKETS
WITH (
    format = 'ORC'
);

এখানে, user_id কলামের ভিত্তিতে ডেটা ৫টি বালতিতে ভাগ করা হয়েছে।


Partitioning এবং Bucketing এর মধ্যে পার্থক্য

পার্থক্যPartitioningBucketing
বিভাগডেটা ভাগ করা হয় নির্দিষ্ট কলাম (যেমন date) দিয়ে।ডেটা ভাগ করা হয় hashing বা round-robin এর মাধ্যমে।
উদ্দেশ্যডেটা পারফরম্যান্স বৃদ্ধি করা।স্কেলেবল কোয়েরি এক্সিকিউশন এবং দ্রুত জয়েন অপারেশন।
ডেটা অ্যাক্সেসনির্দিষ্ট পার্টিশন থেকে ডেটা আনা হয়।সমান আকারের buckets এ ডেটা বিভক্ত করা হয়।
কনফিগারেশনPARTITIONED BY ব্যবহৃত হয়।CLUSTERED BY INTO N BUCKETS ব্যবহৃত হয়।

Partitioning এবং Bucketing এর মাধ্যমে পারফরম্যান্স বৃদ্ধি

  1. Partitioning:
    • ডেটা কোয়েরি করার সময় শুধুমাত্র প্রয়োজনীয় পার্টিশন পড়া হয়, ফলে কোয়েরি ইফিসিয়েন্সি বৃদ্ধি পায়।
    • বিশাল ডেটাসেট থেকে নির্দিষ্ট সময়ের ডেটা নির্বাচন করা সহজ হয় (যেমন মাস বা বছর ভিত্তিক পার্টিশনিং)।
  2. Bucketing:
    • Bucketing ডেটা একটি নির্দিষ্ট সংখ্যক ভাগে বিভক্ত করে, যা কোয়েরির সময় সমান্তরাল প্রসেসিং নিশ্চিত করে এবং দ্রুত কাজ করে।
    • Bucketing ব্যবহার করলে, ডিস্ট্রিবিউটেড কোয়েরি এক্সিকিউশনে সময় কমে যায়, বিশেষ করে যখন বড় টেবিলগুলোর মধ্যে জয়েন বা অ্যাগ্রিগেশন অপারেশন করা হয়।

উপসংহার

  • Partitioning বড় ডেটাসেটের বিভিন্ন অংশকে আলাদা করে, যা কোয়েরি এক্সিকিউশনে ইফিসিয়েন্সি বৃদ্ধি করে।
  • Bucketing একই ডেটা কলামের উপর ভিত্তি করে ডেটা ভাগ করে, যা জয়েন অপারেশন এবং স্কেলেবল কোয়েরি এক্সিকিউশনকে দ্রুততর করে।
  • Presto এবং Hive এ এই দুটি কৌশলকে সঠিকভাবে প্রয়োগ করলে, ডেটার পারফরম্যান্স এবং কোয়েরি প্রসেসিং দ্রুত হয়।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion