MongoDB Schema Design — ভালো Design-এর ৭টি নীতি
MongoDB-তে schema design করা SQL-এর মতো নয়। Embedding vs referencing, denormalization কখন করবেন, indexes কীভাবে রাখবেন — বিস্তারিত গাইড।
MongoDB-তে schema নেই — এই কথা শুনে অনেকে ভাবেন যা খুশি তাই করা যাবে। কিন্তু ভুল design-এ পরে অনেক performance সমস্যায় পড়তে হয়। MongoDB schema design-এর কিছু নীতি জানা জরুরি।
নীতি ১: Data Access Pattern বুঝুন
Schema design করার আগে জানুন কীভাবে data read ও write হবে। Read heavy নাকি write heavy? কোন queries বেশি হবে? এই প্রশ্নের উত্তর schema design guide করবে।
নীতি ২: Embedding vs Referencing
Embedding (nested document): একটি document-এর ভেতরে অন্য document রাখা। সুবিধা: একটি query-তে সব data। অসুবিধা: document বড় হয়, update কঠিন।
Referencing (foreign key-এর মতো): ObjectId দিয়ে অন্য collection reference করা। সুবিধা: flexibility। অসুবিধা: multiple queries বা $lookup দরকার।
সাধারণ নিয়ম: "has-a" relationship বা frequently একসাথে access হলে embed করুন। Many-to-many বা large sub-documents হলে reference করুন।
নীতি ৩: 16MB Limit মনে রাখুন
MongoDB-তে একটি document সর্বোচ্চ 16MB। Unbounded arrays বা এমন field যা অসীমভাবে বাড়তে পারে — এগুলো document-এ রাখবেন না। এই ক্ষেত্রে referencing ব্যবহার করুন।
নীতি ৪: Indexes সঠিকভাবে দিন
যে fields-এ query করবেন সেগুলোতে index দিন। কিন্তু সব field-এ index দেওয়া ভালো না — write performance কমে এবং disk space বাড়ে।
Compound index বানান: { userId: 1, createdAt: -1 } — userId দিয়ে filter ও createdAt দিয়ে sort একসাথে হবে।
নীতি ৫: Timestamps রাখুন
Mongoose-এ { timestamps: true } দিলে createdAt ও updatedAt automatically যোগ হয়। এটি debugging ও analytics-এ অনেক কাজে লাগে।
নীতি ৬: Denormalization গ্রহণ করুন
SQL-এ normalization সর্বোচ্চ অগ্রাধিকার। MongoDB-তে কিছুটা denormalization ঠিক আছে। যেমন post-এ author-এর name embed করা — যদিও User collection-এও আছে। এতে JOIN ছাড়াই author name পাওয়া যাবে।
নীতি ৭: Schema Validation ব্যবহার করুন
MongoDB-তে JSON Schema validation set up করুন। Mongoose-এ schema definition-এ required fields, types, validators যোগ করুন। এটি data integrity নিশ্চিত করে।