

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Cos'è Amazon DocumentDB (con compatibilità con MongoDB)
<a name="what-is"></a>

Amazon DocumentDB (con compatibilità con MongoDB) è un servizio di database veloce, affidabile e completamente gestito. Amazon DocumentDB semplifica la configurazione, il funzionamento e la scalabilità di database compatibili con MongoDB nel cloud. Con Amazon DocumentDB, puoi eseguire lo stesso codice applicativo e utilizzare gli stessi driver e strumenti che usi con MongoDB.

Prima di utilizzare Amazon DocumentDB, è necessario esaminare i concetti e le funzionalità descritti in. [Come funziona](how-it-works.md) Successivamente, completa la procedura in [Guida introduttiva](get-started-guide.md).

**Topics**
+ [Panoramica di](#overview)
+ [Cluster](#what-is-db-clusters)
+ [Istanze](#what-is-db-instances)
+ [Regioni e AZs](#what-is-regions-and-azs)
+ [Prezzi](#docdb-pricing)
+ [Monitoraggio](#what-is-monitoring)
+ [Interfacce](#what-is-interfaces)
+ [Fasi successive](#what-is-next)
+ [Come funziona](how-it-works.md)
+ [Cos'è un database di documenti?](what-is-document-db.md)

## Panoramica di Amazon DocumentDB
<a name="overview"></a>

Di seguito sono riportate alcune funzionalità di alto livello di Amazon DocumentDB:
+ Amazon DocumentDB supporta due tipi di cluster: cluster basati su istanze e cluster elastici. I cluster elastici supportano carichi di lavoro con milioni di petabyte di capacità di reads/writes storage al secondo. Per ulteriori informazioni sui cluster elastici, consulta. [Utilizzo dei cluster elastici di Amazon DocumentDB](docdb-using-elastic-clusters.md) Il contenuto seguente si riferisce ai cluster basati su istanze di Amazon DocumentDB.
+ Amazon DocumentDB aumenta automaticamente le dimensioni del volume di storage in base alle esigenze di storage del database. Il volume di storage aumenta con incrementi di 10 GB, fino a un massimo di 128 TiB. Non è necessario assegnare risorse di storage aggiuntive al cluster per far fronte alla crescita futura.
+ Con Amazon DocumentDB, puoi aumentare la velocità di lettura per supportare richieste di applicazioni ad alto volume creando fino a 15 istanze di replica. Le repliche di Amazon DocumentDB condividono lo stesso storage sottostante, riducendo i costi ed evitando la necessità di eseguire scritture sui nodi di replica. Questa funzionalità libera più potenza di elaborazione per soddisfare le richieste di lettura e riduce il tempo di replica, spesso fino a millisecondi a una cifra. È possibile aggiungere repliche in pochi minuti indipendentemente dalle dimensioni del volume di archiviazione. Amazon DocumentDB fornisce anche un endpoint di lettura, in modo che l'applicazione possa connettersi senza dover tenere traccia delle repliche man mano che vengono aggiunte e rimosse.
+ Amazon DocumentDB ti consente di aumentare o ridurre le risorse di calcolo e memoria per ciascuna istanza. Le operazioni di dimensionamento delle risorse di calcolo in genere vengono completate in pochi minuti.
+ Amazon DocumentDB viene eseguito in Amazon Virtual Private Cloud (Amazon VPC), quindi puoi isolare il database nella tua rete virtuale. Puoi anche configurare le impostazioni del firewall per controllare l'accesso di rete al cluster.
+ Amazon DocumentDB monitora continuamente lo stato del cluster. In caso di errore dell'istanza, Amazon DocumentDB riavvia automaticamente l'istanza e i processi associati. Amazon DocumentDB non richiede la riproduzione in caso di crash recovery dei redo log del database, il che riduce notevolmente i tempi di riavvio. Amazon DocumentDB isola inoltre la cache del database dal processo del database, permettendo alla cache di sopravvivere al riavvio dell'istanza.
+ In caso di errore dell'istanza, Amazon DocumentDB automatizza il failover su una delle 15 repliche di Amazon DocumentDB create in altre zone di disponibilità. Se non è stata fornita alcuna replica e si verifica un errore, Amazon DocumentDB tenta di creare automaticamente una nuova istanza di Amazon DocumentDB.
+ La funzionalità di backup in Amazon DocumentDB consente point-in-time il ripristino del cluster. Questa caratteristica consente di ripristinare il cluster a qualsiasi momento compreso nel periodo di retention, fino agli ultimi 5 minuti. Puoi configurare il periodo di retention dei backup automatico fino a 35 giorni. I backup automatici sono archiviati in Amazon Simple Storage Service (Amazon S3), progettato per una durabilità del 99,99999%. I backup di Amazon DocumentDB sono automatici, incrementali e continui e non hanno alcun impatto sulle prestazioni del cluster.
+ Con Amazon DocumentDB, puoi crittografare i tuoi database utilizzando chiavi create e controllate tramite AWS Key Management Service ().AWS KMS In un cluster di database che utilizza la crittografia Amazon DocumentDB, i dati archiviati inattivi nello storage sottostante sono crittografati. Vengono crittografati anche i backup, le snapshot e le repliche automatici nello stesso cluster.
+ Amazon DocumentDB è autorizzato nell'ambito del Federal Risk and Authorization Management Program (FedRAMP). Ha l'autorizzazione FedRAMP High per le regioni (Stati Uniti) e l'autorizzazione FedRAMP Moderate AWS GovCloud per le regioni degli Stati Uniti. AWS East/West Per i dettagli AWS e gli sforzi di conformità, vedere [AWS Services](https://aws.amazon.com/compliance/services-in-scope/FedRAMP/) in Scope by Compliance Program.

Se non conosci i AWS servizi, utilizza le seguenti risorse per saperne di più:
+ AWS offre servizi per l'elaborazione, i database, l'archiviazione, l'analisi e altre funzionalità. Per una panoramica di tutti i AWS servizi, consulta [Cloud Computing con Amazon Web Services](https://aws.amazon.com/what-is-aws/).
+ AWS fornisce una serie di servizi di database. Per indicazioni su quale servizio è più adatto al tuo ambiente, consulta [Databases on AWS](https://aws.amazon.com/products/databases/).

## Cluster
<a name="what-is-db-clusters"></a>

Un *cluster* è composto da 0 a 16 istanze e da un volume di storage del cluster che gestisce i dati per tali istanze. Tutte le operazioni di scrittura vengono eseguite tramite l'istanza primaria. Tutte le istanze (primaria e repliche) supportano le operazioni di lettura. I dati del cluster vengono archiviati nel volume cluster e copiati in tre diverse zone di disponibilità.

![\[Cluster Amazon DocumentDB contenente l'istanza principale nella Zona di disponibilità 1, la scrittura sul volume del cluster per le repliche nelle zone 2 e 3.\]](http://docs.aws.amazon.com/it_it/documentdb/latest/developerguide/images/how-it-works-01c.png)


I cluster basati su istanze di Amazon DocumentDB 5.0 supportano due configurazioni di storage per un cluster di database: Amazon DocumentDB standard e Amazon DocumentDB con I/O ottimizzato. Per ulteriori informazioni, consulta [Configurazioni di storage in cluster Amazon DocumentDB](db-cluster-storage-configs.md).

## Istanze
<a name="what-is-db-instances"></a>

Un'istanza Amazon DocumentDB è un ambiente di database isolato nel cloud. Un'istanza può contenere più database creati dall'utente. Puoi creare e modificare un'istanza utilizzando Console di gestione AWS o il AWS CLI.

La capacità di calcolo e di memoria di un'istanza è determinata dalla relativa *classe di istanza*. Puoi selezionare l'istanza più adatta alle tue esigenze. Se le esigenze cambiano nel corso del tempo, puoi scegliere un'altra classe di istanza. Per le specifiche per la classe di istanza, consulta [Specifiche della classe di istanza](db-instance-classes.md#db-instance-class-specs).

Le istanze di Amazon DocumentDB vengono eseguite solo nell'ambiente Amazon VPC. Amazon VPC ti offre il controllo del tuo ambiente di rete virtuale: puoi scegliere il tuo intervallo di indirizzi IP, creare sottoreti e configurare elenchi di routing e controllo degli accessi (). ACLs

Prima di poter creare istanze di Amazon DocumentDB, devi creare un cluster che contenga le istanze.

Non tutte le classi delle istanze sono supportate in ogni regione. La tabella riportata di seguito specifica quali classi delle istanze sono supportate in ciascuna regione.

**Nota**  
Per un elenco completo dei tipi di istanza supportati da Amazon DocumentDB in ogni classe di istanza, consulta. [Specifiche della classe di istanza](db-instance-classes.md#db-instance-class-specs)


**Classi di istanze supportate per regione**  

|  | Classi di istanza | Region | R8G | R6GD | R6G | R5 | R4 | T4G | T3 | Serverless | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Stati Uniti orientali (Ohio) | Supportata | Supportato | Supportato | Supportato | Supportato | Supportato | Supportato | Supportata | 
| Stati Uniti orientali (Virginia settentrionale) | Supportata | Supportato | Supportato | Supportato | Supportato | Supportato | Supportato | Supportata | 
| Stati Uniti occidentali (Oregon) | Supportata | Supportato | Supportato | Supportato | Supportato | Supportato | Supportato | Supportata | 
| Africa (Città del Capo) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Sud America (San Paolo) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Hong Kong) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Hyderabad) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Malesia) |  |  | Supportata |  |  | Supportato | Supportata |  | 
| Asia Pacifico (Mumbai) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Osaka) |  | Supportata | Supportato | Supportato |  | Supportato | Supportata |  | 
| Asia Pacifico (Seul) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Sydney) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Giacarta) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportata |  | 
| Asia Pacifico (Melbourne) |  |  | Supportata | Supportato |  | Supportato | Supportata |  | 
| Asia Pacifico (Singapore) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Asia Pacifico (Thailandia) |  |  | Supportata |  |  | Supportato | Supportata |  | 
| Asia Pacifico (Tokyo) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Canada (Centrale) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Francoforte) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Zurigo) |  | Supportata | Supportato | Supportato |  | Supportato | Supportata |  | 
| Europa (Irlanda) | Supportata | Supportato | Supportato | Supportato | Supportato | Supportato | Supportato | Supportata | 
| Europa (Londra) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Milano) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Parigi) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Spagna) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Europa (Stoccolma) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportata |  | 
| Messico (centrale) |  |  | Supportata |  |  | Supportato | Supportata |  | 
| Medio Oriente (Emirati Arabi Uniti) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Cina (Pechino) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| Cina (Ningxia) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| Israele (Tel Aviv) |  |  | Supportata | Supportato |  | Supportato | Supportato | Supportata | 
| AWS GovCloud (Stati Uniti occidentali) | Supportata | Supportato | Supportato | Supportato |  | Supportato | Supportato | Supportata | 
| AWS GovCloud (Stati Uniti orientali) |  | Supportata | Supportato | Supportato |  | Supportato | Supportato | Supportata | 

## Regioni e zone di disponibilità
<a name="what-is-regions-and-azs"></a>

Regioni e zone di disponibilità definiscono le posizioni fisiche del cluster e delle istanze.

### Regioni
<a name="what-is-regions"></a>

AWS Le risorse di cloud computing sono ospitate in strutture di data center ad alta disponibilità in diverse aree del mondo (ad esempio, Nord America, Europa o Asia). L'ubicazione di ogni data center è chiamata *regione*.

Ogni AWS regione è progettata per essere completamente isolata dalle altre AWS regioni. All'interno di ciascuna regione sono presenti più zone di disponibilità. Avviando i nodi in diverse zone di disponibilità, puoi ottenere la massima tolleranza ai guasti possibile. Il diagramma seguente mostra una panoramica di alto livello del funzionamento delle AWS regioni e delle zone di disponibilità.

![\[Vista di alto livello di Amazon DocumentDB di AWS regioni e zone di disponibilità.\]](http://docs.aws.amazon.com/it_it/documentdb/latest/developerguide/images/docdb-regions-and-azs.png)


### Zone di disponibilità
<a name="what-is-availability-zones"></a>

Ogni AWS regione contiene più località distinte chiamate zone di *disponibilità*. Ogni zona di disponibilità è progettata per essere isolata dagli errori che si verificano in altre zone di disponibilità e per offrire connettività di rete conveniente e a bassa latenza ad altre zone di disponibilità nella stessa regione. Avviando istanze per un determinato cluster in più zone di disponibilità, è possibile proteggere le applicazioni dall'improbabile evento di errore di una zona di disponibilità.

L'architettura Amazon DocumentDB separa storage ed elaborazione. Per il livello di storage, Amazon DocumentDB replica sei copie dei dati in tre AWS zone di disponibilità. Ad esempio, se stai avviando un cluster Amazon DocumentDB in una regione che supporta solo due zone di disponibilità, lo storage dei dati verrà replicato in sei modi su tre zone di disponibilità, ma le tue istanze di calcolo saranno disponibili solo in due zone di disponibilità.

 La tabella seguente elenca il numero di zone di disponibilità che è possibile utilizzare in una determinata area Regione AWS per fornire istanze di calcolo per il cluster.


| Nome della regione | Regione | Zone di disponibilità (elaborazione) | 
| --- | --- | --- | 
| Stati Uniti orientali (Ohio) | `us-east-2` | 3 | 
| Stati Uniti orientali (Virginia settentrionale) | `us-east-1` | 6 | 
| Stati Uniti occidentali (Oregon) | `us-west-2` | 4 | 
| Africa (Città del Capo) | `af-south-1` | 3 | 
| Sud America (San Paolo) | `sa-east-1` | 3 | 
| Asia Pacifico (Hong Kong) | `ap-east-1` | 3 | 
| Asia Pacifico (Hyderabad) | `ap-south-2` | 3 | 
| Asia Pacifico (Malesia) | `ap-southeast-5` | 3 | 
| Asia Pacifico (Mumbai) | `ap-south-1` | 3 | 
| Asia Pacifico (Osaka) | `ap-northeast-3` | 3 | 
| Asia Pacifico (Seul) | `ap-northeast-2` | 4 | 
| Asia Pacifico (Singapore) | `ap-southeast-1` | 3 | 
| Asia Pacifico (Sydney) | `ap-southeast-2` | 3 | 
| Asia Pacifico (Giacarta) | `ap-southeast-3` | 3 | 
| Asia Pacifico (Melbourne) | `ap-southeast-4` | 3 | 
| Asia Pacifico (Thailandia) | `ap-southeast-7` | 3 | 
| Asia Pacifico (Tokyo) | `ap-northeast-1` | 3 | 
| Canada (Centrale) | `ca-central-1` | 3 | 
| Regione Cina (Pechino) | `cn-north-1` | 3 | 
| Cina (Ningxia) | `cn-northwest-1` | 3 | 
| Europa (Francoforte) | `eu-central-1` | 3 | 
| Europa (Zurigo) | `eu-central-2` | 3 | 
| Europa (Irlanda) | `eu-west-1` | 3 | 
| Europa (Londra) | `eu-west-2` | 3 | 
| Europa (Milano) | `eu-south-1` | 3 | 
| Europa (Parigi) | `eu-west-3` | 3 | 
| Europa (Spagna) | `eu-south-2` | 3 | 
| Europa (Stoccolma) | `eu-north-1` | 3 | 
| Messico (centrale) | `mx-central-1` | 3 | 
| Medio Oriente (Emirati Arabi Uniti) | `me-central-1` | 3 | 
| Israele (Tel Aviv) | `il-central-1` | 3 | 
| AWS GovCloud (Stati Uniti occidentali) | `us-gov-west-1` | 3 | 
| AWS GovCloud (Stati Uniti orientali) | `us-gov-east-1` | 3 | 

## Prezzi di Amazon DocumentDB
<a name="docdb-pricing"></a>

I cluster Amazon DocumentDB vengono fatturati in base ai seguenti componenti: 
+ **Ore di istanza (all'ora)**: in base alla classe di istanza dell'istanza (ad esempio,). `db.r5.xlarge` I prezzi sono calcolati in base a una tariffa oraria, mentre le fatture sono calcolate al secondo e mostrano i valori in formato decimale. L'utilizzo di Amazon DocumentDB viene fatturato in incrementi di un secondo, con un minimo di 10 minuti. Per ulteriori informazioni, consulta [Gestione delle classi di istanze](db-instance-classes.md). 
+ **Richieste I/O (per 1 milione di richieste al mese)**: numero totale di I/O richieste di storage effettuate in un ciclo di fatturazione.
+ **Storage di backup (per GiB al mese)**: lo storage di backup è lo storage associato ai backup automatici del database e a tutte le istantanee attive del database che sono state scattate. Estendendo il periodo di retention dei backup o creando ulteriori snapshot del database, si aumenta lo storage di backup consumato dal database. Lo storage di backup viene calcolato in GB al mese e non si applica il calcolo al secondo. Per ulteriori informazioni, consulta [Backup e ripristino in Amazon DocumentDB](backup_restore.md). 
+ **Trasferimento dati (per GB)**: trasferimento di dati in entrata e in uscita dall'istanza da o verso Internet o altre regioni. AWS 

Per informazioni dettagliate, consulta i prezzi di [Amazon DocumentDB.](https://aws.amazon.com/documentdb/pricing/)

### Versione di prova gratuita
<a name="free-trial"></a>

Puoi provare Amazon DocumentDB gratuitamente utilizzando la versione di prova gratuita di 1 mese. Per ulteriori informazioni, consulta la sezione Prova gratuita nei [prezzi di Amazon DocumentDB](https://aws.amazon.com/documentdb/pricing/) o consulta le domande frequenti sulla versione di prova gratuita di [Amazon DocumentDB](https://aws.amazon.com/documentdb/free-trial/).

## Monitoraggio
<a name="what-is-monitoring"></a>

Esistono vari modi per tenere traccia delle prestazioni e dello stato di un'istanza. Puoi utilizzare il CloudWatch servizio Amazon gratuito per monitorare le prestazioni e lo stato di un'istanza. Puoi trovare i grafici delle prestazioni sulla console Amazon DocumentDB. Puoi iscriverti agli eventi di Amazon DocumentDB per ricevere notifiche quando si verificano modifiche con un'istanza, uno snapshot, un gruppo di parametri o un gruppo di sicurezza.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [Monitoraggio di Amazon DocumentDB con CloudWatch](cloud_watch.md)
+ [Registrazione delle chiamate API di Amazon DocumentDB con AWS CloudTrail](logging-with-cloudtrail.md)

## Interfacce
<a name="what-is-interfaces"></a>

Esistono diversi modi per interagire con Amazon DocumentDB, tra cui il Console di gestione AWS e il. AWS CLI

### Console di gestione AWS
<a name="what-is-console"></a>

 Console di gestione AWS È una semplice interfaccia utente basata sul Web. La gestione delle istanze e dei cluster dalla console non richiede alcuna programmazione. [Per accedere alla console Amazon DocumentDB, accedi Console di gestione AWS e apri la console Amazon DocumentDB all'indirizzo /docdb. https://console.aws.amazon.com](https://console.aws.amazon.com/docdb) 

### AWS CLI
<a name="what-is-cli"></a>

Puoi usare il AWS Command Line Interface (AWS CLI) per gestire i cluster e le istanze di Amazon DocumentDB. Con una configurazione minima, puoi iniziare a utilizzare tutte le funzionalità fornite dalla console Amazon DocumentDB dal tuo programma terminale preferito.
+ Per installare AWS CLI, consulta [Installazione dell'interfaccia a riga di AWS comando](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).
+ Per iniziare a utilizzare AWS CLI per Amazon DocumentDB, consulta [AWS Command Line Interface Reference for Amazon DocumentDB](https://docs.aws.amazon.com/cli/latest/reference/docdb/index.html).

### Driver MongoDB
<a name="what-is-mongodb-drivers"></a>

Per sviluppare e scrivere applicazioni su un cluster Amazon DocumentDB, puoi anche utilizzare i driver MongoDB con Amazon DocumentDB. Per ulteriori informazioni, consulta la scheda della shell MongoDB in o. [Connessione con TLS abilitato](connect_programmatically.md#connect_programmatically-tls_enabled) [Connessione con TLS disabilitato](connect_programmatically.md#connect_programmatically-tls_disabled)

## Fasi successive
<a name="what-is-next"></a>

Nelle sezioni precedenti sono stati presentati i componenti di base dell'infrastruttura offerti da Amazon DocumentDB. Cosa potrai fare dopo? A seconda delle circostanze, consulta uno dei seguenti argomenti per iniziare:
+ Inizia a usare Amazon DocumentDB creando un cluster e un'istanza utilizzando. CloudFormation [Guida rapida all'uso di Amazon DocumentDB CloudFormation](quick_start_cfn.md)
+ Inizia a usare Amazon DocumentDB creando un cluster e un'istanza utilizzando le istruzioni contenute nel nostro. [Guida introduttiva](get-started-guide.md)
+ Inizia a usare Amazon DocumentDB creando un cluster elastico seguendo le istruzioni contenute in. [Inizia a usare i cluster elastici di Amazon DocumentDB](elastic-get-started.md)
+ Esegui la migrazione dell'implementazione di MongoDB ad Amazon DocumentDB utilizzando le indicazioni disponibili all'indirizzo [Migrazione ad Amazon DocumentDB](docdb-migration.md)

# Amazon DocumentDB: come funziona
<a name="how-it-works"></a>

Amazon DocumentDB (compatibile con MongoDB) è un servizio di database completamente gestito e compatibile con MongoDB. Con Amazon DocumentDB, puoi eseguire lo stesso codice applicativo e utilizzare gli stessi driver e strumenti che usi con MongoDB. Amazon DocumentDB è compatibile con MongoDB 3.6, 4.0, 5.0 e 8.0.

**Topics**
+ [Endpoint Amazon DocumentDB](#how-it-works.endpoints)
+ [Supporto TLS](#how-it-works.ssl)
+ [Archiviazione Amazon DocumentDB](#how-it-works.storage)
+ [Replica Amazon DocumentDB](#how-it-works.replication)
+ [Affidabilità di Amazon DocumentDB](#how-it-works.reliability)
+ [Leggi le opzioni di preferenza](#durability-consistency-isolation)
+ [Eliminazioni TTL](#how-it-works.ttl-deletes)
+ [Risorse fatturabili](#billing)

*Quando usi Amazon DocumentDB, inizi con la creazione di un cluster.* Un cluster è composto da una o più istanze database e da un volume cluster per la gestione dei dati di tali istanze. Un *volume cluster Amazon DocumentDB è un volume* di storage di database virtuale che si estende su più zone di disponibilità. Ogni zona di disponibilità ha una copia dei dati del cluster.

Un cluster Amazon DocumentDB è composto da due componenti:
+ **Volume del cluster**: utilizza un servizio di storage nativo del cloud per replicare i dati in sei modi su tre zone di disponibilità, fornendo uno storage altamente durevole e disponibile. Un cluster Amazon DocumentDB ha esattamente un volume cluster, che può archiviare fino a 128 TiB di dati.
+ **Istanze**: forniscono la potenza di elaborazione per il database, la scrittura e la lettura dei dati dal volume di storage del cluster. Un cluster Amazon DocumentDB può avere da 0 a 16 istanze. 

Le istanze sono utilizzate per uno dei due ruoli:
+ **Istanza primaria**: supporta operazioni di lettura e scrittura ed esegue tutte le modifiche ai dati sul volume del cluster. Ogni cluster Amazon DocumentDB ha un'istanza principale.
+ **Istanza di replica**: supporta solo operazioni di lettura. Un cluster Amazon DocumentDB può avere fino a 15 repliche oltre all'istanza principale. La presenza di più repliche consente di distribuire i carichi di lavoro di lettura. Inoltre, è sufficiente collocare le repliche in zone di disponibilità separate per aumentare anche la disponibilità del cluster.

Il diagramma seguente illustra la relazione tra il volume del cluster, l'istanza principale e le repliche in un cluster Amazon DocumentDB:

![\[Endpoint Amazon DocumentDB, inclusi gli endpoint cluster, reader e istanza.\]](http://docs.aws.amazon.com/it_it/documentdb/latest/developerguide/images/docdb-endpoint-types.png)


Le istanze cluster non devono appartenere alla stessa classe di istanza e possono essere sottoposte a provisioning e terminate in base alle esigenze. Questa architettura consente di aumentare la capacità di calcolo del cluster in modo indipendente dallo storage.

Quando l'applicazione scrive i dati in un'istanza primaria, questa istanza esegue una scrittura durevole nel volume cluster. Quindi replica lo stato di quella scrittura (non i dati) su ogni replica attiva. Le repliche di Amazon DocumentDB non partecipano all'elaborazione delle scritture e pertanto le repliche di Amazon DocumentDB sono vantaggiose per il ridimensionamento della lettura. Le letture dalle repliche di Amazon DocumentDB alla fine sono coerenti con un ritardo di replica minimo, in genere meno di 100 millisecondi dopo la scrittura dei dati da parte dell'istanza principale. La funzionalità garantisce che le letture dalle repliche vengano lette nell'ordine con cui sono state scritte nell'istanza primaria. Il ritardo della replica varia a seconda della percentuale di variazione dei dati e i periodi con un'intensa attività di scrittura potrebbero aumentare il ritardo della replica. Per ulteriori informazioni, consulta la pagina relativa ai parametri `ReplicationLag` in [Metriche di Amazon DocumentDB](cloud_watch.md#cloud_watch-metrics_list). 

## Endpoint Amazon DocumentDB
<a name="how-it-works.endpoints"></a>

Amazon DocumentDB offre diverse opzioni di connessione per soddisfare un'ampia gamma di casi d'uso. Per connetterti a un'istanza in un cluster Amazon DocumentDB, devi specificare l'endpoint dell'istanza. Un *endpoint* è formato da un indirizzo host e da un numero di porta, separati da due punti.

Ti consigliamo di connetterti al cluster utilizzando l'endpoint del cluster e in modalità set di replica (vedi [Connessione ad Amazon DocumentDB come set di repliche](connect-to-replica-set.md)), a meno che non hai un caso d'uso specifico per la connessione all'endpoint del lettore o a un endpoint di istanza. Per instradare le richieste alle repliche, scegli un'impostazione di preferenza di lettura del driver che massimizza il dimensionamento della lettura nel rispetto dei requisiti di coerenza di lettura dell'applicazione. La preferenza di lettura `secondaryPreferred` consente la lettura delle repliche e libera l'istanza primaria per eseguire ulteriori operazioni.

I seguenti endpoint sono disponibili da un cluster Amazon DocumentDB.

### Endpoint del cluster
<a name="how-it-works.endpoints.cluster"></a>

L'*endpoint del cluster* consente la connessione all'istanza primaria corrente del cluster. L'endpoint del cluster può essere utilizzato per le operazioni di lettura e scrittura. Un cluster Amazon DocumentDB ha esattamente un endpoint del cluster.

L'endpoint del cluster fornisce il supporto per il failover per le connessioni in lettura e scrittura al cluster. Se l'istanza primaria corrente del cluster non riesce e il cluster ha almeno una replica di lettura attiva, l'endpoint del cluster reindirizza automaticamente le richieste di connessione a una nuova istanza primaria. Quando ti connetti al cluster Amazon DocumentDB, ti consigliamo di connetterti al cluster utilizzando l'endpoint del cluster e in modalità set di repliche (vedi). [Connessione ad Amazon DocumentDB come set di repliche](connect-to-replica-set.md)

Di seguito è riportato un esempio di endpoint del cluster Amazon DocumentDB:

```
sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017
```

Di seguito è riportato un esempio della stringa di connessione che utilizza questo endpoint del cluster:

```
mongodb://username:password@sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017
```

Per ulteriori informazioni sulla ricerca di un endpoint del cluster, consulta [Individuazione degli endpoint di un cluster](db-cluster-endpoints-find.md).

### Endpoint di lettura
<a name="how-it-works.endpoints.reader"></a>

L'*endpoint lettore* bilancia il carico delle connessioni di sola lettura in tutte le repliche disponibili nel cluster. Un endpoint di lettura del cluster fungerà da endpoint del cluster se ci si connette in `replicaSet` modalità, il che significa che nella stringa di connessione, il parametro del set di replica è. `&replicaSet=rs0` In questo caso, sarai in grado di eseguire operazioni di scrittura sul primario. Tuttavia, se ci si connette al cluster specificando`directConnection=true`, il tentativo di eseguire un'operazione di scrittura tramite una connessione all'endpoint di lettura genera un errore. Un cluster Amazon DocumentDB ha esattamente un endpoint di lettura.

Se il cluster contiene solo un'istanza (primaria), l'endpoint lettore si connette all'istanza primaria. Quando aggiungi un'istanza di replica al tuo cluster Amazon DocumentDB, l'endpoint di lettura apre connessioni di sola lettura alla nuova replica dopo che è attiva.

Di seguito è riportato un esempio di endpoint di lettura per un cluster Amazon DocumentDB:

```
sample-cluster.cluster-ro-123456789012.us-east-1.docdb.amazonaws.com:27017
```

Di seguito è riportato un esempio della stringa di connessione che utilizza un endpoint lettore:

```
mongodb://username:password@sample-cluster.cluster-ro-123456789012.us-east-1.docdb.amazonaws.com:27017 
```

L'endpoint lettore bilancia il carico delle connessioni di sola lettura, non delle richieste di lettura. Se alcune connessioni dell'endpoint lettore vengono utilizzate più di altre, le richieste di lettura potrebbero non essere equamente divise tra le istanze nel cluster. Si consiglia di distribuire le richieste collegandosi all'endpoint del cluster come set di repliche e utilizzando l'opzione preferenza di lettura secondaryPreferred. 

Per ulteriori informazioni sulla ricerca di un endpoint del cluster, consulta [Individuazione degli endpoint di un cluster](db-cluster-endpoints-find.md).

### Endpoint dell'istanza
<a name="how-it-works.endpoints.instance"></a>

Un *endpoint dell'istanza* si connette a un'istanza specifica all'interno del cluster. L'endpoint dell'istanza per l'istanza primaria corrente può essere utilizzato per le operazioni di lettura e scrittura. Tuttavia, il tentativo di eseguire operazioni di scrittura su un endpoint dell'istanza per una replica di lettura genera un errore. Un cluster Amazon DocumentDB ha un endpoint di istanza per istanza attiva.

Un endpoint dell'istanza fornisce il controllo diretto sulle connessioni a una specifica istanza per scenari in cui l'utilizzo di endpoint lettore o del cluster potrebbe non essere appropriato. Un caso d'uso di esempio è il provisioning per un carico di lavoro di analisi di sola lettura periodico. Puoi effettuare il provisioning di un'istanza di larger-than-normal replica, connetterti direttamente alla nuova istanza più grande con il relativo endpoint di istanza, eseguire le query di analisi e quindi terminare l'istanza. L'utilizzo dell'endpoint dell'istanza evita che il traffico delle analisi influisca negativamente sulle altre istanze del cluster.

Di seguito è riportato un esempio di endpoint di istanza per una singola istanza in un cluster Amazon DocumentDB:

```
sample-instance.123456789012.us-east-1.docdb.amazonaws.com:27017
```

Di seguito è riportato un esempio della stringa di connessione che utilizza questo endpoint dell'istanza:

```
mongodb://username:password@sample-instance.123456789012.us-east-1.docdb.amazonaws.com:27017 
```

**Nota**  
Il ruolo di un'istanza primaria o di replica può variare a causa di un evento di failover. Le applicazioni non devono mai presupporre che un determinato endpoint dell'istanza sia l'istanza primaria. Non è consigliabile connettersi agli endpoint dell'istanza per le applicazioni di produzione. È consigliabile invece connettersi al cluster utilizzando l'endpoint del cluster e in modalità set di repliche (vedi [Connessione ad Amazon DocumentDB come set di repliche](connect-to-replica-set.md)). Per un controllo più avanzato sulla priorità di failover delle istanze, consulta [Comprendere la tolleranza agli errori del cluster Amazon DocumentDB](db-cluster-fault-tolerance.md). 

Per ulteriori informazioni sulla ricerca di un endpoint del cluster, consulta [Individuazione dell'endpoint di un'istanza](db-instance-endpoint-find.md).

### Modalità set di repliche
<a name="replica-set-mode"></a>

È possibile connettersi all'endpoint del cluster Amazon DocumentDB in modalità set di repliche specificando il nome del set di repliche. `rs0` La connessione con la modalità per i set di repliche consente di specificare le opzioni per Read Concern, Write Concern e Read Preference. Per ulteriori informazioni, consulta [Consistenza di lettura](#durability-consistency-isolation.read-consistency).

Di seguito è riportato un esempio della stringa di connessione connessa con la modalità per i set di repliche:

```
mongodb://username:password@sample-cluster.cluster-123456789012.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0
```

Quando ti connetti in modalità set di repliche, il cluster Amazon DocumentDB appare ai driver e ai client come un set di repliche. Le istanze aggiunte e rimosse dal cluster Amazon DocumentDB si riflettono automaticamente nella configurazione del set di repliche.

Ogni cluster Amazon DocumentDB è costituito da un singolo set di repliche con il nome predefinito. `rs0` Il nome del set di repliche non può essere modificato.

La connessione all'endpoint del cluster con la modalità per i set di repliche è il metodo consigliato per l'uso generale.

**Nota**  
Tutte le istanze in un cluster Amazon DocumentDB ascoltano le connessioni sulla stessa porta TCP.

## Supporto TLS
<a name="how-it-works.ssl"></a>

Per ulteriori dettagli sulla connessione ad Amazon DocumentDB utilizzando Transport Layer Security (TLS), consulta. [Crittografia dei dati in transito](security.encryption.ssl.md)

## Archiviazione Amazon DocumentDB
<a name="how-it-works.storage"></a>

I dati di Amazon DocumentDB sono archiviati in un *volume cluster*, che è un singolo volume virtuale che utilizza unità a stato solido ()SSDs. Un volume cluster è composto da sei copie dei dati, che vengono replicate automaticamente su più zone di disponibilità in un'unica copia. Regione AWS Questa replica contribuisce a garantire l'estrema durata dei tuoi dati e a ridurre il rischio di perdita dei dati. Consente inoltre di assicurare che il cluster non sia più disponibile durante un failover perché le copie dei dati sono già presenti in altre zone di disponibilità. Queste copie possono continuare a servire le richieste di dati alle istanze del cluster Amazon DocumentDB. 

### Come viene fatturato lo storage dei dati
<a name="how-it-works-storage-billing"></a>

Amazon DocumentDB aumenta automaticamente le dimensioni di un volume di cluster all'aumentare della quantità di dati. Un volume di cluster Amazon DocumentDB può crescere fino a una dimensione massima di 128 TiB; tuttavia, ti viene addebitato solo lo spazio utilizzato in un volume cluster Amazon DocumentDB. A partire da Amazon DocumentDB 4.0, quando i dati vengono rimossi, ad esempio eliminando una raccolta o un indice, lo spazio allocato complessivo diminuisce di una quantità comparabile. In questo modo, puoi ridurre i costi di archiviazione eliminando raccolte, indici e database che non ti servono più. Nella versione 3.6 di Amazon DocumentDB, il volume del cluster può riutilizzare lo spazio liberato quando si rimuovono i dati, ma le dimensioni del volume stesso non diminuiscono mai. Di conseguenza, nella versione 3.6, non è possibile che si verifichi alcuna modifica nello storage quando si elimina una raccolta o un indice, anche se lo spazio liberato viene riutilizzato. 

**Nota**  
Con Amazon DocumentDB 3.6, i costi di storage si basano sulla «soglia massima» dello storage (la quantità massima allocata per il cluster Amazon DocumentDB in qualsiasi momento). Puoi gestire i costi evitando le pratiche ETL che creano grandi volumi di informazioni temporanee o che caricano grandi volumi di nuovi dati prima di rimuovere i dati più vecchi non necessari. Se la rimozione di dati da un cluster Amazon DocumentDB comporta una notevole quantità di spazio allocato ma inutilizzato, la reimpostazione del limite massimo richiede l'esecuzione di un dump logico dei dati e il ripristino in un nuovo cluster, utilizzando uno strumento come o. `mongodump` `mongorestore` La creazione e il ripristino di una snapshot non riduce lo storage allocato perché il livello fisico dello storage sottostante rimane uguale nella snapshot ripristinata.

**Nota**  
L'utilizzo di utilità come `mongodump` e I/O comporta `mongorestore` costi in base alle dimensioni dei dati che vengono letti e scritti nel volume di storage.

[Per informazioni sullo storage e sui prezzi dei dati di Amazon DocumentDB, consulta I/O i prezzi e i prezzi di [Amazon DocumentDB (con compatibilità con MongoDB](https://aws.amazon.com/documentdb/pricing)). FAQs](https://aws.amazon.com/documentdb/faqs/#Pricing)

## Replica Amazon DocumentDB
<a name="how-it-works.replication"></a>

In un cluster Amazon DocumentDB, ogni istanza di replica espone un endpoint indipendente. Questi endpoint di replica forniscono l'accesso in sola lettura ai dati del volume cluster. Consentono di calibrare il carico di lavoro in lettura dei dati su più istanze replicate. Inoltre, aiutano a migliorare le prestazioni di lettura dei dati e ad aumentare la disponibilità dei dati nel cluster Amazon DocumentDB. Le repliche di Amazon DocumentDB sono anche obiettivi di failover e vengono promosse rapidamente in caso di guasto dell'istanza principale del cluster Amazon DocumentDB. 

## Affidabilità di Amazon DocumentDB
<a name="how-it-works.reliability"></a>

Amazon DocumentDB è progettato per essere affidabile, durevole e tollerante ai guasti. (Per migliorare la disponibilità, è necessario configurare il cluster Amazon DocumentDB in modo che abbia più istanze di replica in diverse zone di disponibilità.) Amazon DocumentDB include diverse funzionalità automatiche che lo rendono una soluzione di database affidabile. 

### Riparazione automatica dello storage
<a name="how-it-works.reliability.storage-auto-repair"></a>

Amazon DocumentDB conserva più copie dei dati in tre zone di disponibilità, riducendo notevolmente la possibilità di perdita dei dati a causa di un errore di storage. Amazon DocumentDB rileva automaticamente gli errori nel volume del cluster. Quando un segmento di un volume del cluster si guasta, Amazon DocumentDB ripara immediatamente il segmento. Utilizza i dati degli altri volumi che costituiscono il volume cluster per garantire che i dati del segmento riparato siano aggiornati. Di conseguenza, Amazon DocumentDB evita la perdita di dati e riduce la necessità di eseguire un point-in-time ripristino per il ripristino dopo un errore di istanza. 

### Riscaldamento di sopravvivenza della cache
<a name="how-it-works.reliability.survivable-cache-warming"></a>

Amazon DocumentDB gestisce la cache delle pagine in un processo separato dal database in modo che la cache delle pagine possa funzionare indipendentemente dal database. Nella remota eventualità di un errore del database, la cache di pagina rimane in memoria. In questo modo il pool di buffer viene riscaldato con lo stato più aggiornato quando il database viene riavviato.

### Ripristino in caso di arresto
<a name="how-it-works.reliability.crash-recovery"></a>

Amazon DocumentDB è progettato per il ripristino da un crash quasi istantaneo e per continuare a fornire i dati delle applicazioni. Amazon DocumentDB esegue il ripristino da arresto anomalo in modo asincrono su thread paralleli in modo che il database sia aperto e disponibile quasi immediatamente dopo un arresto anomalo. 

### Governance delle risorse
<a name="how-it-works.reliability.resource-governance"></a>

Amazon DocumentDB protegge le risorse necessarie per eseguire processi critici nel servizio, come i controlli dello stato. A tale scopo, e quando un'istanza è sottoposta a un'elevata pressione della memoria, Amazon DocumentDB limiterà le richieste. Di conseguenza, alcune operazioni potrebbero essere messe in coda per attendere che la pressione della memoria diminuisca. Se la pressione della memoria continua, le operazioni in coda potrebbero scadere. È possibile controllare se le operazioni di limitazione del servizio sono dovute o meno alla scarsa memoria con le seguenti CloudWatch metriche:,,,. `LowMemThrottleQueueDepth` `LowMemThrottleMaxQueueDepth` `LowMemNumOperationsThrottled` `LowMemNumOperationsTimedOut` Per ulteriori informazioni, consulta Monitoring Amazon DocumentDB with. CloudWatch Se riscontri una pressione sostenuta della memoria sulla tua istanza a causa dei LowMem CloudWatch parametri, ti consigliamo di aumentare la scalabilità dell'istanza per fornire memoria aggiuntiva per il carico di lavoro.

## Leggi le opzioni di preferenza
<a name="durability-consistency-isolation"></a>

Amazon DocumentDB utilizza un servizio di storage condiviso nativo del cloud che replica i dati sei volte su tre zone di disponibilità per fornire livelli elevati di durabilità. Amazon DocumentDB non si basa sulla replica dei dati su più istanze per ottenere la durabilità. I dati del cluster sono sempre durevoli, sia che contengano una singola istanza che 15.

**Topics**
+ [Durabilità della scrittura](#durability-consistency-isolation.write-durability)
+ [Isolamento della lettura](#durability-consistency-isolation.read-isolation)
+ [Consistenza di lettura](#durability-consistency-isolation.read-consistency)
+ [Elevata disponibilità](#durability-consistency-isolation.high-availability)
+ [Ridimensionamento delle letture](#durability-consistency-isolation.scaling-reads)

### Durabilità della scrittura
<a name="durability-consistency-isolation.write-durability"></a>

Amazon DocumentDB utilizza un sistema di storage unico, distribuito, tollerante ai guasti e con riparazione automatica. Questo sistema replica sei copie (V=6) dei dati in tre AWS zone di disponibilità per fornire disponibilità e durabilità elevate. Durante la scrittura dei dati, Amazon DocumentDB garantisce che tutte le scritture vengano registrate in modo duraturo sulla maggior parte dei nodi prima di confermare la scrittura al client. Se utilizzi un set di repliche MongoDB a tre nodi, l'utilizzo di un problema di scrittura `{w:3, j:true}` di produrrebbe la migliore configurazione possibile rispetto ad Amazon DocumentDB.

Le scritture su un cluster Amazon DocumentDB devono essere elaborate dall'istanza writer del cluster. Il tentativo di scrivere su un lettore genera un errore. Una scrittura riconosciuta da un'istanza primaria di Amazon DocumentDB è durevole e non può essere ripristinata. Amazon DocumentDB è altamente durevole per impostazione predefinita e non supporta un'opzione di scrittura non durevole. Non puoi modificare il livello di durabilità (ovvero Write Concern). Amazon DocumentDB ignora w=anything ed è effettivamente w: 3 e j: true. Non puoi ridurlo.

Poiché lo storage e l'elaborazione sono separati nell'architettura Amazon DocumentDB, un cluster con una singola istanza è estremamente durevole. La durabilità è gestita a livello di storage. Di conseguenza, un cluster Amazon DocumentDB con una singola istanza e uno con tre istanze raggiungono lo stesso livello di durabilità. Puoi configurare il cluster per il tuo caso d'uso specifico senza sacrificare la durabilità elevata per i dati.

Le scritture su un cluster Amazon DocumentDB sono atomiche all'interno di un singolo documento. 

Amazon DocumentDB non supporta l'`wtimeout`opzione e non restituirà un errore se viene specificato un valore. È garantito che le scritture sull'istanza primaria di Amazon DocumentDB non si blocchino a tempo indeterminato.

### Isolamento della lettura
<a name="durability-consistency-isolation.read-isolation"></a>

Le letture da un'istanza di Amazon DocumentDB restituiscono solo dati durevoli prima dell'inizio della query. Le letture non restituiscono mai i dati modificati dopo aver avviato l'esecuzione delle query e in nessun caso sono consentite le letture modificate.

### Consistenza di lettura
<a name="durability-consistency-isolation.read-consistency"></a>

I dati letti da un cluster Amazon DocumentDB sono durevoli e non verranno ripristinati. Puoi modificare la coerenza di lettura per le letture di Amazon DocumentDB specificando la preferenza di lettura per la richiesta o la connessione. Amazon DocumentDB non supporta un'opzione di lettura non durevole.

Le letture dall'istanza principale di un cluster Amazon DocumentDB sono fortemente coerenti in condizioni operative normali e read-after-write sono coerenti. Se si verifica un failover tra la scrittura e la lettura successiva, il sistema è in grado di restituire per breve tempo una lettura non particolarmente coerente. Tutte le letture da una replica di lettura garantiscono coerenza finale e restituiscono i dati nello stesso ordine, spesso con un ritardo di replica inferiore ai 100 ms.

#### Preferenze di lettura di Amazon DocumentDB
<a name="durability-consistency-isolation.read-preferences"></a>

Amazon DocumentDB supporta l'impostazione di un'opzione di preferenza di lettura solo durante la lettura dei dati dall'endpoint del cluster in modalità set di replica. L'impostazione di un'opzione di preferenza di lettura influisce sul modo in cui il client o il driver MongoDB instrada le richieste di lettura alle istanze del cluster Amazon DocumentDB. Puoi impostare le opzioni per le preferenze di lettura per una query specifica oppure come opzione generale nel tuo driver MongoDB. Consulta la documentazione del driver o del client per istruzioni su come impostare un'opzione per le preferenze di lettura.

Se il client o il driver non si connette a un endpoint del cluster Amazon DocumentDB in modalità set di repliche, il risultato della specifica di una preferenza di lettura non è definito.

Amazon DocumentDB non supporta l'impostazione di *set di tag come preferenza* di lettura.

**Opzioni per le preferenze di lettura supportate**
+ **`primary`**—Specificare una preferenza di `primary` lettura aiuta a garantire che tutte le letture vengano indirizzate all'istanza primaria del cluster. Se l'istanza primaria non è disponibile, l'operazione di lettura non riesce. Una preferenza di `primary` lettura garantisce read-after-write coerenza ed è appropriata per i casi d'uso che danno priorità alla read-after-write coerenza rispetto all'elevata disponibilità e al ridimensionamento della lettura.

  L'esempio seguente specifica una preferenza di lettura `primary`:

  ```
  db.example.find().readPref('primary')
  ```

   
+ **`primaryPreferred`**—La specificazione di una preferenza di `primaryPreferred` lettura indirizza le letture all'istanza principale durante il normale funzionamento. Se si verifica un failover dell'istanza primaria, il client indirizza le richieste a una replica. Una preferenza di `primaryPreferred` lettura garantisce read-after-write coerenza durante il normale funzionamento e, infine, letture coerenti durante un evento di failover. Una preferenza di `primaryPreferred` lettura è appropriata per i casi d'uso che danno priorità alla read-after-write coerenza rispetto alla scalabilità di lettura, ma richiedono comunque un'elevata disponibilità.

  L'esempio seguente specifica una preferenza di lettura `primaryPreferred`:

  ```
  db.example.find().readPref('primaryPreferred')
  ```

   
+ **`secondary`**—La specificazione di una preferenza di `secondary` lettura garantisce che le letture vengano indirizzate solo a una replica, mai all'istanza principale. Se in un cluster non sono presenti istanze di replica, la richiesta di lettura non riesce. Una preferenza di `secondary` lettura produce alla fine letture coerenti ed è appropriata per i casi d'uso che danno priorità al throughput di scrittura dell'istanza principale rispetto all'elevata disponibilità e coerenza. read-after-write

  L'esempio seguente specifica una preferenza di lettura `secondary`:

  ```
  db.example.find().readPref('secondary')
  ```

   
+ **`secondaryPreferred`**—La specificazione di una preferenza di `secondaryPreferred` lettura garantisce che le letture vengano indirizzate a una replica di lettura quando una o più repliche sono attive. Se in un cluster non sono presenti istanze di replica attive, la richiesta di lettura viene instradata all'istanza primaria. Una preferenza di lettura `secondaryPreferred` genera letture consistenti finali quando la lettura viene gestita da una replica di lettura. Garantisce read-after-write coerenza quando la lettura viene gestita dall'istanza principale (esclusi gli eventi di failover). Una preferenza di `secondaryPreferred` lettura è appropriata per i casi d'uso che danno priorità alla scalabilità di lettura e all'elevata disponibilità rispetto alla coerenza. read-after-write

  L'esempio seguente specifica una preferenza di lettura `secondaryPreferred`:

  ```
  db.example.find().readPref('secondaryPreferred')
  ```

   
+ **`nearest`**—La specificazione di una `nearest` preferenza di lettura indirizza le letture esclusivamente in base alla latenza misurata tra il client e tutte le istanze nel cluster Amazon DocumentDB. Una preferenza di lettura `nearest` genera letture consistenti finali quando la lettura viene gestita da una replica di lettura. Garantisce read-after-write coerenza quando la lettura viene gestita dall'istanza principale (esclusi gli eventi di failover). Una preferenza di `nearest` lettura è appropriata per i casi d'uso che danno priorità al raggiungimento della latenza di lettura più bassa possibile e dell'elevata disponibilità rispetto alla coerenza e al ridimensionamento della lettura. read-after-write

  L'esempio seguente specifica una preferenza di lettura `nearest`:

  ```
  db.example.find().readPref('nearest')
  ```

### Elevata disponibilità
<a name="durability-consistency-isolation.high-availability"></a>

Amazon DocumentDB supporta configurazioni di cluster ad alta disponibilità utilizzando le repliche come destinazioni di failover per l'istanza principale. Se l'istanza primaria si guasta, una replica di Amazon DocumentDB viene promossa come nuova istanza primaria, con una breve interruzione durante la quale le richieste di lettura e scrittura effettuate all'istanza primaria hanno esito negativo con un'eccezione.

Se il cluster Amazon DocumentDB non include alcuna replica, l'istanza principale viene ricreata in caso di errore. Tuttavia, promuovere una replica di Amazon DocumentDB è molto più veloce che ricreare l'istanza principale. Pertanto, consigliamo di creare una o più repliche di Amazon DocumentDB come destinazioni di failover.

Le repliche che sono pensate per l'utilizzo come destinazioni di failover devono essere della stessa classe di istanza dell'istanza primaria. Devono essere assegnate in diverse zone di disponibilità dal database primario. Puoi specificare le repliche preferite come destinazioni di failover. Per le best practice sulla configurazione di Amazon DocumentDB per l'alta disponibilità, consulta. [Comprendere la tolleranza agli errori del cluster Amazon DocumentDB](db-cluster-fault-tolerance.md)

### Ridimensionamento delle letture
<a name="durability-consistency-isolation.scaling-reads"></a>

Le repliche di Amazon DocumentDB sono ideali per il ridimensionamento della lettura. Sono dedicate completamente alle operazioni di lettura nel volume cluster, ossia le repliche non elaborano le scritture. Le repliche dei dati si verificano all'interno del volume cluster e non tra le istanze. Quindi le risorse di ogni replica sono dedicate all'elaborazione delle query, non a replicare e scrivere dati.

Se l'applicazione richiede più capacità di lettura, puoi aggiungere rapidamente una replica al cluster, in genere in meno di 10 minuti. Se i tuoi requisiti per la capacità di lettura diminuiscono, puoi rimuovere le repliche non necessarie. Con le repliche di Amazon DocumentDB, paghi solo per la capacità di lettura necessaria.

Amazon DocumentDB supporta la scalabilità di lettura lato client tramite l'uso delle opzioni di preferenza di lettura. Per ulteriori informazioni, consulta [Preferenze di lettura di Amazon DocumentDB](#durability-consistency-isolation.read-preferences).

## Eliminazioni TTL
<a name="how-it-works.ttl-deletes"></a>

Le eliminazioni da un'area di indice TTL ottenute tramite un processo in background si basano sul miglior tentativo e non sono garantite all'interno di un determinato periodo di tempo specifico. Fattori come le dimensioni dell'istanza, l'utilizzo di risorse dell'istanza, le dimensioni documento e il throughput complessivo possono influenzare la tempistica di un'eliminazione TTL.

Quando il monitor TTL elimina i documenti, ogni eliminazione comporta costi di IO incrementando l'importo in fattura. Se la velocità di trasmissione e i tassi di eliminazione TTL aumentano, dovresti aspettarti un aumento della bolletta dovuto al maggiore utilizzo dell'IO.

Quando create un indice TTL su una raccolta esistente, dovete eliminare tutti i documenti scaduti prima di creare l'indice. L'attuale implementazione TTL è ottimizzata per l'eliminazione di una piccola parte dei documenti della raccolta, il che è tipico se il TTL è stato abilitato nella raccolta fin dall'inizio, e può comportare un IOPS più elevato del necessario se è necessario eliminare un numero elevato di documenti contemporaneamente.

Se non desideri creare un indice TTL per eliminare i documenti, puoi invece segmentare i documenti in raccolte in base al tempo e semplicemente eliminare tali raccolte quando i documenti non sono più necessari. Ad esempio, puoi creare una raccolta a settimana e eliminarla senza incorrere in costi di I/O. Questo può essere molto più conveniente rispetto all'utilizzo di un indice TTL.

## Risorse fatturabili
<a name="billing"></a>

### Identificazione delle risorse fatturabili di Amazon DocumentDB
<a name="billing.identifying-billable-resources"></a>

Essendo un servizio di database completamente gestito, Amazon DocumentDB addebita costi per istanze, storage, I/O, backup e trasferimento dati. Per ulteriori informazioni, consulta i prezzi di [Amazon DocumentDB (con compatibilità con MongoDB](https://aws.amazon.com/documentdb/pricing/)). 

Per scoprire le risorse fatturabili nel tuo account e potenzialmente eliminare le risorse, puoi utilizzare o. Console di gestione AWS AWS CLI

#### Utilizzando il Console di gestione AWS
<a name="billing.identifying-billable-resources-con"></a>

Utilizzando Console di gestione AWS, puoi scoprire i cluster, le istanze e gli snapshot di Amazon DocumentDB di cui hai effettuato il provisioning per un determinato periodo. Regione AWS

**Per individuare cluster, istanze e snapshot**

1. [Accedi a e apri Console di gestione AWS la console Amazon DocumentDB all'indirizzo https://console.aws.amazon.com /docdb.](https://console.aws.amazon.com/docdb)

1. Per scoprire risorse fatturabili in una regione diversa da quella predefinita, nell'angolo in alto a destra dello schermo, scegli quella in cui desideri cercare. Regione AWS   
![\[La regione della Virginia del Nord nel selettore di regione.\]](http://docs.aws.amazon.com/it_it/documentdb/latest/developerguide/images/db-cluster-console-region.png)

1. Nel riquadro di navigazione, scegliere il tipo di risorse fatturabili di interesse: **Clusters (Cluster)**, **Instances (Istanze)** o **Snapshots (Snapshot)**.  
![\[Cluster, istanze e istantanee nel riquadro di navigazione.\]](http://docs.aws.amazon.com/it_it/documentdb/latest/developerguide/images/db-navigation-pane-clusters-instances-snapshots.png)

1. Tutti i cluster, le istanze o le snapshot di cui è stato eseguito il provisioning per la regione sono elencati nel riquadro a destra. Verrà addebitato il costo per i cluster, le istanze e le snapshot.

#### Utilizzando il AWS CLI
<a name="billing.identifying-billable-resources-cli"></a>

Utilizzando AWS CLI, puoi scoprire i cluster, le istanze e gli snapshot di Amazon DocumentDB di cui hai effettuato il provisioning per un determinato periodo. Regione AWS

**Per individuare cluster e istanze**  
Il codice seguente elenca tutti i cluster e le istanze per la regione specificata. Per eseguire la ricerca di cluster e istanze nella regione predefinita, è possibile omettere il parametro `--region`.

**Example**  
Per Linux, macOS o Unix:  

```
aws docdb describe-db-clusters \
    --region us-east-1 \
    --query 'DBClusters[?Engine==`docdb`]' | \
       grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"
```
Per Windows:  

```
aws docdb describe-db-clusters ^
    --region us-east-1 ^
    --query 'DBClusters[?Engine==`docdb`]' | ^
       grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"
```
L'aspetto dell'output di questa operazione è simile al seguente.  

```
"DBClusterIdentifier": "docdb-2019-01-09-23-55-38",
        "DBInstanceIdentifier": "docdb-2019-01-09-23-55-38",
        "DBInstanceIdentifier": "docdb-2019-01-09-23-55-382",
"DBClusterIdentifier": "sample-cluster",
"DBClusterIdentifier": "sample-cluster2",
```
**Per individuare le snapshot**  
Il codice seguente elenca tutte le snapshot per la regione specificata. Per eseguire la ricerca di snapshot nella regione predefinita, è possibile omettere il parametro `--region`.
Per Linux, macOS o Unix:  

```
aws docdb describe-db-cluster-snapshots \
  --region us-east-1 \
  --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'
```
Per Windows:  

```
aws docdb describe-db-cluster-snapshots ^
  --region us-east-1 ^
  --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'
```
L'aspetto dell'output di questa operazione è simile al seguente.  

```
[
    [
        "rds:docdb-2019-01-09-23-55-38-2019-02-13-00-06",
        "automated"
    ],
    [
        "test-snap",
        "manual"
    ]
]
```
È necessario eliminare solo le snapshot di tipo `manual`. Le snapshot di tipo `Automated` vengono eliminate quando si elimina il cluster.

### Eliminazione di risorse fatturabili indesiderate
<a name="billing.deleting-billable-resources"></a>

Per eliminare un cluster, è necessario eliminare prima tutte le istanze che esso contiene.
+ Per eliminare le istanze, consultare [Eliminazione di un'istanza Amazon DocumentDB](db-instance-delete.md). 
**Importante**  
Anche eliminando le istanze in un cluster, lo storage e l'utilizzo di backup di utilizzo associati a tale cluster vengono comunque fatturati. Per interrompere ogni addebito, è necessario eliminare anche il cluster e le snapshot manuali.
+ Per eliminare i cluster, consultare [Eliminazione di un cluster Amazon DocumentDB](db-cluster-delete.md). 
+ Per eliminare le snapshot manuali, consultare [Eliminazione di un'istantanea del cluster](backup_restore-delete_cluster_snapshot.md). 

# Cos'è un database di documenti?
<a name="what-is-document-db"></a>

Alcuni sviluppatori non pensano al proprio modello di dati in termini di righe e colonne normalizzate. Tipicamente, nel livello dell'applicazione, i dati sono rappresentati come un documento JSON perché è più intuitivo per gli sviluppatori pensare al proprio modello di dati come a un documento. 

La popolarità dei database di documenti è aumentata perché consentono di rendere permanenti i dati in un database utilizzando lo stesso formato del modello di documento utilizzato nel codice dell'applicazione. I database di documenti offrono funzionalità potenti e intuitive APIs per uno sviluppo flessibile e agile.

**Topics**
+ [Casi d’uso](document-database-use-cases.md)
+ [Comprendere i documenti](document-database-documents-understanding.md)
+ [Utilizzo dei documenti](document-database-working-with-documents.md)

# Casi di utilizzo dei database di documenti
<a name="document-database-use-cases"></a>

Il tuo caso d'uso riguarda situazioni in cui hai bisogno di un database di documenti o di altri tipi di database per gestire i dati. I database di documenti sono utili per i carichi di lavoro che richiedono uno schema flessibile per uno sviluppo rapido e iterativo. Di seguito sono elencati alcuni esempi di casi d'uso per i quali i database di documenti possono offrire notevoli vantaggi:

**Topics**
+ [Profili utente](#document-databases-use-cases.user-profiles)
+ [Big data in tempo reale](#document-databases-use-cases.big-data)
+ [Gestione dei contenuti](#document-databases-use-cases.content-management)

## Profili utente
<a name="document-databases-use-cases.user-profiles"></a>

Poiché i database di documenti si basano su uno schema flessibile, possono archiviare documenti con diversi attributi e valori dei dati. I database di documenti rappresentano sono una soluzione pratica per i profili online in cui più utenti forniscono tipi di informazioni diversi. Con un database di documenti puoi archiviare ogni profilo utente in modo efficiente archiviando solo gli attributi specifici per il singolo utente.

Supponiamo che un utente decida di aggiungere o rimuovere delle informazioni dal profilo. In questo caso, il documento può essere facilmente sostituito con una versione aggiornata che contiene tutti i dati e gli attributi aggiunti di recente o che omette attributi e dati rimossi di recente. I database di documenti consentono di gestire più facilmente questo livello di individualità e fluidità.

## Big data in tempo reale
<a name="document-databases-use-cases.big-data"></a>

Storicamente, la capacità di estrarre informazioni dai dati operativi era ostacolata dal fatto che i database operativi e i database analitici venivano mantenuti in ambienti diversi, operativi e rispettivamente. business/reporting La possibilità di estrarre informazioni operative in tempo reale è fondamentale in un ambiente aziendale altamente competitivo. Utilizzando i database di documenti, un'azienda può archiviare e gestire i dati operativi da qualsiasi origine e, allo stesso tempo, inviare i dati al motore BI preferito per analizzarli. La presenza di due ambienti non è obbligatoria.

## Gestione dei contenuti
<a name="document-databases-use-cases.content-management"></a>

Per gestire in modo efficiente i contenuti, devi poterli raccogliere e aggregare da diverse origini e quindi inviarli al cliente. Grazie al loro schema flessibile, i database di documenti sono perfetti per raccogliere e archiviare qualsiasi tipo di dati. Puoi utilizzarli per creare e integrare nuovi tipi di contenuti, inclusi quelli generati dagli utenti, come immagini, commenti e video.

# Comprensione dei documenti
<a name="document-database-documents-understanding"></a>

I database di documenti vengono utilizzati per archiviare dati semistrutturati come documento, anziché normalizzare i dati su più tabelle, ognuna con una struttura unica e fissa, come in un database relazionale. I documenti archiviati in un database di documenti utilizzano coppie chiave-valore nidificate per fornire la struttura o lo schema del documento. Tuttavia, nello stesso database di documenti possono essere archiviati diversi tipi di documenti, rispettando così il requisito che prevede l'elaborazione di dati simili in formati diversi. Ad esempio, visto che ogni documento è autodescrittivo, i documenti codificati con JSON per uno store online descritti in questo argomento [Documenti di esempio in un database di documenti](#document-database-documents) possono essere archiviati nello stesso database di documenti. 

**Topics**
+ [SQL e terminologia non relazionale](#document-database-sql-vs-nosql-terms)
+ [Documenti semplici](#document-database-documents-simple)
+ [Documenti incorporati](#document-database-documents-embeded)
+ [Documenti di esempio in un database di documenti](#document-database-documents)
+ [Comprendere la normalizzazione in un database di documenti](#document-database-normalization)

## SQL e terminologia non relazionale
<a name="document-database-sql-vs-nosql-terms"></a>

Nella tabella seguente viene confrontata la terminologia utilizzata dai database di documenti (MongoDB) con quella utilizzata dai database SQL.


|  SQL  |  MongoDB  | 
| --- | --- | 
|  Tabella  |  Raccolta  | 
|  Riga  |  Documento  | 
|  Colonna  |  Campo  | 
|  Chiave primaria  |  ObjectId  | 
|  Indice  |  Indice  | 
|  Vista  |  Vista  | 
|  Oggetto o tabella annidata  |  Documento incorporato  | 
|  Array  |  Array  | 

## Documenti semplici
<a name="document-database-documents-simple"></a>

Tutti i documenti in un database di documenti sono autodescrittivi. In questa documentazione utilizziamo documenti con formattazione simile a JSON, anche se puoi utilizzare altri mezzi di codifica.

Un documento semplice ha uno o più campi, tutti allo stesso livello all'interno del documento. In questo esempio i campi `SSN`, `LName`, `FName`, `DOB`, `Street`, `City`, `State-Province`, `PostalCode` e `Country` sono tutti di pari livello all'interno del documento.

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Street": "125 Main St.",
   "City": "Anytown",
   "State-Province": "WA",
   "PostalCode": "98117",
   "Country": "USA"
}
```

Quando le informazioni vengono organizzate in un documento semplice, ogni campo viene gestito individualmente. Per recuperare l'indirizzo di una persona, devi recuperare `Street`, `City`, `State-Province`, `PostalCode` e `Country` come singoli elementi dati.

## Documenti incorporati
<a name="document-database-documents-embeded"></a>

Un documento complesso organizza i propri dati creando documenti incorporati nel documento stesso. I documenti incorporati consentono di gestire i dati in gruppi e come singoli elementi, in base alla soluzione più efficace in un determinato caso. Utilizzando l'esempio precedente, puoi incorporare un documento `Address` nel documento principale. In questo modo si otterrà la struttura del documento seguente:

```
{
   "SSN": "123-45-6789",
   "LName": "Rivera",
   "FName": "Martha",
   "DOB": "1992-11-16",
   "Address": 
   {
       "Street": "125 Main St.",
       "City": "Anytown",
       "State-Province": "WA",
       "PostalCode": "98117",
       "Country": "USA" 
   }
}
```

È ora possibile accedere ai dati del documento come campi singoli (`"SSN":`), come documento incorporato (`"Address":`) o come membro di un documento incorporato (`"Address":{"Street":}`).

## Documenti di esempio in un database di documenti
<a name="document-database-documents"></a>

Come indicato in precedenza, ogni documento in un database di documenti è autodescrittivo, quindi la struttura dei documenti all'interno di un database di documenti può essere diversa. I due documenti seguenti, uno relativo a un manuale e l'altro a un periodico, sono strutturalmente differenti. Tuttavia, entrambi possono essere inclusi nello stesso database di documenti.

Di seguito è riportato un documento di esempio per un libro:

```
{
    "_id" : "9876543210123",
    "Type": "book",
    "ISBN": "987-6-543-21012-3",
    "Author": 
    {
        "LName":"Roe",
        "MI": "T",
        "FName": "Richard" 
    },
    "Title": "Understanding Document Databases"
}
```

Di seguito è riportato un documento di esempio per un periodico con due articoli:

```
{
    "_id" : "0123456789012",
    "Publication": "Programming Today",
    "Issue": 
    {
        "Volume": "14",
        "Number": "09"
    },
    "Articles" : [ 
        {
            "Title": "Is a Document Database Your Best Solution?",
            "Author": 
            {
                "LName": "Major",
                "FName": "Mary" 
            }
        },
        {
            "Title": "Databases for Online Solutions",
            "Author": 
            {
                "LName": "Stiles",
                "FName": "John" 
            }
        }
    ],
    "Type": "periodical"
}
```

Confronta la struttura di questi due documenti. Con un database relazionale, devi avere tabelle separate per "periodico" e "libri" oppure una singola tabella con campi inutilizzati, ad esempio "Pubblicazione", "Numero", "Articoli" e "MI", come valori `null`. Poiché i database di documenti sono semistrutturati e ogni documento definisce autonomamente la propria struttura, questi due documenti possono coesistere nello stesso database di documenti senza alcun campo `null`. I database di documenti sono uno strumento efficace per gestire i dati di tipo sparse.

L'utilizzo di un database di documenti consente uno sviluppo rapido e iterativo. Il motivo è che puoi modificare la struttura dei dati di un documento in modo dinamico, senza dover modificare lo schema per l'intera raccolta. I database di documenti sono particolarmente adatti per lo sviluppo agile e gli ambienti che evolvono dinamicamente.

## Comprendere la normalizzazione in un database di documenti
<a name="document-database-normalization"></a>

I database di documenti non sono normalizzati. I dati nel documento possono essere ripetuti in un altro documento. Inoltre, possono esistere delle discrepanze nei dati dei documenti. Ad esempio, considera uno scenario in cui puoi effettuare acquisti in uno store online e tutti i dettagli dei tuoi acquisti vengono archiviati in un singolo documento. Il documento può essere simile al documenti JSON seguente:

```
{
    "DateTime": "2018-08-15T12:13:10Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "9876543210123",
            "Description" : "Understanding Document Databases",
            "Price" : "29.95"
        },
        {
            "ItemId" : "0123456789012",
            "Description" : "Programming Today",
            "Issue": {
                "Volume": "14",
                "Number": "09"
            },
            "Price" : "8.95"
        },
        {
            "ItemId": "234567890-K",
            "Description": "Gel Pen (black)",
            "Price": "2.49" 
        }
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "MasterCard",
        "Number" : "1234-5678-9012-3456" 
    },
    "ShopperId" : "1234567890" 
}
```

Tutte le informazioni vengono archiviate sotto forma di documento in una raccolta di transazioni. Successivamente, ti accorgi di aver dimenticato di acquistare un articolo. Accedi di nuovo allo stesso store ed effettui un altro acquisto, che a sua volta viene archiviato come documento nella raccolta di transazioni.

```
{
    "DateTime": "2018-08-15T14:49:00Z",
    "LName" : "Santos",
    "FName" : "Paul",
    "Cart" : [ 
        {
            "ItemId" : "2109876543210",
            "Description" : "Document Databases for Fun and Profit",
            "Price" : "45.95"
        } 
    ],
    "PaymentMethod" : 
    {
        "Issuer" : "Visa",
        "Number" : "0987-6543-2109-8765" 
    },
    "ShopperId" : "1234567890" 
}
```

Nota la ridondanza tra questi due documenti: il tuo nome e l'ID acquirente (e, se hai usato la stessa carta di credito, i dati della carta di credito). Tuttavia, la procedura non presenta problemi perché lo storage è economico e ogni documento registra completamente una singola transazione che può essere recuperata rapidamente con una semplice query chiave-valore che non richiede join.

C'è anche un'apparente discrepanza tra i due documenti: i dati della tua carta di credito. Si tratta di una discrepanza solo apparente perché è probabile che hai semplicemente utilizzato due carte diverse per gli acquisti. Ogni documento contiene tutti i dati corretti per la transazione documentata.

# Utilizzo dei documenti
<a name="document-database-working-with-documents"></a>

Essendo un database di documenti, Amazon DocumentDB semplifica l'archiviazione, l'interrogazione e l'indicizzazione dei dati JSON. In Amazon DocumentDB, una raccolta è analoga a una tabella in un database relazionale, tranne per il fatto che non esiste un unico schema applicato a tutti i documenti. Le raccolte consentono di raggruppare documenti simili mantenendoli comunque nello stesso database, senza richiedere che siano identici a livello di struttura.

Utilizzando i documenti di esempio delle sezioni precedenti, è probabile che tu disponga di raccolte per `reading_material` e `office_supplies`. È responsabilità del software stabilire a quale raccolta appartenga un documento.

Gli esempi seguenti utilizzano l'API MongoDB per mostrare come aggiungere, eseguire query, aggiornare ed eliminare i documenti.

**Topics**
+ [Aggiungere documenti](#document-database-adding-documents)
+ [Interrogazione di documenti](#document-database-queries)
+ [Aggiornamento dei documenti](#document-database-updating)
+ [Eliminazione di documenti](#document-database-deleting)

## Aggiungere documenti
<a name="document-database-adding-documents"></a>

In Amazon DocumentDB, un database viene creato quando si aggiunge per la prima volta un documento a una raccolta. In questo esempio, viene creata una raccolta denominata `example` nel database `test`, che è il database predefinito quando ci si connette a un cluster. Poiché la raccolta viene creata implicitamente quando viene inserito il primo documento, non viene effettuato alcun controllo degli errori sul nome della raccolta. Di conseguenza, un errore di battitura nel nome della raccolta, ad esempio `eexample` anziché `example`, creerà e aggiungerà il documento alla raccolta `eexample` anziché la raccolta desiderata. Il controllo degli errori deve essere gestito dall'applicazione.

Gli esempi seguenti utilizzano l'API MongoDB per aggiungere documenti.

**Topics**
+ [Aggiungere un singolo documento](#document-database-adding-documents-single)
+ [Aggiungere più documenti](#document-database-adding-documents-multiple)

### Aggiungere un singolo documento
<a name="document-database-adding-documents-single"></a>

Per aggiungere un singolo documento a una raccolta, utilizza l'operazione `insertOne( {} )` con il documento da aggiungere alla raccolta.

```
db.example.insertOne(
    {
        "Item": "Ruler",
        "Colors": ["Red","Green","Blue","Clear","Yellow"],
        "Inventory": {
            "OnHand": 47,
            "MinOnHand": 40
        },
        "UnitPrice": 0.89
    }
)
```

L'aspetto dell'output di questa operazione è simile al seguente (formato JSON).

```
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5bedafbcf65ff161707de24f")
}
```

### Aggiungere più documenti
<a name="document-database-adding-documents-multiple"></a>

Per aggiungere più documenti a una raccolta, utilizza l'operazione `insertMany( [{},...,{}] )` con un elenco di documenti da aggiungere alla raccolta. Anche se i documenti in questo specifico elenco hanno schemi diversi, ciascuno può essere aggiunto alla stessa raccolta.

```
db.example.insertMany(
    [
        {
            "Item": "Pen",
            "Colors": ["Red","Green","Blue","Black"],
            "Inventory": {
                "OnHand": 244,
                "MinOnHand": 72 
            }
        },
        {
            "Item": "Poster Paint",
            "Colors": ["Red","Green","Blue","Black","White"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50 
            }
        },
        {
            "Item": "Spray Paint",
            "Colors": ["Black","Red","Green","Blue"],
            "Inventory": {
                "OnHand": 47,
                "MinOnHand": 50,
                "OrderQnty": 36
            }
        }    
    ]
)
```

L'aspetto dell'output di questa operazione è simile al seguente (formato JSON).

```
{
    "acknowledged" : true,
    "insertedIds" : [
            ObjectId("5bedb07941ca8d9198f5934c"),
            ObjectId("5bedb07941ca8d9198f5934d"),
            ObjectId("5bedb07941ca8d9198f5934e")
    ]
}
```

## Interrogazione di documenti
<a name="document-database-queries"></a>

A volte, potrebbe essere necessario cercare nell'inventario dello store online, in modo che i clienti possano vedere e acquistare ciò che vendi. Eseguire query su una raccolta è relativamente semplice, sia per le ricerche su tutti i documenti della raccolta che per quelle solo sui documenti che soddisfano un determinato criterio.

Per eseguire una query per i documenti, utilizza l'operazione `find()`. Il comando `find()` ha un parametro per documenti singoli che definisce i criteri da utilizzare nella scelta dei documenti da restituire. L'output di `find()` è un documento formattato su una sola riga di testo senza interruzioni di riga. Per formattare il documento di output per facilitare la lettura, utilizza `find().pretty()`. Tutti gli esempi di questo argomento utilizzano `.pretty()` per formattare l'output.

Usa i quattro documenti che hai inserito nella `example` raccolta nei due esercizi precedenti: `insertOne()` e. `insertMany()`

**Topics**
+ [Recupero di tutti i documenti di una raccolta](#document-database-queries-all-documents)
+ [Recupero di documenti che corrispondono a un valore di campo](#document-database-queries-match-criteria)
+ [Recupero di documenti che corrispondono a un documento incorporato](#document-database-queries-entire-embedded-document)
+ [Recupero di documenti che corrispondono a un valore di campo in un documento incorporato](#document-database-queries-embeded-document-field)
+ [Recupero di documenti che corrispondono a un array](#document-database-queries-array-match)
+ [Recupero di documenti che corrispondono a un valore in una matrice](#document-database-queries-array-value-match)
+ [Recupero di documenti tramite operatori](#document-database-query-operators)

### Recupero di tutti i documenti di una raccolta
<a name="document-database-queries-all-documents"></a>

Per recuperare tutti i documenti nella raccolta, usa l'operazione `find()` con un documento di query vuoto.

La query seguente restituisce tutti i documenti della raccolta `example`.

```
db.example.find( {} ).pretty()
```

### Recupero di documenti che corrispondono a un valore di campo
<a name="document-database-queries-match-criteria"></a>

Per recuperare tutti i documenti che corrispondono a un campo e a un valore, usa l'operazione `find()` con un documento di query che identifica i campi e i valori per la corrispondenza.

Usando i documenti precedenti, questa query restituisce tutti i documenti in cui il campo "Item" è uguale a "Pen".

```
db.example.find( { "Item": "Pen" } ).pretty()
```

### Recupero di documenti che corrispondono a un documento incorporato
<a name="document-database-queries-entire-embedded-document"></a>

Per trovare tutti i documenti che corrispondono a un documento incorporato, utilizza l'operazione `find()` con un documento di query che specifica il nome del documento incorporato e tutti i campi e i valori per quel documento incorporato.

Quando si esegue il confronto di un documento incorporato, il documento incorporato del documento deve avere lo stesso nome che ha nella query. Inoltre, i campi e i valori nel documento incorporato devono corrispondere alla query.

La seguente query restituisce solo il documento "Poster Paint". Questo perché "Pen" ha valori diversi per "`OnHand`" e "`MinOnHand`" e "Spray Paint" ha un ulteriore campo (`OrderQnty`) rispetto al documento di query.

```
db.example.find({"Inventory": {
    "OnHand": 47,
    "MinOnHand": 50 } } ).pretty()
```

### Recupero di documenti che corrispondono a un valore di campo in un documento incorporato
<a name="document-database-queries-embeded-document-field"></a>

Per trovare tutti i documenti che corrispondono a un documento incorporato, utilizza l'operazione `find()` con un documento di query che specifica il nome del documento incorporato e tutti i campi e i valori per quel documento incorporato.

Considerati i documenti precedenti, la seguente query utilizza la "dot notation" (notazione col punto) per specificare il documento incorporato e i campi di interesse. Vengono restituiti tutti i documenti che corrispondono a questi campi, indipendentemente da quali altri campi possono essere presenti nel documento incorporato. La query restituisce "Poster Paint" e "Spray Paint" perché entrambi corrispondono ai campi e ai valori specificati.

```
db.example.find({"Inventory.OnHand": 47, "Inventory.MinOnHand": 50 }).pretty()
```

### Recupero di documenti che corrispondono a un array
<a name="document-database-queries-array-match"></a>

Per trovare tutti i documenti che corrispondono a una matrice, utilizzare l'operazione `find()` con il nome della matrice richiesta e tutti i valori in quella matrice. La query restituisce tutti i documenti che hanno una matrice con quel nome in cui i valori della matrice sono identici e nello stesso ordine rispetto alla query.

La seguente query restituisce solo "Pen" perché" Poster Paint" ha un ulteriore colore (White) mentre "Spray Paint" ha i colori in un ordine diverso.

```
db.example.find( { "Colors": ["Red","Green","Blue","Black"] } ).pretty() 
```

### Recupero di documenti che corrispondono a un valore in una matrice
<a name="document-database-queries-array-value-match"></a>

Per trovare tutti i documenti che hanno un valore specifico di matrice, utilizza l'operazione `find()` con il nome della matrice e il valore richiesto.

```
db.example.find( { "Colors": "Red" } ).pretty() 
```

L'operazione precedente restituisce tutti e tre i documenti, in quanto ciascuno di essi dispone di una matrice denominata `Colors` e del valore "`Red`" all'interno della matrice. Se si specifica il valore "`White`", la query restituisce solo "Poster Paint".

### Recupero di documenti tramite operatori
<a name="document-database-query-operators"></a>

La seguente query restituisce tutti i documenti in cui il valore "`Inventory.OnHand`" è inferiore a 50.

```
db.example.find(
        { "Inventory.OnHand": { $lt: 50 } } )
```

Per un elenco degli operatori di query supportati, consulta [Operatori di interrogazione e proiezione](mongo-apis.md#mongo-apis-query). 

## Aggiornamento dei documenti
<a name="document-database-updating"></a>

In genere, i documenti non sono statici e vengono aggiornati come parte dei flussi di lavoro dell'applicazione. Gli esempi seguenti mostrano alcune opzioni di aggiornamento dei documenti.

Per aggiornare un documento esistente, utilizza l'operazione `update()`. L'operazione `update()` presenta due parametri del documento. Il primo documento identifica il documento o i documenti da aggiornare. Il secondo documento specifica gli aggiornamenti da eseguire.

Quando si aggiorna un campo esistente, che si tratti di un campo semplice, di un array o di un documento incorporato, si specifica il nome del campo e i relativi valori. Al termine dell'operazione è come se il campo nel documento precedente fosse stato sostituito dal campo e dai valori nuovi.

**Topics**
+ [Aggiornamento dei valori di un campo esistente](#document-database-updating-existing-fields)
+ [Aggiungere un nuovo campo](#document-database-updating-adding-field)
+ [Sostituzione di un documento incorporato](#document-database-replacing-embedded-document)
+ [Inserimento di nuovi campi in un documento incorporato](#document-database-updating-adding-field-embedded)
+ [Rimuovere un campo da un documento](#document-database-remove-field)
+ [Rimuovere un campo da più documenti](#document-database-remove-field-all)

### Aggiornamento dei valori di un campo esistente
<a name="document-database-updating-existing-fields"></a>

Utilizza i seguenti quattro documenti aggiunti in precedenza per le seguenti operazioni di aggiornamento.

```
{
    "Item": "Ruler",
    "Colors": ["Red","Green","Blue","Clear","Yellow"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 40
    },
    "UnitPrice": 0.89
},
{
    "Item": "Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
},
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Black","White"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
},
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    }
}
```

**Per aggiornare un campo semplice**  
Per aggiornare un campo semplice, utilizza `update()` con `$set` per specificare il nome del campo e il nuovo valore. L'esempio seguente modifica l'elemento `Item` da "Pen" a "Gel Pen".

```
db.example.update(
    { "Item" : "Pen" },
    { $set: { "Item": "Gel Pen" } }
)
```

L'aspetto dei risultati di questa operazione è simile al seguente.

```
{
    "Item": "Gel Pen",
    "Colors": ["Red","Green","Blue","Black"],
    "Inventory": {
        "OnHand": 244,
        "MinOnHand": 72 
    }
}
```

**Per aggiornare una matrice**  
L'esempio seguente sostituisce la matrice esistente di colori con una nuova matrice che comprende `Orange` e rimuove `White` dall'elenco dei colori. Il nuovo elenco di colori è nell'ordine specificato nell'operazione `update()`.

```
db.example.update(
    { "Item" : "Poster Paint" },
    { $set: { "Colors": ["Red","Green","Blue","Orange","Black"] } }
)
```

L'aspetto dei risultati di questa operazione è simile al seguente.

```
{
    "Item": "Poster Paint",
    "Colors": ["Red","Green","Blue","Orange","Black"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50 
    }
}
```

### Aggiungere un nuovo campo
<a name="document-database-updating-adding-field"></a>

Per modificare un documento aggiungendo uno o più nuovi campi, utilizza l'operazione `update()` con un documento di query che identifica il documento in cui inserire i dati e i nuovi campi e valori da inserire utilizzando l'operatore `$set`.

L'esempio seguente aggiunge il campo `UnitPrice` con il valore `3.99` al documento Spray Paints. Si noti che il valore `3.99` è numerico e non una stringa.

```
db.example.update(
    { "Item": "Spray Paint" },
    { $set: { "UnitPrice": 3.99 } } 
)
```

I risultati di questa operazione sono simili ai seguenti (formato JSON).

```
{
    "Item": "Spray Paint",
    "Colors": ["Black","Red","Green","Blue"],
    "Inventory": {
        "OnHand": 47,
        "MinOnHand": 50,
        "OrderQnty": 36
    },
    "UnitPrice": 3.99
}
```

### Sostituzione di un documento incorporato
<a name="document-database-replacing-embedded-document"></a>

Per modificare un documento sostituendo un documento incorporato, utilizza l'operazione `update()` con i documenti che identificano il documento incorporato e i nuovi campi e valori utilizzando l'operatore `$set`.

Considerato il seguente documento.

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Year": 1987,
        "Month": 4,
        "Day": 18
    }
})
```

**Per sostituire un documento incorporato**  
L'esempio seguente sostituisce l'attuale documento Date con uno nuovo che ha solo i campi `Month` e `Day`, mentre `Year` è stato eliminato.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date": { "Month": 4, "Day": 18 } } }
)
```

L'aspetto dei risultati di questa operazione è simile al seguente.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

### Inserimento di nuovi campi in un documento incorporato
<a name="document-database-updating-adding-field-embedded"></a>

**Per aggiungere campi a un documento incorporato**  
Per modificare un documento aggiungendo uno o più campi nuovi a un documento incorporato, utilizza l'operazione `update()` con i documenti che identificano il documento incorporato e la "dot notation" per specificare il documento incorporato e i nuovi campi e valori da inserire utilizzando l'operatore `$set`.

Considerato il seguente documento, il codice seguente usa la "dot notation" per inserire i campi `Year` e `DoW` nel documento incorporato `Date` e `Words` nel documento padre.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18
    }
}
```

```
db.example.update(
    { "DocName" : "Document 1" },
    { $set: { "Date.Year": 1987, 
              "Date.DoW": "Saturday",
              "Words": 2482 } }
)
```

L'aspetto dei risultati di questa operazione è simile al seguente.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
}
```

### Rimuovere un campo da un documento
<a name="document-database-remove-field"></a>

Per modificare un documento rimuovendo un campo, utilizza l'operazione `update()` con un documento di query che identifica il documento da cui rimuovere il campo e l'operatore `$unset` per specificare il campo da rimuovere.

L'esempio seguente rimuove il campo `Words` dal documento precedente.

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

L'aspetto dei risultati di questa operazione è simile al seguente.

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

### Rimuovere un campo da più documenti
<a name="document-database-remove-field-all"></a>

Per modificare un documento rimuovendo un campo da più documenti, utilizza l'operazione `update()` con l'operatore `$unset` e l'opzione `multi` impostata su `true`.

L'esempio seguente rimuove il campo `Inventory` da tutti i documenti della raccolta di esempi. Se un documento non contiene il campo `Inventory`, non viene eseguita alcuna azione. Se `multi: true` viene omesso, l'azione viene eseguita solo nel primo documento che soddisfa il criterio.

```
db.example.update(
    {},
    { $unset: { Inventory:1 } },
    { multi: true }
)
```

## Eliminazione di documenti
<a name="document-database-deleting"></a>

Per rimuovere un documento dal database, utilizza l'operazione `remove()`, specificando il documento da rimuovere. Il codice seguente rimuove "Gel Pen" dalla raccolta `example`.

```
db.example.remove( { "Item": "Gel Pen" } )
```

Per rimuovere tutti i documenti dal database, utilizzate l'`remove()`operazione con una query vuota.

```
db.example.remove( { } )
```