DocumentDB এবং MongoDB উভয়ই Aggregation Pipelines এবং MapReduce সাপোর্ট করে, যা ডেটার উপর জটিল বিশ্লেষণ এবং ট্রান্সফর্মেশন সম্পাদন করতে ব্যবহৃত হয়। এই দুটি ফিচার ডেটা প্রসেসিংয়ের জন্য খুবই শক্তিশালী টুলস, তবে তাদের ব্যবহার ও পারফরম্যান্স ভিন্ন।
Aggregation Pipelines হল MongoDB/DocumentDB-তে ডেটা প্রক্রিয়াকরণের একটি শক্তিশালী পদ্ধতি, যা একাধিক ধাপে ডেটা প্রক্রিয়া করতে সহায়ক। এটি একটি সিরিজ অব স্টেপ বা Stages দ্বারা গঠিত, যেখানে প্রতিটি স্টেজ একটি নির্দিষ্ট কাজ করে, যেমন ডেটা ফিল্টারিং, গ্রুপিং, সোর্টিং, বা প্রজেকশন।
$match
, $group
, $sort
, $project
, $unwind
, ইত্যাদি।$match: ডেটাকে নির্দিষ্ট শর্তে ফিল্টার করা।
{ $match: { age: { $gt: 30 } } }
এই স্টেজটি শুধুমাত্র সেই ডকুমেন্টগুলোকে রাখবে যেখানে age
30 এর বেশি।
$group: ডেটাকে গ্রুপ করা এবং অ্যাগ্রিগেট করা।
{ $group: { _id: "$category", total: { $sum: "$amount" } } }
এটি category
অনুযায়ী ডেটা গ্রুপ করে এবং প্রতিটি গ্রুপের মোট পরিমাণ গণনা করবে।
$sort: ডেটাকে সোর্ট করা।
{ $sort: { total: -1 } }
এটি total
এর ভিত্তিতে ডেটাকে অবতরণীভাবে সাজাবে।
$project: ডেটার কিছু ফিল্ড মুছে ফেলা বা নতুন ফিল্ড তৈরি করা।
{ $project: { name: 1, age: 1, _id: 0 } }
এটি শুধুমাত্র name
এবং age
ফিল্ড রাখবে এবং _id
ফিল্ড বাদ দেবে।
$unwind: অ্যারে ভ্যালু এক্সপ্যান্ড করা।
{ $unwind: "$items" }
যদি items
একটি অ্যারে হয়, তবে এটি প্রতিটি আইটেমের জন্য একটি আলাদা ডকুমেন্ট তৈরি করবে।
db.orders.aggregate([
{ $match: { status: "shipped" } },
{ $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } },
{ $limit: 5 }
])
এই উদাহরণে:
MapReduce একটি ডেটা প্রসেসিং মডেল যা বড় ডেটাসেটের সাথে কাজ করার সময় প্যারালাল প্রক্রিয়াকরণ সম্পাদন করতে সাহায্য করে। MongoDB/DocumentDB-তে এটি map এবং reduce ধাপে বিভক্ত:
ধরা যাক, আপনার কাছে অর্ডার তথ্য রয়েছে এবং আপনি প্রতিটি গ্রাহকের জন্য মোট পরিমাণ হিসাব করতে চান।
Map Function:
function() {
emit(this.customer, this.amount);
}
এখানে, প্রতিটি ডকুমেন্টের জন্য একটি কী-ভ্যালু পেয়ার তৈরি হচ্ছে, যেখানে customer
কী এবং amount
ভ্যালু।
Reduce Function:
function(key, values) {
return Array.sum(values);
}
এটি গ্রাহকের জন্য সমস্ত পরিমাণ যোগ করে মোট পরিমাণ বের করে।
db.orders.mapReduce(
function() { emit(this.customer, this.amount); },
function(key, values) { return Array.sum(values); },
{ out: "total_sales" }
)
এই MapReduce অপারেশনটি:
amount
এর মোট যোগফল বের করবে।total_sales
নামক একটি নতুন কলে সংরক্ষণ করবে।ফিচার | Aggregation Pipelines | MapReduce |
---|---|---|
সহজতা | সহজ, একাধিক স্টেজ ব্যবহার করে ডেটা প্রক্রিয়া করা যায়। | জটিল, ম্যানুয়ালি দুটি আলাদা ফাংশন (map, reduce) লিখতে হয়। |
পারফরম্যান্স | দ্রুত, বিশেষ করে যখন ডেটার পরিমাণ অনেক বেশি। | সাধারণত কমপার্ট পারফরম্যান্স, বিশেষ করে বড় ডেটাসেটে। |
পুনঃব্যবহারযোগ্যতা | পুনঃব্যবহারযোগ্য, একাধিক স্টেজের মাধ্যমে কাস্টম লজিক প্রয়োগ করা যায়। | পুনঃব্যবহারযোগ্য নয়, পুনরায় লেখার প্রয়োজন হতে পারে। |
ডেটা প্রক্রিয়া | একটি স্ট্রিমিং পদ্ধতিতে ধাপে ধাপে ডেটা প্রক্রিয়া করা হয়। | বড় ডেটাসেট একত্রিত করার জন্য ম্যাপ এবং রিডিউস ফাংশন ব্যবহার করে। |
Aggregation Pipelines এবং MapReduce উভয়ই MongoDB এবং DocumentDB-তে জটিল ডেটা প্রক্রিয়াকরণের জন্য শক্তিশালী টুলস, তবে তাদের মধ্যে পারফরম্যান্স এবং ব্যবহারিক সুবিধার পার্থক্য রয়েছে। Aggregation Pipelines সাধারণত দ্রুত এবং সহজ, এবং এতে কম জটিলতা থাকে, যখন MapReduce বড় ডেটাসেটের সাথে প্যারালাল প্রক্রিয়াকরণ করতে ব্যবহৃত হয়, তবে এটি কিছুটা ধীর গতির হতে পারে এবং এটি সাধারণত কম প্রায়োগিক হয়।
common.read_more