ArangoDB একটি শক্তিশালী মাল্টি-মডেল ডাটাবেস, যা গ্রাফ ডেটা মডেলিং এর জন্য নেটিভ সমর্থন প্রদান করে। এর AQL (Arango Query Language) ব্যবহার করে আপনি জটিল গ্রাফ কোয়েরি লিখতে পারবেন, যা ডেটার মধ্যে সম্পর্ক এবং প্যাটার্ন বিশ্লেষণে সহায়ক। এই গাইডে আমরা ArangoDB-তে জটিল গ্রাফ কোয়েরি লেখার বিভিন্ন কৌশল আলোচনা করবো।
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
এই কোয়েরিটি:
friendships
এডজ ব্যবহার করে ২ লেভেল পর্যন্ত বন্ধুবান্ধব খুঁজে বের করে।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 }
এই কোয়েরিটি:
edge.date
friendships
এজ-এর একটি প্রপার্টি, যা বন্ধুত্বের তারিখ নির্দেশ করে।জটিল গ্রাফ কোয়েরিতে আপনি মাল্টি-হপ ট্র্যাভার্সাল ব্যবহার করতে পারেন, যেখানে একাধিক সম্পর্কের মধ্যে খুঁজে বের করতে হয়। এটি একাধিক hops বা লেভেলের মাধ্যমে সম্পর্কগুলো বিশ্লেষণ করতে সাহায্য করে।
যদি আপনি Alice-এর বন্ধুদের বন্ধুদের (২ হপ) খুঁজে পেতে চান, তাহলে কোয়েরিটি এরকম হবে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 OUTBOUND user friendships
RETURN friend.name
এটি:
OUTBOUND
নির্দেশ করছে যে বন্ধুত্বের সম্পর্কটি Alice থেকে বাহিরে দিকে ট্র্যাভার্স করা হবে।ArangoDB-তে Bidirectional গ্রাফ কোয়েরি ব্যবহার করতে পারেন, যেখানে আপনি উভয় দিক থেকে ট্র্যাভার্সাল করতে পারেন। এটি তখন দরকার হয় যখন সম্পর্ক উভয় দিক থেকে গুরুত্বপূর্ণ হয় (যেমন, পারস্পরিক বন্ধুত্ব)।
Alice এবং অন্য ব্যবহারকারীর মধ্যে পারস্পরিক বন্ধুত্ব খুঁজে বের করার জন্য আপনি ANY
দিক ব্যবহার করতে পারেন, যা উভয় দিক থেকে ট্র্যাভার্সাল করবে:
FOR user IN users
FILTER user.name == "Alice"
FOR friend, edge IN 1..2 ANY user friendships
RETURN friend.name
এটি:
ArangoDB গ্রাফ অ্যালগরিদম সরবরাহ করে, যেমন শর্টেস্ট পাথ খোঁজা, যা দুটি vertex এর মধ্যে সবচেয়ে সরল সম্পর্ক (পথ) খুঁজে পেতে সাহায্য করে।
Alice এবং অন্য একটি ব্যবহারকারীর (যেমন, "Bob") মধ্যে শর্টেস্ট পাথ খুঁজে পেতে কোয়েরিটি হবে:
FOR v, e, p IN 1..10 ANY "users/Alice" friendships
FILTER v.name == "Bob"
RETURN p
এটি:
p
ভেরিয়েবলটি পথের বিবরণ ধারণ করে, যেমন কোন vertex এবং edge গুলি ট্র্যাভার্স করা হয়েছে।গ্রাফ কোয়েরির সাথে আপনি অ্যাগ্রিগেশন ফাংশন ব্যবহার করে ডেটা সংগ্রহ করতে পারেন, যেমন কাউন্ট, সাপেক্ষে বন্ধুদের সংখ্যা বা সম্পর্কের শক্তি বিশ্লেষণ করা।
ধরা যাক, 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 }
এই কোয়েরিটি:
COLLECT
ফাংশন ব্যবহার করে শহর অনুযায়ী বন্ধুদের সংখ্যা গণনা করবে।আরও জটিল ক্ষেত্রের জন্য, আপনি পাথ বিশ্লেষণ করতে পারেন, যেখানে আপনি গ্রাফের মধ্যে একাধিক সম্পর্ক খুঁজে বের করতে পারেন।
যদি আপনি কোনো পাথের উপর এজ ওয়েট বিশ্লেষণ করতে চান (যেমন, বন্ধুত্বের শক্তি বা সম্পর্কের ভার), তাহলে কোয়েরিটি হবে:
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) }
এই কোয়েরিটি:
weight
প্রপার্টি দ্বারা পাথের শক্তি (অথবা সম্পর্কের গুরুত্ব) নির্ধারণ করবে।ArangoDB-তে আপনি Foxx microservices ফ্রেমওয়ার্ক ব্যবহার করে কাস্টম গ্রাফ অ্যালগরিদমও তৈরি করতে পারেন। আপনি JavaScript দিয়ে কাস্টম ট্র্যাভার্সাল লজিক এবং গ্রাফ প্রোসেসিং ইমপ্লিমেন্ট করতে পারেন।
ArangoDB গ্রাফ কোয়েরি লেখার জন্য AQL-এর মাধ্যমে শক্তিশালী সক্ষমতা প্রদান করে। আপনি মৌলিক এবং মাল্টি-হপ ট্র্যাভার্সাল, দ্বিমুখী ট্র্যাভার্সাল, গ্রাফ অ্যালগরিদম (যেমন শর্টেস্ট পাথ), অ্যাগ্রিগেশন এবং কাস্টম গ্রাফ অ্যালগরিদম ব্যবহার করে জটিল সম্পর্ক এবং প্যাটার্ন বিশ্লেষণ করতে পারেন। ArangoDB-এর এই ফিচারগুলি আপনাকে গ্রাফ ডেটা বিশ্লেষণ এবং সম্পর্কিত অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।
common.read_more