Complex Graph Queries

Database Tutorials - আরাঙ্গো (ArangoDB) Advanced AQL Features |
207
207

ArangoDB একটি শক্তিশালী মাল্টি-মডেল ডাটাবেস, যা গ্রাফ ডেটা মডেলিং এর জন্য নেটিভ সমর্থন প্রদান করে। এর AQL (Arango Query Language) ব্যবহার করে আপনি জটিল গ্রাফ কোয়েরি লিখতে পারবেন, যা ডেটার মধ্যে সম্পর্ক এবং প্যাটার্ন বিশ্লেষণে সহায়ক। এই গাইডে আমরা ArangoDB-তে জটিল গ্রাফ কোয়েরি লেখার বিভিন্ন কৌশল আলোচনা করবো।


1. মৌলিক গ্রাফ ট্র্যাভার্সাল কোয়েরি

ArangoDB-তে গ্রাফ ট্র্যাভার্সাল ব্যবহার করে আপনি ডেটার মধ্যে সম্পর্ক খুঁজে পেতে পারেন। এটি সাধারণত vertex এবং edge এর মধ্যে সম্পর্ক বিশ্লেষণ করার জন্য ব্যবহৃত হয়।

মৌলিক গ্রাফ ট্র্যাভার্সাল

ধরা যাক, আপনার দুটি কালেকশন আছে:

  • users (যা vertices বোঝায়)
  • friendships (যা edges বোঝায়)

এখন আপনি যদি Alice-এর সমস্ত বন্ধু খুঁজে পেতে চান, তাহলে একটি মৌলিক ট্র্যাভার্সাল কোয়েরি হতে পারে:

FOR user IN users
  FILTER user.name == "Alice"
  FOR friend, edge IN 1..2 OUTBOUND user friendships
  RETURN friend.name

এই কোয়েরিটি:

  • Alice নামক ব্যবহারকারী থেকে শুরু হয়।
  • friendships এডজ ব্যবহার করে ২ লেভেল পর্যন্ত বন্ধুবান্ধব খুঁজে বের করে।
  • Alice-এর বন্ধুর নাম রিটার্ন করে।

2. ফিল্টার এবং শর্তাবলী সহ গ্রাফ কোয়েরি

ArangoDB-তে আপনি গ্রাফ কোয়েরিতে ফিল্টার এবং শর্ত যোগ করে আরও জটিল কোয়েরি তৈরি করতে পারেন। আপনি vertex এবং edge উভয়ের প্রপার্টি অনুসারে শর্ত যোগ করতে পারবেন।

এজ প্রপার্টি দ্বারা ফিল্টার

যদি আপনি এমন কোয়েরি করতে চান যেখানে কিছু নির্দিষ্ট edge-এর প্রপার্টি, যেমন "date" ব্যবহার করে সম্পর্ককে ফিল্টার করবেন, তাহলে কোয়েরি কিছুটা এরকম হতে পারে:

FOR user IN users
  FILTER user.name == "Alice"
  FOR friend, edge IN 1..2 OUTBOUND user friendships
  FILTER edge.date > "2022-01-01"
  RETURN { "friend": friend.name, "since": edge.date }

এই কোয়েরিটি:

  • Alice-এর বন্ধুদের ফিল্টার করবে যাদের সম্পর্কের শুরু "2022-01-01" এর পর হয়েছে।
  • edge.date friendships এজ-এর একটি প্রপার্টি, যা বন্ধুত্বের তারিখ নির্দেশ করে।

3. মাল্টি-হপ ট্র্যাভার্সাল

জটিল গ্রাফ কোয়েরিতে আপনি মাল্টি-হপ ট্র্যাভার্সাল ব্যবহার করতে পারেন, যেখানে একাধিক সম্পর্কের মধ্যে খুঁজে বের করতে হয়। এটি একাধিক hops বা লেভেলের মাধ্যমে সম্পর্কগুলো বিশ্লেষণ করতে সাহায্য করে।

মাল্টি-হপ ট্র্যাভার্সাল

যদি আপনি Alice-এর বন্ধুদের বন্ধুদের (২ হপ) খুঁজে পেতে চান, তাহলে কোয়েরিটি এরকম হবে:

FOR user IN users
  FILTER user.name == "Alice"
  FOR friend, edge IN 1..2 OUTBOUND user friendships
  RETURN friend.name

এটি:

  • Alice-এর বন্ধুদের (১ হপ) এবং তাদের বন্ধুদের (২ হপ) খুঁজে বের করবে।
  • OUTBOUND নির্দেশ করছে যে বন্ধুত্বের সম্পর্কটি Alice থেকে বাহিরে দিকে ট্র্যাভার্স করা হবে।

4. দ্বিমুখী (Bidirectional) ট্র্যাভার্সাল

ArangoDB-তে Bidirectional গ্রাফ কোয়েরি ব্যবহার করতে পারেন, যেখানে আপনি উভয় দিক থেকে ট্র্যাভার্সাল করতে পারেন। এটি তখন দরকার হয় যখন সম্পর্ক উভয় দিক থেকে গুরুত্বপূর্ণ হয় (যেমন, পারস্পরিক বন্ধুত্ব)।

দ্বিমুখী ট্র্যাভার্সাল

Alice এবং অন্য ব্যবহারকারীর মধ্যে পারস্পরিক বন্ধুত্ব খুঁজে বের করার জন্য আপনি ANY দিক ব্যবহার করতে পারেন, যা উভয় দিক থেকে ট্র্যাভার্সাল করবে:

FOR user IN users
  FILTER user.name == "Alice"
  FOR friend, edge IN 1..2 ANY user friendships
  RETURN friend.name

এটি:

  • Alice-এর বন্ধুর সাথে বন্ধুত্ব খুঁজে বের করবে এবং উভয় দিক থেকেই সম্পর্ক ট্র্যাভার্স করবে।

5. গ্রাফ অ্যালগরিদম: শর্টেস্ট পাথ

ArangoDB গ্রাফ অ্যালগরিদম সরবরাহ করে, যেমন শর্টেস্ট পাথ খোঁজা, যা দুটি vertex এর মধ্যে সবচেয়ে সরল সম্পর্ক (পথ) খুঁজে পেতে সাহায্য করে।

শর্টেস্ট পাথ

Alice এবং অন্য একটি ব্যবহারকারীর (যেমন, "Bob") মধ্যে শর্টেস্ট পাথ খুঁজে পেতে কোয়েরিটি হবে:

FOR v, e, p IN 1..10 ANY "users/Alice" friendships
  FILTER v.name == "Bob"
  RETURN p

এটি:

  • Alice এবং Bob-এর মধ্যে সবচেয়ে সরল পথ খুঁজে বের করবে।
  • p ভেরিয়েবলটি পথের বিবরণ ধারণ করে, যেমন কোন vertex এবং edge গুলি ট্র্যাভার্স করা হয়েছে।

6. গ্রাফ কোয়েরি সহ অ্যাগ্রিগেশন

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

এগ্রিগেটিং ফ্রেন্ডশিপ লোকেশন অনুযায়ী

ধরা যাক, users কালেকশনে একটি location প্রপার্টি রয়েছে, এবং আপনি জানতে চান Alice-এর কতজন বন্ধু একই শহরে থাকেন:

FOR user IN users
  FILTER user.name == "Alice"
  FOR friend, edge IN 1..2 OUTBOUND user friendships
  FILTER friend.location == user.location
  COLLECT city = user.location WITH COUNT INTO friend_count
  RETURN { "city": city, "friend_count": friend_count }

এই কোয়েরিটি:

  • Alice-এর বন্ধুকে ফিল্টার করবে যারা একই শহরে অবস্থান করছে।
  • COLLECT ফাংশন ব্যবহার করে শহর অনুযায়ী বন্ধুদের সংখ্যা গণনা করবে।

7. পাথ বিশ্লেষণ

আরও জটিল ক্ষেত্রের জন্য, আপনি পাথ বিশ্লেষণ করতে পারেন, যেখানে আপনি গ্রাফের মধ্যে একাধিক সম্পর্ক খুঁজে বের করতে পারেন।

এজ ওয়েট সহ পাথ বিশ্লেষণ

যদি আপনি কোনো পাথের উপর এজ ওয়েট বিশ্লেষণ করতে চান (যেমন, বন্ধুত্বের শক্তি বা সম্পর্কের ভার), তাহলে কোয়েরিটি হবে:

FOR user IN users
  FILTER user.name == "Alice"
  FOR v, e, p IN 1..5 OUTBOUND user friendships
  FILTER v.name == "Bob"
  RETURN { "path": p.edges, "weight": SUM(p.edges[*].weight) }

এই কোয়েরিটি:

  • Alice থেকে Bob পর্যন্ত পাথ খুঁজে বের করবে এবং weight প্রপার্টি দ্বারা পাথের শক্তি (অথবা সম্পর্কের গুরুত্ব) নির্ধারণ করবে।

8. কাস্টম গ্রাফ অ্যালগরিদম

ArangoDB-তে আপনি Foxx microservices ফ্রেমওয়ার্ক ব্যবহার করে কাস্টম গ্রাফ অ্যালগরিদমও তৈরি করতে পারেন। আপনি JavaScript দিয়ে কাস্টম ট্র্যাভার্সাল লজিক এবং গ্রাফ প্রোসেসিং ইমপ্লিমেন্ট করতে পারেন।


সারাংশ

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

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

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

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

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