Məqalənin tərcüməsi kursun başlaması ərəfəsində hazırlanıb
Highlights:
- MongoDB-də isteğe bağlı olsa da, sxem hazırlamaq son dərəcə vacibdir.
- Eynilə, indekslər sxeminizə və giriş nümunələrinə uyğun olmalıdır.
- Böyük obyektlərdən və böyük massivlərdən istifadə etməyin.
- MongoDB parametrləri ilə diqqətli olun, xüsusən təhlükəsizlik və etibarlılığa gəldikdə.
- MongoDB-də sorğu optimallaşdırıcısı yoxdur, ona görə də sorğu əməliyyatlarını yerinə yetirərkən diqqətli olmalısınız.
Mən çox uzun müddətdir verilənlər bazası ilə işləyirəm, lakin MongoDB-ni bu yaxınlarda kəşf etdim. Onunla işləməyə başlamazdan əvvəl bilmək istədiyim bir neçə şey var. İnsan artıq müəyyən bir sahədə təcrübəyə malik olduqda, verilənlər bazalarının nə olduğu və nə etdikləri ilə bağlı qabaqcadan fikirlərə malikdir. Başqalarının başa düşməsini asanlaşdırmaq ümidi ilə ümumi səhvlərin siyahısını təqdim edirəm.
Doğrulama olmadan MongoDB serverinin yaradılması
Təəssüf ki, MongoDB standart olaraq autentifikasiya olmadan quraşdırılır. Yerli olaraq daxil olan bir iş stansiyası üçün bu təcrübə normaldır. Lakin MongoDB böyük həcmdə yaddaşdan istifadə etməyi sevən çox istifadəçili sistem olduğundan, onu yalnız inkişaf üçün istifadə etsəniz belə, mümkün qədər çox RAM olan bir serverə yerləşdirsəniz, daha yaxşı olar. Serverdə standart port vasitəsilə quraşdırma problemli ola bilər, xüsusən də sorğuda hər hansı javascript kodu icra oluna bilərsə (məsələn, $where
üçün ideya kimi
Bir neçə autentifikasiya üsulu var, lakin ən asanı istifadəçi ID/parol təyin etməkdir. Əsasən dəbdəbəli autentifikasiya haqqında düşünərkən bu fikirdən istifadə edin
Hücum səthini MongoDB ilə bağlamağı unutmayın
,
və ya
. Məlumat faylları standart MongoDB-də şifrələnmədiyi üçün MongoDB ilə işləmək məntiqlidir
Dövrəni inkişaf etdirərkən xəta
MongoDB sxemdən istifadə etmir. Amma bu o demək deyil ki, sxemə ehtiyac yoxdur. Əgər siz sadəcə sənədləri hər hansı ardıcıl nümunə olmadan saxlamaq istəyirsinizsə, onları saxlamaq tez və asan ola bilər, lakin sonradan onları geri qaytarmaq çətin ola bilər.
Klassik məqalə "
Sıralama qaydasını unutmayın
Çeşidləmə qaydasını unutmaq hər hansı digər yanlış konfiqurasiyadan daha çox məyusluğa və daha çox vaxt itkisinə səbəb ola bilər. Varsayılan olaraq MongoBD istifadə edir
Böyük sənədlərlə kolleksiyalar yaradın
MongoDB, kolleksiyalarda 16MB-a qədər böyük sənədləri yerləşdirməkdən məmnundur və
Böyük massivlərlə sənədlərin yaradılması
Sənədlərdə massivlər ola bilər. Massivdəki elementlərin sayı dörd rəqəmli rəqəmdən uzaq olsa yaxşıdır. Elementlər massivə tez-tez əlavə edilərsə, o, onu ehtiva edən sənəddən çox böyüyəcək və
MongoDB adlı bir şey var
Siz hesab edə bilərsiniz ki, siz serialın indeksləşdirilməsi olmadan edə bilərsiniz. Təəssüf ki, indekslərin olmaması başqa problemlərə səbəb ola bilər. Sənədlər başdan sona skan edildiyi üçün massivin sonundakı elementlərin axtarışı daha uzun çəkəcək və belə bir sənədlə əlaqəli əksər əməliyyatlar
Unutmayın ki, toplamada mərhələlərin ardıcıllığı vacibdir
Sorğu optimallaşdırıcısı olan verilənlər bazası sistemində yazdığınız sorğular onu necə əldə etməyiniz deyil, nə almaq istədiyinizin izahıdır. Bu mexanizm restoranda sifariş verməklə bənzətmə ilə işləyir: adətən siz sadəcə yemək sifariş edirsiniz və aşpaza ətraflı təlimat vermirsiniz.
MongoDB-də aşpaza göstəriş verirsiniz. Məsələn, məlumatların keçdiyinə əmin olmalısınız reduce
boru kəmərində mümkün qədər erkən istifadə edərək $match
и $project
, və çeşidləmə yalnız sonra baş verir reduce
, və axtarışın tam istədiyiniz ardıcıllıqla baş verdiyini. Lazımsız işləri aradan qaldıran, addımları optimal ardıcıllıqla sıralayan və qoşulma növlərini seçən sorğu optimallaşdırıcısına sahib olmaq sizi korlaya bilər. MongoDB ilə siz rahatlıq bahasına daha çox nəzarətə sahibsiniz.
kimi alətlər
Sürətli qeyddən istifadə
Heç vaxt MongoDB yazma seçimlərini yüksək sürət, lakin aşağı etibarlılıq üçün təyin etməyin. Bu rejim "fayl et və unut" sürətli görünür, çünki əmr yazmadan əvvəl geri qaytarılır. Məlumat diskə yazılmazdan əvvəl sistem çökərsə, o, itəcək və uyğunsuz vəziyyətə düşəcək. Xoşbəxtlikdən, 64-bit MongoDB girişi aktivləşdirib.
MMAPv1 və WiredTiger saxlama mühərrikləri bunun qarşısını almaq üçün girişdən istifadə edir, baxmayaraq ki, WiredTiger son ardıcıllığa qədər bərpa edə bilər.
Jurnallar verilənlər bazası bərpa edildikdən sonra ardıcıl vəziyyətdə olmasını təmin edir və jurnala yazılana qədər bütün məlumatları saxlayır. Qeydlərin tezliyi parametrdən istifadə edərək konfiqurasiya edilir
.
Girişlərdən əmin olmaq üçün konfiqurasiya faylında girişin aktiv olduğundan əmin olun
, və qeydlərin tezliyi itirə biləcəyiniz məlumatın miqdarına uyğundur.
İndekssiz çeşidləmə
Axtarış və ümumiləşdirmə zamanı çox vaxt məlumatları çeşidləməyə ehtiyac yaranır. Ümid edək ki, bu, çeşidlənən məlumatların miqdarını azaltmaq üçün nəticəni süzdükdən sonra son mərhələlərdən birində edilir. Və hətta bu halda, çeşidləmə üçün sizə lazım olacaq
Uyğun indeks yoxdursa, MongoDB onsuz da edəcək. Bütün sənədlərin ümumi ölçüsündə 32 MB yaddaş limiti var
İndeks dəstəyi olmadan axtarın
Axtarış sorğuları SQL-də JOIN əməliyyatına bənzər funksiyanı yerinə yetirir. Ən yaxşı işləmək üçün onlara xarici açar kimi istifadə olunan açarın dəyərinin indeksi lazımdır. Bu aydın deyil, çünki istifadə əks olunmur explain()
. Belə indekslər yazılan indeksə əlavədir explain()
, bu da öz növbəsində boru kəməri operatorları tərəfindən istifadə olunur $match
и $sort
, onlar boru kəmərinin başlanğıcında görüşdükdə. İndi indekslər istənilən mərhələni əhatə edə bilər
Çox yeniləmələrdən istifadə etməkdən imtina
üsul
müəyyən etdiyiniz parametrdən asılı olaraq, mövcud sənədin bir hissəsini və ya bütün sənədi tam dəyişdirməyə qədər dəyişdirmək üçün istifadə olunur.
. O qədər də aydın olmayan odur ki, siz seçimi təyin etməyincə o, kolleksiyadakı bütün sənədləri emal etməyəcək
sorğu meyarlarına cavab verən bütün sənədləri yeniləmək.
Hash cədvəlində açarların sırasının əhəmiyyətini unutma
JSON-da obyekt sıfır ölçülü və ya daha çox ad/dəyər cütlərinin sıralanmamış kolleksiyasından ibarətdir, burada ad sətir, dəyər isə sətir, rəqəm, mantiq, null, obyekt və ya massivdir.
Təəssüf ki, BSON axtarış zamanı sifarişə çox diqqət yetirir. MongoDB-də daxili obyektlər daxilində açarların sırası { firstname: "Phil", surname: "factor" }
- bu eyni deyil { { surname: "factor", firstname: "Phil" }
. Yəni, tapdığınızdan əmin olmaq istəyirsinizsə, ad/dəyər cütlərinin sırasını sənədlərinizdə saxlamalısınız.
Qarışıq olmayın "Sıfır" и "müəyyən edilməmiş"
Dəyər "müəyyən edilməmiş" görə, JSON-da heç vaxt etibarlı olmayıb $null
, bu həmişə yaxşı həll yolu deyil.
Istifadə $limit()
olmadan $sort()
Çox vaxt MongoDB-də inkişaf etdiyiniz zaman sorğudan və ya aqreqasiyadan qaytarılacaq nəticə nümunəsini görmək faydalıdır. Bu tapşırıq üçün sizə lazım olacaq $limit()
, lakin əvvəllər istifadə etməyincə, heç vaxt son kodda olmamalıdır $sort
. Bu mexanik zəruridir, çünki əks halda nəticənin ardıcıllığına zəmanət verə bilməzsiniz və məlumatlara etibarlı şəkildə baxa bilməyəcəksiniz. Nəticənin yuxarı hissəsində çeşidləmədən asılı olaraq müxtəlif girişlər əldə edəcəksiniz. Etibarlı işləmək üçün sorğular və aqreqasiyalar deterministik olmalıdır, yəni hər yerinə yetirildikdə eyni nəticələr verməlidir. ehtiva edən kod $limit()
, amma yox $sort
, deterministik olmayacaq və sonradan izləmək çətin olacaq səhvlərə səbəb ola bilər.
Nəticə
MongoDB-dən məyus olmağın yeganə yolu onu birbaşa DBMS kimi başqa bir verilənlər bazası növü ilə müqayisə etmək və ya müəyyən gözləntilərə əsaslanaraq ondan istifadə etməkdir. Bu, portağalı çəngəllə müqayisə etmək kimidir. Verilənlər bazası sistemləri xüsusi məqsədlərə xidmət edir. Ən yaxşısı bu fərqləri özünüz başa düşmək və qiymətləndirməkdir. MongoDB tərtibatçılarına onları DBMS yoluna məcbur edən bir yol üzərində təzyiq etmək ayıb olardı. Mən məlumatların bütövlüyünü təmin etmək və uğursuzluğa və zərərli hücumlara davamlı məlumat sistemlərinin yaradılması kimi köhnə problemlərin həllinin yeni və maraqlı yollarını görmək istəyirəm.
MongoDB-nin ACID əməliyyat qabiliyyətini 4.0 versiyasında təqdim etməsi mühüm təkmilləşdirmələrin innovativ şəkildə tətbiqinə yaxşı nümunədir. Çox sənədli və çox bəyanatlı əməliyyatlar artıq atom xarakterlidir. Kilidləri əldə etmək və ilişib qalmış əməliyyatları dayandırmaq üçün tələb olunan vaxtı tənzimləmək, həmçinin izolyasiya səviyyəsini dəyişdirmək də mümkündür.
Daha çox oxu:
Mənbə: www.habr.com