মোংডব একত্রিত কাঠামোর জন্য ব্যাখ্যা করুন


118

মঙ্গোডিবিতে সমষ্টি কাঠামোর জন্য কোনও ব্যাখ্যা কার্যক্রম রয়েছে? আমি এটি ডকুমেন্টেশনে দেখতে পাচ্ছি না।

যদি না পরীক্ষা করার অন্য কোনও উপায় না থাকে তবে কীভাবে একটি প্রশ্নোত্তর সমষ্টি কাঠামোর মধ্যে সম্পাদন করে?

আমি জানি আপনি ঠিক কি করতে

db.collection.find().explain()

তবে সমষ্টি ফ্রেমওয়ার্কের সাথে আমি একটি ত্রুটি পেয়েছি

db.collection.aggregate(
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { 
        $group: 
        { 
            _id : { id: "$_id"},
            "count": { $sum:1 } 
        }
    },
    { $sort: {"count":-1}}
).explain()

উত্তর:


172

মোংগোডিবি সংস্করণ 3.0 দিয়ে শুরু করে, কেবল ক্রম থেকে ক্রম পরিবর্তন করে

collection.aggregate(...).explain()

প্রতি

collection.explain().aggregate(...)

আপনাকে পছন্দসই ফলাফল দেবে ( এখানে ডকুমেন্টেশন )।

পুরানো সংস্করণগুলিতে> = 2.6 এর জন্য আপনাকে একত্রিত পাইপলাইন ক্রিয়াকলাপের বিকল্পটি ব্যবহার করতে হবেexplain

explain:true

db.collection.aggregate([
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { $group: { 
        _id : "$_id",
        count: { $sum:1 } 
    }},
    {$sort: {"count":-1}}
  ],
  {
    explain:true
  }
)

সমষ্টি ফ্রেমওয়ার্ক একটি গুরুত্বপূর্ণ বিবেচনা করে একটি সূচক শুধুমাত্র একটি পাইপলাইন জন্য প্রারম্ভিক ডেটা আনতে ব্যবহার করা যেতে পারে (যেমন ব্যবহার $match, $sort, $geonearএকটি পাইপলাইন শুরুতে) পাশাপাশি পরবর্তী $lookupএবং $graphLookupপর্যায়ে। একবার ডাটা প্রক্রিয়াকরণের জন্য অ্যাগ্রিগেশন পাইপলাইন মধ্যে সংগৃহীত হয়েছে (যেমন মত পর্যায়ে মাধ্যমে ক্ষণস্থায়ী $project, $unwindএবং $group) আরও ম্যানিপুলেশন ইন-মেমোরি (সম্ভবত অস্থায়ী ফাইল ব্যবহার করা হয় তবে হতে হবে allowDiskUseবিকল্প সেট)।

পাইপলাইন অপ্টিমাইজ করা

সাধারণভাবে, আপনি এগ্রিগেশন পাইপলাইনগুলি এর দ্বারা অনুকূল করতে পারেন:

  • $matchপ্রাসঙ্গিক ডকুমেন্টগুলিতে প্রক্রিয়াকরণ সীমাবদ্ধ করতে একটি মঞ্চ দিয়ে পাইপলাইন শুরু করা ।
  • প্রাথমিক $match/ $sortপর্যায়ে সুনিশ্চিত করা একটি দক্ষ সূচক দ্বারা সমর্থিত ।
  • ফিল্টারিং ডেটা গোড়ার দিকে ব্যবহার $match, $limitএবং $skip
  • অপ্রয়োজনীয় পর্যায় এবং দস্তাবেজ ম্যানিপুলেশন হ্রাস করা (জটিল একীকরণ জিমন্যাস্টিকস প্রয়োজন হলে সম্ভবত আপনার স্কিমার পুনর্বিবেচনা করা)।
  • আপনি যদি আপনার মঙ্গোডিবি সার্ভার আপগ্রেড করেন তবে আরও নতুন একাগ্রেশন অপারেটরদের সুবিধা গ্রহণ করছেন। উদাহরণস্বরূপ, মঙ্গোডিবি ৩.৪ এরে , স্ট্রিং এবং দিকগুলির সাথে কাজ করার জন্য সমর্থন সহ অনেকগুলি নতুন একত্রিতকরণের পর্যায় এবং অভিব্যক্তি যুক্ত করেছে।

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

সীমাবদ্ধতা

মঙ্গোডিবি ৩.৪-এর মতো, সমষ্টি ফ্রেমওয়ার্ক explainবিকল্পটি কীভাবে পাইপলাইন প্রসেস করা হয় সে সম্পর্কিত তথ্য সরবরাহ করে তবে কোনও প্রশ্নের executionStatsজন্য মোডের মতো একই স্তরের বিশদটিকে সমর্থন করে না find()। আপনি প্রাথমিক ক্যোয়ারী মৃত্যুদন্ড নিখুঁত উপর দৃষ্টি নিবদ্ধ করা হয় আপনি সম্ভবত এটা উপকারী সমতুল্য পর্যালোচনা করতে পাবেন find().explain()সঙ্গে ক্যোয়ারী executionStatsবা allPlansExecutionভারবোসিটি

মোংগোডিবি ইস্যু ট্র্যাকারে দেখার / আপভোট করার জন্য কয়েকটি প্রাসঙ্গিক বৈশিষ্ট্য অনুরোধ রইল যাতে প্রোফাইল / প্রোফাইল সমষ্টি পাইপলাইনগুলি অনুকূল করতে সহায়তা করে:


তথ্যের জন্য ধন্যবাদ আমি যদি কোনও পরিবর্তন করতে পারি কিনা তা দেখতে পাবে।
এসসিবি

$sortপাইপলাইন অ্যারের মধ্যে বস্তুটি থাকা উচিত নয় ?
জনিএইচকে

@ জননিএইচকে: হ্যাঁ কিছু ধরণের লোকেরা ভুলভাবে উত্তরটি "সংশোধন" করছে :)।
স্টেনি

তবে এটি "এক্সিকিউশন
স্ট্যাটস

1
@ কানগাভেলু সুগুমার উত্তর একত্রিতকরণ ফ্রেমওয়ার্ক explainসীমাবদ্ধতার সাথে সাথে অতিরিক্ত সম্পাদনের পরিসংখ্যান সম্পর্কিত প্রাসঙ্গিক বৈশিষ্ট্যের অনুরোধের সাথে আমি উত্তরটি আপডেট করেছি ।
স্টেনি

29

সংস্করণ থেকে শুরু 2.6.x MongoDB ব্যবহারকারীদের করার অনুমতি দিয়েছে অ্যাগ্রিগেশন ফ্রেমওয়ার্ক সঙ্গে ব্যাখ্যা

আপনাকে যা করতে হবে তা হ'ল ব্যাখ্যা যুক্ত করুন: সত্য

db.records.aggregate(
  [ ...your pipeline...],
  { explain: true }
)

রাফাকে ধন্যবাদ, আমি জানি যে এটি ২.৪-এ করা সম্ভব হয়েছিল, তবে কেবল এটির মাধ্যমে runCommand()। তবে এখন আপনিও সামগ্রিক ব্যবহার করতে পারেন।


5
প্রকৃতপক্ষে, আপনি db.collection.runCommand('aggregate', {pipeline: [PIPELINE], explain: true})মোংগোডিবি ২.২ থেকে সমষ্টিগুলি ব্যাখ্যা করতে পারেন ।
রাফা

1
আপনি ঠিক বলেছেন, ২.২ এবং ২.৪ এ আপনি কেবল রানকমন্ডের মাধ্যমে সমষ্টি ব্যাখ্যা করতে পারবেন। আপভোটের জন্য ধন্যবাদ।
রাফা

3
অপশনটি প্রযুক্তিগতভাবে ২. 2. এর আগে রানকমন্ডের মাধ্যমে উপস্থিত থাকলেও সঠিক ফলাফল দেওয়ার গ্যারান্টি নেই এবং এটির পক্ষেও পরামর্শ দেওয়া উচিত নয়। আপনার কেবল এটি 2.5.3 বা তার চেয়ে বেশি নতুন ব্যবহার করা উচিত (এবং আশা করুন যে এখনও 2.6 উত্পাদন প্রকাশের আগে কিছু বাগ লুকিয়ে থাকতে পারে)।
স্টেনি

20

সমষ্টি কাঠামো

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

সমষ্টি কাঠামো স্টেজ

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

একক পাইপলাইনের মধ্যে একাধিকবার একই ধরণের স্টেজ

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


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