14 чизеро, ки ман мехостам пеш аз оғози кор бо MongoDB медонистам

Тарҷумаи мақола дар арафаи оғози курс омода шудааст "Махзани маълумотҳои ғайрирасмӣ".

14 чизеро, ки ман мехостам пеш аз оғози кор бо MongoDB медонистам

Натиҷаҳо:

  • Таҳияи схема хеле муҳим аст, гарчанде ки он дар MongoDB ихтиёрӣ аст.
  • Ба ҳамин монанд, индексҳо бояд ба схема ва намунаҳои дастрасии шумо мувофиқат кунанд.
  • Аз истифодаи объектҳои калон ва массивҳои калон худдорӣ намоед.
  • Бо танзимоти MongoDB эҳтиёт бошед, хусусан вақте ки сухан дар бораи амният ва эътимод меравад.
  • MongoDB оптимизатори дархост надорад, аз ин рӯ ҳангоми иҷрои амалиёти дархост шумо бояд эҳтиёт бошед.

Ман муддати тӯлонӣ бо пойгоҳи додаҳо кор мекунам, аммо танҳо ба наздикӣ MongoDB-ро кашф кардам. Якчанд чизҳое ҳастанд, ки ман мехостам пеш аз оғози кор бо он медонистам. Вақте ки шахс аллакай дар як соҳаи муайян таҷриба дорад, онҳо дар бораи он, ки пойгоҳи додаҳо чист ва чӣ кор мекунанд, тасаввуроти пешакӣ доранд. Бо умеди осон кардани фаҳмидани дигарон, ман рӯйхати хатогиҳои маъмулро пешниҳод мекунам.

Эҷоди сервери MongoDB бе аутентификатсия

Мутаассифона, MongoDB бо нобаёнӣ бе аутентификатсия насб карда мешавад. Барои як истгоҳи корӣ, ки ба таври маҳаллӣ дастрас аст, ин амал муқаррарӣ аст. Аммо азбаски MongoDB як системаи бисёркорбар аст, ки истифодаи миқдори зиёди хотираро дӯст медорад, беҳтар аст, агар шумо онро ба сервери дорои хотираи бештари RAM ҷойгир кунед, ҳатто агар шумо онро танҳо барои рушд истифода баред. Насбкунӣ дар сервер тавассути бандари пешфарз метавонад мушкил бошад, хусусан агар дар дархост ягон рамзи JavaScript иҷро карда шавад (масалан, $where ҳамчун идея барои сӯзандоруҳо).

Якчанд усулҳои аутентификатсия вуҷуд доранд, аммо осонтаринаш муқаррар кардани ID/гузарвожаи корбар аст. Ҳангоми фикр кардан дар бораи аутентификатсия дар асоси ин идея ин идеяро истифода баред LDAP. Вақте ки сухан дар бораи амният меравад, MongoDB бояд доимо нав карда шавад ва гузоришҳо бояд ҳамеша барои дастрасии беиҷозат тафтиш карда шаванд. Масалан, ман мехоҳам бандари дигарро ҳамчун бандари пешфарз интихоб кунам.

Фаромӯш накунед, ки сатҳи ҳамлаи худро ба MongoDB пайваст кунед

Рӯйхати бехатарии MongoDB дорои маслиҳатҳои хуб оид ба кам кардани хатари дахолати шабака ва ихроҷи маълумот мебошад. Онро тоза кардан ва гуфтан осон аст, ки сервери рушд ба сатҳи баланди амният ниёз надорад. Аммо, ин он қадар оддӣ нест ва ин ба ҳама серверҳои MongoDB дахл дорад. Махсусан, агар ягон сабаби асоснок барои истифода вуҷуд надошта бошад mapReduce, group ё $ дар куҷо, шумо бояд истифодаи рамзи ихтиёриро дар JavaScript бо навиштан дар файли конфигуратсия хомӯш кунед javascriptEnabled:false. Азбаски файлҳои додаҳо дар стандарти MongoDB рамзгузорӣ нашудаанд, кор кардани MongoDB бо он маъно дорад Корбари бахшидашуда, ки дастрасии пурра ба файлҳо дорад, танҳо бо дастрасии маҳдуд ба он ва қобилияти истифодабарии назорати дастрасии файлҳои худи системаи оператсионӣ.

Хатогӣ ҳангоми таҳияи схема

MongoDB схемаро истифода намебарад. Аммо ин маънои онро надорад, ки схема лозим нест. Агар шумо танҳо хоҳед, ки ҳуҷҷатҳоро бидуни ягон намунаи мувофиқ нигоҳ доред, нигоҳ доштани онҳо метавонад зуд ва осон бошад, аммо бозпас гирифтани онҳо баъдтар душвор буда метавонад. бало сахт.

Мақолаи классикӣ "6 Қоидаҳои дастӣ барои тарҳрезии схемаи MongoDB" Ин арзанда хондан аст, ва хусусиятҳои монанди Explorer Schema дар асбоби тарафи сеюм Studio 3T, онро барои тафтиши мунтазами схемаҳо истифода бурдан лозим аст.

Тартиби навъро фаромӯш накунед

Фаромӯш кардани тартиби ҷудокунӣ метавонад боиси ноумедии бештар гардад ва вақти бештарро аз ҳар гуна конфигуратсияи нодурусти дигар сарф кунад. Бо нобаёнӣ MongoBD истифода мебарад навъҳои дуӣ. Аммо аз эҳтимол дур нест, ки барои касе муфид бошад. Дар солҳои 80-уми асри гузашта навъҳои ҳассос ба ҳарфҳо, акцент ҳассос, дуӣ анахронизмҳои кунҷкобӣ дар баробари маҳтобӣ, кафтанҳо ва мӯйлабҳои ҷингила ба ҳисоб мерафтанд. Холо истифодаи онхо авфнопазир аст. Дар ҳаёти воқеӣ "мотоцикл" ҳамон "Мотоцикл" аст. Ва "Бритониё" ва "Бритониё" ҳамон ҷост. Ҳарфи хурд танҳо муодили ҳарфи калон аст. Ва маро ба ҷудо кардани диакритикҳо шурӯъ накунед. Ҳангоми эҷоди пойгоҳи додаҳо дар MongoDB, аз муқаддима ба аксент ҳассос истифода баред ва ба қайд гиред, ки ба забон ва фарҳанги истифодабарандагони система. Ин ҷустуҷӯро тавассути маълумоти сатр хеле осон мекунад.

Бо ҳуҷҷатҳои калон коллексияҳо эҷод кунед

MongoDB хушҳол аст, ки ҳуҷҷатҳои калонро то 16 МБ дар коллексияҳо ҷойгир кунад ва GridFS Барои ҳуҷҷатҳои калонтар аз 16 МБ пешбинӣ шудааст. Аммо танҳо аз сабаби он ки ҳуҷҷатҳои калон дар он ҷо ҷойгир карда мешаванд, нигоҳ доштани онҳо фикри хуб нест. MongoDB беҳтар кор хоҳад кард, агар шумо ҳуҷҷатҳои инфиродӣ, ки андозаи чанд килобайтро нигоҳ доред ва онҳоро бештар ба сатрҳо дар ҷадвали васеи SQL монанд кунед. Ҳуҷҷатҳои калон манбаи мушкилот хоҳанд буд хосилнокии мехнат.

Эҷоди ҳуҷҷатҳо бо массивҳои калон

Ҳуҷҷатҳо метавонанд массивҳоро дар бар гиранд. Беҳтар аст, ки шумораи элементҳои массив аз рақами чоррақама дур бошад. Агар элементҳо ба массив зуд-зуд илова карда шаванд, он аз ҳуҷҷати дорои он зиёдтар мешавад ва бояд ҳаракат, ки ин маънои онро дорад, ки зарур хоҳад буд инчунин индексҳоро нав кунед. Ҳангоми аз нав индексатсия кардани ҳуҷҷат бо массиви калон, индексҳо аксар вақт аз нав навишта мешаванд, зеро ворид шудан, ки индекси худро нигоҳ медорад. Ин индексатсияи такрорӣ инчунин ҳангоми ворид кардан ё нест кардани ҳуҷҷат ба амал меояд.

MongoDB дорои чизе ном дорад "омили пур", ки барои афзоиш додани ҳуҷҷатҳо барои кам кардани ин мушкилот ҷой фароҳам меорад.
Шумо шояд фикр кунед, ки шумо метавонед бе индексатсияи массив кор кунед. Мутаассифона, набудани нишондиҳандаҳо метавонад боиси мушкилоти дигар гардад. Азбаски ҳуҷҷатҳо аз аввал то ба охир скан карда мешаванд, ҷустуҷӯи элементҳо дар охири массив тӯл мекашад ва аксари амалиётҳои бо чунин ҳуҷҷат алоқаманд суст.

Фаромӯш накунед, ки тартиби марҳилаҳо дар ҷамъбаст муҳим аст

Дар системаи пойгоҳи додаҳо бо оптимизатори дархост, дархостҳое, ки шумо менависед, шарҳи он чизест, ки шумо мехоҳед ба даст оред, на чӣ тавр ба даст овардани он. Ин механизм аз рӯи шабеҳи фармоиш дар тарабхона кор мекунад: одатан шумо танҳо як табақ фармоиш медиҳед ва ба ошпаз дастурҳои муфассал намедиҳед.

Дар MongoDB, шумо ба ошпаз дастур медиҳед. Масалан, шумо бояд боварӣ ҳосил кунед, ки маълумот тавассути он мегузарад reduce ҳарчи зудтар дар қубур истифода $match и $project, ва ҷудокунӣ танҳо пас аз он сурат мегирад reduce, ва ҷустуҷӯ маҳз бо тартиби дилхоҳатон сурат мегирад. Доштани оптимизатори пурсиш, ки кори нолозимро нест мекунад, қадамҳоро ба таври оптималӣ пайдарпай мекунад ва намудҳои пайвастшавиро интихоб мекунад, метавонад шуморо ғорат кунад. Бо MongoDB, шумо бо арзиши роҳат назорати бештар доред.

Воситаҳо ба монанди Студияи 3Т сохтмони пурсишхои агрегацияро дар Муғулистон. Хусусияти Муҳаррири Агрегатсия ба шумо имкон медиҳад, ки изҳороти қубурро дар як марҳила татбиқ кунед ва маълумоти воридотӣ ва баромадро дар ҳар як марҳила тафтиш кунед, то хатогиҳоро содда кунед.

Истифодаи сабти зуд

Ҳеҷ гоҳ имконоти навиштани MongoDB-ро ба суръати баланд, вале эътимоднокии паст таъин накунед. Ин режим "файл кардан ва фаромӯш кардан" зуд ба назар мерасад, зеро фармон пеш аз пайдо шудани навиштан баргардонида мешавад. Агар система пеш аз навиштани маълумот ба диск суқут кунад, он гум мешавад ва ба ҳолати номувофиқ табдил меёбад. Хушбахтона, 64-бит MongoDB сабти номро фаъол кардааст.

Муҳаррикҳои нигаҳдории MMAPv1 ва WiredTiger барои пешгирӣ кардани ин сабтро истифода мебаранд, гарчанде ки WiredTiger метавонад то охирин пайваста барқарор шавад нуқтаи назорат, агар сабти қайд ғайрифаъол бошад.

Журналсозӣ кафолат медиҳад, ки пойгоҳи додаҳо пас аз барқароршавӣ дар ҳолати доимӣ қарор доранд ва тамоми маълумотро то он даме, ки он ба сабт навишта шавад, нигоҳ медорад. Басомади сабтҳо бо истифода аз параметр танзим карда мешавад commitIntervalMs.

Барои боварӣ ҳосил кардани вурудот, боварӣ ҳосил кунед, ки сабт дар файли конфигуратсия фаъол аст (storage.journal.enabled), ва басомади сабтҳо ба миқдори маълумоте, ки шумо метавонед аз даст диҳед, мувофиқат мекунад.

Ҷудокунӣ бидуни индекс

Ҳангоми ҷустуҷӯ ва ҷамъоварӣ, аксар вақт ниёз ба ҷудо кардани маълумот вуҷуд дорад. Умедворем, ки ин дар яке аз марҳилаҳои ниҳоӣ, пас аз филтр кардани натиҷа бо мақсади кам кардани миқдори маълумотҳои ҷудошаванда анҷом дода мешавад. Ва ҳатто дар ин ҳолат, барои мураттабсозӣ ба шумо лозим меояд индекс. Шумо метавонед як индекси ягона ё мураккабро истифода баред.

Агар индекси мувофиқ мавҷуд набошад, MongoDB бе он кор мекунад. Маҳдудияти хотираи 32 МБ дар ҳаҷми умумии ҳамаи ҳуҷҷатҳои дар амалиёти ҷудокунӣ, ва агар MongoDB ба ин маҳдудият расад, он ё хатогӣ содир мекунад ё бармегардад сабти холӣ.

Ҷустуҷӯ бидуни дастгирии индекс

Дархостҳои ҷустуҷӯ функсияеро иҷро мекунанд, ки ба амалиёти JOIN дар SQL монанданд. Барои беҳтар кор кардан, ба онҳо индекси арзиши калиди ҳамчун калиди хориҷӣ истифодашаванда лозим аст. Ин равшан нест, зеро истифода дар он инъикос намеёбад 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 водор кардааст, шармовар аст. Ман мехоҳам роҳҳои нав ва ҷолиби ҳалли мушкилоти кӯҳнаро бубинам, ба монанди таъмини якпорчагии додаҳо ва эҷоди системаҳои додаҳо, ки ба нокомӣ ва ҳамлаҳои зараровар тобоваранд.

Ҷорӣ кардани муомилоти ACID аз ҷониби MongoDB дар версияи 4.0 намунаи хуби ҷорӣ кардани беҳбудиҳои муҳим дар роҳи инноватсионӣ мебошад. Амалиётҳои бисёрҳуҷҷатӣ ва бисёр изҳорот ҳоло атомӣ мебошанд. Инчунин мумкин аст, ки вақти ба даст овардани қулфҳо ва қатъ кардани транзаксияҳои дармонда, инчунин тағир додани сатҳи изолятсия лозим аст.

14 чизеро, ки ман мехостам пеш аз оғози кор бо MongoDB медонистам

Бештар:

Манбаъ: will.com

Илова Эзоҳ