নিওফোরজে (Neo4J) গ্রাফ ডেটাবেসে কুয়েরি চালানোর জন্য সাইফার (Cypher) কুয়েরি ল্যাংগুয়েজ ব্যবহার করা হয়। সাইফার কুয়েরি ল্যাংগুয়েজে কমপ্লেক্স কুয়েরি এবং নেস্টেড কুয়েরি ব্যবহার করা যেতে পারে, যা ডেটাবেসে জটিল সম্পর্ক ও গভীর বিশ্লেষণ সহজেই করতে সাহায্য করে। এখানে আমরা এই ধরনের কুয়েরি নিয়ে বিস্তারিত আলোচনা করব।
কমপ্লেক্স কুয়েরি (Complex Queries)
কমপ্লেক্স কুয়েরি হল এমন কুয়েরি যা একাধিক সম্পর্ক, নোড, এবং শর্ত একত্রে ব্যবহার করে ডেটাবেস থেকে তথ্য আনে। এর মাধ্যমে বিভিন্ন ধরনের সম্পর্ক এবং শর্তের ভিত্তিতে গভীর অনুসন্ধান করা হয়। নিওফোরজে এর মধ্যে কুয়েরি টেকনিকগুলো বিভিন্ন ধরনের সম্পর্ক অনুসন্ধানে সহায়তা করে।
১. মাল্টি-লেভেল রিলেশনশিপ ট্রাভার্সাল (Multi-Level Relationship Traversal)
গ্রাফ ডেটাবেসে বিভিন্ন স্তরের সম্পর্ক অনুসন্ধান করতে মাল্টি-লেভেল রিলেশনশিপ ট্রাভার্সাল ব্যবহার করা হয়। উদাহরণস্বরূপ, যদি আপনি একটি ব্যক্তির বন্ধু, তার বন্ধু এবং আরও একটি স্তরের বন্ধুর মধ্যে সম্পর্ক খুঁজতে চান, তাহলে এটি করা যেতে পারে:
MATCH (a:Person)-[:FRIEND_WITH*2..3]->(b:Person)
WHERE a.name = 'Alice'
RETURN b.name
এখানে, *2..3 নির্দেশ করছে যে, এটি দুই থেকে তিনটি স্তরের (Friend of a Friend of a Friend) সম্পর্ক অনুসন্ধান করবে।
২. একাধিক রিলেশনশিপ টাইপের ব্যবহার (Using Multiple Relationship Types)
এছাড়া, একাধিক রিলেশনশিপ টাইপ ব্যবহার করে আপনি একটি একক কুয়েরির মধ্যে বিভিন্ন সম্পর্ক অনুসন্ধান করতে পারেন। যেমন:
MATCH (a:Person)-[:FRIEND_WITH]->(b:Person)-[:COLLEAGUE_OF]->(c:Person)
WHERE a.name = 'Alice'
RETURN c.name
এই কুয়েরি Alice নামক ব্যক্তির বন্ধুর এবং তাদের সহকর্মীদের নাম খুঁজে বের করবে।
নেস্টেড কুয়েরি (Nested Queries)
নেস্টেড কুয়েরি হল এমন কুয়েরি যা একটি কুয়েরি অন্য কুয়েরির ভিতরে থাকে। এটি ডেটাবেসে একাধিক স্তরের অনুসন্ধান বা শর্ত নির্ধারণের জন্য ব্যবহার করা হয়।
১. সাব-কুয়েরি ব্যবহার (Using Sub-queries)
সাব-কুয়েরি বা নেস্টেড কুয়েরি ব্যবহার করে আপনি একটি কুয়েরির ফলাফল অন্য কুয়েরির মধ্যে ব্যবহার করতে পারেন। যেমন, একটি সাব-কুয়েরি ব্যবহার করে একটি ব্যক্তির নামের ভিত্তিতে তার বন্ধুর তালিকা খুঁজে বের করা:
MATCH (a:Person)
WHERE a.name = 'Alice'
WITH a
MATCH (a)-[:FRIEND_WITH]->(b:Person)
RETURN b.name
এখানে প্রথম কুয়েরিতে Alice নামক ব্যক্তিকে খুঁজে বের করা হয়েছে এবং তারপর তার বন্ধুদের তালিকা বের করার জন্য একটি দ্বিতীয় কুয়েরি চালানো হয়েছে।
২. অ্যাগ্রিগেটেড সাব-কুয়েরি (Aggregated Sub-queries)
কখনো কখনো আপনি একটি কুয়েরির মধ্যে অ্যাগ্রিগেট ফাংশন ব্যবহার করে সাব-কুয়েরি করতে পারেন। যেমন, একটি ব্যক্তির সমস্ত বন্ধুদের গড় বয়স বের করতে:
MATCH (a:Person)-[:FRIEND_WITH]->(b:Person)
WHERE a.name = 'Alice'
WITH AVG(b.age) AS avg_age
RETURN avg_age
এখানে, AVG(b.age) অ্যাগ্রিগেট ফাংশন দ্বারা বন্ধুর গড় বয়স বের করা হয়েছে।
৩. একাধিক সাব-কুয়েরি (Multiple Sub-queries)
একাধিক সাব-কুয়েরি ব্যবহার করে আপনি একাধিক কুয়েরির ফলাফল একই সঙ্গে বের করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ব্যক্তির বন্ধু এবং তার সহকর্মীদের নাম একসাথে বের করতে পারেন:
MATCH (a:Person)
WHERE a.name = 'Alice'
WITH a
MATCH (a)-[:FRIEND_WITH]->(b:Person)
WITH b, a
MATCH (b)-[:COLLEAGUE_OF]->(c:Person)
RETURN b.name, c.name
এখানে, প্রথম কুয়েরিতে Alice এর বন্ধুকে এবং দ্বিতীয় কুয়েরিতে তাদের সহকর্মীদের নাম বের করা হয়েছে।
৪. কন্ডিশনাল সাব-কুয়েরি (Conditional Sub-queries)
নেস্টেড কুয়েরি ব্যবহার করে আপনি শর্তাধীন সাব-কুয়েরি তৈরি করতে পারেন। যেমন, আপনি যদি কিছু শর্তের ভিত্তিতে ডেটা বের করতে চান, তবে তা করতে পারেন:
MATCH (a:Person)
WHERE a.name = 'Alice'
WITH a
MATCH (a)-[:FRIEND_WITH]->(b:Person)
WHERE b.age > 30
RETURN b.name
এখানে, Alice এর বন্ধুদের মধ্যে যাদের বয়স ৩০ এর বেশি তাদের নাম খুঁজে বের করা হচ্ছে।
সারাংশ
নিওফোরজে (Neo4J) এর সাইফার কুয়েরি ল্যাংগুয়েজে কমপ্লেক্স কুয়েরি এবং নেস্টেড কুয়েরি ব্যবহার করার মাধ্যমে একাধিক সম্পর্ক, নোড এবং শর্ত অনুসন্ধান করা সহজ হয়। মাল্টি-লেভেল রিলেশনশিপ ট্রাভার্সাল, একাধিক রিলেশনশিপ টাইপের ব্যবহার, সাব-কুয়েরি, অ্যাগ্রিগেট সাব-কুয়েরি এবং কন্ডিশনাল সাব-কুয়েরি এর মাধ্যমে আপনি গভীর বিশ্লেষণ এবং জটিল অনুসন্ধান কার্যকরভাবে করতে পারেন।
Read more