MongoDB-এ একত্রিতকরণ পাইপলাইন কীভাবে ব্যবহার করবেন

MongoDB-এ একত্রিতকরণ পাইপলাইন কীভাবে ব্যবহার করবেন
আপনার মত পাঠকরা MUO সমর্থন করতে সাহায্য করে। আপনি যখন আমাদের সাইটে লিঙ্ক ব্যবহার করে একটি ক্রয় করেন, আমরা একটি অনুমোদিত কমিশন উপার্জন করতে পারি। আরও পড়ুন

মঙ্গোডিবিতে জটিল প্রশ্নগুলি চালানোর জন্য একত্রিতকরণ পাইপলাইন হল প্রস্তাবিত উপায়। আপনি যদি MongoDB এর MapReduce ব্যবহার করে থাকেন, তাহলে আরও দক্ষ গণনার জন্য আপনি একত্রিতকরণ পাইপলাইনে স্যুইচ করুন।





দিনের MUO ভিডিও কন্টেন্টের সাথে চালিয়ে যেতে স্ক্রোল করুন

মঙ্গোডিবিতে একত্রীকরণ কী এবং এটি কীভাবে কাজ করে?

  একত্রিত পাইপলাইন প্রক্রিয়া স্কেচ

সমষ্টিগত পাইপলাইন উন্নত চালানোর জন্য একটি বহু-পর্যায়ের প্রক্রিয়া MongoDB-তে প্রশ্ন . এটি পাইপলাইন নামে পরিচিত বিভিন্ন পর্যায়ে ডেটা প্রক্রিয়া করে। আপনি এক স্তর থেকে উত্পন্ন ফলাফলগুলিকে অন্য স্তরে অপারেশন টেমপ্লেট হিসাবে ব্যবহার করতে পারেন।





উদাহরণস্বরূপ, আপনি পছন্দসই আউটপুট না পাওয়া পর্যন্ত সেই ক্রম অনুসারে সাজানোর জন্য একটি ম্যাচ অপারেশনের ফলাফলকে অন্য পর্যায়ে পাস করতে পারেন।





একটি সমষ্টি পাইপলাইনের প্রতিটি ধাপে একটি MongoDB অপারেটর থাকে এবং এক বা একাধিক রূপান্তরিত নথি তৈরি করে। আপনার প্রশ্নের উপর নির্ভর করে, একটি স্তর পাইপলাইনে একাধিকবার উপস্থিত হতে পারে। উদাহরণস্বরূপ, আপনাকে ব্যবহার করতে হতে পারে $গণনা বা $সর্ট অপারেটর একত্রিত পাইপলাইন জুড়ে একাধিকবার পর্যায়.

একত্রীকরণ পাইপলাইনের পর্যায়

একত্রিতকরণ পাইপলাইন একটি একক প্রশ্নে একাধিক পর্যায়ে ডেটা পাস করে। বেশ কয়েকটি পর্যায় রয়েছে এবং আপনি তাদের বিশদ বিবরণ পেতে পারেন MongoDB ডকুমেন্টেশন .



আসুন নীচে সবচেয়ে বেশি ব্যবহৃত কিছু সংজ্ঞায়িত করি।

$ ম্যাচ স্টেজ

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





$গ্রুপ স্টেজ

গোষ্ঠী পর্যায় কী-মান জোড়া ব্যবহার করে নির্দিষ্ট মানদণ্ডের উপর ভিত্তি করে ডেটাকে বিভিন্ন গ্রুপে বিভক্ত করে। প্রতিটি গ্রুপ আউটপুট নথিতে একটি কী প্রতিনিধিত্ব করে।

উদাহরণস্বরূপ, নিম্নলিখিত বিবেচনা করুন বিক্রয় নমুনা তথ্য:





  উদাহরণ স্বরূপ নমুনা তথ্য

একত্রিত পাইপলাইন ব্যবহার করে, আপনি প্রতিটি পণ্য বিভাগের জন্য মোট বিক্রয় গণনা এবং শীর্ষ বিক্রয় গণনা করতে পারেন:

 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

দ্য _id: $Section বিভাগগুলির উপর ভিত্তি করে আউটপুট নথিকে জুটিবদ্ধ করে। উল্লেখ করে শীর্ষ_বিক্রয়_গণনা এবং শীর্ষ বিক্রয় ক্ষেত্র, মঙ্গোডিবি অ্যাগ্রিগেটর দ্বারা সংজ্ঞায়িত অপারেশনের উপর ভিত্তি করে তাজা কী তৈরি করে; এটা হতে পারে $সমস্য , $মিনিট , সর্বোচ্চ $ , বা $ গড় .

$ স্কিপ স্টেজ

আপনি ব্যবহার করতে পারেন $বাদ আউটপুটে একটি নির্দিষ্ট সংখ্যক নথি বাদ দেওয়ার পর্যায়। এটা সাধারণত গ্রুপ পর্বের পরে আসে। উদাহরণস্বরূপ, যদি আপনি দুটি আউটপুট নথি আশা করেন কিন্তু একটি এড়িয়ে যান, তাহলে সমষ্টি শুধুমাত্র দ্বিতীয় নথিটি আউটপুট করবে।

একটি স্কিপ স্টেজ যোগ করতে, সন্নিবেশ করুন $বাদ একত্রিত পাইপলাইনে অপারেশন:

 ..., 
{
    $skip: 1
  },

$সর্ট স্টেজ

বাছাই পর্যায় আপনাকে অবরোহ বা আরোহী ক্রমে ডেটা সাজাতে দেয়। উদাহরণস্বরূপ, কোন বিভাগে সর্বোচ্চ বিক্রয় আছে তা নির্ধারণ করতে আমরা পূর্ববর্তী ক্যোয়ারী উদাহরণে ডেটা সাজাতে পারি।

যুক্ত করুন $সর্ট পূর্ববর্তী প্রশ্নের অপারেটর:

কোডির সাথে করণীয়
 ..., 
{
    $sort: {top_sales: -1}
  },

$সীমা পর্যায়

লিমিট অপারেশন আউটপুট ডকুমেন্টের সংখ্যা কমাতে সাহায্য করে যা আপনি অ্যাগ্রিগেশন পাইপলাইন দেখাতে চান। উদাহরণস্বরূপ, ব্যবহার করুন $সীমা অপারেটর পূর্ববর্তী পর্যায়ে ফেরত সর্বোচ্চ বিক্রয় সহ বিভাগ পেতে:

 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

উপরের শুধুমাত্র প্রথম নথি প্রদান করে; এটি হল সর্বোচ্চ বিক্রয় সহ বিভাগ, এটি সাজানো আউটপুটের শীর্ষে প্রদর্শিত হয়।

$প্রজেক্ট স্টেজ

দ্য $প্রকল্প স্টেজ আপনাকে আপনার পছন্দ মতো আউটপুট ডকুমেন্টকে আকার দিতে দেয়। ব্যবহার করে $প্রকল্প অপারেটর, আপনি আউটপুটে কোন ক্ষেত্রটি অন্তর্ভুক্ত করতে হবে তা নির্দিষ্ট করতে পারেন এবং এর কী নামটি কাস্টমাইজ করতে পারেন।

উদাহরণস্বরূপ, একটি নমুনা আউটপুট ছাড়া $প্রকল্প পর্যায় এর মত দেখায়:

  একত্রিত পাইপলাইনের জন্য নমুনা অব্যবস্থাপিত ডেটা

দেখা যাক এর সাথে কেমন লাগে $প্রকল্প মঞ্চ যোগ করতে $প্রকল্প পাইপলাইনে:

 ..., 

{
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }

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

চূড়ান্ত আউটপুট আগেরটির তুলনায় অনেক ক্লিনার:

  সমষ্টি পাইপলাইন পর্যায়ের জন্য নমুনা আউটপুট

$আনওয়াইন্ড স্টেজ

দ্য $আরাম স্টেজ একটি নথির মধ্যে একটি অ্যারেকে পৃথক নথিতে ভেঙে দেয়। নিম্নলিখিত নিন আদেশ তথ্য, উদাহরণস্বরূপ:

  নমুনা আদেশ তথ্য

ব্যবহার $আরাম বিনির্মাণের পর্যায় আইটেম অন্যান্য একত্রীকরণ পর্যায় প্রয়োগ করার আগে অ্যারে। উদাহরণস্বরূপ, unwinding আইটেম আপনি যদি প্রতিটি পণ্যের জন্য মোট রাজস্ব গণনা করতে চান তাহলে অ্যারে অর্থপূর্ণ হয়:

 db.Orders.aggregate( 
[
  {
    "$unwind": "$items"
  },
  {
    "$group": {
      "_id": "$items.product",
      "total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
    }
  },
  {
    "$sort": { "total_revenue": -1 }
  },

  {
        "$project": {
            "_id": 0,
            "Product": "$_id",
            "TotalRevenue": "$total_revenue",

        }
    }
])

উপরের একত্রীকরণ প্রশ্নের ফলাফল এখানে:

কিভাবে ভিডিও গেম খেলে জীবিকা নির্বাহ করা যায়
  আনওয়াইন্ড স্টেজের জন্য নমুনা ফলাফল

মঙ্গোডিবিতে কীভাবে একটি সমষ্টি পাইপলাইন তৈরি করবেন

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

আগেরটি ব্যবহার করে বিক্রয় ডেটা নমুনা, আসুন একত্রিত পাইপলাইনের একটি বিস্তৃত দৃশ্যের জন্য উপরে আলোচনা করা কয়েকটি পর্যায় রয়েছে:

 db.sales.aggregate([ 

    {
        "$match": {
            "Sold": { "$gte": 5 }
            }
    },

        {

        "$group": {
            "_id": "$Section",
            "total_sales_count": { "$sum": "$Sold" },
            "top_sales": { "$max": "$Amount" },
            
        }

    },

    {
        "$sort": { "top_sales": -1 }
    },

    {"$skip": 0},

    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }
    
])

চূড়ান্ত আউটপুট এমন কিছু দেখায় যা আপনি আগে দেখেছেন:

  সমষ্টি পাইপলাইন পর্যায়ের জন্য নমুনা আউটপুট

সমষ্টি পাইপলাইন বনাম MapReduce

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

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

আরো অনেক আছে সমষ্টি পাইপলাইন এবং MapReduce এর মধ্যে পার্থক্য . আপনি MapReduce থেকে একত্রীকরণ পাইপলাইনে স্যুইচ করার সময় সেগুলি দেখতে পাবেন।

MongoDB-তে বিগ ডেটা কোয়েরি দক্ষ করে তুলুন

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

যদিও একত্রিতকরণ পাইপলাইন MapReduce এর চেয়ে বেশি দক্ষ, আপনি আপনার ডেটা ইন্ডেক্স করে একত্রিতকরণকে আরও দ্রুত এবং আরও দক্ষ করে তুলতে পারেন। এটি প্রতিটি একত্রীকরণ পর্যায়ে মঙ্গোডিবিকে স্ক্যান করার জন্য প্রয়োজনীয় ডেটার পরিমাণ সীমিত করে।