14 چیزیں میری خواہش ہے کہ میں MongoDB کے ساتھ شروع کرنے سے پہلے جانتا ہوں۔

مضمون کا ترجمہ کورس کے آغاز کے موقع پر تیار کیا گیا تھا۔ "غیر متعلقہ ڈیٹا بیس".

14 چیزیں میری خواہش ہے کہ میں MongoDB کے ساتھ شروع کرنے سے پہلے جانتا ہوں۔

جھلکیاں:

  • اسکیما تیار کرنا انتہائی ضروری ہے حالانکہ یہ MongoDB میں اختیاری ہے۔
  • اسی طرح، اشاریہ جات کو آپ کے اسکیما اور رسائی کے نمونوں سے مماثل ہونا چاہیے۔
  • بڑی اشیاء اور بڑی صفوں کے استعمال سے گریز کریں۔
  • MongoDB سیٹنگز کے ساتھ محتاط رہیں، خاص طور پر جب بات سیکورٹی اور قابل اعتماد کی ہو۔
  • MongoDB کے پاس کوئی استفسار آپٹیمائزر نہیں ہے، لہذا آپ کو استفسار کی کارروائیوں کو انجام دیتے وقت محتاط رہنا چاہیے۔

میں کافی عرصے سے ڈیٹا بیس کے ساتھ کام کر رہا ہوں، لیکن حال ہی میں مونگو ڈی بی کو دریافت کیا ہے۔ کچھ چیزیں ایسی ہیں جو میری خواہش ہے کہ میں اس کے ساتھ کام شروع کرنے سے پہلے جانتا۔ جب کسی شخص کو پہلے سے ہی کسی خاص شعبے میں تجربہ ہوتا ہے، تو اس کے پاس پہلے سے تصورات ہوتے ہیں کہ ڈیٹا بیس کیا ہیں اور وہ کیا کرتے ہیں۔ دوسروں کو سمجھنے میں آسانی پیدا کرنے کی امید میں، میں عام غلطیوں کی فہرست پیش کرتا ہوں۔

بغیر تصدیق کے MongoDB سرور بنانا

بدقسمتی سے، MongoDB بغیر تصدیق کے بطور ڈیفالٹ انسٹال ہے۔ مقامی طور پر رسائی حاصل کرنے والے ورک سٹیشن کے لیے، یہ عمل معمول کی بات ہے۔ لیکن چونکہ MongoDB ایک ملٹی یوزر سسٹم ہے جو بڑی مقدار میں میموری استعمال کرنا پسند کرتا ہے، اس لیے بہتر ہو گا کہ آپ اسے زیادہ سے زیادہ RAM والے سرور پر رکھیں، چاہے آپ اسے صرف ترقی کے لیے ہی استعمال کر رہے ہوں۔ پہلے سے طے شدہ پورٹ کے ذریعے سرور پر انسٹال کرنا مشکل ہو سکتا ہے، خاص طور پر اگر درخواست میں جاوا اسکرپٹ کوڈ کو عمل میں لایا جا سکتا ہے (مثال کے طور پر، $where کے لئے ایک خیال کے طور پر انجیکشن).

تصدیق کے کئی طریقے ہیں، لیکن سب سے آسان یوزر آئی ڈی/پاس ورڈ سیٹ کرنا ہے۔ اس خیال کا استعمال کریں جب آپ اس کی بنیاد پر فینسی تصدیق کے بارے میں سوچتے ہیں۔ LDAP. جب سیکیورٹی کی بات آتی ہے تو، MongoDB کو مسلسل اپ ڈیٹ کیا جانا چاہیے، اور لاگز کو ہمیشہ غیر مجاز رسائی کے لیے چیک کیا جانا چاہیے۔ مثال کے طور پر، میں ایک مختلف پورٹ کو بطور ڈیفالٹ پورٹ منتخب کرنا چاہتا ہوں۔

حملے کی سطح کو MongoDB سے باندھنا نہ بھولیں۔

مونگو ڈی بی سیکیورٹی چیک لسٹ نیٹ ورک میں دخل اندازی اور ڈیٹا لیکیج کے خطرے کو کم کرنے کے لیے اچھی تجاویز پر مشتمل ہے۔ اسے صاف کرنا اور یہ کہنا آسان ہے کہ ڈیولپمنٹ سرور کو اعلیٰ سطح کی سیکیورٹی کی ضرورت نہیں ہے۔ تاہم، یہ اتنا آسان نہیں ہے اور یہ تمام MongoDB سرورز پر لاگو ہوتا ہے۔ خاص طور پر، اگر استعمال کرنے کی کوئی مجبوری وجہ نہیں ہے۔ mapReduce, group یا $کہاں، آپ کو کنفیگریشن فائل میں لکھ کر جاوا اسکرپٹ میں صوابدیدی کوڈ کے استعمال کو غیر فعال کرنے کی ضرورت ہے۔ javascriptEnabled:false. چونکہ ڈیٹا فائلوں کو معیاری MongoDB میں انکرپٹ نہیں کیا جاتا ہے، اس لیے MongoDB کو اس کے ساتھ چلانا سمجھ میں آتا ہے۔ سرشار صارف، جس کی فائلوں تک مکمل رسائی ہے، صرف اس تک محدود رسائی اور آپریٹنگ سسٹم کے اپنے فائل ایکسیس کنٹرولز کو استعمال کرنے کی صلاحیت کے ساتھ۔

سرکٹ تیار کرتے وقت خرابی

MongoDB اسکیما استعمال نہیں کرتا ہے۔ لیکن اس کا مطلب یہ نہیں ہے کہ اسکیم کی ضرورت نہیں ہے۔ اگر آپ دستاویزات کو بغیر کسی مستقل پیٹرن کے ذخیرہ کرنا چاہتے ہیں، تو انہیں ذخیرہ کرنا تیز اور آسان ہوسکتا ہے، لیکن بعد میں انہیں بازیافت کرنا مشکل ہوسکتا ہے۔ بہت مشکل.

کلاسیکی مضمون "MongoDB سکیما ڈیزائن کے لیے انگوٹھے کے 6 اصول" یہ پڑھنے کے قابل ہے، اور جیسی خصوصیات سکیما ایکسپلورر تھرڈ پارٹی ٹول اسٹوڈیو 3T میں، یہ سرکٹس کی باقاعدہ جانچ کے لیے استعمال کرنے کے قابل ہے۔

ترتیب دینے کو مت بھولنا

ترتیب کو بھول جانا کسی بھی دوسری غلط ترتیب کے مقابلے میں زیادہ مایوسی اور زیادہ وقت ضائع کر سکتا ہے۔ بطور ڈیفالٹ MongoBD استعمال کرتا ہے۔ بائنری ترتیب. لیکن یہ کسی کے لیے مفید ہونے کا امکان نہیں ہے۔ پچھلی صدی کے 80 کی دہائی میں کیس حساس، لہجے کے لحاظ سے حساس، بائنری قسموں کو موتیوں، کیفٹینوں اور گھوبگھرالی مونچھوں کے ساتھ متجسس اینکرونزم سمجھا جاتا تھا۔ اب ان کا استعمال ناقابل معافی ہے۔ حقیقی زندگی میں ’’موٹرسائیکل‘‘ وہی ہے جو ’’موٹرسائیکل‘‘ ہے۔ اور "برطانیہ" اور "برطانیہ" ایک ہی جگہ ہیں۔ چھوٹے حروف میں بڑے حروف کے برابر ہوتا ہے۔ اور مجھ سے diacritics چھانٹنا شروع نہ کریں۔ MongoDB میں ڈیٹا بیس بناتے وقت، لہجے میں غیر حساس کولیشن اور استعمال کریں۔ رجسٹر کریں، جو زبان سے مطابقت رکھتا ہے اور نظام صارف ثقافت. اس سے سٹرنگ ڈیٹا کے ذریعے تلاش کرنا بہت آسان ہو جائے گا۔

بڑی دستاویزات کے ساتھ مجموعے بنائیں

MongoDB 16MB تک کی بڑی دستاویزات جمع کرنے میں خوش ہے، اور گرڈ ایف ایس 16 MB سے بڑی دستاویزات کے لیے ڈیزائن کیا گیا ہے۔ لیکن صرف اس لیے کہ بڑی دستاویزات وہاں رکھی جا سکتی ہیں، انہیں وہاں ذخیرہ کرنا اچھا خیال نہیں ہے۔ MongoDB بہترین کام کرے گا اگر آپ انفرادی دستاویزات کو ذخیرہ کرتے ہیں جو سائز میں چند کلو بائٹس ہیں، ان کو وسیع SQL ٹیبل میں قطاروں کی طرح برتاؤ کرتے ہیں۔ بڑی دستاویزات کے ساتھ مسائل کا ایک ذریعہ ہو جائے گا پیداوری.

بڑی صفوں کے ساتھ دستاویزات بنانا

دستاویزات میں صفوں پر مشتمل ہوسکتا ہے۔ یہ بہتر ہے اگر صف میں عناصر کی تعداد چار ہندسوں کی تعداد سے دور ہو۔ اگر عناصر کو ایک صف میں کثرت سے شامل کیا جاتا ہے، تو یہ اس پر مشتمل دستاویز کو بڑھا دے گا اور اس کی ضرورت ہوگی۔ اقدام، جس کا مطلب ہے کہ یہ ضروری ہوگا۔ اشاریہ جات کو بھی اپ ڈیٹ کریں۔. ایک بڑی صف کے ساتھ کسی دستاویز کو دوبارہ انڈیکس کرتے وقت، اشاریہ جات اکثر اوور رائٹ ہو جائیں گے، کیونکہ وہاں ایک ریکارڈ، جو اپنے انڈیکس کو محفوظ کرتا ہے۔ یہ دوبارہ اشاریہ سازی اس وقت بھی ہوتی ہے جب کوئی دستاویز داخل یا حذف کر دی جاتی ہے۔

MongoDB نامی کچھ ہے "فیکٹر بھریں"، جو اس مسئلے کو کم کرنے کے لیے دستاویزات کو بڑھنے کی گنجائش فراہم کرتا ہے۔
آپ سوچ سکتے ہیں کہ آپ سرنی اشاریہ سازی کے بغیر کر سکتے ہیں۔ بدقسمتی سے، اشاریہ جات کی کمی آپ کو دیگر مسائل کا باعث بن سکتی ہے۔ چونکہ دستاویزات کو شروع سے آخر تک اسکین کیا جاتا ہے، اس لیے صف کے آخر میں عناصر کی تلاش میں زیادہ وقت لگے گا، اور اس طرح کے دستاویز سے وابستہ زیادہ تر آپریشنز ہوں گے۔ سست.

یہ نہ بھولیں کہ مجموعے میں مراحل کی ترتیب اہمیت رکھتی ہے۔

ڈیٹا بیس سسٹم میں استفسار کے اصلاح کار کے ساتھ، آپ جو سوالات لکھتے ہیں وہ اس کی وضاحت ہوتی ہے کہ آپ کیا حاصل کرنا چاہتے ہیں، نہ کہ اسے کیسے حاصل کرنا ہے۔ یہ طریقہ کار ریستوراں میں آرڈر دینے سے مشابہت کے ساتھ کام کرتا ہے: عام طور پر آپ صرف ڈش آرڈر کرتے ہیں، اور باورچی کو تفصیلی ہدایات نہیں دیتے ہیں۔

MongoDB میں، آپ باورچی کو ہدایت دیتے ہیں۔ مثال کے طور پر، آپ کو یہ یقینی بنانا ہوگا کہ ڈیٹا گزرتا ہے۔ reduce جتنی جلدی ممکن ہو پائپ لائن کا استعمال کرتے ہوئے $match и $project، اور چھانٹنا صرف اس کے بعد ہوتا ہے۔ reduce، اور یہ کہ تلاش بالکل اسی ترتیب میں ہوتی ہے جس طرح آپ چاہتے ہیں۔ ایک استفسار آپٹیمائزر کا ہونا جو غیر ضروری کام کو ختم کرتا ہے، بہترین طریقے سے مراحل کو ترتیب دیتا ہے، اور جوائن کی قسموں کو منتخب کرتا ہے آپ کو خراب کر سکتا ہے۔ MongoDB کے ساتھ، آپ کے پاس سہولت کی قیمت پر زیادہ کنٹرول ہے۔

جیسے اوزار اسٹوڈیو 3T میں جمع سوالات کی تعمیر کو آسان بنائے گا۔ منگو ڈی بی. ایگریگیشن ایڈیٹر فیچر آپ کو پائپ لائن اسٹیٹمنٹس کو ایک وقت میں ایک مرحلے پر لاگو کرنے اور ڈیبگنگ کو آسان بنانے کے لیے ہر مرحلے پر ان پٹ اور آؤٹ پٹ ڈیٹا کا معائنہ کرنے کی اجازت دیتا ہے۔

فوری ریکارڈنگ کا استعمال

تیز رفتار لیکن کم قابل اعتماد ہونے کے لیے کبھی بھی MongoDB لکھنے کے اختیارات متعین نہ کریں۔ یہ موڈ "فائل اور بھول جاؤ" تیز لگتا ہے کیونکہ لکھنے سے پہلے کمانڈ واپس آ جاتا ہے۔ اگر ڈسک پر ڈیٹا لکھے جانے سے پہلے سسٹم کریش ہو جاتا ہے، تو یہ گم ہو جائے گا اور ایک متضاد حالت میں ختم ہو جائے گا۔ خوش قسمتی سے، 64 بٹ مونگو ڈی بی نے لاگنگ کو فعال کر دیا ہے۔

MMAPv1 اور WiredTiger سٹوریج انجن اس کو روکنے کے لیے لاگنگ کا استعمال کرتے ہیں، حالانکہ WiredTiger آخری مستقل تک بحال ہو سکتا ہے۔ کنٹرول پوائنٹ، اگر لاگنگ غیر فعال ہے۔

جرنلنگ اس بات کو یقینی بناتی ہے کہ ڈیٹا بیس بحالی کے بعد ایک مستقل حالت میں ہے اور تمام ڈیٹا کو اس وقت تک برقرار رکھتا ہے جب تک کہ اسے جرنل میں نہیں لکھا جاتا۔ ریکارڈنگ کی فریکوئنسی پیرامیٹر کا استعمال کرتے ہوئے ترتیب دی گئی ہے۔ commitIntervalMs.

اندراجات کو یقینی بنانے کے لیے، یقینی بنائیں کہ کنفیگریشن فائل میں لاگنگ فعال ہے۔ (storage.journal.enabled)، اور ریکارڈنگ کی فریکوئنسی اس معلومات کی مقدار کے مساوی ہے جسے آپ کھو سکتے ہیں۔

انڈیکس کے بغیر چھانٹنا

تلاش اور جمع کرتے وقت، اکثر ڈیٹا کو ترتیب دینے کی ضرورت ہوتی ہے۔ آئیے امید کرتے ہیں کہ یہ نتیجہ کو فلٹر کرنے کے بعد آخری مراحل میں سے کسی ایک پر کیا جائے گا تاکہ ترتیب دیے جانے والے ڈیٹا کی مقدار کو کم کیا جا سکے۔ اور اس صورت میں بھی، چھانٹنے کے لیے آپ کو ضرورت ہو گی۔ انڈیکس. آپ سنگل یا کمپاؤنڈ انڈیکس استعمال کر سکتے ہیں۔

اگر کوئی مناسب انڈیکس نہیں ہے تو، MongoDB اس کے بغیر کام کرے گا۔ میں تمام دستاویزات کے کل سائز پر 32 ایم بی کی میموری کی حد ہے۔ چھانٹنے کے عمل، اور اگر MongoDB اس حد تک پہنچ جاتا ہے، تو یہ یا تو غلطی پھینک دے گا یا واپس آ جائے گا۔ خالی ریکارڈ سیٹ.

انڈیکس سپورٹ کے بغیر تلاش کریں۔

تلاش کے سوالات SQL میں JOIN آپریشن کی طرح ایک فنکشن انجام دیتے ہیں۔ بہترین کام کرنے کے لیے، انہیں غیر ملکی کلید کے طور پر استعمال ہونے والی کلید کی قدر کا اشاریہ درکار ہے۔ یہ واضح نہیں ہے کیونکہ استعمال میں ظاہر نہیں ہوتا ہے۔ explain(). اس طرح کے اشاریے لکھے گئے انڈیکس کے علاوہ ہیں۔ explain()، جس کے نتیجے میں پائپ لائن آپریٹرز استعمال کرتے ہیں۔ $match и $sort، جب وہ پائپ لائن کے آغاز میں ملتے ہیں۔ اشاریہ جات اب کسی بھی مرحلے کا احاطہ کر سکتے ہیں۔ جمع پائپ لائن.

ملٹی اپ ڈیٹس استعمال کرنے سے آپٹ آؤٹ کرنا

طریقہ۔ db.collection.update() آپ کے بیان کردہ پیرامیٹر پر منحصر ہے، کسی موجودہ دستاویز یا پوری دستاویز کا حصہ تبدیل کرنے کے لیے استعمال کیا جاتا ہے، مکمل تبدیلی تک update. جو بات اتنی واضح نہیں ہے وہ یہ ہے کہ یہ مجموعہ میں موجود تمام دستاویزات پر کارروائی نہیں کرے گا جب تک کہ آپ آپشن سیٹ نہ کریں۔ multi درخواست کے معیار پر پورا اترنے والے تمام دستاویزات کو اپ ڈیٹ کرنے کے لیے۔

ہیش ٹیبل میں کیز کے آرڈر کی اہمیت کو مت بھولنا

JSON میں، ایک آبجیکٹ سائز صفر یا اس سے زیادہ نام/قدر کے جوڑوں کے ایک غیر ترتیب شدہ مجموعہ پر مشتمل ہوتا ہے، جہاں نام ایک سٹرنگ ہے اور قدر ایک سٹرنگ، نمبر، بولین، نال، آبجیکٹ، یا سرنی ہے۔

بدقسمتی سے، BSON تلاش کرتے وقت آرڈر پر بہت زیادہ زور دیتا ہے۔ MongoDB میں، بلٹ ان اشیاء کے اندر چابیاں کی ترتیب معاملات، یعنی { firstname: "Phil", surname: "factor" } - یہ ایک جیسا نہیں ہے۔ { { surname: "factor", firstname: "Phil" }. یعنی، اگر آپ ان کو تلاش کرنے کا یقین کرنا چاہتے ہیں تو آپ کو اپنے دستاویزات میں نام/قدر کے جوڑوں کی ترتیب کو ذخیرہ کرنا ہوگا۔

الجھن میں نہ پڑو "خالی" и "غیر متعینہ"

ویلیو "غیر متعینہ" کے مطابق، JSON میں کبھی درست نہیں تھا۔ سرکاری معیار JSON (ECMA-404 سیکشن 5)، اگرچہ یہ JavaScript میں استعمال ہوتا ہے۔ مزید یہ کہ، BSON کے لیے یہ متروک ہے اور اس میں تبدیل ہو گیا ہے۔ $null، جو ہمیشہ اچھا حل نہیں ہوتا ہے۔ استعمال کرنے سے گریز کریں۔ "غیر متعینہ" MongoDB میں.

استعمال کریں $limit() بغیر $sort()

اکثر جب آپ MongoDB میں ترقی کر رہے ہوتے ہیں، تو نتیجہ کا صرف ایک نمونہ دیکھنا مفید ہوتا ہے جو کسی استفسار یا جمع سے واپس کیا جائے گا۔ اس کام کے لیے آپ کو ضرورت ہو گی۔ $limit()، لیکن یہ کبھی بھی حتمی کوڈ میں نہیں ہونا چاہئے جب تک کہ آپ اسے پہلے استعمال نہ کریں۔ $sort. یہ میکینک ضروری ہے کیونکہ بصورت دیگر آپ نتیجہ کی ترتیب کی ضمانت نہیں دے سکتے، اور آپ ڈیٹا کو قابل اعتماد طریقے سے نہیں دیکھ پائیں گے۔ نتیجہ کے اوپری حصے میں آپ کو ترتیب کے لحاظ سے مختلف اندراجات ملیں گے۔ قابل اعتماد طریقے سے کام کرنے کے لیے، استفسارات اور مجموعوں کو تعیین پسند ہونا چاہیے، یعنی جب بھی ان پر عمل کیا جائے تو ایک جیسے نتائج پیدا کریں۔ کوڈ جس پر مشتمل ہو۔ $limit()، لیکن نہیں $sort, تعیین پسند نہیں ہو گا اور اس کے نتیجے میں ایسی غلطیاں پیدا ہو سکتی ہیں جن کا سراغ لگانا مشکل ہو گا۔

حاصل يہ ہوا

MongoDB سے مایوس ہونے کا واحد طریقہ یہ ہے کہ اس کا براہ راست کسی دوسرے قسم کے ڈیٹا بیس سے موازنہ کیا جائے، جیسے کہ ڈی بی ایم ایس، یا کچھ توقعات کی بنیاد پر اسے استعمال کرنا ہے۔ یہ ایک کانٹے سے سنتری کا موازنہ کرنے جیسا ہے۔ ڈیٹا بیس سسٹم مخصوص مقاصد کی تکمیل کرتے ہیں۔ ان اختلافات کو اپنے لیے سمجھنا اور ان کی تعریف کرنا بہتر ہے۔ MongoDB ڈویلپرز پر ایک ایسے راستے پر دباؤ ڈالنا شرم کی بات ہوگی جس نے انہیں DBMS کے راستے پر مجبور کیا۔ میں پرانے مسائل کو حل کرنے کے نئے اور دلچسپ طریقے دیکھنا چاہتا ہوں، جیسے کہ ڈیٹا کی سالمیت کو یقینی بنانا اور ایسے ڈیٹا سسٹم بنانا جو ناکامی اور بدنیتی پر مبنی حملوں سے محفوظ ہوں۔

MongoDB کا ورژن 4.0 میں ACID ٹرانزیکشنلٹی کا تعارف ایک اختراعی طریقے سے اہم اصلاحات متعارف کرانے کی ایک اچھی مثال ہے۔ کثیر دستاویزی اور کثیر بیانیہ لین دین اب جوہری ہیں۔ تالے حاصل کرنے اور پھنسے ہوئے لین دین کو ختم کرنے کے ساتھ ساتھ تنہائی کی سطح کو تبدیل کرنے کے لیے درکار وقت کو ایڈجسٹ کرنا بھی ممکن ہے۔

14 چیزیں میری خواہش ہے کہ میں MongoDB کے ساتھ شروع کرنے سے پہلے جانتا ہوں۔

مزید پڑھ:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں