14 شیان چې کاش زه د MongoDB سره پیل کولو دمخه پوهیدم

د مقالې ژباړه د کورس د پیل په ماښام چمتو شوې وه "غیر اړونده ډیټابیسونه".

14 شیان چې کاش زه د MongoDB سره پیل کولو دمخه پوهیدم

څرګندونې:

  • د سکیما رامینځته کول خورا مهم دي حتی که دا په MongoDB کې اختیاري وي.
  • په ورته ډول، شاخصونه باید ستاسو د سکیما او لاسرسي نمونو سره سمون ولري.
  • د لویو شیانو او لویو صفونو کارولو څخه ډډه وکړئ.
  • د MongoDB تنظیماتو سره محتاط اوسئ ، په ځانګړي توګه کله چې د امنیت او اعتبار خبره راځي.
  • MongoDB د پوښتنې اصلاح کوونکی نلري، نو تاسو باید د پوښتنې عملیات ترسره کولو پر مهال محتاط اوسئ.

زه د ډیر وخت لپاره د ډیټابیسونو سره کار کوم ، مګر پدې وروستیو کې مونګو ډی بی کشف شوی. دلته یو څو شیان شته چې کاش زه پوهیدم مخکې له دې چې ما ورسره کار پیل کړ. کله چې یو څوک دمخه په یوه ځانګړي ساحه کې تجربه ولري، دوی د ډیټابیس څه شی دي ​​او دوی څه کوي په اړه دمخه تصور لري. د نورو لپاره د پوهیدو لپاره د اسانه کولو په هیله، زه د عام غلطیو لیست وړاندې کوم.

د تصدیق پرته د MongoDB سرور رامینځته کول

له بده مرغه، MongoDB د ډیفالټ لخوا د تصدیق پرته نصب شوی. د کار سټیشن لپاره چې په سیمه ایزه توګه لاسرسی کیږي، دا تمرین معمول دی. مګر څنګه چې مونګو ډی بی یو څو کاروونکي سیسټم دی چې د لوی مقدار حافظې کارول خوښوي ، نو دا به غوره وي که تاسو دا د امکان تر حده ډیر رام سره په سرور کې واچوئ ، حتی که تاسو دا یوازې د پراختیا لپاره وکاروئ. د ډیفالټ بندر له لارې په سرور کې نصب کول ستونزمن کیدی شي ، په ځانګړي توګه که چیرې د جاوا سکریپټ کوډ په غوښتنه کې اجرا شي (د مثال په توګه ، $where لپاره د یوې مفکورې په توګه انجیکشنونه).

د تصدیق کولو ډیری میتودونه شتون لري ، مګر ترټولو اسانه د کارونکي ID/پاسورډ تنظیم کول دي. دا مفکوره وکاروئ پداسې حال کې چې تاسو د فانسسي تصدیق کولو په اړه فکر کوئ LDAP. کله چې دا امنیت ته راځي، MongoDB باید په دوامداره توګه تازه شي، او لاګونه باید تل د غیر مجاز لاسرسي لپاره وڅیړل شي. د مثال په توګه، زه د ډیفالټ بندر په توګه یو بل بندر غوره کول خوښوم.

مه هیروئ چې د برید سطح MongoDB ته وتړئ

د MongoDB امنیت چک لیست د شبکې د نفوذ او د معلوماتو لیک کیدو خطر کمولو لپاره ښه لارښوونې لري. د دې برش کول اسانه دي او ووایه چې پراختیایی سرور د لوړې کچې امنیت ته اړتیا نلري. په هرصورت، دا دومره ساده ندی او دا په ټولو MongoDB سرورونو باندې تطبیق کیږي. په ځانګړې توګه، که چیرې د کارولو لپاره کوم مجبور دلیل شتون نلري mapReduce, group او یا $ چیرته، تاسو اړتیا لرئ په جاواسکریپټ کې د ترتیب کولو فایل کې لیکلو سره د خپل سري کوډ کارول غیر فعال کړئ javascriptEnabled:false. څرنګه چې د ډیټا فایلونه په معیاري MongoDB کې نه کوډ شوي، نو دا د MongoDB سره چلول معنی لري. وقف شوی کارن، کوم چې فایلونو ته بشپړ لاسرسی لري ، یوازې دې ته محدود لاسرسی او د عامل سیسټم د خپل فایل لاسرسي کنټرولونو کارولو وړتیا سره.

د سرکټ د پراختیا په وخت کې تېروتنه

MongoDB سکیما نه کاروي. مګر دا پدې معنی ندي چې سکیم ته اړتیا نشته. که تاسو یوازې غواړئ اسناد پرته له کوم ثابت نمونې ذخیره کړئ، د دوی ذخیره کول ګړندي او اسانه کیدی شي ، مګر وروسته یې ترلاسه کول ستونزمن کیدی شي. ډیر سخت.

کلاسیک مقاله "د MongoDB سکیما ډیزاین لپاره د ګوتو 6 قواعد" دا د لوستلو ارزښت لري، او ځانګړتیاوې لکه د سکیما سپړونکی د دریمې ډلې وسیلې سټوډیو 3T کې ، دا د سرکټونو منظم چیکونو لپاره کارولو ارزښت لري.

د ترتیب ترتیب مه هیروئ

د ترتیب ترتیب هیرول کولی شي د بل غلط ترتیب په پرتله ډیر مایوسي او ډیر وخت ضایع کړي. د ډیفالټ لخوا MongoBD کاروي بائنری ډول. مګر دا امکان نلري چې د چا لپاره ګټور وي. د قضیې حساس، د تلفظ سره حساس، بائنری ډولونه د تیرې پیړۍ په 80 لسیزه کې د مچانو، کیفتانانو او منحل مونو سره د زړه پورې انکرونیزم په توګه ګڼل کیده. اوس د دوی کارول د بخښنې وړ ندي. په ریښتیني ژوند کې، "موټرسایکل" د "موټرسایکل" په څیر دی. او "برطانیه" او "برطانیه" ورته ځای دی. کوچني توري په ساده ډول د لوی حروف سره د لوی حروف معادل دی. او ما د ډایریکټیکونو په ترتیب کولو پیل مه کوئ. کله چې په MongoDB کې ډیټابیس رامینځته کړئ ، د تلفظ غیر حساس کولو کارول وکاروئ او راجستر، کوم چې د ژبې سره مطابقت لري او د سیسټم کارونکي کلتور. دا به د تار ډیټا له لارې لټون خورا اسانه کړي.

د لوی اسنادو سره ټولګه جوړه کړئ

MongoDB خوښ دی چې په راټولولو کې تر 16MB پورې لوی اسناد کوربه کړي، او GridFS د 16 MB څخه لوی لوی سندونو لپاره ډیزاین شوی. مګر یوازې د دې لپاره چې لوی اسناد هلته کیښودل شي، د دوی ذخیره کول ښه نظر ندی. MongoDB به غوره کار وکړي که تاسو انفرادي اسناد ذخیره کړئ چې په اندازې کې څو کیلوبایټ وي، د پراخ SQL جدول کې د قطارونو په څیر چلند کوي. لوی اسناد به د ستونزو سرچینه وي تولید.

د لویو صفونو سره د اسنادو جوړول

اسناد کیدای شي صفونه ولري. دا غوره ده که چیرې په صف کې د عناصرو شمیر د څلور عددي شمیر څخه لرې وي. که عناصر په مکرر ډول په صف کې اضافه شي ، نو دا به هغه سند ته وده ورکړي چې پکې شامل دي او اړتیا به ولري حرکت، دا پدې مانا ده چې دا به اړین وي شاخصونه هم تازه کړئ. کله چې د لوی سرې سره یو سند بیا لیست کول ، نو شاخصونه به اکثرا له سره لیکل کیږي ، ځکه چې دلته شتون لري ننوتل، کوم چې خپل شاخص ساتي. دا بیا لیست کول هم هغه وخت پیښیږي کله چې یو سند داخل یا حذف شي.

MongoDB په نوم یو څه لري "د ډکولو فکتور"، کوم چې د دې ستونزې کمولو لپاره د اسنادو وده کولو لپاره خونه چمتو کوي.
تاسو شاید فکر وکړئ چې تاسو کولی شئ پرته له سرې لیست کولو څخه ترسره کړئ. له بده مرغه، د شاخصونو نشتوالی ممکن تاسو ته د نورو ستونزو لامل شي. څرنګه چې اسناد له پیل څخه تر پای پورې سکین شوي، د صف په پای کې د عناصرو لټون کول به ډیر وخت ونیسي، او ډیری عملیات به د داسې سند سره تړلي وي. ورو.

دا مه هېروئ چې په مجموعه کې د مرحلو ترتیب مهم دی

د ډیټابیس سیسټم کې د پوښتنو اصلاح کونکي سره ، هغه پوښتنې چې تاسو یې لیکئ د هغه څه توضیحات دي چې تاسو یې ترلاسه کول غواړئ ، نه دا چې څنګه یې ترلاسه کړئ. دا میکانیزم په رستورانت کې د امر کولو سره د مشابهت له مخې کار کوي: معمولا تاسو په ساده ډول د ډوډۍ امر کوئ، او پخلی ته مفصل لارښوونې نه ورکوئ.

په MongoDB کې، تاسو پخلی ته لارښوونه کوئ. د مثال په توګه، تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې ډاټا تیریږي reduce ژر تر ژره د پایپ لاین په کارولو سره $match и $project، او ترتیب کول یوازې وروسته پیښیږي reduce، او دا چې لټون په سمه توګه په هغه ترتیب کې پیښیږي چې تاسو یې غواړئ. د پوښتنې اصلاح کونکي درلودل چې غیر ضروري کار له مینځه وړي ، په غوره توګه مرحلې ترتیبوي ، او د یوځای کیدو ډولونه غوره کولی شي تاسو خراب کړي. د MongoDB سره، تاسو د اسانتیا په لګښت ډیر کنټرول لرئ.

وسیلې لکه سټوډیو 3T په کې به د راټولولو پوښتنو جوړول اسانه کړي MongoDB. د Aggregation Editor خصوصیت تاسو ته اجازه درکوي چې د پایپ لاین بیانات په یو وخت کې په یوه مرحله کې پلي کړئ، او په هره مرحله کې د انپټ او آوټ پټ ډیټا معاینه کړئ ترڅو د ډیبګ کولو ساده کولو لپاره.

د چټک ثبت کولو کارول

هیڅکله د MongoDB لیکلو اختیارونه مه تنظیم کړئ ترڅو لوړ سرعت ولري مګر ټیټ اعتبار ولري. دا حالت "دوتنه او هیرول" ګړندی ښکاري ځکه چې کمانډ د لیکلو دمخه بیرته راستانه کیږي. که سیسټم ډیسک ته د ډیټا لیکلو دمخه خراب شي ، نو دا به ورک شي او په متضاد حالت کې پای ته ورسیږي. خوشبختانه، 64-bit MongoDB لاګنګ فعال کړی دی.

د MMAPv1 او WiredTiger ذخیره کولو انجنونه د دې مخنیوي لپاره لاګنګ کاروي، که څه هم WiredTiger کولی شي وروستي ثابت ته بیرته راستانه شي د کنټرول نقطه, که د ننوتلو غیر فعال وي.

ژورنالینګ ډاډ ورکوي چې ډیټابیس د بیا رغونې وروسته په ثابت حالت کې دی او ټول معلومات ساتي تر هغه چې ژورنال ته لیکل شوي وي. د ثبت کولو فریکونسۍ د پیرامیټر په کارولو سره تنظیم شوې commitIntervalMs.

د ننوتلو په اړه ډاډ ترلاسه کولو لپاره، ډاډ ترلاسه کړئ چې لاګنګ د ترتیب کولو فایل کې فعال شوی (storage.journal.enabled)، او د ثبت کولو فریکوینسي د معلوماتو مقدار سره مطابقت لري چې تاسو یې له لاسه ورکولو توان لرئ.

د شاخص پرته ترتیب کول

کله چې لټون کول او راټولول، ډیری وختونه د معلوماتو ترتیب کولو ته اړتیا وي. راځئ چې امید ولرو چې دا په وروستي مرحلو کې ترسره کیږي ، د پایلې فلټر کولو وروسته د ترتیب شوي ډیټا مقدار کمولو لپاره. او حتی پدې حالت کې، د ترتیب کولو لپاره تاسو اړتیا لرئ شاخص. تاسو کولی شئ یو واحد یا مرکب شاخص وکاروئ.

که چیرې مناسب شاخص شتون ونلري، MongoDB به پرته له دې کار وکړي. د ټولو اسنادو په ټوله اندازه کې د 32 MB حافظې حد شتون لري د ترتیب کولو عملیات، او که MongoDB دې حد ته ورسیږي، نو دا به یا یوه تېروتنه وغورځوي یا بیرته راشي خالي ریکارډ سیټ.

د شاخص ملاتړ پرته لټون

د لټون پوښتنې په SQL کې د JOIN عملیاتو په څیر فعالیت ترسره کوي. د غوره کار کولو لپاره، دوی د کیلي ارزښت شاخص ته اړتیا لري چې د بهرني کیلي په توګه کارول کیږي. دا روښانه نده ځکه چې کارول په کې منعکس شوي ندي explain(). دا ډول شاخصونه د لیکل شوي شاخص سربیره دي explain()، کوم چې په پایله کې د پایپ لاین آپریټرانو لخوا کارول کیږي $match и $sort، کله چې دوی د پایپ لاین په پیل کې سره ملاقات کوي. شاخصونه اوس هر پړاو پوښلی شي د راټولولو پایپ لاین.

د څو تازه معلوماتو کارولو څخه غوره کول

میتود db.collection.update() د موجوده سند یا ټول سند د یوې برخې بدلولو لپاره کارول کیږي، تر بشپړ بدیل پورې، د هغه پیرامیټر پورې اړه لري چې تاسو یې مشخص کوئ update. هغه څه چې خورا څرګند ندي دا دي چې دا به په ټولګه کې ټول اسناد پروسس نکړي پرته لدې چې تاسو اختیار تنظیم کړئ multi د ټولو اسنادو تازه کول چې د غوښتنې معیارونه پوره کوي.

په هش میز کې د کیلي ترتیب اهمیت مه هیروئ

په JSON کې، یو څیز د اندازې صفر یا ډیرو نوم / ارزښت جوړو غیر منظم ټولګه لري، چیرې چې نوم یو تار دی او ارزښت یو تار، شمیره، بولین، نول، اعتراض، یا سري دی.

له بده مرغه، BSON د لټون کولو پر مهال په ترتیب ډیر ټینګار کوي. په MongoDB کې، په جوړ شوي شیانو کې د کیلي ترتیب موضوعات, i.e. { 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 سره د نا امید کیدو یوازینۍ لار دا ده چې دا مستقیم د بل ډول ډیټابیس سره پرتله کړئ، لکه DBMS، یا د ځینو توقعاتو پراساس د کارولو لپاره راځي. دا د نارنجي سره پرتله کولو په څیر دی. د ډیټابیس سیسټمونه ځانګړي اهداف لري. دا غوره ده چې په ساده ډول د ځان لپاره دا توپیرونه درک او تعریف کړئ. دا به د شرم خبره وي چې د MongoDB پراختیا کونکو باندې په داسې لاره فشار راوړي چې دوی یې د DBMS لارې ته اړ کړي. زه غواړم د زړو ستونزو د حل لپاره نوې او په زړه پورې لارې وګورم، لکه د معلوماتو بشپړتیا یقیني کول او د ډیټا سیسټمونو رامینځته کول چې د ناکامۍ او ناوړه بریدونو سره مقاومت لري.

په 4.0 نسخه کې د MongoDB لخوا د ACID لیږد معرفي کول په نوښت ډول د مهم پرمختګونو معرفي کولو یوه ښه بیلګه ده. څو سندونه او څو بیانیه راکړې ورکړې اوس اټومي دي. دا هم ممکنه ده چې د تالاشۍ ترلاسه کولو لپاره اړین وخت تنظیم کړئ او د تړل شوي معاملو پای ته ورسیږئ، او همدارنګه د انزوا کچه بدل کړئ.

14 شیان چې کاش زه د MongoDB سره پیل کولو دمخه پوهیدم

نور یی ولوله:

سرچینه: www.habr.com

Add a comment