ArangoDB-তে Joins এবং Relational Queries এমন ডেটা সংগ্রহ এবং বিশ্লেষণ করার কৌশল যা বিভিন্ন Collection বা Documents-এর মধ্যে সম্পর্ক খুঁজে বের করতে ব্যবহৃত হয়। যদিও ArangoDB একটি মাল্টি-মডেল ডাটাবেস, এটি গ্রাফ মডেল এবং AQL (ArangoDB Query Language) ব্যবহার করে সম্পর্কিত ডেটা পরিচালনার জন্য উন্নত সুবিধা প্রদান করে।
Joins হলো বিভিন্ন Collection-এর ডেটাকে একত্রিত করার পদ্ধতি। ArangoDB-তে Joins SQL-এর মতো সরাসরি না হলেও AQL ব্যবহার করে Relational Queries পরিচালনা করা যায়।
students
এবং courses
নামে দুটি Collection রয়েছে। প্রতিটি ছাত্র course_id
ব্যবহার করে একটি কোর্সের সাথে যুক্ত।
FOR student IN students
FOR course IN courses
FILTER student.course_id == course._key
RETURN {
student_name: student.name,
course_name: course.name
}
ব্যাখ্যা:
students
এবং courses
Collection থেকে ডেটা বের করা হয়েছে।student.course_id
এবং course._key
এর মধ্যে সম্পর্ক স্থাপন করা হয়েছে।FOR student IN students
LET enrolled_courses = (
FOR course IN courses
FILTER course._key == student.course_id
RETURN course.name
)
RETURN {
student_name: student.name,
courses: enrolled_courses
}
ব্যাখ্যা:
LET
এর মাধ্যমে ফলাফল একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছে।যখন একাধিক Collection-এর ডেটা একত্রে প্রয়োজন হয়, তখন Cross-collection Queries ব্যবহার করা হয়।
FOR order IN orders
FOR customer IN customers
FILTER order.customer_id == customer._key
RETURN {
order_id: order._key,
customer_name: customer.name
}
ArangoDB-তে গ্রাফ ডেটাবেস ব্যবহার করে আরও উন্নত Relational Queries করা যায়।
FOR v, e, p IN 1..2 OUTBOUND "students/123" GRAPH "education_graph"
RETURN {
student: p.vertices[0].name,
related_data: v
}
ব্যাখ্যা:
students
নোড থেকে আউটবাউন্ড নোডগুলোর ডেটা বের করে।ArangoDB-তে Joins এবং Relational Queries-এর জন্য AQL অত্যন্ত কার্যকর। এটি Subqueries, Cross-collection Queries এবং গ্রাফ মডেল ব্যবহার করে ডেটার সম্পর্ক বিশ্লেষণ এবং সংগ্রহ সহজ করে। ডেটা মডেলিং এবং পারফরম্যান্স অপ্টিমাইজেশনের জন্য সঠিক পদ্ধতি এবং ইনডেক্সিং ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ।
AQL (ArangoDB Query Language)-এ Joins ব্যবহার করা হয় ডকুমেন্ট বা কালেকশন থেকে সম্পর্কিত ডেটা একত্রে আনার জন্য। এটি ডাটাবেসের বিভিন্ন কালেকশনের মধ্যে সম্পর্ক তৈরি এবং ডেটা বিশ্লেষণ করার জন্য খুবই কার্যকর।
AQL-এ Joins অন্যান্য ডাটাবেসের মতো ফর্মাল সিস্টেমে কাজ না করলেও, কোয়েরি স্ট্রাকচারে FOR এবং FILTER এর মাধ্যমে কার্যকরভাবে Joins সম্পাদন করা যায়।
{ "_key": "cust1", "name": "Rahim" }
{ "_key": "cust2", "name": "Karim" }
{ "_key": "order1", "customer_id": "cust1", "product": "Laptop" }
{ "_key": "order2", "customer_id": "cust2", "product": "Mobile" }
{ "_key": "order3", "customer_id": "cust1", "product": "Tablet" }
FOR c IN Customers
FOR o IN Orders
FILTER c._key == o.customer_id
RETURN {
customer_name: c.name,
product: o.product
}
[
{ "customer_name": "Rahim", "product": "Laptop" },
{ "customer_name": "Rahim", "product": "Tablet" },
{ "customer_name": "Karim", "product": "Mobile" }
]
এই কোয়েরি Customers
এবং Orders
এর মধ্যে customer_id
এর ভিত্তিতে সম্পর্ক তৈরি করে।
যদি কোনো গ্রাহকের অর্ডার না থাকে, তাহলে তাকে এখনও ফলাফলে অন্তর্ভুক্ত করা হবে:
FOR c IN Customers
LET orders = (
FOR o IN Orders
FILTER c._key == o.customer_id
RETURN o.product
)
RETURN {
customer_name: c.name,
products: orders
}
[
{ "customer_name": "Rahim", "products": ["Laptop", "Tablet"] },
{ "customer_name": "Karim", "products": ["Mobile"] }
]
যদি একাধিক কালেকশনের মধ্যে Joins করতে চান:
FOR c IN Customers
FOR o IN Orders
FOR p IN Products
FILTER c._key == o.customer_id AND o.product == p.product_name
RETURN {
customer: c.name,
product: p.product_name,
price: p.price
}
AQL-এ Joins ডাটাবেসের বিভিন্ন কালেকশনের সম্পর্কিত ডেটা একত্রে বিশ্লেষণ করার জন্য অত্যন্ত কার্যকর। ডেভেলপাররা সহজেই FOR এবং FILTER ব্যবহার করে Inner এবং Left Join সম্পাদন করতে পারেন। তবে বড় ডেটাসেটে পারফরম্যান্স নিশ্চিত করতে সঠিক Indexing অপরিহার্য।
Subqueries এবং Complex Queries হলো ArangoDB-এর শক্তিশালী কোয়েরি ফিচার, যা জটিল ডেটা বিশ্লেষণ এবং প্রসেসিংকে সহজ করে। Subquery একটি কোয়েরির মধ্যে আরেকটি কোয়েরি হিসেবে কাজ করে এবং Complex Query বিভিন্ন ডেটাসেট এবং শর্তের ভিত্তিতে উন্নত বিশ্লেষণ করতে সাহায্য করে।
Subquery হল একটি কোয়েরি যা অন্য একটি কোয়েরির মধ্যে নেস্ট করা থাকে। এটি মূলত কোয়েরির একটি অংশ হিসেবে কাজ করে এবং একটি নির্দিষ্ট ফলাফল প্রদান করে, যা পরে প্রধান কোয়েরিতে ব্যবহার করা হয়।
FOR user IN Users
LET posts = (
FOR post IN Posts
FILTER post.author == user._key
RETURN post
)
RETURN { user: user, posts: posts }
এখানে:
Users
থেকে ব্যবহারকারীদের তথ্য আনছে।Posts
থেকে প্রতিটি ব্যবহারকারীর পোস্ট সংগ্রহ করছে।FOR category IN Categories
LET products = (
FOR product IN Products
FILTER product.category == category._key
RETURN product.name
)
RETURN { category: category.name, products: products }
এটি প্রতিটি ক্যাটাগরির সাথে সংশ্লিষ্ট পণ্যের নামগুলো রিটার্ন করে।
Complex Query বিভিন্ন শর্ত, Subqueries, Joins এবং Aggregations ব্যবহার করে আরও জটিল ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়। এটি একাধিক ডেটাসেট এবং Nested Data নিয়ে কাজ করে।
FOR order IN Orders
FILTER order.status == "delivered" AND order.amount > 100
COLLECT customer = order.customer INTO ordersGrouped
RETURN { customer: customer, totalOrders: LENGTH(ordersGrouped) }
এখানে:
delivered
স্ট্যাটাস এবং amount > 100
এর জন্য ফিল্টার।FOR user IN Users
LET totalSpent = SUM(
FOR order IN Orders
FILTER order.customer == user._key
RETURN order.amount
)
RETURN { user: user.name, totalSpent: totalSpent }
এখানে:
FOR user IN Users
LET friends = (
FOR friend IN Friends
FILTER friend.user == user._key
RETURN friend
)
LET posts = (
FOR post IN Posts
FILTER post.author == user._key
RETURN post
)
RETURN { user: user.name, friends: friends, posts: posts }
এটি প্রতিটি ব্যবহারকারীর নাম, তার বন্ধুদের তালিকা এবং তার পোস্টগুলো রিটার্ন করে।
Subqueries এবং Complex Queries ArangoDB-এর একটি অত্যন্ত শক্তিশালী ফিচার, যা জটিল এবং সম্পর্কিত ডেটা বিশ্লেষণ সহজ করে। Nested কোয়েরি, Aggregations, এবং Joins ব্যবহার করে বড় এবং জটিল ডেটাবেস থেকে কার্যকর ফলাফল পাওয়া যায়। এটি ডেটা মডেলিং এবং ডেটা ট্রান্সফর্মেশনের জন্য একটি অপরিহার্য হাতিয়ার।
Nested Queries ArangoDB তে এমন কোয়েরি যেখানে একটি কোয়েরির ভেতরে আরেকটি কোয়েরি ব্যবহার করা হয়। এটি জটিল ডেটা বিশ্লেষণ এবং সম্পর্কিত ডেটার কার্যকর অনুসন্ধানের জন্য ব্যবহৃত হয়। AQL এ Nested Queries ব্যবহার করে সহজে সাব-কোয়েরি তৈরি করা সম্ভব।
FOR doc IN employees
FILTER doc.salary > (
FOR avgSalary IN employees
COLLECT AGGREGATE avgSalary = AVG(avgSalary.salary)
RETURN avgSalary
)[0]
RETURN doc
বর্ণনা:
employees
টেবিলের গড় বেতন (AVG
) বের করে।FOR department IN departments
LET employeeCount = (
FOR emp IN employees
FILTER emp.departmentId == department._key
COLLECT WITH COUNT INTO count
RETURN count
)[0]
RETURN { department: department.name, totalEmployees: employeeCount }
বর্ণনা:
FOR v IN vertices
LET relatedEdges = (
FOR e IN edges
FILTER e._from == v._id
RETURN e
)
RETURN { vertex: v, edges: relatedEdges }
বর্ণনা:
FOR product IN products
LET totalSales = (
FOR order IN orders
FILTER order.productId == product._key
COLLECT AGGREGATE total = SUM(order.quantity)
RETURN total
)[0]
RETURN { productName: product.name, totalSales: totalSales }
বর্ণনা:
ArangoDB তে Nested Query ব্যবহার করে জটিল ডেটা বিশ্লেষণ এবং সম্পর্কযুক্ত ডেটা মডেল পরিচালনা সহজ হয়। সাব-কোয়েরি ডেটা ফিল্টারিং, গ্রুপিং, এবং গণনার জন্য কার্যকর হাতিয়ার। ডেটার গভীর বিশ্লেষণ প্রয়োজন হলে Nested Queries একটি অপরিহার্য টুল।
Cross-collection Queries ArangoDB-তে একাধিক Collection থেকে ডেটা একত্রে অনুসন্ধান, বিশ্লেষণ, এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। এটি ডকুমেন্ট বা গ্রাফ ডেটার মধ্যকার সম্পর্ক বিশ্লেষণ করার জন্য একটি শক্তিশালী পদ্ধতি।
ArangoDB-তে একাধিক Collection এর ডেটা যুক্ত করার জন্য AQL (ArangoDB Query Language) ব্যবহার করা হয়। এটি JOIN
, FILTER
, এবং অন্যান্য শর্তাবলী প্রয়োগের মাধ্যমে ডেটা পরিচালনা করে।
FOR user IN users
FOR order IN orders
FILTER user._key == order.user_id
RETURN { user: user.name, order: order.product }
উপরের কোয়েরি users
এবং orders
Collection এর ডেটা একত্রিত করে।
FOR user IN users
LET orders = (
FOR order IN orders
FILTER order.user_id == user._key
RETURN order
)
RETURN { user: user.name, orders: orders }
এখানে LET
ব্যবহার করে Nested Query করা হয়েছে, যেখানে প্রতিটি ব্যবহারকারীর জন্য তাদের অর্ডার লিস্ট যুক্ত করা হয়েছে।
FOR user IN users
FOR order IN orders
FILTER user._key == order.user_id AND order.status == "completed"
RETURN { user: user.name, order: order.product }
এটি users
এবং orders
Collection এর মধ্যে ডেটা যুক্ত করে যেখানে order
এর স্ট্যাটাস completed।
FOR user IN users
FOR order IN orders
FILTER user._key == order.user_id
COLLECT username = user.name WITH COUNT INTO total_orders
RETURN { username, total_orders }
এটি প্রতিটি ব্যবহারকারীর জন্য মোট অর্ডারের সংখ্যা রিটার্ন করে।
গ্রাফ ডেটার ক্ষেত্রে Cross-collection Queries Vertex এবং Edge Collection এর মধ্যে সম্পর্ক বিশ্লেষণ করতে ব্যবহৃত হয়।
FOR vertex, edge IN 1..1
OUTBOUND "users/user1" friendships
RETURN { friend: vertex.name, relation: edge.type }
এটি friendships
Edge Collection এবং users
Vertex Collection থেকে ডেটা রিটার্ন করবে।
FOR vertex IN 1..2
OUTBOUND "users/user1" friendships
FOR post IN posts
FILTER post.user_id == vertex._key
RETURN { friend: vertex.name, post: post.title }
এটি user1
এর বন্ধু এবং তাদের তৈরি করা পোস্ট রিটার্ন করবে।
Cross-collection Queries পরিচালনার সময় Index ব্যবহার করা গুরুত্বপূর্ণ। এটি পারফরম্যান্স বৃদ্ধি করে।
_key
দ্বারা দ্রুত অ্যাক্সেসের জন্য।Pagination এর মাধ্যমে Cross-collection Queries এর ফলাফল সীমিত করা যায়।
FOR user IN users
FOR order IN orders
FILTER user._key == order.user_id
LIMIT 0, 10
RETURN { user: user.name, order: order.product }
এটি প্রথম ১০টি ফলাফল রিটার্ন করবে।
Cross-collection Queries ArangoDB তে বিভিন্ন Collection এর ডেটা সংযুক্ত এবং বিশ্লেষণ করার একটি কার্যকর পদ্ধতি। এটি Nested Queries, Aggregation, এবং Graph Context এর মতো জটিল অপারেশন সহজ করে। ডেটা সম্পর্ক বিশ্লেষণ এবং পারফরম্যান্স অপ্টিমাইজেশনের জন্য Index ব্যবহারের উপর গুরুত্ব দিতে হবে।
common.read_more