14 tiştên ku ez dixwazim berî ku dest bi MongoDB-ê bikim bizanim

Wergera gotarê di êvara destpêkirina kursê de hat amadekirin "Datebasên ne-girêdayî".

14 tiştên ku ez dixwazim berî ku dest bi MongoDB-ê bikim bizanim

Nîşaneyên balkêş:

  • Her çend ew di MongoDB de vebijarkî be jî pêşvebirina nexşeyek zehf girîng e.
  • Bi vî rengî, pêdivî ye ku pêdekek bi şema û şêwazên gihîştina we re têkildar be.
  • Ji karanîna tiştên mezin û rêzikên mezin dûr bixin.
  • Bi mîhengên MongoDB re hişyar bin, nemaze dema ku ew bi ewlehî û pêbaweriyê tê.
  • MongoDB xwedan optimîzatorek pirsê nîne, ji ber vê yekê divê hûn gava ku hûn karên pirsnameyê dikin baldar bin.

Ez demek pir dirêj bi databasan re dixebitim, lê tenê vê dawiyê MongoDB keşif kir. Çend tişt hene ku ez dixwazim berî ku ez bi wê re dest bi xebatê bikim bizanim. Gava ku kesek berê xwedan ezmûnek di qadekî diyarkirî de ye, ew di derheqê databasan de çi ne û ew çi dikin têgînên pêşîn hene. Bi hêviya ku ez ji yên din re hêsantir fêm bikim, ez navnîşek xeletiyên hevpar pêşkêşî dikim.

Afirandina serverek MongoDB bêyî pejirandinê

Mixabin, MongoDB bêyî pejirandinê ji hêla xwerû ve hatî saz kirin. Ji bo stasyonek xebatê ya ku bi herêmî tê gihîştin, ev pratîk normal e. Lê ji ber ku MongoDB pergalek pir-bikarhêner e ku hez dike mîqdarên mezin ên bîranînê bikar bîne, heke hûn wê bi qasî ku gengaz be li ser serverek bi RAM-ê bi qasî ku pêkan e, çêtir be, hetta hûn ê tenê wê ji bo pêşkeftinê bikar bînin. Sazkirina li ser serverê bi riya porta xwerû dikare pirsgirêk be, nemaze heke kodek javascript dikare di daxwazê ​​de were darve kirin (mînak, $where wekî ramanek ji bo derzî kirin).

Gelek rêbazên erêkirinê hene, lê ya herî hêsan ev e ku meriv ID / şîfreyek bikarhênerek saz bike. Vê ramanê bikar bînin dema ku hûn li ser bingeha pejirandina xeyalî difikirin LDAP. Dema ku dor tê ser ewlehiyê, MongoDB divê bi domdarî were nûve kirin, û têketin divê her gav ji bo gihîştina nedestûr werin kontrol kirin. Mînakî, ez dixwazim portek cûda wekî porta xwerû hilbijêrin.

Ji bîr nekin ku rûyê êrîşê bi MongoDB ve girêdin

Lîsteya Kontrola Ewlekariya MongoDB ji bo kêmkirina metirsiya destwerdana torê û rijandina daneyê serişteyên baş dihewîne. Hêsan e ku meriv wê jê bibe û bêje ku serverek pêşkeftinê ne hewceyê astek bilind a ewlehiyê ye. Lêbelê, ew ne ew çend hêsan e û ev ji hemî serverên MongoDB re derbas dibe. Bi taybetî, heke sedemek mecbûrî ya karanîna tune mapReduce, group an $ku, divê hûn bi nivîsandina di pelê veavakirinê de bikaranîna koda keyfî ya di JavaScriptê de neçalak bikin javascriptEnabled:false. Ji ber ku pelên daneyê di MongoDB standard de ne şîfrekirî ne, maqûl e ku meriv MongoDB bi rêve bibe Bikarhêner Dedicated, ku xwedan gihîştina tevahî pelan e, bi tenê gihîştina wê ya tixûbdar û şiyana karanîna kontrolên gihîştina pelê ya xweya pergala xebitandinê heye.

Di dema pêşdebirina çerxê de çewtî

MongoDB nexşeyek bikar tîne. Lê ev nayê wê wateyê ku plan ne hewce ye. Heke hûn tenê dixwazin belgeyan bêyî şêwazek domdar hilînin, hilanîna wan dikare zû û hêsan be, lê paşde kişandina wan dikare dijwar be. lanet zehmet.

Gotara klasîk "6 Rêbazên Thumb ji bo Design Schema MongoDB" Ew hêjayî xwendinê ye, û taybetmendiyên mîna Schema Explorer di amûra partiya sêyemîn Studio 3T de, hêja ye ku ji bo kontrolên birêkûpêk ên dorhêlan were bikar anîn.

Rêbaza celebê ji bîr nekin

Jibîrkirina rêzika cûrbecûr dikare ji her mîhengên din ên nerast zêdetir bibe sedema xemgîniyê û windakirina demê. Bi xwerû MongoBD bikar tîne cureyê binary. Lê ne mimkûn e ku ji kesî re kêrhatî be. Di salên 80-î yên sedsala borî de, cûreyên hestiyar, devokan, binar, tevî mijik, caftan û mustaqên kulm, wekî anakronîzma balkêş dihatin hesibandin. Niha bikaranîna wan nayê efûkirin. Di jiyana rast de, "motorsîklet" heman "Motorsîklet" e. Û "Brîtanya" û "Brîtanya" heman cih in. Tîpa piçûk bi tenê hevwateya mezin a herfa mezin e. Û ji min re dest bi veqetandina diakritîkan neke. Dema ku di MongoDB de databasek diafirînin, berhevoka nehesas a devkî bikar bînin û fêhrist, ku bi ziman û çanda bikarhênerê pergalê. Ev ê lêgerîna di nav daneyên rêzikê de pir hêsantir bike.

Bi belgeyên mezin berhevokan biafirînin

MongoDB kêfxweş e ku belgeyên mezin heya 16MB di berhevokan de mêvandar dike, û GridFS Ji bo belgeyên mezin ên ji 16 MB mezintir hatine çêkirin. Lê tenê ji ber ku belgeyên mezin dikarin li wir werin danîn, hilanîna wan li wir ne ramanek baş e. MongoDB dê çêtirîn bixebite heke hûn belgeyên kesane yên ku bi mezinahiya çend kîlobyte ne hilînin, wan bêtir wekî rêzan di tabloyek SQL-ya berfireh de derman bikin. Belgeyên mezin dê bibin çavkaniya pirsgirêkan baikarhatinî.

Afirandina belgeyan bi rêzikên mezin

Belgeyên dikarin array hene. Baştir e ku hejmara hêmanên di rêzê de ji jimareyek çar-reqemî dûr be. Ger hêmanên pir caran li rêzikekê werin zêdekirin, ew ê ji belgeya ku tê de ye mezintir bibe û pêdivî ye ku bibe barkirin, ku tê wateya ku ew ê hewce ye indexên nûvekirinê jî. Dema ku belgeyek bi rêzek mezin ji nû ve were îndeks kirin, dê pir caran pêvek werin nivîsandin, ji ber ku heye rekor, ku indexa xwe diparêze. Dema ku belgeyek tê xistin an jêbirin jî ev ji nû ve îndekskirin pêk tê.

MongoDB tiştek jê re tê gotin "faktora dagirtin", ku cîhê mezinbûna belgeyan peyda dike da ku vê pirsgirêkê kêm bike.
Hûn dikarin bifikirin ku hûn dikarin bêyî nîşankirina array bikin. Mixabin, nebûna indexan dibe ku hûn bibin sedema pirsgirêkên din. Ji ber ku belge ji destpêkê heya dawiyê têne skankirin, lêgerîna hêmanên li dawiya rêzê dê demek dirêj dirêj bike, û piraniya operasyonên ku bi belgeyek weha re têkildar in dê bibin hêdî.

Ji bîr nekin ku rêza qonaxên di kombûnê de girîng e

Di pergalek databasê de bi optimîzatorek pirsê re, pirsên ku hûn dinivîsin ravekirina tiştên ku hûn dixwazin bistînin ne, ne ku meriv wê çawa bigire. Ev mekanîzma bi fermankirina li xwaringehekê re bi analogî dixebite: bi gelemperî hûn tenê xwarinek ferman dikin, û rêwerzên berfireh nadin aşpêj.

Di MongoDB de, hûn şîretan didin xwarinçêker. Mînakî, hûn hewce ne ku pê ewle bin ku dane derbas dibin reduce wek zû di boriyê de bi kar tînin $match и $project, û veqetandin tenê piştî pêk tê reduce, û ku lêgerîn tam bi rêza ku hûn dixwazin pêk tê. Xwedî optimîzatorek pirsê ya ku xebata nehewce ji holê radike, gavan bi rengek çêtirîn rêz dike, û celebên tevlêbûnê hildibijêre dikare we xera bike. Bi MongoDB re, hûn bi lêçûna rehetiyê bêtir xwedan kontrol in.

Amûrên mîna Studio 3T dê avakirina pirsên kombûnê di nav de hêsan bike MongoDB. Taybetmendiya Edîtorê Aggregation destûrê dide te ku hûn qonaxek bi yek qonaxek daxuyaniyên boriyê bicîh bikin, û di her qonaxê de daneya ketin û derketinê kontrol bikin da ku xeletkirinê hêsan bikin.

Bikaranîna Tomarkirina Bilez

Tu carî vebijarkên nivîsandinê yên MongoDB destnîşan nekin ku xwedî leza bilind lê pêbaweriya hindik bin. Ev mode "pel-û-jibîrkirin" zû xuya dike ji ber ku ferman berî nivîsandinê tê vegerandin. Ger pergal berî ku dane li ser dîskê were nivîsandin têk bibe, ew ê winda bibe û di rewşek nelihev de bimîne. Xwezî, 64-bit MongoDB têketin çalak kiriye.

Motorên hilanînê MMAPv1 û WiredTiger ji bo pêşîlêgirtina vê yekê têketinê bikar tînin, her çend WiredTiger dikare heya domdariya paşîn vegere. xala kontrolê, heke têketin neçalak be.

Rojnamegerî piştrast dike ku databas piştî başbûnê di rewşek domdar de ye û hemî daneyan digire heya ku ew li têketinê were nivîsandin. Frekansa tomarkirinê bi karanîna parametreyê ve tê mîheng kirin commitIntervalMs.

Ji bo ku hûn ji navnîşan piştrast bibin, pê ewle bine ku têketin di pelê veavakirinê de çalak e (storage.journal.enabled), û frekansa tomarkirinê bi qasî agahdariya ku hûn dikarin winda bikin re têkildar e.

Rêzkirina bê index

Dema ku lêgerîn û berhev kirin, pir caran hewcedarî bi rêzkirina daneyan heye. Em hêvî dikin ku ev yek di yek ji qonaxên paşîn de, piştî fîlterkirina encamê, ji bo kêmkirina mîqdara daneyên ku têne veqetandin, were kirin. Û tewra di vê rewşê de, ji bo dabeşkirinê hûn ê hewce bibin index. Hûn dikarin navnîşek yekane an tevlihev bikar bînin.

Ger navnîşek maqûl tune, MongoDB dê bêyî wê bike. Li ser mezinahiya giştî ya hemî belgeyên tê de sînorek bîranînê 32 MB heye operasyonên cudakirinê, û heke MongoDB bigihîje vê sînorê, wê hingê ew ê xeletiyek bavêje an jî vegere qeydên vala.

Lêgerîna bêyî piştgiriya index

Pirsên lêgerînê fonksiyonek mîna operasyona JOIN di SQL de pêk tînin. Ji bo ku çêtirîn bixebitin, hewcedariya wan bi nîşaneya nirxa mifteya ku wekî mifteya biyanî tê bikar anîn heye. Ev ne diyar e ji ber ku karanîna di nav de nayê xuyang kirin explain(). Nîşaneyên weha ji bilî îndeksa ku tê de hatî nivîsandin hene explain(), ku di encamê de ji hêla operatorên lûleyê ve tê bikar anîn $match и $sort, gava ku ew di destpêka boriyê de dicivin. Endeks êdî dikarin her qonaxekê veşêrin lûleya kombûnê.

Vejirandina ji karanîna pir-nûvekirinên

Rêbaz db.collection.update() ji bo guheztina beşek ji belgeyek heyî an tevahiya belgeyê, heya bi tevahî veguheztin, li gorî pîvana ku hûn diyar dikin tê bikar anîn. update. Tiştê ku ne ew qas eşkere ye ev e ku ew ê hemî belgeyên di berhevokê de pêvajo neke heya ku hûn vebijarkê destnîşan nekin multi ji bo nûvekirina hemî belgeyên ku pîvanên daxwaznameyê bicîh dikin.

Girîngiya rêza kilîtan di tabloyek haş de ji bîr nekin

Di JSON de, hêmanek ji berhevokek ne rêzkirî ya mezinahiya sifir an jî zêdetir cotên nav/nirx pêk tê, ku nav rêzek e û nirx rêzek, hejmar, boolean, null, tişt, an rêzek e.

Mixabin, BSON di dema lêgerînê de gelek giraniyê dide rêzê. Di MongoDB de, rêza bişkokan di nav tiştên çêkirî de di mijarên, yanî { firstname: "Phil", surname: "factor" } - ev ne wek hev e { { surname: "factor", firstname: "Phil" }. Ango, heke hûn dixwazin ji dîtina wan piştrast bin, divê hûn rêza cotên nav / nirxê di belgeyên xwe de hilînin.

Ne şaş be "Null" и "nedîyar"

nirxê "nedîyar" Li gorî, di JSON de qet derbas nebû standard fermî JSON (ECMA-404 Beşa 5), ​​her çend ew di JavaScriptê de tê bikar anîn. Wekî din, ji bo BSON ew qedîm e û tê veguheztin $null, ku her gav ne çareseriyek baş e. Dûr bikar bînin "nedîyar" li MongoDB.

Bikar bînin $limit() bêyî $sort()

Pir caran gava ku hûn li MongoDB pêşve diçin, kêrhatî ye ku meriv tenê nimûneyek encama ku dê ji pirsek an berhevokek vegere were dîtin. Ji bo vê peywirê hûn ê hewce bibin $limit(), lê divê ew çu carî di koda paşîn de nebe heya ku hûn berê wê bikar neynin $sort. Ev mekanîka pêdivî ye ji ber ku wekî din hûn nekarin rêza encamê garantî bikin, û hûn ê nikaribin bi pêbawer daneyan bibînin. Li jorê encamê hûn ê li gorî rêzkirinê navnîşên cûda bistînin. Ji bo ku bi pêbawer bixebitin, pirs û kombûn divê diyarker bin, ango her gava ku têne darve kirin heman encaman derxînin. Koda ku tê de heye $limit(), lê na $sort, dê ne diyarker be û dibe ku paşê bibe sedema xeletiyên ku peydakirina wan dijwar be.

encamê

Awayê yekane ku meriv ji MongoDB bêhêvî dibe ev e ku meriv wê rasterast bi celebek din a databasê, wek DBMS-ê, berhev bike, an jî li ser bingeha hin hêviyên wê bikar bîne. Mîna berawirdkirina pirteqalekê û çilmisê ye. Pergalên databasê ji armancên taybetî re xizmetê dikin. Çêtir e ku meriv van cûdahiyan ji xwe re bi tenê fêm bike û binirxîne. Dê şerm be ku meriv zextê li pêşdebirên MongoDB bike li ser rêyek ku wan neçar kir ku rêça DBMS dakevin. Ez dixwazim rêyên nû û balkêş ji bo çareserkirina pirsgirêkên kevin bibînim, wek mînak misogerkirina yekparebûna daneyê û afirandina pergalên daneyê yên ku li hember têkçûn û êrişên xerab berxwedêr in.

Danasîna MongoDB ya danûstendina ACID-ê di guhertoya 4.0 de mînakek baş e ji bo danasîna pêşkeftinên girîng bi rengek nûjen. Danûstandinên pir-belge û pir-daxuyan êdî atomî ne. Di heman demê de gengaz e ku meriv wextê ku ji bo bidestxistina qefleyan û bidawîkirina danûstendinên asê maye, û her weha asta îzolasyonê biguhezîne.

14 tiştên ku ez dixwazim berî ku dest bi MongoDB-ê bikim bizanim

Zêdetir bixwînin:

Source: www.habr.com

Add a comment