Maqolaning tarjimasi kurs boshlanishi arafasida tayyorlangan
Muhim:
- MongoDB-da ixtiyoriy bo'lsa ham, sxemani ishlab chiqish juda muhimdir.
- Xuddi shunday, indekslar sizning sxema va kirish naqshlaringizga mos kelishi kerak.
- Katta ob'ektlar va katta massivlardan foydalanishdan saqlaning.
- MongoDB sozlamalari bilan ehtiyot bo'ling, ayniqsa xavfsizlik va ishonchlilik haqida gap ketganda.
- MongoDB-da so'rovlar optimallashtiruvchisi yo'q, shuning uchun so'rov operatsiyalarini bajarishda ehtiyot bo'lishingiz kerak.
Men juda uzoq vaqtdan beri ma'lumotlar bazalari bilan ishlayapman, lekin MongoDB-ni yaqinda kashf qildim. U bilan ishlashni boshlashdan oldin bilmoqchi bo'lgan bir nechta narsalar bor. Agar biror kishi ma'lum bir sohada tajribaga ega bo'lsa, ular ma'lumotlar bazalari nima va ular nima qilishlari haqida oldindan tasavvurga ega. Boshqalar tushunishini osonlashtirish umidida men keng tarqalgan xatolar ro'yxatini taqdim etaman.
MongoDB serverini autentifikatsiyasiz yaratish
Afsuski, MongoDB sukut bo'yicha autentifikatsiyasiz o'rnatiladi. Mahalliy ravishda foydalaniladigan ish stantsiyasi uchun bu amaliyot odatiy hisoblanadi. Ammo MongoDB ko'p foydalanuvchili tizim bo'lib, katta hajmdagi xotiradan foydalanishni yaxshi ko'radi, uni faqat ishlab chiqish uchun ishlatmoqchi bo'lsangiz ham, iloji boricha ko'proq operativ xotiraga ega serverga qo'ysangiz yaxshi bo'ladi. Standart port orqali serverga o'rnatish muammoli bo'lishi mumkin, ayniqsa so'rovda har qanday JavaScript kodi bajarilishi mumkin bo'lsa (masalan, $where
uchun g'oya sifatida
Bir nechta autentifikatsiya usullari mavjud, ammo eng osoni foydalanuvchi identifikatorini/parolini o'rnatishdir. Ushbu g'oyaga asoslangan ajoyib autentifikatsiya haqida o'ylaganingizda foydalaning
Hujum yuzasini MongoDB bilan bog'lashni unutmang
,
yoki
. Ma'lumotlar fayllari standart MongoDB da shifrlanmaganligi sababli, MongoDB bilan ishlash mantiqiy
Sxemani ishlab chiqishda xato
MongoDB sxemadan foydalanmaydi. Ammo bu sxema kerak emas degani emas. Agar siz hujjatlarni hech qanday izchil naqshsiz saqlashni istasangiz, ularni saqlash tez va oson bo'lishi mumkin, lekin ularni keyinroq olish qiyin bo'lishi mumkin.
Klassik maqola "
Saralash tartibini unutmang
Saralash tartibini unutish boshqa noto'g'ri konfiguratsiyaga qaraganda ko'proq umidsizlikka olib kelishi va ko'proq vaqt sarflashi mumkin. Odatiy bo'lib MongoBD foydalanadi
Katta hujjatlar bilan to'plamlar yarating
MongoDB to'plamlarda 16 MB gacha bo'lgan katta hujjatlarni joylashtirishdan mamnun va
Katta massivli hujjatlarni yaratish
Hujjatlar massivlarni o'z ichiga olishi mumkin. Massivdagi elementlar soni to'rt xonali sondan uzoqda bo'lsa yaxshi bo'ladi. Agar massivga elementlar tez-tez qo'shilsa, u o'z ichiga olgan hujjatdan oshib ketadi va shunday bo'lishi kerak bo'ladi.
MongoDB deb nomlangan narsa bor
Siz massivni indekslashsiz qila olasiz deb o'ylashingiz mumkin. Afsuski, indekslarning etishmasligi sizda boshqa muammolarga olib kelishi mumkin. Hujjatlar boshidan oxirigacha skanerlanganligi sababli, massiv oxiridagi elementlarni izlash ko'proq vaqt oladi va bunday hujjat bilan bog'liq bo'lgan ko'pgina operatsiyalar
Shuni unutmangki, yig'ilishdagi bosqichlarning tartibi muhim ahamiyatga ega
So'rovlar optimallashtiruvchisi bo'lgan ma'lumotlar bazasi tizimida siz yozgan so'rovlar uni qanday olish kerakligini emas, balki nimani olishni xohlayotganingizni tushuntirishdir. Ushbu mexanizm restoranda buyurtma berish bilan o'xshash ishlaydi: odatda siz shunchaki taomga buyurtma berasiz va oshpazga batafsil ko'rsatmalar bermaysiz.
MongoDB-da siz oshpazga ko'rsatma berasiz. Misol uchun, ma'lumotlarning o'tishiga ishonch hosil qilishingiz kerak reduce
yordamida quvur liniyasida imkon qadar erta $match
и $project
, va tartiblash faqat keyin sodir bo'ladi reduce
, va qidiruv aynan sizga kerak bo'lgan tartibda sodir bo'ladi. Keraksiz ishlarni bartaraf etadigan, qadamlarni optimal tarzda ketma-ketlashtiradigan va qo'shilish turlarini tanlaydigan so'rovlar optimallashtiruvchisiga ega bo'lish sizni buzishi mumkin. MongoDB yordamida siz qulaylik evaziga ko'proq nazoratga ega bo'lasiz.
kabi vositalar
Tez yozishdan foydalanish
Hech qachon MongoDB yozish opsiyalarini yuqori tezlikda, lekin ishonchliligi past qilib belgilamang. Ushbu rejim "fayl va unut" tez ko'rinadi, chunki buyruq yozishdan oldin qaytariladi. Agar ma'lumotlar diskka yozilgunga qadar tizim ishlamay qolsa, u yo'qoladi va mos kelmaydigan holatga tushadi. Yaxshiyamki, 64-bitli MongoDB logging yoqilgan.
MMAPv1 va WiredTiger saqlash dvigatellari buni oldini olish uchun jurnallardan foydalanadi, garchi WiredTiger oxirgi barqarorlikgacha tiklana oladi
Jurnallar ma'lumotlar bazasi qayta tiklangandan so'ng barqaror holatda bo'lishini ta'minlaydi va jurnalga yozilgunga qadar barcha ma'lumotlarni saqlab qoladi. Yozuvlar chastotasi parametr yordamida sozlanadi
.
Yozuvlarga ishonch hosil qilish uchun konfiguratsiya faylida jurnalga kirish yoqilganligiga ishonch hosil qiling
, va yozuvlar chastotasi siz yo'qotishingiz mumkin bo'lgan ma'lumotlar miqdoriga mos keladi.
Indekssiz saralash
Qidiruv va jamlashda ko'pincha ma'lumotlarni saralash kerak bo'ladi. Umid qilamizki, bu saralanadigan ma'lumotlar miqdorini kamaytirish uchun natijani filtrlashdan so'ng yakuniy bosqichlardan birida amalga oshiriladi. Va hatto bu holda, saralash uchun sizga kerak bo'ladi
Agar tegishli indeks bo'lmasa, MongoDB usiz ishlaydi. Barcha hujjatlarning umumiy hajmida 32 MB xotira chegarasi mavjud
Indeks yordamisiz qidirish
Qidiruv so'rovlari SQL da JOIN operatsiyasiga o'xshash funktsiyani bajaradi. Eng yaxshi ishlashi uchun ularga tashqi kalit sifatida ishlatiladigan kalit qiymati indeksi kerak. Bu aniq emas, chunki foydalanish aks ettirilmaydi explain()
. Bunday indekslar yozilgan indeksga qo'shimcha hisoblanadi explain()
, bu o'z navbatida quvur operatorlari tomonidan qo'llaniladi $match
и $sort
, ular quvur liniyasining boshida uchrashganda. Endi indekslar istalgan bosqichni qamrab olishi mumkin
Ko'p yangilanishlardan foydalanishni rad etish
usul
Siz ko'rsatgan parametrga qarab, mavjud hujjatning bir qismini yoki butun hujjatni to'liq almashtirishgacha o'zgartirish uchun ishlatiladi
. Shunchalik ravshan bo'lmagan narsa shundaki, agar siz parametrni o'rnatmasangiz, u to'plamdagi barcha hujjatlarni qayta ishlamaydi
so'rov mezonlariga javob beradigan barcha hujjatlarni yangilash.
Xesh-jadvaldagi kalitlarning tartibi muhimligini unutmang
JSON-da ob'ekt nol yoki undan ko'p nom/qiymat juftlarining tartibsiz to'plamidan iborat bo'lib, bu erda nom - satr va qiymat - satr, raqam, mantiqiy, null, ob'ekt yoki massiv.
Afsuski, BSON qidiruvda buyurtmaga katta e'tibor beradi. MongoDB-da o'rnatilgan ob'ektlar ichidagi kalitlarning tartibi { firstname: "Phil", surname: "factor" }
- bilan bir xil emas { { surname: "factor", firstname: "Phil" }
. Ya'ni, agar siz ularni topishga ishonch hosil qilishni istasangiz, hujjatlaringizda nom/qiymat juftliklari tartibini saqlashingiz kerak.
Adashmang "Nul" и "aniqlanmagan"
ma'no "aniqlanmagan" ko'ra, JSONda hech qachon haqiqiy emas edi $null
, bu har doim ham yaxshi yechim emas.
foydalanish $limit()
holda $sort()
Ko'pincha siz MongoDB-da ishlayotganingizda, so'rov yoki yig'ish orqali qaytariladigan natija namunasini ko'rish foydali bo'ladi. Ushbu vazifa uchun sizga kerak bo'ladi $limit()
, lekin bundan oldin foydalanmasangiz, u hech qachon yakuniy kodda bo'lmasligi kerak $sort
. Ushbu mexanik zarur, chunki aks holda siz natija tartibini kafolatlay olmaysiz va ma'lumotlarni ishonchli ko'ra olmaysiz. Natijaning yuqori qismida siz saralashga qarab turli xil yozuvlarni olasiz. Ishonchli ishlashi uchun so'rovlar va yig'ishlar deterministik bo'lishi kerak, ya'ni har safar bajarilganda bir xil natijalarni beradi. O'z ichiga olgan kod $limit()
, lekin yoq $sort
, deterministik bo'lmaydi va keyinchalik kuzatib borish qiyin bo'lgan xatolarga olib kelishi mumkin.
xulosa
MongoDB-dan hafsalasi pir bo'lishning yagona yo'li uni to'g'ridan-to'g'ri boshqa turdagi ma'lumotlar bazasi bilan solishtirish yoki ma'lum bir taxminlar asosida foydalanishga kirishishdir. Bu apelsinni sanchqi bilan solishtirishga o'xshaydi. Ma'lumotlar bazasi tizimlari ma'lum maqsadlarga xizmat qiladi. O'zingiz uchun bu farqlarni tushunish va qadrlash yaxshidir. MongoDB ishlab chiquvchilarini DBMS yo'lidan pastga tushirishga majbur qilgan yo'lda bosim o'tkazish uyat bo'lardi. Men eski muammolarni hal qilishning yangi va qiziqarli usullarini ko'rishni xohlayman, masalan, ma'lumotlar yaxlitligini ta'minlash va muvaffaqiyatsizlikka va zararli hujumlarga chidamli ma'lumotlar tizimlarini yaratish.
MongoDB 4.0 versiyasida ACID tranzaksiyaliligini joriy etishi muhim yaxshilanishlarni innovatsion usulda joriy etishning yaxshi namunasidir. Ko'p hujjatli va ko'p bayonotli operatsiyalar endi atom hisoblanadi. Bundan tashqari, qulflarni olish va tiqilib qolgan tranzaktsiyalarni tugatish uchun zarur bo'lgan vaqtni sozlash, shuningdek, izolyatsiya darajasini o'zgartirish mumkin.
Ko'proq o'qish:
Manba: www.habr.com