MongoDB-এ বড় কালেকশনে ইন্ডেক্স তৈরি করলে ডাটাবেস লক হতে পারে এবং রিড/রাইট অপারেশন ব্লক হতে পারে। এই সমস্যা এড়াতে createIndex() মেথডে background: true অপশন ব্যবহার করে ব্যাকগ্রাউন্ডে ইন্ডেক্স তৈরি করা যায়।
সিনট্যাক্স
db.yourCollectionName.createIndex(
{ "yourFieldName1": 1, "yourFieldName2": 1 },
{ background: true }
);
বাস্তব উদাহরণ
> db.indexCreationDemo.createIndex(
{ "StudentName": 1, "StudentAge": 1 },
{ background: true }
);
{
"createdCollectionAutomatically": true,
"numIndexesBefore": 1,
"numIndexesAfter": 2,
"ok": 1
}
ইন্ডেক্স তালিকা দেখানো
> db.indexCreationDemo.getIndexes();
আউটপুট:
[
{
"v": 2,
"key": { "_id": 1 },
"name": "_id_",
"ns": "web.indexCreationDemo"
},
{
"v": 2,
"key": { "StudentName": 1, "StudentAge": 1 },
"name": "StudentName_1_StudentAge_1",
"ns": "web.indexCreationDemo",
"background": true
}
]
ব্যাখ্যা: আউটপুটে দ্বিতীয় ইন্ডেক্সে "background": true দেখা যাচ্ছে, যা ইন্ডেক্সটি ব্যাকগ্রাউন্ডে তৈরি হয়েছে বলে বোঝাচ্ছে। v: 2 ইন্ডেক্স ভার্সন। 1 মানে অ্যাসেন্ডিং অর্ডার।
ব্যাকগ্রাউন্ড ইন্ডেক্সের বৈশিষ্ট্য
- ইন্ডেক্স বিল্ডের সময় ডাটাবেস লক করে না
- অন্যান্য রিড/রাইট অপারেশন চলতে থাকে
- বিল্ড প্রসেস কিছুটা ধীর হতে পারে
- ইন্ডেক্স তৈরি হওয়া পর্যন্ত কোয়েরি সেটি ব্যবহার করবে না
সতর্কতা
MongoDB ৪.২+ ভার্সনে ডিফল্টভাবে সব ইন্ডেক্স বিল্ড ব্যাকগ্রাউন্ডে হয় (ফোরগ্রাউন্ড বিল্ড ডিপ্রিকেটেড)। তবুও background: true দিয়ে স্পষ্ট করা ভালো অভ্যাস।