Un database NoSQL fornisce un meccanismo per l'archiviazione e il recupero dei dati modellato con mezzi diversi dalle relazioni tabulari utilizzate nei database relazionali (come SQL, Oracle, ecc.).
Tipi di database NoSQL:
- Orientato al documento
- Valore chiave
- Graph
- Orientato a colonna
MongoDB è un database orientato ai documenti. Memorizza i dati sotto forma di documenti basati sulla struttura BSON. Questi documenti vengono archiviati in una raccolta.
- Modello di dati flessibile sotto forma di documenti
- Database agile e altamente scalabile
- Più veloce dei database tradizionali
- Linguaggio di query espressivo
Uno spazio dei nomi è la concatenazione del nome del database e del nome della raccolta. Ad esempio, school.students con la scuola come database e gli studenti come raccolta
Attualmente, MonggoDB fornisce il supporto ufficiale dei driver per C, C ++, C #, Java, Node.js, Perl, PHP, Python, Ruby, Scala, Go ed Erlang. MongoDB può essere facilmente utilizzato con uno qualsiasi di questi linguaggi. Ci sono anche altri driver supportati dalla comunità, ma quelli sopra menzionati sono ufficialmente forniti da MongoDB.
I database SQL memorizzano i dati sotto forma di tabelle, righe, colonne e record. Questi dati sono archiviati in un modello di dati predefinito che non è molto flessibile per le applicazioni in forte crescita del mondo reale di oggi. MongoDB al contrario utilizza una struttura flessibile che può essere facilmente modificata ed estesa.
MongoDB consente una struttura del documento altamente flessibile e scalabile. Ad esempio, un documento di dati in MongoDB può avere cinque colonne e l'altro nella stessa raccolta può avere dieci colonne. Inoltre, i database MongoDB sono più veloci rispetto ai database SQL grazie a tecniche di indicizzazione e archiviazione efficienti.
Sebbene entrambi questi database siano orientati ai documenti, MongoDB è una scelta migliore per le applicazioni che richiedono query dinamiche e buone prestazioni su un database molto grande. D'altro canto, CouchDB è meglio utilizzato per applicazioni con query che cambiano occasionalmente e query predefinite.
No. MongoDB non supporta tali relazioni.
No. MongoDB non supporta le transazioni ACID multi-documento predefinite. Tuttavia, MongoDB fornisce operazioni atomiche su un singolo documento.
Per impostazione predefinita, MongoDB non supporta tali relazioni chiave primaria - chiave esterna. Tuttavia, possiamo realizzare questo concetto incorporando un documento all'interno di un altro. Ad esempio, un documento di indirizzo può essere incorporato nel documento del cliente.
No. MongoDB può essere eseguito anche su una piccola quantità di RAM. MongoDB alloca e disalloca dinamicamente la RAM in base ai requisiti di altri processi.
MongoDB spinge i dati su disco con pigrizia. Aggiorna immediatamente i dati scritti nel journal ma la scrittura dei dati dal journal al disco avviene in modo pigro.
ObjectID è un tipo BSON a 12 byte con:
- Valore di 4 byte che rappresenta i secondi
- Identificatore macchina a 3 byte
- ID di processo a 2 byte
- Contatore di 3 byte
Vero
Sì. La rimozione di un documento dal database lo rimuove anche dal disco.
use school;
db.persons.insert( { name: "kadhir", dept: "CSE" } )
Gli indici supportano l'esecuzione efficiente delle query in MongoDB. Senza indici, MongoDB deve eseguire una scansione della raccolta, ovvero analizzare ogni documento in una raccolta, per selezionare quei documenti che corrispondono all'istruzione della query. Se esiste un indice appropriato per una query, MongoDB può utilizzare l'indice per limitare il numero di documenti che deve ispezionare.
Per impostazione predefinita, MongoDB ha creato la raccolta _id per ogni raccolta.
Sì. Un campo array può essere indicizzato in MongoDB. In questo caso, MongoDB indicizzerà ogni valore dell'array.
Una query coperta è quella in cui:
- i campi utilizzati nella query fanno parte di un indice utilizzato nella query e
- i campi restituiti nei risultati sono nello stesso indice
Poiché tutti i campi sono coperti nell'indice stesso, MongoDB può soddisfare la condizione della query e restituire i campi dei risultati utilizzando lo stesso indice senza guardare all'interno dei documenti. Poiché gli indici sono memorizzati nella RAM o posizionati in sequenza su disco, tale accesso è molto più veloce.
Sì. MongoDB supporta la creazione di indici di testo per supportare la ricerca di testo all'interno del contenuto di una stringa. Questa era una nuova funzionalità che può essere introdotta nella versione 2.6.
Se gli indici non si adattano alla RAM, MongoDB legge i dati dal disco che è relativamente molto più lento della lettura dalla RAM.
db.collection.getIndexes()
Per configurazione predefinita, MongoDB scrive gli aggiornamenti sul disco ogni 60 secondi. Tuttavia, questo è configurabile con le opzioni commitIntervalMs e syncPeriodSecs.
Per ottenere i concetti di transazione e blocco in MongoDB, possiamo utilizzare l'annidamento dei documenti, chiamato anche documenti incorporati. MongoDB supporta operazioni atomiche all'interno di un singolo documento.
Le operazioni di aggregazione elaborano i record di dati e restituiscono i risultati calcolati. Le operazioni di aggregazione raggruppano i valori di più documenti e possono eseguire una serie di operazioni sui dati raggruppati per restituire un unico risultato. MongoDB offre tre modi per eseguire l'aggregazione: la pipeline di aggregazione, la funzione map-reduce e metodi e comandi di aggregazione monouso.
Sharding è un metodo per memorizzare i dati su più macchine. MongoDB usa il partizionamento orizzontale per supportare le distribuzioni con set di dati di grandi dimensioni e operazioni a velocità effettiva elevata.
La replica è il processo di sincronizzazione dei dati su più server. La replica fornisce ridondanza e aumenta la disponibilità dei dati. Con più copie di dati su diversi server di database, la replica protegge un database dalla perdita di un singolo server. La replica consente inoltre di eseguire il ripristino da errori hardware e interruzioni del servizio.
I nodi primario e master sono i nodi che possono accettare le scritture. La replica di MongoDB è "single-master": solo un nodo alla volta può accettare operazioni di scrittura.
I nodi secondari e slave sono nodi di sola lettura che replicano dal primario.
Falso. MongoDB scrive i dati solo nel set di repliche primario.
MongoDB prealloca i file di dati per riservare spazio ed evitare la frammentazione del file system durante la configurazione del server.
Dovresti considerare di incorporare documenti per:
- "contiene" relazioni tra entità
- Relazioni uno-a-molti
- Motivi di prestazione
Quando si esegue una build a 32 bit di MongoDB, la dimensione di archiviazione totale per il server, inclusi dati e indici, è di 2 gigabyte. Per questo motivo, non distribuire MongoDB in produzione su macchine a 32 bit.
Se stai utilizzando una build a 64 bit di MongoDB, non c'è praticamente alcun limite alle dimensioni di archiviazione.
Un motore di archiviazione è la parte di un database responsabile della gestione della modalità di archiviazione dei dati su disco. Ad esempio, un motore di archiviazione potrebbe offrire prestazioni migliori per carichi di lavoro pesanti in lettura e un altro potrebbe supportare una velocità effettiva maggiore per le operazioni di scrittura.
MongoDB utilizza MMAPv1 e WiredTiger.
Il profiler del database raccoglie dati a grana fine sulle operazioni di scrittura di MongoDB, i cursori, i comandi del database su un'istanza di mongod in esecuzione. È possibile abilitare la profilatura per database o per istanza.
Il profiler del database scrive tutti i dati che raccoglie nella raccolta system.profile, che è una raccolta con limite.
Quando viene eseguito con il journaling, MongoDB archivia e applica le operazioni di scrittura in memoria e nel journal su disco prima che le modifiche siano presenti nei file di dati sul disco. Le scritture sul journal sono atomiche, garantendo la coerenza dei file journal su disco. Con il journaling abilitato, MongoDB crea una sottodirectory journal all'interno della directory definita da dbPath, che è / data / db per impostazione predefinita.
db.isMaster ()
No. MMAPv1 non consente la configurazione della dimensione della cache.
Per il motore di archiviazione WiredTiger, è possibile specificare la dimensione massima della cache che WiredTiger utilizzerà per tutti i dati. Questo può essere fatto utilizzando l'opzione storage.wiredTiger.engineConfig.cacheSizeGB.
MongoDB utilizza blocchi lettore-scrittore che consentono a lettori simultanei l'accesso condiviso a una risorsa, come un database o una raccolta, ma concedono l'accesso esclusivo a una singola operazione di scrittura.
È possibile utilizzare il metodo snapshot () su un cursore per isolare l'operazione per un caso molto specifico. snapshot () attraversa l'indice nel campo _id e garantisce che la query restituirà ogni documento non più di una volta.
Sì. Operazioni come copyDatabase (), repairDatabase (), ecc. Possono bloccare più di un database coinvolto.
Nella replica, quando MongoDB scrive in una raccolta sul primario, MongoDB scrive anche nell'oplog del primario, che è una raccolta speciale nel database locale. Pertanto, MongoDB deve bloccare sia il database della raccolta che il database locale.
GridFS è una specifica per l'archiviazione e il recupero di file che superano il limite di dimensioni del documento BSON di 16 MB. Invece di memorizzare un file in un singolo documento, GridFS divide un file in parti o blocchi e memorizza ciascuno di questi blocchi come documento separato.
Sì. Il motore JavaScript V8 aggiunto nella versione 2.4 consente di eseguire più operazioni JavaScript contemporaneamente.
Il comando explore () può essere utilizzato per queste informazioni. Le modalità possibili sono: "queryPlanner", "executionStats" e "allPlansExecution".