Recursive Queries হল এমন ধরনের কোয়েরি, যা নিজেই নিজেকে কল করে বা পূর্ববর্তী আউটপুট ব্যবহার করে পুনরায় কাজ করে। গ্রাফ ডেটাবেসে সাধারণত গ্রাফ ট্রাভার্সাল বা সম্পর্কিত ডেটার মধ্যে পুনরাবৃত্তির জন্য রিকার্সিভ কোয়েরি ব্যবহৃত হয়। ArangoDB-তে AQL (Arango Query Language) এর মাধ্যমে রিকার্সিভ কোয়েরি পরিচালনা করা যায়, যা গ্রাফ ডেটা মডেলিংয়ের জন্য অত্যন্ত কার্যকর।
ArangoDB-তে রিকার্সিভ কোয়েরি ব্যবহৃত হয় যখন আপনি গ্রাফ ডেটা মডেল থেকে সম্পর্কিত ডেটা পুনরায় এক্সপ্লোর করতে চান। বিশেষ করে Vertex এবং Edge এর মধ্যে সম্পর্ক খুঁজে বের করতে রিকার্সিভ কোয়েরি অত্যন্ত সহায়ক।
ধরা যাক, একটি সোশ্যাল নেটওয়ার্কের গ্রাফে ব্যক্তি (Person) এবং তাদের বন্ধু (Friend) সম্পর্ক সংরক্ষিত আছে। আপনি যদি জানতে চান, নির্দিষ্ট একজন ব্যক্তির বন্ধুদের বন্ধুরা কে, তাহলে একটি রিকার্সিভ কোয়েরি ব্যবহার করা হবে।
ArangoDB-তে রিকার্সিভ কোয়েরি চালানোর জন্য Graph Traversal অথবা WITH অপারেটর ব্যবহার করা হয়। সাধারণত এই কোয়েরি গুলি FOR লুপের মাধ্যমে সম্পন্ন হয়।
WITH অপারেটর ArangoDB-তে ব্যবহার করে আপনি একাধিক পর্যায়ে Edge Traversal বা গ্রাফের মধ্যে ডেটা ট্রাভার্স করতে পারেন। এটি রিকার্সিভ কোয়েরি তৈরির জন্য ব্যবহৃত হয়।
Query Description:
একটি ব্যক্তি থেকে তার বন্ধুদের (Friend), তারপর তাদের বন্ধুদের (Friend) বের করা হবে।
FOR person IN persons
LET friends = (
FOR friend IN OUTBOUND person friends
RETURN friend
)
LET friends_of_friends = (
FOR fof IN OUTBOUND friends friends
RETURN fof
)
RETURN {person: person.name, friends: friends, friends_of_friends: friends_of_friends}
এই কোয়েরি প্রথমে person
এর বন্ধুদের বের করবে (OUTBOUND Traversal), তারপর তাদের বন্ধুদের বের করবে। এটি দুটি লেট স্টেটমেন্টে বিভক্ত, যা প্রতিটি পর্যায়ে রিকার্সিভ কোয়েরি প্রয়োগ করে।
ArangoDB গ্রাফ ট্রাভার্সাল কার্যকলাপের জন্য অনেক শক্তিশালী বৈশিষ্ট্য সরবরাহ করে, যার মধ্যে DFS (Depth First Search) এবং BFS (Breadth First Search) অন্তর্ভুক্ত। এই ট্রাভার্সাল প্রযুক্তির মাধ্যমে আমরা গ্রাফের ভিতরে রিকার্সিভভাবে ডেটা অনুসন্ধান করতে পারি।
Max Depth:
FOR v, e, p IN 1..5 OUTBOUND 'person/123' friends
RETURN p.vertices
এখানে 1..5
নির্দেশ করে যে সর্বোচ্চ ৫টি স্তর পর্যন্ত ট্রাভার্সাল করা হবে।
Limit and Filter:
FOR person IN persons
FILTER person.age > 30
LET friends = (
FOR friend IN OUTBOUND person friends
FILTER friend.age > 30
RETURN friend
)
RETURN friends
Recursive Queries ArangoDB-তে গ্রাফ ডেটা মডেল থেকে সম্পর্কিত ডেটা খুঁজে বের করার জন্য একটি শক্তিশালী উপায়। AQL এবং Graph Traversal অপারেটর ব্যবহার করে, আপনি সহজেই একটি Vertex থেকে তার সম্পর্কিত Edge অনুসন্ধান করতে পারেন। তবে এই ধরনের কোয়েরি ব্যবহারের সময় Performance এবং Memory ব্যবস্থাপনাকে গুরুত্ব দিয়ে কনফিগারেশন করা উচিত।