A traduzzione di l'articulu hè stata preparata à a vigilia di l'iniziu di u corsu
Highlights:
- Hè assai impurtante di sviluppà un schema ancu s'ellu hè opzionale in MongoDB.
- In listessu modu, l'indici devenu cuncordà cù u vostru schema è i mudelli di accessu.
- Evite l'usu di l'ogetti grossi è array grandi.
- Attenti à i paràmetri di MongoDB, soprattuttu quandu si tratta di sicurità è affidabilità.
- MongoDB ùn hà micca un ottimisatore di query, cusì deve esse attentu quandu eseguite operazioni di query.
Aghju travagliatu cù basa di dati per un tempu assai longu, ma solu pocu scupertu MongoDB. Ci hè uni pochi di cose chì vogliu sapè prima di cumincià à travaglià cun ellu. Quandu una persona hà digià spirienza in un certu campu, anu nozioni preconceived nantu à ciò chì e basa di dati sò è ciò chì facenu. In a speranza di fà più faciule per l'altri à capiscenu, aghju prisentatu una lista di sbagli cumuni.
Crià un servitore MongoDB senza autentificazione
Sfurtunatamente, MongoDB hè stallatu senza autentificazione per difettu. Per una stazione di travagliu accede à u locu, sta pratica hè normale. Ma siccomu MongoDB hè un sistema multi-utilizatori chì piace à utilizà una grande quantità di memoria, serà megliu s'ellu si mette nantu à un servitore cù a quantità di RAM pussibule, ancu s'è vo avete solu aduprà per u sviluppu. L'installazione nantu à u servitore via u portu predeterminatu pò esse problematicu, soprattuttu se qualsiasi codice javascript pò esse eseguitu in a dumanda (per esempiu, $where
cum'è una idea per
Ci sò parechji metudi di autentificazione, ma u più faciule hè di stabilisce un ID d'utilizatore / password. Aduprate sta idea mentre pensate à l'autentificazione di fantasia basatu nantu
Ùn vi scurdate di ligà a superficia di attaccu à MongoDB
,
o
. Siccomu i schedarii di dati ùn sò micca criptati in MongoDB standard, hè sensu per eseguisce MongoDB cun
Errore durante u sviluppu di u circuitu
MongoDB ùn usa micca un schema. Ma questu ùn significa micca chì u schema ùn hè micca necessariu. Se vulete solu almacenà i documenti senza un mudellu coherente, l'almacenamiento pò esse rapidu è faciule, ma ricuperà dopu pò esse difficiule.
Articulu classicu "
Ùn vi scurdate di l'ordine di sorte
Dimenticà l'ordine di sorte pò causà più frustrazione è perde più tempu chè qualsiasi altra cunfigurazione incorrecta. Per difettu, MongoBD usa
Crea cullezzione cù grandi documenti
MongoDB hè felice d'ospitu grandi documenti finu à 16MB in cullezzione, è
Creazione di documenti cù grandi matrici
I documenti ponu cuntene arrays. Hè megliu se u numeru di elementi in u array hè luntanu da un numeru di quattru cifre. Se l'elementi sò aghjuntu à una matrice spessu, u documentu chì u cuntene è deve esse
MongoDB hà qualcosa chjamatu
Puderete pensà chì pudete fà senza l'indexazione di array. Sfortunatamente, a mancanza d'indici pò causà altri prublemi. Siccomu i ducumenti sò scannati da u principiu à a fine, a ricerca di elementi à a fine di l'array duverà più, è a maiò parte di l'operazioni assuciate à un tali documentu saranu.
Ùn vi scurdate chì l'ordine di e tappe in una aggregazione importa
In un sistema di basa di dati cù un ottimisatore di query, e dumande chì scrivite sò spiegazioni di ciò chì vulete ottene, micca cumu ottene. Stu mekanismu funziona per analogia cù l'urdinamentu in un ristorante: di solitu, ordinate solu un platu, è ùn dà micca struzzioni dettagliate à u coccu.
In MongoDB, istruite u coccu. Per esempiu, avete bisognu di assicurà chì i dati passanu reduce
quantu pussibule in u pipeline usendu $match
и $project
, è a classificazione si faci solu dopu reduce
, è chì a ricerca passa esattamente in l'ordine chì vulete. Avè un ottimisatore di query chì elimina u travagliu innecessariu, sequenza in modu ottimale i passi, è selezziunate i tipi di cunghjunzione pò spoiler. Cù MongoDB, avete più cuntrollu à u costu di comodità.
Strumenti cum'è
Utilizà a registrazione rapida
Ùn mai impostate l'opzioni di scrittura MongoDB per avè alta velocità ma bassa affidabilità. Stu modu "file-and-forget" pari veloci perchè u cumandimu hè tornatu prima di a scrittura. Se u sistema falla prima chì i dati sò scritti à u discu, serà persu è finiscinu in un statu inconsistente. Per furtuna, 64-bit MongoDB hà attivatu u logu.
I mutori di almacenamento MMAPv1 è WiredTiger utilizanu logging per impediscenu questu, ancu s'è WiredTiger pò ricuperà à l'ultimu coherente.
Journaling assicura chì a basa di dati hè in un statu coherente dopu a ricuperazione è conserva tutte e dati finu à chì hè scrittu à u log. A frequenza di registrazioni hè cunfigurata cù u paràmetru
.
Per esse sicuru di e voci, assicuratevi chì u logu hè attivatu in u schedariu di cunfigurazione
, è a freccia di registrazioni currisponde à a quantità di informazioni chì pudete permette di perde.
Trià senza indice
Quandu cercate è aggregate, ci hè spessu bisognu di sorte i dati. Speremu chì questu hè fattu in una di e tappe finali, dopu avè filtratu u risultatu in modu di riduce a quantità di dati chì sò urdinati. E ancu in questu casu, per sorte avete bisognu
Se ùn ci hè micca un indice adattatu, MongoDB farà senza ellu. Ci hè un limitu di memoria di 32 MB nantu à a dimensione tutale di tutti i documenti in
Ricerca senza supportu d'indici
E dumande di ricerca facenu una funzione simile à l'operazione JOIN in SQL. Per travaglià megliu, anu bisognu di l'indici di u valore di a chjave utilizata cum'è a chjave straniera. Questu ùn hè micca evidenti perchè l'usu ùn hè micca riflessu explain()
. Tali indici sò in più di l'indici scrittu in explain()
, chì à u turnu hè utilizatu da l'operatori di pipeline $match
и $sort
, quandu si scontranu à u principiu di u pipeline. L'indici ponu avà copre ogni stadiu
Opzione di l'usu di l'aghjurnamenti multipli
Metu
utilizatu per cambià una parte di un documentu esistente o tuttu u documentu, finu à una sustituzione cumpleta, secondu u paràmetru chì specificate
. Ciò chì ùn hè micca cusì evidente hè chì ùn processerà micca tutti i documenti in a cullizzioni, salvu chì ùn fate micca l'opzione
per aghjurnà tutti i documenti chì rispondenu à i criteri di dumanda.
Ùn vi scurdate di l'impurtanza di l'ordine di i chjavi in una table hash
In JSON, un ughjettu hè custituitu da una cullizzioni disordinata di dimensione zero o più coppie nome / valore, induve u nome hè una stringa è u valore hè una stringa, numeru, boolean, null, object, o array.
Sfortunatamente, BSON mette assai enfasi in l'ordine quandu cerca. In MongoDB, l'ordine di e chjave in l'oggetti integrati { firstname: "Phil", surname: "factor" }
- questu ùn hè micca u listessu { { surname: "factor", firstname: "Phil" }
. Questu hè, duvete almacenà l'ordine di coppie nome / valore in i vostri documenti se vulete esse sicuru di truvà.
Ùn vi cunfunditi "Null" и "indefinitu"
valore "indefinitu" ùn hè mai statu validu in JSON, secondu $null
, chì ùn hè micca sempre una bona suluzione.
Usu $limit()
senza $sort()
Piuttostu spessu quandu si sviluppa in MongoDB, hè utile per vede solu una mostra di u risultatu chì serà tornatu da una dumanda o aggregazione. Per questu compitu avete bisognu $limit()
, ma ùn deve mai esse in u codice finale, salvu chì l'utilizate prima $sort
. Stu meccanicu hè necessariu perchè altrimenti ùn pudete micca guarantiscia l'ordine di u risultatu, è ùn puderà micca vede in modu affidabile di e dati. À a cima di u risultatu, uttene diverse entrate secondu a classificazione. Per travaglià in modu affidabile, e dumande è aggregazioni devenu esse deterministiche, vale à dì, pruducenu i stessi risultati ogni volta chì sò eseguiti. Codice chì cuntene $limit()
, ma nò $sort
, ùn serà micca deterministicu è pò sussegwentemente causà errori chì saranu difficiuli di seguità.
cunchiusioni
L'unicu modu per esse disappuntu cù MongoDB hè di paragunà direttamente à un altru tipu di basa di dati, cum'è un DBMS, o di vene à aduprà nantu à certe aspettative. Hè cum'è paragunà un aranciu à una forchetta. I sistemi di basa di dati servenu scopi specifichi. Hè megliu solu capisce è apprezzà queste differenzi per sè stessu. Saria una vergogna di pressu à i sviluppatori di MongoDB nantu à una strada chì l'hà furzatu à u percorsu DBMS. Vogliu vede modi novi è interessanti per risolve i vechji prublemi, cum'è per assicurà l'integrità di e dati è a creazione di sistemi di dati chì sò resistenti à fallimentu è attacchi maliziusi.
L'intruduzione di a transazzione ACID di MongoDB in a versione 4.0 hè un bon esempiu di introduzzione di migliorie impurtanti in una manera innovativa. Multi-document è transazzione multi-dichjarazione sò avà atomicu. Hè ancu pussibule d'aghjurnà u tempu necessariu per acquistà chjusi è finisce e transacciones stuck, è ancu cambià u livellu di isolamentu.
Leghjite più:
Source: www.habr.com