14 нерсени MongoDB менен баштаардан мурун билгим келет

Макаланын котормосу курстун башталышынын алдында даярдалган "Реляциялык эмес маалымат базалары".

14 нерсени MongoDB менен баштаардан мурун билгим келет

Сөзү:

  • MongoDBде кошумча болсо да, схеманы иштеп чыгуу абдан маанилүү.
  • Ошо сыяктуу эле, индекстер схемаларыңызга жана мүмкүнчүлүктөрүңүзгө дал келиши керек.
  • Чоң объекттерди жана чоң массивдерди колдонуудан качыңыз.
  • MongoDB жөндөөлөрү менен сак болуңуз, айрыкча коопсуздук жана ишенимдүүлүк жөнүндө сөз болгондо.
  • MongoDBде сурамдарды оптималдаштыруучу жок, андыктан суроо операцияларын аткарууда этият болушуңуз керек.

Мен маалымат базалары менен көптөн бери иштеп келе жатам, бирок MongoDBди жакында гана таптым. Мен аны менен иштей баштаганга чейин билгим келген бир нече нерселер бар. Эгер адам белгилүү бир тармакта тажрыйбага ээ болгондо, алар маалымат базасы деген эмне жана алар эмне кылышы жөнүндө алдын ала ойлошкон. Башкаларга түшүнүүнү жеңилдетүү үчүн, мен жалпы каталардын тизмесин сунуштайм.

Аутентификациясыз MongoDB серверин түзүү

Тилекке каршы, MongoDB демейки боюнча аутентификациясыз орнотулган. Жергиликтүү жеткиликтүү иш станциясы үчүн бул практика кадыресе көрүнүш. Бирок MongoDB көп колдонуучу тутум болгондуктан, чоң көлөмдөгү эстутумду колдонууну жакшы көрөт, аны иштеп чыгуу үчүн гана колдоно турган болсоңуз да, аны мүмкүн болушунча көбүрөөк оперативдүү эс тутуму бар серверге койсоңуз жакшы болот. Серверге демейки порт аркылуу орнотуу көйгөйлүү болушу мүмкүн, өзгөчө, эгер кандайдыр бир JavaScript коду сурамда аткарылышы мүмкүн болсо (мисалы, $where үчүн идея катары сайма).

Аутентификациянын бир нече ыкмалары бар, бирок эң оңойсу - колдонуучунун ID/паролду коюу. Негизделген кооз аутентификация жөнүндө ойлонуп жатканда бул идеяны колдонуңуз LDAP. Коопсуздук жөнүндө сөз болгондо, MongoDB дайыма жаңыланып турушу керек жана журналдар ар дайым уруксатсыз кирүү үчүн текшерилиши керек. Мисалы, мен демейки порт катары башка портту тандагым келет.

Чабуул бетиңизди MongoDB менен байланыштырууну унутпаңыз

MongoDB коопсуздук текшерүү тизмеси тармакка кирүү жана маалыматтардын агып кетүү коркунучун азайтуу үчүн жакшы кеңештерди камтыйт. Аны тазалоо оңой жана иштеп чыгуу сервери коопсуздуктун жогорку деңгээлине муктаж эмес деп айтууга болот. Бирок, бул жөнөкөй эмес жана бул бардык MongoDB серверлерине тиешелүү. Атап айтканда, колдонууга эч кандай орчундуу себеп жок болсо mapReduce, group же $кайда, сиз конфигурация файлына жазуу менен JavaScript'те каалаган кодду колдонууну өчүрүшүңүз керек javascriptEnabled:false. Берилиш файлдары стандарттуу MongoDBде шифрленбегендиктен, MongoDB менен иштөө мааниси бар Арналган колдонуучу, ал файлдарга толук мүмкүнчүлүгү бар, ага гана кирүү мүмкүнчүлүгү чектелүү жана операциялык системанын өздүк файлды башкаруу элементтерин колдонуу мүмкүнчүлүгү бар.

Схеманы иштеп чыгууда ката

MongoDB схеманы колдонбойт. Бирок бул схеманын кереги жок дегенди билдирбейт. Эгерде сиз жөн гана документтерди эч кандай ырааттуу үлгүсү жок сактагыңыз келсе, аларды сактоо тез жана оңой болушу мүмкүн, бирок аларды кийинчерээк алуу кыйынга турат. катуу.

Классикалык макала "MongoDB схемасынын дизайны үчүн 6 эреже" Бул окууга арзырлык, жана сыяктуу өзгөчөлүктөрү Schema Explorer үчүнчү тараптын Studio 3T куралында, схемаларды үзгүлтүксүз текшерүү үчүн колдонууга арзырлык.

Сорттоо тартибин унутпаңыз

Сорттоо тартибин унутуу башка туура эмес конфигурацияларга караганда көбүрөөк нааразычылыктарды жана убакытты текке кетириши мүмкүн. Демейки боюнча MongoBD колдонот бинардык сорт. Бирок ал эч кимге пайдалуу болушу күмөн. Регистрге сезгич, акцентке сезгич, бинардык сорттор өткөн кылымдын 80-жылдарында мончоктор, кафтандар жана тармал муруттар менен бирге кызык анахронизмдер деп эсептелген. Азыр аларды пайдалануу кечиримсиз. Чыныгы жашоодо "мотоцикл" "Мотоцикл" менен бирдей. Ал эми "Британия" менен "Британия" бир эле жер. Кичи тамга – бул жөн гана чоң тамганын чоң эквиваленти. Ал эми диакритиктерди сорттоого мени баштабаңыз. MongoDBде маалымат базасын түзүп жатканда, акцентти сезбеген салыштырууну жана колдонуңуз катталуу, тилге туура келген жана системаны колдонуу маданияты. Бул сап маалыматтары аркылуу издөөнү бир топ жеңилдетет.

Чоң документтер менен коллекцияларды түзүңүз

MongoDB коллекцияларда 16 МБга чейинки чоң документтерди жайгаштырууга кубанычта GridFS 16 МБдан ашкан чоң документтер үчүн иштелип чыккан. Бирок чоң документтерди ал жерге жайгаштырса болот, аларды ошол жерде сактоо жакшы идея эмес. Эгерде сиз бир нече килобайт өлчөмүндөгү жеке документтерди сактасаңыз, аларды кең SQL таблицасындагы саптар сыяктуу карасаңыз, MongoDB жакшы иштейт. Чоң документтер менен көйгөйлөрдүн булагы болот өндүрүмдүүлүк.

Чоң массивдер менен документтерди түзүү

Документтер массивдерди камтышы мүмкүн. Массивдеги элементтердин саны төрт орундуу сандан алыс болсо жакшы болот. Эгерде массивге элементтер тез-тез кошулса, ал аны камтыган документтен ашып кетет жана жылдыруу, бул зарыл болот дегенди билдирет индекстерди да жаңыртуу. Документти чоң массив менен кайра индекстөөдө индекстер көп учурда үстүнө жазылат, анткени жазуу, анын индексин сактайт. Бул кайра индекстөө документ киргизилгенде же жок кылынганда да болот.

MongoDB деген нерсе бар "толтуруу коэффициенти", бул көйгөйдү азайтуу үчүн документтерди өстүрүүгө орун берет.
Сиз массивди индексациялоосуз эле жасай аласыз деп ойлошуңуз мүмкүн. Тилекке каршы, индекстердин жоктугу башка көйгөйлөргө алып келиши мүмкүн. Документтер башынан аягына чейин сканерленгендиктен, массивдин аягындагы элементтерди издөө көбүрөөк убакытты талап кылат жана мындай документ менен байланышкан операциялардын көбү жай.

Агрегациядагы этаптардын тартиби маанилүү экенин унутпаңыз

Сурамдарды оптималдаштыруучу маалымат базасы тутумунда сиз жазган сурамдар аны кантип алуу керек эмес, сиз эмнени алгыңыз келгенин түшүндүрөт. Бул механизм ресторанда буйрутма берүүгө окшош иштейт: адатта сиз жөн гана тамакка заказ бересиз жана ашпозчуга толук көрсөтмө бербейсиз.

MongoDBде сиз ашпозчуга көрсөтмө бересиз. Мисалы, сиз маалымат өтүп жатканын текшеришиңиз керек reduce колдонуу куурунда мүмкүн болушунча эртерээк $match и $project, жана сорттоо кийин гана ишке ашат reduce, жана издөө так сиз каалаган тартипте болот. Керексиз жумушту жок кылган, кадамдарды оптималдуу ирээтке келтирген жана кошулуу түрлөрүн тандаган суроо оптимизатору сизди бузушу мүмкүн. MongoDB менен сиз ыңгайлуулук үчүн көбүрөөк көзөмөлгө аласыз.

сыяктуу куралдар Studio 3T жылы агрегаттык сурамдарды курууну жөнөкөйлөтөт MongoDB. Aggregation Editor өзгөчөлүгү түтүк өткөргүч билдирүүлөрүн бир этапта колдонууга жана мүчүлүштүктөрдү оңдоону жеңилдетүү үчүн ар бир этапта киргизүү жана чыгаруу маалыматтарын текшерүүгө мүмкүндүк берет.

Ыкчам жазууну колдонуу

MongoDB жазуу параметрлерин эч качан жогорку ылдамдыкта, бирок ишенимдүүлүгү төмөн кылып койбоңуз. Бул режим "файл жана унут" тез көрүнөт, анткени буйрук жазууга чейин кайтарылган. Эгер маалымат дискке жазылганга чейин система бузулуп калса, ал жоголуп, ыраатсыз абалга келет. Бактыга жараша, 64-бит MongoDB журналга жазуу иштетилген.

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ден көңүл калуунун бирден-бир жолу - аны DBMS сыяктуу башка маалымат базасы менен түздөн-түз салыштыруу же белгилүү бир күтүүлөрдүн негизинде колдонууга келүү. Бул апельсинди айрыга салыштыргандай. Маалыматтар базасы системалары белгилүү бир максаттарга кызмат кылат. Бул айырмачылыктарды өзүңүз түшүнүп, баалап алганыңыз жакшы. MongoDB иштеп чыгуучуларына аларды DBMS жолуна түшүргөн жол боюнча кысым көрсөтүү уят болмок. Мен эски көйгөйлөрдү чечүүнүн жаңы жана кызыктуу жолдорун көргүм келет, мисалы, маалыматтардын бүтүндүгүн камсыз кылуу жана каталарга жана зыяндуу чабуулдарга туруктуу маалымат системаларын түзүү.

MongoDBдин 4.0 версиясында ACID транзакциялуулугун киргизүү инновациялык жол менен маанилүү жакшыртууларды киргизүүнүн жакшы мисалы болуп саналат. Көп документ жана көп билдирүү операциялары азыр атомдук болуп саналат. Ошондой эле кулпуларды алуу жана токтоп калган транзакцияларды токтотуу үчүн талап кылынган убакытты тууралоо, ошондой эле изоляция деңгээлин өзгөртүүгө болот.

14 нерсени MongoDB менен баштаардан мурун билгим келет

Кененирээк:

Source: www.habr.com

Комментарий кошуу