DocumentDB এর Query Language

Database Tutorials - ডকুমেন্ট ডিবি (DocumentDB)
276
276

Amazon DocumentDB MongoDB এর API সমর্থন করে এবং MongoDB-এ ব্যবহৃত MongoDB Query Language (MQL) এর মতোই DocumentDB Query Language (DQL) ব্যবহার করা হয়। DocumentDB-এর কুয়েরি ভাষা JSON ডকুমেন্ট ভিত্তিক এবং MongoDB-এর মত ডেটাকে অনুসন্ধান, সিলেক্ট, আপডেট এবং ডিলিট করার জন্য ব্যবহৃত হয়।

DocumentDB এর কুয়েরি ভাষা MongoDB-এর API-র সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ, তবে কিছু বৈশিষ্ট্য পার্থক্য থাকতে পারে, কারণ এটি AWS দ্বারা পরিচালিত এবং MongoDB-এর নির্দিষ্ট কিছু বৈশিষ্ট্য সমর্থন নাও করতে পারে।


DocumentDB এর Query Language এর প্রধান বৈশিষ্ট্য

১. ডকুমেন্টের জন্য অনুসন্ধান (Querying Documents)

DocumentDB এ কুয়েরি করা হয় JSON ডকুমেন্টের মাধ্যমে, যা ডেটার নির্দিষ্ট ক্ষেত্র অনুসারে ডেটা রিট্রিভ করতে সহায়ক। ডেটাবেস থেকে ডেটা বের করার জন্য find() মেথড ব্যবহার করা হয়, যা MongoDB-এর মতোই DocumentDB তেও কাজ করে।

উদাহরণ:

db.collection.find({ "name": "John" })

এই কুয়েরিটি name ফিল্ডের মান "John" সম্বলিত সব ডকুমেন্ট রিটার্ন করবে।

২. ফিল্টারিং (Filtering)

কুয়েরির মাধ্যমে আপনি বিভিন্ন কন্ডিশন দিয়ে ডেটা ফিল্টার করতে পারেন। MongoDB এর মত, comparison operators যেমন $eq, $lt, $gt, $ne, $in, $nin ইত্যাদি ব্যবহার করে ডেটা ফিল্টার করা যায়।

উদাহরণ:

db.collection.find({ "age": { "$gt": 30 } })

এই কুয়েরিটি age ফিল্ডের মান ৩০ এর বেশি এমন সমস্ত ডকুমেন্ট রিটার্ন করবে।

৩. সোর্টিং (Sorting)

DocumentDB-তে ডেটা সোর্ট করতে sort() ফাংশন ব্যবহার করা হয়। আপনি ascending অথবা descending অর্ডারে ডেটা সজ্জিত করতে পারেন।

উদাহরণ:

db.collection.find().sort({ "age": 1 })

এটি age ফিল্ডের মান অনুযায়ী ascending অর্ডারে ডকুমেন্ট রিটার্ন করবে।

৪. প্রজেকশন (Projection)

কিছু ক্ষেত্রে, আপনি ডেটাবেস থেকে কেবল কিছু নির্দিষ্ট ফিল্ডই বের করতে চান, পুরো ডকুমেন্ট নয়। এই প্রক্রিয়াটিকে projection বলা হয়। find() মেথডের দ্বিতীয় আর্গুমেন্ট হিসেবে প্রজেকশন প্যারামিটার দেওয়া হয়।

উদাহরণ:

db.collection.find({ "name": "John" }, { "age": 1, "city": 1 })

এটি শুধুমাত্র age এবং city ফিল্ড রিটার্ন করবে যেখানে name "John"

৫. এলিমেন্ট আপডেট (Updating Elements)

DocumentDB-তে ডেটা আপডেট করতে update() অথবা updateOne() এবং updateMany() মেথড ব্যবহার করা হয়। আপডেট করার সময় আপনি $set অপারেটর ব্যবহার করে একটি নির্দিষ্ট ফিল্ডের মান পরিবর্তন করতে পারেন।

উদাহরণ:

db.collection.updateOne({ "name": "John" }, { "$set": { "age": 35 } })

এই কুয়েরিটি name "John" থাকা ডকুমেন্টটির age ফিল্ডের মান ৩৫ তে আপডেট করবে।

৬. ডিলিট অপারেশন (Delete Operations)

DocumentDB-তে ডেটা মুছতে deleteOne() অথবা deleteMany() মেথড ব্যবহার করা হয়।

উদাহরণ:

db.collection.deleteOne({ "name": "John" })

এই কুয়েরিটি name "John" থাকা একটি ডকুমেন্ট মুছে ফেলবে।

৭. অ্যাগ্রিগেশন (Aggregation)

DocumentDB MongoDB-এর মতো aggregation pipeline সমর্থন করে, যেখানে আপনি group, sum, avg, match, sort ইত্যাদি অপারেটর ব্যবহার করে ডেটা সংকলন করতে পারেন। এটি অনেক জটিল কুয়েরি এবং বিশ্লেষণ করতে ব্যবহৃত হয়।

উদাহরণ:

db.collection.aggregate([
  { "$match": { "age": { "$gte": 30 } } },
  { "$group": { "_id": "$city", "averageAge": { "$avg": "$age" } } }
])

এই কুয়েরিটি age ৩০ এর বেশি থাকা ডকুমেন্টগুলিকে group করে এবং প্রতিটি city-এর গড় age বের করবে।


DocumentDB-তে বিশেষ কিছু Query Language বৈশিষ্ট্য

DocumentDB MongoDB-এর Query Language-এর সাথে বড় পরিমাণে সামঞ্জস্যপূর্ণ হলেও কিছু পার্থক্য রয়েছে।

  1. Indexing: DocumentDB MongoDB এর মতোই ইনডেক্সিং সমর্থন করে, যা কুয়েরি পারফরম্যান্স বৃদ্ধি করে। তবে, Global Secondary Indexes এবং Compound Indexes তৈরি করার জন্য কিছু সীমাবদ্ধতা থাকতে পারে।
  2. Aggregation Support: DocumentDB এর aggregation pipeline সমর্থন রয়েছে, তবে MongoDB এর কিছু উন্নত অ্যাগ্রিগেশন অপারেটর (যেমন, $out, $merge, ইত্যাদি) এখনও DocumentDB তে সমর্থিত নয়।
  3. Transactions: DocumentDB MongoDB-তে রেডিও ট্রানজাকশন সমর্থন করলেও multi-document transactions-এর জন্য কিছু পার্থক্য থাকতে পারে।

Conclusion

DocumentDB-এর কুয়েরি ভাষা MongoDB-এর মতোই কাজ করে, যা JSON ডকুমেন্টের সাথে সহজেই কাজ করতে দেয়। Find, Update, Delete, Projection, Aggregation ইত্যাদি অপারেটরগুলি ব্যবহার করে আপনি ডেটা দ্রুত এবং কার্যকরভাবে অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন। MongoDB-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ হওয়ায়, যারা MongoDB ব্যবহার করছেন তারা সহজেই DocumentDB তে স্থানান্তর করতে সক্ষম হবেন, তবে কিছু পার্থক্য থাকতে পারে।

common.content_added_by

MongoDB Query Language এর সাথে সামঞ্জস্যতা

214
214

Amazon DocumentDB MongoDB-তে ব্যবহৃত Query Language (MQL) এর সাথে একটি উচ্চ স্তরের সামঞ্জস্যতা প্রদান করে। এটি MongoDB ব্যবহারকারীদের জন্য একটি সহজ স্থানান্তর প্রক্রিয়া নিশ্চিত করে, বিশেষ করে যখন তারা তাদের অ্যাপ্লিকেশন AWS পরিবেশে স্থানান্তর করতে চান। তবে, MongoDB-এর কিছু উন্নত বৈশিষ্ট্য DocumentDB-তে সমর্থিত নয়। তাই কিছু পার্থক্য রয়েছে, যদিও অধিকাংশ মৌলিক কার্যক্রম ঠিকভাবে কাজ করে।


MongoDB Query Language এর মূল বৈশিষ্ট্যসমূহ

MongoDB Query Language (MQL) হল MongoDB ডেটাবেসের জন্য ব্যবহৃত একটি শক্তিশালী কুয়েরি ভাষা, যা ডকুমেন্ট ভিত্তিক ডেটা ম্যানিপুলেশন এবং অনুসন্ধান করার জন্য ব্যবহৃত হয়। এতে কুয়েরি, ইনডেক্সিং, এবং অ্যাগ্রিগেশন যেমন বিভিন্ন অপারেশন সহজেই করা যায়। MQL এর কয়েকটি মূল বৈশিষ্ট্য:

  • Query: ডেটা অনুসন্ধানের জন্য নির্দিষ্ট শর্তে কুয়েরি তৈরি করা যায়।
  • Aggregation: বিভিন্ন ডেটা অপারেশন একত্রিত করতে অ্যাগ্রিগেশন পিপলাইন ব্যবহার করা যায়।
  • Update: ডেটা আপডেট করতে বিভিন্ন অপারেশন যেমন update, upsert প্রভৃতি ব্যবহৃত হয়।
  • Delete: ডেটা মুছে ফেলার জন্য deleteOne, deleteMany অপারেশন ব্যবহৃত হয়।

DocumentDB এবং MongoDB এর Query Language সামঞ্জস্যতা

1. মৌলিক কুয়েরি অপারেশন

DocumentDB MongoDB-এর মতোই find() এবং query() অপারেশন সমর্থন করে, যা JSON স্টাইলের কুয়েরি ব্যবহার করে ডেটা খুঁজে বের করতে সাহায্য করে। সাধারণ কুয়েরি, যেমন find(), eq, gt, lt, ne ইত্যাদি, একে অপরের সাথে সামঞ্জস্যপূর্ণ।

উদাহরণ:

db.users.find({ "age": { "$gt": 18 } })

এই কুয়েরি MongoDB এবং DocumentDB উভয়েই সমর্থন করবে, যেখানে এটি "age" ১৮ এর বেশি এমন ব্যবহারকারীদের অনুসন্ধান করবে।

2. Aggregation Pipelines

DocumentDB Aggregation Pipelines সমর্থন করে, যা MongoDB-তে ব্যবহৃত অ্যাগ্রিগেশন অপারেশনগুলি চালানোর জন্য ব্যবহৃত হয়। এটি group, match, project, এবং sort অপারেশনগুলির জন্য MongoDB-এর মতো সমর্থন প্রদান করে।

উদাহরণ:

db.orders.aggregate([
  { "$match": { "status": "shipped" } },
  { "$group": { "_id": "$customerId", "totalAmount": { "$sum": "$amount" } } }
])

এটি MongoDB এবং DocumentDB উভয় ক্ষেত্রেই কাজ করবে, যেখানে এটি "shipped" স্ট্যাটাসের অর্ডারগুলির জন্য গ্রুপিং এবং সেমিং অপারেশন করে।

3. Update Operations

DocumentDB MongoDB-এর মতো updateOne() এবং updateMany() অপারেশনগুলি সমর্থন করে, যার মাধ্যমে ডেটা আপডেট করা যায়। তবে, কিছু ক্ষেত্রে upsert সমর্থন নাও থাকতে পারে।

উদাহরণ:

db.users.updateOne(
  { "name": "John" },
  { "$set": { "age": 30 } }
)

এই কুয়েরি MongoDB এবং DocumentDB উভয়েই সমর্থন করে, যেখানে "John" নামের ব্যবহারকারীর বয়স ৩০ তে আপডেট হবে।

4. Indexing

DocumentDB MongoDB-এর ইনডেক্সিং অপারেশনগুলির মতোই কাজ করে, যেমন single field indexes, compound indexes, এবং text indexes। তবে কিছু অগ্রাধিকার ফিচার যেমন geospatial indexes MongoDB-তে বিদ্যমান থাকলেও DocumentDB-তে তাদের সমর্থন নেই।

5. Limitations

DocumentDB MongoDB-এর কিছু উন্নত বৈশিষ্ট্য যেমন Change Streams, Transactions (একাধিক ডকুমেন্টের জন্য), এবং Full-Text Search সম্পূর্ণভাবে সমর্থন করে না। কিছু ক্ষেত্রে aggregation framework এর নির্দিষ্ট ফিচারগুলি ও কাজ নাও করতে পারে।


সামঞ্জস্যতা সংক্রান্ত পার্থক্য

  • Change Streams: MongoDB-তে Change Streams একটি রিয়েল-টাইম ডেটা স্ট্রিমিং অপশন সরবরাহ করে, কিন্তু DocumentDB-তে এটি সমর্থিত নয়।
  • Transactions: MongoDB তে ACID transactions সমর্থন করা হয়, যেখানে একাধিক ডকুমেন্ট এবং কালেকশনে অ্যাটমিক অপারেশন সম্পাদন করা যায়, তবে DocumentDB এ এর সমর্থন সীমিত।
  • Full-Text Search: MongoDB তে text indexing এর মাধ্যমে পূর্ণ পাঠ অনুসন্ধান করতে পারেন, কিন্তু DocumentDB-তে এটি সমর্থিত নয়।
  • Advanced Aggregation: MongoDB তে কিছু উন্নত অ্যাগ্রিগেশন ফিচার যেমন $lookup (যা সংযুক্ত ডকুমেন্টগুলিকে একত্রিত করে) এবং $graphLookup (গ্রাফ কুয়েরি করার জন্য) DocumentDB-তে কাজ নাও করতে পারে।

সারাংশ

DocumentDB MongoDB Query Language (MQL) এর সাথে একটি শক্তিশালী সামঞ্জস্যতা প্রদান করে, তবে কিছু ক্ষেত্রে MongoDB-এর উন্নত ফিচারগুলি (যেমন Change Streams, Full-Text Search, এবং ACID Transactions) DocumentDB-তে সমর্থিত নয়। তবে, মৌলিক কুয়েরি অপারেশন এবং অ্যাগ্রিগেশন অপারেশনগুলি MongoDB-এর মতোই কাজ করে, যা MongoDB ব্যবহারকারীদের জন্য DocumentDB তে স্থানান্তর সহজ করে তোলে।

common.content_added_by

Projection, Filtering, এবং Sorting

238
238

Amazon DocumentDB, MongoDB-এর API সমর্থন করে, যার ফলে আপনি MongoDB-এর Query Language ব্যবহার করে ডেটাবেস থেকে তথ্য অনুসন্ধান এবং ম্যানিপুলেট করতে পারেন। এই প্রক্রিয়াগুলির মধ্যে তিনটি গুরুত্বপূর্ণ কার্যকারিতা হলো Projection, Filtering, এবং Sorting। এগুলি ডেটাবেসের মধ্যে থাকা তথ্যের পরিমাণ কমাতে এবং ফলাফলকে আরো নির্দিষ্ট ও কার্যকরীভাবে সজ্জিত করতে সহায়ক।


১. Projection

Projection এর মাধ্যমে আপনি MongoDB অথবা DocumentDB-তে কুয়েরি চালানোর সময় শুধুমাত্র নির্দিষ্ট ফিল্ডগুলো ফিরিয়ে পেতে পারেন, যা ফলাফলের আউটপুটকে আরও নির্দিষ্ট এবং দ্রুততর করে তোলে।

Projection আপনাকে ডেটাবেসে থাকা ডকুমেন্টের সকল ফিল্ডের পরিবর্তে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো নিয়ে আসার সুযোগ দেয়।

উদাহরণ:

ধরা যাক, আপনার একটি users নামক কলেকশন আছে এবং আপনি শুধুমাত্র name এবং email ফিল্ডগুলো দেখতে চান। এর জন্য নিম্নলিখিত কুয়েরি ব্যবহার করতে পারেন:

db.users.find({}, { name: 1, email: 1 })

এখানে:

  • {}: সমস্ত ডকুমেন্টের জন্য অনুসন্ধান।
  • { name: 1, email: 1 }: শুধুমাত্র name এবং email ফিল্ডগুলো ফেরত দিবে, অন্যসব ফিল্ড বাদ দিবে।

Note: 1 দিয়ে ফিল্ডটি নির্বাচন করা হয়, এবং 0 দিয়ে বাদ দেওয়া হয়। যদি আপনি কোনো ফিল্ড বাদ দিতে চান, তবে তাকে 0 দিয়ে ইন্ডিকেট করুন।

আরো একটি উদাহরণ:

db.users.find({}, { _id: 0, name: 1, email: 1 })

এখানে _id ফিল্ড বাদ দেওয়া হয়েছে কারণ ডিফল্টভাবে _id সবসময় ফিরিয়ে আসে।


২. Filtering

Filtering দ্বারা আপনি ডেটাবেস থেকে নির্দিষ্ট শর্ত পূরণের ভিত্তিতে ডেটা প্রাপ্তি করতে পারেন। এটি find() মেথডের মাধ্যমে অনুসন্ধান পরিচালনার সময় শর্ত আরোপ করে।

উদাহরণ:

ধরা যাক, আপনি users কলেকশন থেকে শুধুমাত্র সেই সমস্ত ব্যবহারকারীর নাম এবং ইমেইল দেখতে চান, যাদের বয়স ৩০ এর উপরে। এর জন্য কুয়েরি হবে:

db.users.find({ age: { $gt: 30 } }, { name: 1, email: 1 })

এখানে:

  • { age: { $gt: 30 } }: age ফিল্ডের মান ৩০ এর বেশি এমন ডকুমেন্টগুলো বাছাই করবে।
  • { name: 1, email: 1 }: শুধুমাত্র name এবং email ফিল্ডগুলো ফিরিয়ে আনবে।

DocumentDB এবং MongoDB-এর বিভিন্ন comparison operators ব্যবহার করে আরো জটিল ফিল্টারিং করা যায়, যেমন:

  • $eq: সমান
  • $ne: না সমান
  • $lt: ছোট
  • $lte: ছোট অথবা সমান
  • $gt: বড়
  • $gte: বড় অথবা সমান
  • $in: একটি নির্দিষ্ট মানের মধ্যে

উদাহরণ:

db.users.find({ age: { $gte: 18, $lte: 40 } }, { name: 1, age: 1 })

এখানে:

  • বাছাই করা হচ্ছে বয়স ১৮ এবং ৪০ এর মধ্যে এমন ব্যবহারকারীদের তথ্য।

৩. Sorting

Sorting ব্যবহার করে আপনি ডেটাবেসের রিটার্নকৃত ডেটা সাজাতে পারেন। এটি ডেটাকে একটি নির্দিষ্ট অর্ডারে সাজানোর জন্য ব্যবহৃত হয়, যেমন অ্যাসেন্ডিং (ascending) বা ডেসেন্ডিং (descending) অর্ডারে।

উদাহরণ:

ধরা যাক, আপনি users কলেকশন থেকে সকল ব্যবহারকারীর নাম এবং বয়স দেখতে চান এবং সেই ডেটাকে বয়স অনুযায়ী সাজাতে চান (অ্যাসেন্ডিং অর্ডারে):

db.users.find({}, { name: 1, age: 1 }).sort({ age: 1 })

এখানে:

  • .sort({ age: 1 }): age ফিল্ডটি অ্যাসেন্ডিং (ascending) অর্ডারে সাজাবে। (1 মানে অ্যাসেন্ডিং, -1 মানে ডেসেন্ডিং)

আরো একটি উদাহরণ (ডেসেন্ডিং অর্ডার):

db.users.find({}, { name: 1, age: 1 }).sort({ age: -1 })

এখানে:

  • .sort({ age: -1 }): age ফিল্ডটি ডেসেন্ডিং (descending) অর্ডারে সাজাবে।

সারাংশ

  • Projection এর মাধ্যমে আপনি ডেটার নির্দিষ্ট ফিল্ডগুলো নিয়ে আসতে পারেন, যা পরবর্তীতে আপনার অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
  • Filtering ব্যবহার করে আপনি ডেটার মধ্যে শর্ত আরোপ করতে পারেন এবং শুধুমাত্র প্রয়োজনীয় ডেটা ফেরত পেতে পারেন।
  • Sorting ডেটাকে একটি নির্দিষ্ট অর্ডারে সাজাতে সাহায্য করে, যা ডেটা বিশ্লেষণের জন্য সহায়ক হতে পারে।

এগুলি ব্যবহার করে আপনি DocumentDB অথবা MongoDB-এর ডেটা অনুসন্ধান, বিশ্লেষণ এবং পরিচালনাকে আরো কার্যকরী এবং সুনির্দিষ্ট করতে পারেন।

common.content_added_by

Aggregation Pipelines এবং MapReduce

229
229

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


Aggregation Pipelines

Aggregation Pipelines হল MongoDB/DocumentDB-তে ডেটা প্রক্রিয়াকরণের একটি শক্তিশালী পদ্ধতি, যা একাধিক ধাপে ডেটা প্রক্রিয়া করতে সহায়ক। এটি একটি সিরিজ অব স্টেপ বা Stages দ্বারা গঠিত, যেখানে প্রতিটি স্টেজ একটি নির্দিষ্ট কাজ করে, যেমন ডেটা ফিল্টারিং, গ্রুপিং, সোর্টিং, বা প্রজেকশন।

Aggregation Pipeline-এর মূল উপাদান:

  • Stages: প্রতিটি স্টেজে ডেটা একটি নির্দিষ্ট ভাবে পরিবর্তিত হয়।
  • Operators: বিভিন্ন স্টেজে ডেটা পরিবর্তন বা প্রক্রিয়া করতে ব্যবহার করা হয়, যেমন $match, $group, $sort, $project, $unwind, ইত্যাদি।

প্রধান স্টেজগুলির উদাহরণ:

  1. $match: ডেটাকে নির্দিষ্ট শর্তে ফিল্টার করা।

    { $match: { age: { $gt: 30 } } }
    

    এই স্টেজটি শুধুমাত্র সেই ডকুমেন্টগুলোকে রাখবে যেখানে age 30 এর বেশি।

  2. $group: ডেটাকে গ্রুপ করা এবং অ্যাগ্রিগেট করা।

    { $group: { _id: "$category", total: { $sum: "$amount" } } }
    

    এটি category অনুযায়ী ডেটা গ্রুপ করে এবং প্রতিটি গ্রুপের মোট পরিমাণ গণনা করবে।

  3. $sort: ডেটাকে সোর্ট করা।

    { $sort: { total: -1 } }
    

    এটি total এর ভিত্তিতে ডেটাকে অবতরণীভাবে সাজাবে।

  4. $project: ডেটার কিছু ফিল্ড মুছে ফেলা বা নতুন ফিল্ড তৈরি করা।

    { $project: { name: 1, age: 1, _id: 0 } }
    

    এটি শুধুমাত্র name এবং age ফিল্ড রাখবে এবং _id ফিল্ড বাদ দেবে।

  5. $unwind: অ্যারে ভ্যালু এক্সপ্যান্ড করা।

    { $unwind: "$items" }
    

    যদি items একটি অ্যারে হয়, তবে এটি প্রতিটি আইটেমের জন্য একটি আলাদা ডকুমেন্ট তৈরি করবে।

Aggregation Pipeline ব্যবহার করা:

db.orders.aggregate([
  { $match: { status: "shipped" } },
  { $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
  { $sort: { totalAmount: -1 } },
  { $limit: 5 }
])

এই উদাহরণে:

  • প্রথমে শুধুমাত্র shipped স্ট্যাটাসের অর্ডারগুলি ফিল্টার করা হবে।
  • তারপর গ্রুপিং করে, গ্রাহকের মোট পরিমাণ হিসাব করা হবে।
  • পরিশেষে, ডেটাগুলি মোট পরিমাণ অনুযায়ী সজ্জিত এবং শীর্ষ ৫টি গ্রাহক দেখানো হবে।

MapReduce

MapReduce একটি ডেটা প্রসেসিং মডেল যা বড় ডেটাসেটের সাথে কাজ করার সময় প্যারালাল প্রক্রিয়াকরণ সম্পাদন করতে সাহায্য করে। MongoDB/DocumentDB-তে এটি map এবং reduce ধাপে বিভক্ত:

  • Map: ইনপুট ডেটাকে প্রক্রিয়া করে এবং একটি মিডিয়েট ডেটা স্ট্রাকচার (কী-ভ্যালু পেয়ার) তৈরি করে।
  • Reduce: মিডিয়েট ডেটাকে একত্রিত করে, যেমন, অ্যাগ্রিগেশন বা স্কোরিং করা।

MapReduce-এর ধাপ:

  1. map(): ইনপুট ডেটাকে প্রক্রিয়া করে, সাধারণত এটি কী-ভ্যালু পেয়ার রিটার্ন করে।
  2. reduce(): কী-ভ্যালু পেয়ারের উপর কম্বাইন বা অ্যাগ্রিগেট করার কাজ করে।

উদাহরণ:

ধরা যাক, আপনার কাছে অর্ডার তথ্য রয়েছে এবং আপনি প্রতিটি গ্রাহকের জন্য মোট পরিমাণ হিসাব করতে চান।

Map Function:

function() {
   emit(this.customer, this.amount);
}

এখানে, প্রতিটি ডকুমেন্টের জন্য একটি কী-ভ্যালু পেয়ার তৈরি হচ্ছে, যেখানে customer কী এবং amount ভ্যালু।

Reduce Function:

function(key, values) {
   return Array.sum(values);
}

এটি গ্রাহকের জন্য সমস্ত পরিমাণ যোগ করে মোট পরিমাণ বের করে।

MapReduce ব্যবহার:

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

ফিচারAggregation PipelinesMapReduce
সহজতাসহজ, একাধিক স্টেজ ব্যবহার করে ডেটা প্রক্রিয়া করা যায়।জটিল, ম্যানুয়ালি দুটি আলাদা ফাংশন (map, reduce) লিখতে হয়।
পারফরম্যান্সদ্রুত, বিশেষ করে যখন ডেটার পরিমাণ অনেক বেশি।সাধারণত কমপার্ট পারফরম্যান্স, বিশেষ করে বড় ডেটাসেটে।
পুনঃব্যবহারযোগ্যতাপুনঃব্যবহারযোগ্য, একাধিক স্টেজের মাধ্যমে কাস্টম লজিক প্রয়োগ করা যায়।পুনঃব্যবহারযোগ্য নয়, পুনরায় লেখার প্রয়োজন হতে পারে।
ডেটা প্রক্রিয়াএকটি স্ট্রিমিং পদ্ধতিতে ধাপে ধাপে ডেটা প্রক্রিয়া করা হয়।বড় ডেটাসেট একত্রিত করার জন্য ম্যাপ এবং রিডিউস ফাংশন ব্যবহার করে।

সারাংশ

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

common.content_added_by

Complex Query Management

218
218

DocumentDB বা MongoDB-এর মতো ডকুমেন্ট-ভিত্তিক ডেটাবেসে complex queries ব্যবস্থাপনা করতে হলে, আপনাকে বিভিন্ন কৌশল এবং অপারেটর ব্যবহার করতে হয়। ডেটাবেসের মাধ্যমে জটিল কুয়েরি তৈরি করা এবং পরিচালনা করা অনেক বড় ডেটাসেটের মধ্যে থেকে সঠিক তথ্য বের করার জন্য অত্যন্ত গুরুত্বপূর্ণ। এই কৌশলগুলির মাধ্যমে আপনি ডেটাকে আরও কার্যকরীভাবে অনুসন্ধান করতে পারবেন।


Complex Queries কী?

Complex queries হল এমন কুয়েরি যেগুলি একাধিক শর্ত, ফিল্টার, গ্রুপিং, অর্ডারিং, বা একাধিক ক্ষেত্রের উপর ভিত্তি করে তথ্য অনুসন্ধান বা প্রসেসিং করতে ব্যবহৃত হয়। DocumentDB MongoDB Query Language (MQL)-এর সাহায্যে এই ধরনের কুয়েরি পরিচালনা করে।

Complex Queries সাধারণত অন্তর্ভুক্ত করে:

  • একাধিক শর্ত এবং অপারেটর।
  • Aggregation (গ্রুপিং, ফিল্টারিং, সেমালিজিং)।
  • Joins (যদিও MongoDB সাধারণভাবে joins সাপোর্ট করে না, কিন্তু $lookup অপারেটর দিয়ে আমরা তা সিমুলেট করতে পারি)।
  • Sorting এবং Limiting

1. Multiple Conditions Filtering (একাধিক শর্তে ফিল্টারিং)

একটি ডেটা কুয়েরি করার সময়, সাধারণত একাধিক শর্তের ওপর ভিত্তি করে ফিল্টার করা হয়। DocumentDB বিভিন্ন logical operators যেমন $and, $or, $gt, $lt, $eq ইত্যাদি ব্যবহার করে একাধিক শর্ত নিয়ে কুয়েরি করতে সাহায্য করে।

উদাহরণ:

একাধিক শর্তে ডকুমেন্ট ফিল্টার করা:

db.users.find({
  "$and": [
    { "age": { "$gte": 25 } },
    { "status": "active" }
  ]
});

এটি সমস্ত ডকুমেন্ট ফিরিয়ে আনবে যেখানে:

  • age 25 বা তার বেশি।
  • status "active"

এছাড়া, $or অপারেটর ব্যবহার করে আপনি একাধিক শর্তের মধ্যে যেকোন একটি শর্ত মেলে এমন ডেটা বের করতে পারেন।


2. Aggregation Framework (এগ্রিগেশন ফ্রেমওয়ার্ক)

DocumentDB তে aggregation framework ব্যবহৃত হয় যাতে আপনি ডেটা প্রসেস করতে পারেন এবং তার উপর বিভিন্ন অপারেশন চালাতে পারেন যেমন grouping, summing, filtering, এবং sorting। এই ফ্রেমওয়ার্কটি pipelines ব্যবহার করে ডেটা প্রক্রিয়া করতে সাহায্য করে।

উদাহরণ:

একটি aggregation pipeline কুয়েরি:

db.orders.aggregate([
  { "$match": { "status": "completed" } },
  { "$group": { "_id": "$customer_id", "totalSpent": { "$sum": "$amount" } } },
  { "$sort": { "totalSpent": -1 } }
]);

এটি:

  • প্রথমে completed status এর অর্ডারগুলো ফিল্টার করবে।
  • তারপর, গ্রুপ করবে customer_id অনুযায়ী এবং প্রত্যেকের মোট খরচ (totalSpent) যোগ করবে।
  • পরে, totalSpent অনুযায়ী সেসব গ্রুপকে সাজাবে।

3. Projection (প্রজেকশন)

কখনও কখনও আপনি পুরো ডকুমেন্টের বদলে কেবল নির্দিষ্ট ফিল্ডগুলো দেখতে চান। এই সময় projection ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডস নির্বাচন করতে পারেন।

উদাহরণ:

কেবল name এবং age ফিল্ড সহ ডেটা খোঁজা:

db.users.find(
  { "status": "active" },
  { "name": 1, "age": 1, "_id": 0 }
);

এটি কেবল name এবং age ফিরিয়ে আনবে এবং _id বাদ দেবে।


4. Sorting (সাজানো)

একাধিক ফিল্ডের ওপর ভিত্তি করে আপনি $sort অপারেটর ব্যবহার করে ডেটা সাজাতে পারেন। এটি ডেটাবেসে ডেটা দ্রুত সঠিকভাবে সাজানোর জন্য অত্যন্ত কার্যকরী।

উদাহরণ:

age অনুযায়ী সাজানো (অ্যাসেন্ডিং অর্ডারে):

db.users.find({}).sort({ "age": 1 });

এটি ডেটাবেসের age ফিল্ড অনুযায়ী সাজানো ascending অর্ডারে ফলাফল দেবে। আপনি যদি descending সাজাতে চান, তবে -1 ব্যবহার করবেন:

db.users.find({}).sort({ "age": -1 });

5. Using $lookup (Join-like Operations) (জয়েন-জাতীয় অপারেশন)

MongoDB, এবং এর মাধ্যমে DocumentDB, সরাসরি joins সাপোর্ট করে না, তবে $lookup অপারেটর ব্যবহার করে বিভিন্ন কোলেকশনের মধ্যে ডেটার সংযোগ (join-like operations) করতে পারে।

উদাহরণ:

orders এবং customers কোলেকশন থেকে ডেটা নিয়ে আসা:

db.orders.aggregate([
  {
    "$lookup": {
      "from": "customers",
      "localField": "customer_id",
      "foreignField": "_id",
      "as": "customerDetails"
    }
  }
]);

এটি orders কোলেকশনের customer_id কে customers কোলেকশনের _id এর সাথে মিলিয়ে customerDetails নামে একটি নতুন ফিল্ডে সম্পর্কিত ডেটা যুক্ত করবে।


6. Pagination (পেজিনেশন)

ডেটার পরিমাণ অত্যন্ত বড় হলে, আপনি pagination ব্যবহার করতে পারেন, যাতে ডেটা ছোট অংশে ভাগ হয়ে দেখানো যায় এবং পুরো ডেটাবেস একসাথে লোড না হয়।

উদাহরণ:

প্রথম 10টি রেকর্ড নিয়ে আসা:

db.users.find({}).limit(10);

এটি প্রথম 10টি রেকর্ড ফিরিয়ে আনবে।

পেজিনেশন করার জন্য skip এবং limit একসাথে ব্যবহার করা হয়। উদাহরণস্বরূপ, দ্বিতীয় পেজের 10টি রেকর্ড দেখতে:

db.users.find({}).skip(10).limit(10);

এটি দ্বিতীয় পেজের প্রথম 10টি রেকর্ড ফিরিয়ে আনবে।


7. Indexing (ইন্ডেক্সিং)

Complex queries এর কার্যক্ষমতা বাড়ানোর জন্য indexing অত্যন্ত গুরুত্বপূর্ণ। ইন্ডেক্সিং ডেটাবেসের নির্দিষ্ট ফিল্ডে দ্রুত অনুসন্ধান করতে সহায়ক। DocumentDB MongoDB এর মতো single field, compound, এবং geospatial indexes সমর্থন করে।

উদাহরণ:

age ফিল্ডে একটি ইনডেক্স তৈরি করা:

db.users.createIndex({ "age": 1 });

এটি age ফিল্ডের উপর একটি ইনডেক্স তৈরি করবে, যা এই ফিল্ডের মাধ্যমে দ্রুত অনুসন্ধান করতে সহায়ক হবে।


Conclusion

DocumentDB তে complex query management হলো ডেটার অনুসন্ধান এবং প্রক্রিয়াকরণে উন্নতি আনার জন্য বিভিন্ন কৌশল ব্যবহার করা। Aggregation pipelines, projection, $lookup, sorting, filtering, এবং indexing এর মাধ্যমে আপনি কার্যকরীভাবে জটিল কুয়েরি তৈরি করতে পারবেন, যা বড় ডেটাসেট থেকে দ্রুত এবং নির্ভরযোগ্য ফলাফল প্রদান করবে।

common.content_added_by
টপ রেটেড অ্যাপ

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

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

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