

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Qu'est-ce qu'Amazon DocumentDB (compatible avec MongoDB)
<a name="what-is"></a>

Amazon DocumentDB (compatible avec MongoDB) est un service de base de données rapide, fiable et entièrement géré. Amazon DocumentDB facilite la configuration, l'exploitation et le dimensionnement de bases de données compatibles avec MongoDB dans le cloud. Avec Amazon DocumentDB, vous pouvez exécuter le même code d'application et utiliser les mêmes pilotes et outils que ceux que vous utilisez avec MongoDB.

Avant d'utiliser Amazon DocumentDB, vous devez passer en revue les concepts et fonctionnalités décrits dans. [Comment ça marche](how-it-works.md) Ensuite, complétez les étapes de [Guide de démarrage](get-started-guide.md).

**Topics**
+ [Présentation de](#overview)
+ [Clusters](#what-is-db-clusters)
+ [instances](#what-is-db-instances)
+ [Régions et AZs](#what-is-regions-and-azs)
+ [Tarification](#docdb-pricing)
+ [Contrôle](#what-is-monitoring)
+ [Interfaces](#what-is-interfaces)
+ [Quelle est la prochaine étape ?](#what-is-next)
+ [Comment ça marche](how-it-works.md)
+ [Qu'est-ce qu'une base de données documentaire ?](what-is-document-db.md)

## Présentation d'Amazon DocumentDB
<a name="overview"></a>

Voici quelques fonctionnalités de haut niveau d'Amazon DocumentDB :
+ Amazon DocumentDB prend en charge deux types de clusters : les clusters basés sur des instances et les clusters élastiques. Les clusters élastiques prennent en charge des charges de travail de plusieurs millions de dollars reads/writes par seconde et de pétaoctets de capacité de stockage. Pour plus d'informations sur les clusters élastiques, consultez[Utilisation des clusters élastiques Amazon DocumentDB](docdb-using-elastic-clusters.md). Le contenu ci-dessous fait référence aux clusters basés sur des instances Amazon DocumentDB.
+ Amazon DocumentDB augmente automatiquement la taille de votre volume de stockage à mesure que vos besoins de stockage de base de données augmentent. Votre volume de stockage augmente par paliers de 10 Go, jusqu'à un maximum de 128 TiB. Vous n'avez pas besoin de prévoir d'espace de stockage supplémentaire pour maîtriser la croissance future de votre cluster.
+ Avec Amazon DocumentDB, vous pouvez augmenter le débit de lecture pour prendre en charge de gros volumes de demandes d'applications en créant jusqu'à 15 instances de réplication. Les répliques Amazon DocumentDB partagent le même stockage sous-jacent, ce qui réduit les coûts et évite d'avoir à effectuer des écritures sur les nœuds de réplication. Cette fonctionnalité libère davantage de puissance de traitement pour traiter les demandes de lecture et réduit le délai de réplication, souvent jusqu'à quelques millisecondes à un chiffre. Vous pouvez ajouter des répliques en quelques minutes, quelle que soit la taille du volume de stockage. Amazon DocumentDB fournit également un point de terminaison pour le lecteur, qui permet à l'application de se connecter sans avoir à suivre les répliques au fur et à mesure de leur ajout ou de leur suppression.
+ Amazon DocumentDB vous permet d'augmenter ou de diminuer les ressources de calcul et de mémoire de chacune de vos instances. Les opérations de mise à l'échelle du calcul sont normalement réalisées en quelques minutes.
+ Amazon DocumentDB s'exécute sur Amazon Virtual Private Cloud (Amazon VPC), ce qui vous permet d'isoler votre base de données dans votre propre réseau virtuel. Vous pouvez également configurer vos paramètres de pare-feu pour contrôler l'accès réseau à votre cluster.
+ Amazon DocumentDB surveille en permanence l'état de santé de votre cluster. En cas de défaillance d'une instance, Amazon DocumentDB redémarre automatiquement l'instance et les processus associés. Amazon DocumentDB ne nécessite pas de relecture des journaux de restauration des bases de données en cas de panne, ce qui réduit considérablement les temps de redémarrage. Amazon DocumentDB isole également le cache de base de données du processus de base de données, ce qui permet au cache de survivre au redémarrage d'une instance.
+ En cas de défaillance d'une instance, Amazon DocumentDB automatise le basculement vers l'une des 15 répliques Amazon DocumentDB que vous créez dans d'autres zones de disponibilité. Si aucune réplique n'a été mise en service et qu'une défaillance survient, Amazon DocumentDB essaie de créer automatiquement une nouvelle instance Amazon DocumentDB.
+ La fonctionnalité de sauvegarde d'Amazon DocumentDB permet la point-in-time restauration de votre cluster. Cette fonction vous permet de restaurer votre cluster d'une seconde au cours de la période de rétention, jusqu'aux 5 dernières minutes. Vous pouvez configurer votre période de rétention des sauvegardes automatique de 35 jours maximum. Les sauvegardes automatisées sont stockées dans Amazon Simple Storage Service (Amazon S3), conçu pour une durabilité de 99,999999999 %. Les sauvegardes Amazon DocumentDB sont automatiques, incrémentielles et continues, et elles n'ont aucun impact sur les performances de votre cluster.
+ Avec Amazon DocumentDB, vous pouvez chiffrer vos bases de données à l'aide de clés que vous créez et contrôlez via AWS Key Management Service ().AWS KMS Sur un cluster de base de données exécuté avec le chiffrement Amazon DocumentDB, les données stockées au repos dans le stockage sous-jacent sont chiffrées. Les sauvegardes automatisées, les instantanés et les réplicas dans le même cluster sont également chiffrés.
+ Amazon DocumentDB est autorisé dans le cadre du Federal Risk and Authorization Management Program (FedRAMP). Il dispose de l'autorisation FedRAMP High AWS GovCloud pour les régions (États-Unis) et de l'autorisation FedRAMP Moderate pour les régions américaines. AWS East/West Pour plus de détails sur AWS les efforts de conformité et les efforts de conformité, voir [AWS Services concernés par programme de conformité](https://aws.amazon.com/compliance/services-in-scope/FedRAMP/).

Si vous débutez dans le AWS domaine des services, consultez les ressources suivantes pour en savoir plus :
+ AWS propose des services informatiques, de bases de données, de stockage, d'analyse et d'autres fonctionnalités. Pour un aperçu de tous les AWS services, consultez [Cloud Computing with Amazon Web Services](https://aws.amazon.com/what-is-aws/).
+ AWS fournit un certain nombre de services de base de données. Pour savoir quel service est le mieux adapté à votre environnement, voir [Bases de données sur AWS](https://aws.amazon.com/products/databases/).

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

Un *cluster* se compose de 0 à 16 instances et d'un volume de stockage de cluster qui gère les données de ces instances. Toutes les écriture sont effectuées à travers l'instance principale. Toutes les instances (principale et réplicas) prennent en charge les lectures. Les données du cluster sont stockées dans le volume de cluster avec des copies dans trois zones de disponibilité différentes.

![\[Cluster Amazon DocumentDB contenant une instance principale dans la zone de disponibilité 1, écrivant sur le volume du cluster pour les répliques dans les zones 2 et 3.\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/images/how-it-works-01c.png)


Les clusters basés sur des instances Amazon DocumentDB 5.0 prennent en charge deux configurations de stockage pour un cluster de base de données : Amazon DocumentDB standard et Amazon DocumentDB optimisé pour les E/S. Pour de plus amples informations, veuillez consulter [Configurations de stockage en cluster Amazon DocumentDB](db-cluster-storage-configs.md).

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

Une instance Amazon DocumentDB est un environnement de base de données isolé dans le cloud. Une instance peut comporter plusieurs bases de données créées par l'utilisateur. Vous pouvez créer et modifier une instance à l'aide du AWS Management Console ou du AWS CLI.

La capacité de calcul et de mémoire d'une instance est déterminée par sa *classe d'instance*. Vous pouvez sélectionner l'instance qui correspond le mieux à vos besoins. Si vos besoins évoluent au fil du temps, vous pouvez choisir une autre classe d'instance. Pour connaître les spécifications de classes, veuillez consulter [Spécifications des classes d'instances](db-instance-classes.md#db-instance-class-specs).

Les instances Amazon DocumentDB s'exécutent uniquement dans l'environnement Amazon VPC. Amazon VPC vous permet de contrôler votre environnement réseau virtuel : vous pouvez choisir votre propre plage d'adresses IP, créer des sous-réseaux et configurer des listes de routage et de contrôle d'accès (). ACLs

Avant de créer des instances Amazon DocumentDB, vous devez créer un cluster contenant les instances.

Toutes les classes d'instances ne sont pas prises en charge dans toutes les régions. Le tableau suivant spécifie les classes d'instances prises en charge dans chaque région.

**Note**  
Pour obtenir la liste complète des types d'instances pris en charge par Amazon DocumentDB dans chaque classe d'instance, consultez. [Spécifications des classes d'instances](db-instance-classes.md#db-instance-class-specs)


**Classes d'instances prises en charge par région**  

|  | Classes d'instances | Région | 8 G | R6GD | R6G | R5 | R4 | T4G | T3 | sans serveur | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| USA Est (Ohio) | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 
| USA Est (Virginie du Nord) | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 
| USA Ouest (Oregon) | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 
| Afrique (Le Cap) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Amérique du Sud (São Paulo) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Hong Kong) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Hyderabad) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Malaisie) |  |  | Pris en charge |  |  | Pris en charge | Pris en charge |  | 
| Asie-Pacifique (Mumbai) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Osaka) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge |  | 
| Asie-Pacifique (Séoul) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Sydney) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Jakarta) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge |  | 
| Asie-Pacifique (Melbourne) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge |  | 
| Asie-Pacifique (Singapour) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Asie-Pacifique (Thaïlande) |  |  | Pris en charge |  |  | Pris en charge | Pris en charge |  | 
| Asie-Pacifique (Tokyo) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Canada (Centre) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Francfort) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Zurich) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge |  | 
| Europe (Irlande) | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Londres) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Milan) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Paris) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Espagne) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Europe (Stockholm) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge |  | 
| Mexique (Centre) |  |  | Pris en charge |  |  | Pris en charge | Pris en charge |  | 
| Moyen-Orient (EAU) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Chine (Pékin) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Chine (Ningxia) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| Israël (Tel Aviv) |  |  | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 
| AWS GovCloud (US-Ouest) | Pris en charge | Pris en charge | Pris en charge | Pris en charge |  |  | Pris en charge | Pris en charge | 
| AWS GovCloud (USA Est) |  | Pris en charge | Pris en charge | Pris en charge |  | Pris en charge | Pris en charge | Pris en charge | 

## Régions et zones de disponibilité
<a name="what-is-regions-and-azs"></a>

Les régions et les zones de disponibilité définissent les emplacements physiques de votre cluster et de vos instances.

### Régions
<a name="what-is-regions"></a>

AWS Les ressources de cloud computing sont hébergées dans des centres de données hautement disponibles dans différentes régions du monde (par exemple, en Amérique du Nord, en Europe ou en Asie). Chaque emplacement de centre de données est appelé *région*.

Chaque AWS région est conçue pour être complètement isolée des autres AWS régions. Chaque région contient plusieurs zones de disponibilité. En lançant vos nœuds dans différentes zones de disponibilité, vous pouvez obtenir la plus grande tolérance aux pannes possible. Le schéma suivant montre une vue d'ensemble du fonctionnement des AWS régions et des zones de disponibilité.

![\[Vue générale des AWS régions et des zones de disponibilité d'Amazon DocumentDB.\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/images/docdb-regions-and-azs.png)


### Zones de disponibilité
<a name="what-is-availability-zones"></a>

Chaque AWS région contient plusieurs emplacements distincts appelés *zones de disponibilité*. Chaque zone de disponibilité est conçue pour être isolée des pannes dans les autres zones de disponibilité et pour fournir une connectivité réseau peu coûteuse et à faible latence vers d'autres zones de disponibilité de la même région. En lançant des instances pour un cluster donné dans plusieurs zones de disponibilité, vous pouvez protéger vos applications contre l'événement improbable de l’échec d'une zone de disponibilité.

L'architecture Amazon DocumentDB sépare le stockage et le calcul. Pour la couche de stockage, Amazon DocumentDB réplique six copies de vos données dans trois AWS zones de disponibilité. Par exemple, si vous lancez un cluster Amazon DocumentDB dans une région qui ne prend en charge que deux zones de disponibilité, votre stockage de données sera répliqué de six manières sur trois zones de disponibilité, mais vos instances de calcul ne seront disponibles que dans deux zones de disponibilité.

 Le tableau suivant répertorie le nombre de zones de disponibilité que vous pouvez utiliser dans une instance donnée pour Région AWS provisionner des instances de calcul pour votre cluster.


| Nom de la région | Région | Zones de disponibilité (calcul) | 
| --- | --- | --- | 
| USA Est (Ohio) | `us-east-2` | 3 | 
| USA Est (Virginie du Nord) | `us-east-1` | 6 | 
| USA Ouest (Oregon) | `us-west-2` | 4 | 
| Afrique (Le Cap) | `af-south-1` | 3 | 
| Amérique du Sud (São Paulo) | `sa-east-1` | 3 | 
| Asie-Pacifique (Hong Kong) | `ap-east-1` | 3 | 
| Asie-Pacifique (Hyderabad) | `ap-south-2` | 3 | 
| Asie-Pacifique (Malaisie) | `ap-southeast-5` | 3 | 
| Asie-Pacifique (Mumbai) | `ap-south-1` | 3 | 
| Asie-Pacifique (Osaka) | `ap-northeast-3` | 3 | 
| Asie-Pacifique (Séoul) | `ap-northeast-2` | 4 | 
| Asie-Pacifique (Singapour) | `ap-southeast-1` | 3 | 
| Asie-Pacifique (Sydney) | `ap-southeast-2` | 3 | 
| Asie-Pacifique (Jakarta) | `ap-southeast-3` | 3 | 
| Asie-Pacifique (Melbourne) | `ap-southeast-4` | 3 | 
| Asie-Pacifique (Thaïlande) | `ap-southeast-7` | 3 | 
| Asie-Pacifique (Tokyo) | `ap-northeast-1` | 3 | 
| Canada (Centre) | `ca-central-1` | 3 | 
| Région Chine (Beijing) | `cn-north-1` | 3 | 
| Chine (Ningxia) | `cn-northwest-1` | 3 | 
| Europe (Francfort) | `eu-central-1` | 3 | 
| Europe (Zurich) | `eu-central-2` | 3 | 
| Europe (Irlande) | `eu-west-1` | 3 | 
| Europe (Londres) | `eu-west-2` | 3 | 
| Europe (Milan) | `eu-south-1` | 3 | 
| Europe (Paris) | `eu-west-3` | 3 | 
| Europe (Espagne) | `eu-south-2` | 3 | 
| Europe (Stockholm) | `eu-north-1` | 3 | 
| Mexique (Centre) | `mx-central-1` | 3 | 
| Moyen-Orient (EAU) | `me-central-1` | 3 | 
| Israël (Tel Aviv) | `il-central-1` | 3 | 
| AWS GovCloud (US-Ouest) | `us-gov-west-1` | 3 | 
| AWS GovCloud (USA Est) | `us-gov-east-1` | 3 | 

## Tarification d'Amazon DocumentDB
<a name="docdb-pricing"></a>

Les clusters Amazon DocumentDB sont facturés sur la base des composants suivants : 
+ **Heures d'instance (par heure)** : en fonction de la classe d'instance de l'instance (par exemple,`db.r5.xlarge`). La tarification est indiquée selon une base horaire, mais les factures sont calculées à la seconde près et affichent les heures sous une forme décimale. L'utilisation d'Amazon DocumentDB est facturée par tranches d'une seconde, avec un minimum de 10 minutes. Pour de plus amples informations, veuillez consulter [Gestion des classes d'instances](db-instance-classes.md). 
+ **Demandes d'E/S (pour 1 million de demandes par mois)** : nombre total de I/O demandes de stockage que vous effectuez au cours d'un cycle de facturation.
+ **Stockage de sauvegarde (par GiB par mois)** : le stockage de sauvegarde est le stockage associé aux sauvegardes de base de données automatisées et à tous les instantanés de base de données actifs que vous avez pris. Augmenter votre période de rétention des sauvegardes ou prendre des instantanés de base de données supplémentaires augmente le stockage de sauvegarde consommé par votre base de données. Le stockage de sauvegarde est mesuré en Go par mois. Le tarif par seconde ne s'applique pas. Pour de plus amples informations, veuillez consulter [Sauvegarde et restauration dans Amazon DocumentDB](backup_restore.md). 
+ **Transfert de données (par Go)** : transfert de données vers et depuis votre instance depuis ou vers Internet ou d'autres AWS régions.

Pour obtenir des informations détaillées, consultez la tarification [d'Amazon DocumentDB.](https://aws.amazon.com/documentdb/pricing/)

### Essai gratuit
<a name="free-trial"></a>

Vous pouvez essayer Amazon DocumentDB gratuitement en utilisant l'essai gratuit d'un mois. Pour plus d'informations, consultez la section Essai gratuit dans la [tarification d'Amazon DocumentDB](https://aws.amazon.com/documentdb/pricing/) ou consultez la FAQ relative à l'essai gratuit d'[Amazon DocumentDB](https://aws.amazon.com/documentdb/free-trial/).

## Contrôle
<a name="what-is-monitoring"></a>

Il existe plusieurs façons dont vous pouvez suivre les performances et l'état d'une instance. Vous pouvez utiliser le CloudWatch service gratuit Amazon pour surveiller les performances et l'état d'une instance. Vous pouvez trouver des graphiques de performances sur la console Amazon DocumentDB. Vous pouvez vous abonner aux événements Amazon DocumentDB pour être averti lorsque des modifications sont apportées à une instance, à un instantané, à un groupe de paramètres ou à un groupe de sécurité.

Pour plus d’informations, consultez les ressources suivantes :
+ [Surveillance d'Amazon DocumentDB avec CloudWatch](cloud_watch.md)
+ [Journalisation des appels d'API Amazon DocumentDB avec AWS CloudTrail](logging-with-cloudtrail.md)

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

Vous pouvez interagir avec Amazon DocumentDB de plusieurs manières, notamment le AWS Management Console et le. AWS CLI

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

 AWS Management Console Il s'agit d'une interface utilisateur Web simple. Vous pouvez gérer vos instances et clusters à partir de la console sans programmation requise. [Pour accéder à la console Amazon DocumentDB, connectez-vous à la console Amazon DocumentDB AWS Management Console et ouvrez-la à l'adresse /docdb. https://console.aws.amazon.com](https://console.aws.amazon.com/docdb) 

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

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour gérer vos clusters et instances Amazon DocumentDB. Avec une configuration minimale, vous pouvez commencer à utiliser toutes les fonctionnalités fournies par la console Amazon DocumentDB à partir de votre programme de terminal préféré.
+ Pour l'installer AWS CLI, reportez-vous à la section [Installation de l'interface de ligne de AWS commande](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).
+ Pour commencer à utiliser le AWS CLI pour Amazon DocumentDB, consultez le manuel de [référence de l'interface de ligne de AWS commande pour Amazon DocumentDB](https://docs.aws.amazon.com/cli/latest/reference/docdb/index.html).

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

Pour développer et écrire des applications sur un cluster Amazon DocumentDB, vous pouvez également utiliser les pilotes MongoDB avec Amazon DocumentDB. Pour plus d'informations, consultez l'onglet shell MongoDB dans [Connexion avec TLS activé](connect_programmatically.md#connect_programmatically-tls_enabled) ou. [Connexion avec TLS désactivé](connect_programmatically.md#connect_programmatically-tls_disabled)

## Quelle est la prochaine étape ?
<a name="what-is-next"></a>

Les sections précédentes vous ont présenté les composants d'infrastructure de base proposés par Amazon DocumentDB. Qu'allez-vous faire ensuite ? En fonction de votre situation, consultez l'une des rubriques suivantes pour commencer :
+ Commencez à utiliser Amazon DocumentDB en créant un cluster et une instance à l'aide de. CloudFormation [Démarrage rapide d'Amazon DocumentDB avec CloudFormation](quick_start_cfn.md)
+ Commencez à utiliser Amazon DocumentDB en créant un cluster et une instance en suivant les instructions de notre. [Guide de démarrage](get-started-guide.md)
+ Commencez à utiliser Amazon DocumentDB en créant un cluster élastique en suivant les instructions fournies dans. [Commencez avec les clusters élastiques Amazon DocumentDB](elastic-get-started.md)
+ Migrez votre implémentation MongoDB vers Amazon DocumentDB en suivant les instructions fournies sur [Migration vers Amazon DocumentDB](docdb-migration.md)

# Amazon DocumentDB : comment ça marche
<a name="how-it-works"></a>

Amazon DocumentDB (compatible avec MongoDB) est un service de base de données entièrement géré et compatible avec MongoDB. Avec Amazon DocumentDB, vous pouvez exécuter le même code d'application et utiliser les mêmes pilotes et outils que ceux que vous utilisez avec MongoDB. Amazon DocumentDB est compatible avec MongoDB 3.6, 4.0, 5.0 et 8.0.

**Topics**
+ [Points de terminaison Amazon DocumentDB](#how-it-works.endpoints)
+ [Prise en charge du protocole TLS](#how-it-works.ssl)
+ [Stockage Amazon DocumentDB](#how-it-works.storage)
+ [Réplication Amazon DocumentDB](#how-it-works.replication)
+ [Fiabilité d'Amazon DocumentDB](#how-it-works.reliability)
+ [Options de préférence de lecture](#durability-consistency-isolation)
+ [TTL supprime](#how-it-works.ttl-deletes)
+ [Ressources facturables](#billing)

*Lorsque vous utilisez Amazon DocumentDB, vous commencez par créer un cluster.* Un cluster de bases de données se compose de zéro ou plusieurs instances de bases de données, et d'un volume de cluster qui gère les données de ces instances. Un volume de *cluster Amazon DocumentDB est un volume* de stockage de base de données virtuelle qui couvre plusieurs zones de disponibilité. Chaque zone de disponibilité possède une copie des données du cluster.

Un cluster Amazon DocumentDB se compose de deux composants :
+ **Volume du cluster** : utilise un service de stockage cloud natif pour répliquer les données de six manières sur trois zones de disponibilité, fournissant ainsi un stockage hautement durable et disponible. Un cluster Amazon DocumentDB possède exactement un volume de cluster, qui peut stocker jusqu'à 128 TiB de données.
+ **Instances** : fournissent la puissance de traitement de la base de données, en écrivant des données sur le volume de stockage du cluster et en lisant des données à partir de celui-ci. Un cluster Amazon DocumentDB peut comporter de 0 à 16 instances. 

Les instances jouent l'un de ces deux rôles :
+ **Instance principale** : prend en charge les opérations de lecture et d'écriture et effectue toutes les modifications de données sur le volume du cluster. Chaque cluster Amazon DocumentDB possède une instance principale.
+ **Instance de réplication** : prend en charge uniquement les opérations de lecture. Un cluster Amazon DocumentDB peut contenir jusqu'à 15 répliques en plus de l'instance principale. Le fait de posséder plusieurs réplicas vous permet de répartir les charges de travail en lecture. En outre, en plaçant les réplicas dans des zones de disponibilité distinctes, vous pouvez aussi accroître la disponibilité de votre cluster.

Le schéma suivant illustre la relation entre le volume du cluster, l'instance principale et les répliques dans un cluster Amazon DocumentDB :

![\[Points de terminaison Amazon DocumentDB, y compris les points de terminaison du cluster, du lecteur et de l'instance.\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/images/docdb-endpoint-types.png)


Les instances de cluster n'ont pas besoin d'être de la même classe d'instance, et elles peuvent être allouées et terminées comme on le souhaite. Cette architecture vous permet de dimensionner votre capacité de calcul du cluster indépendamment de son stockage.

Lorsque votre application écrit les données sur l'instance principale, celle-ci exécute une écriture durable sur le volume de cluster. Il réplique ensuite l'état de cette écriture (et non les données) sur chaque réplique active. Les répliques Amazon DocumentDB ne participent pas au traitement des écritures. Les répliques Amazon DocumentDB sont donc avantageuses pour le dimensionnement des lectures. Les lectures à partir des répliques Amazon DocumentDB sont finalement cohérentes avec un décalage de réplication minimal, généralement moins de 100 millisecondes après que l'instance principale a écrit les données. Les lectures à partir des réplicas sont assurées d'être lues dans l'ordre dans lequel elles ont été écrits sur l'instance principale. Le retard du réplica varie en fonction de la fréquence de modification des données, et les périodes de haute activité en écriture peut augmenter le retard du réplica. Pour de plus amples informations, veuillez consulter les métriques `ReplicationLag` dans [Métriques Amazon DocumentDB](cloud_watch.md#cloud_watch-metrics_list). 

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

Amazon DocumentDB propose plusieurs options de connexion pour répondre à un large éventail de cas d'utilisation. Pour vous connecter à une instance dans un cluster Amazon DocumentDB, vous devez spécifier le point de terminaison de l'instance. Un *point de terminaison* est une adresse hôte et un numéro de port, séparés par un point.

Nous vous recommandons de vous connecter à votre cluster à l'aide du point de terminaison du cluster et en mode jeu de réplicas (voir [Connexion à Amazon DocumentDB en tant que jeu de répliques](connect-to-replica-set.md)), sauf si vous avez un cas d'utilisation spécifique pour vous connecter au point de terminaison du lecteur ou au point de terminaison d'une instance. Pour acheminer les demandes vers vos réplicas, choisissez un mode de préférence de lecture de pilote qui optimise la disponibilité en lecture tout en répondant à vos exigences de cohérence en lecture de votre application. La préférence de `secondaryPreferred` lecture active les lectures de réplica et libère l'instance principale pour effectuer plus de travail.

Les points de terminaison suivants sont disponibles à partir d'un cluster Amazon DocumentDB.

### Point de terminaison de cluster
<a name="how-it-works.endpoints.cluster"></a>

Le *point de terminaison du cluster* se connecte à l'instance principale actuelle de votre cluster. Des opérations de lecture et d'écriture peuvent être effectuées à l'aide du point de terminaison du cluster. Un cluster Amazon DocumentDB possède exactement un point de terminaison de cluster.

Le point de terminaison de cluster assure la prise en charge du basculement pour les connexions en lecture/écriture au cluster. En cas de défaillance de l'instance principale actuelle de votre cluster et si ce dernier possède au moins un réplica en lecture actif, le point de terminaison du cluster redirige automatiquement les demandes de connexion vers une nouvelle instance principale. Lorsque vous vous connectez à votre cluster Amazon DocumentDB, nous vous recommandons de vous connecter à votre cluster en utilisant le point de terminaison du cluster et en mode Replica Set (voir[Connexion à Amazon DocumentDB en tant que jeu de répliques](connect-to-replica-set.md)).

Voici un exemple de point de terminaison du cluster Amazon DocumentDB :

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

L'exemple suivant présente une chaîne de connexion utilisant ce point de terminaison de cluster :

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

Pour plus d'informations sur la recherche des points de terminaison d'un cluster, consultez [Trouver les points de terminaison d'un cluster](db-cluster-endpoints-find.md).

### Point de terminaison du lecteur
<a name="how-it-works.endpoints.reader"></a>

Le *point de terminaison du lecteur* équilibre les charges des connexions en lecture seule sur tous les réplicas disponibles dans votre cluster. Un point de terminaison du lecteur de cluster fonctionnera comme le point de terminaison du cluster si vous vous connectez via le `replicaSet` mode, ce qui signifie que dans la chaîne de connexion, le paramètre du jeu de répliques est`&replicaSet=rs0`. Dans ce cas, vous pourrez effectuer des opérations d'écriture sur le primaire. Toutefois, si vous vous connectez au cluster spécifié`directConnection=true`, la tentative d'exécution d'une opération d'écriture via une connexion au point de terminaison du lecteur entraîne une erreur. Un cluster Amazon DocumentDB possède exactement un point de terminaison de lecteur.

Si le cluster ne contient qu'une instance (principale), le point de terminaison du lecteur se connecte à l'instance principale. Lorsque vous ajoutez une instance de réplique à votre cluster Amazon DocumentDB, le point de terminaison du lecteur ouvre des connexions en lecture seule vers la nouvelle réplique une fois celle-ci active.

Voici un exemple de point de terminaison de lecteur pour un cluster Amazon DocumentDB :

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

L'exemple suivant présente une chaîne de connexion utilisant un point de terminaison de lecteur :

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

Le point de terminaison de lecteur équilibre les charges des connexions en lecture seule, pas les demandes de lecture. Si les connexions du point de terminaison du lecteur sont plus largement utilisées que d'autres, vos demandes de lecture risquent de ne pas être correctement équilibrées entre les instances du cluster. Il est recommandé de distribuer les demandes en se connectant au point de terminaison du cluster en tant que jeu de réplicas et en utilisant l'option de préférence de lecture secondaryPreferred. 

Pour plus d'informations sur la recherche des points de terminaison d'un cluster, consultez [Trouver les points de terminaison d'un cluster](db-cluster-endpoints-find.md).

### Point de terminaison d’instance
<a name="how-it-works.endpoints.instance"></a>

Un *point de terminaison d'instance* se connecte à une instance spécifique dans votre cluster. Le point de terminaison d'instance pour l'instance principale actuelle peut être utilisé pour des opérations de lecture et d'écriture. Toutefois, la tentative d'effectuer des opérations d'écriture sur un point de terminaison d'instance pour un réplica en lecture se traduit par une erreur. Un cluster Amazon DocumentDB possède un point de terminaison d'instance par instance active.

Un point de terminaison d'instance exerce un contrôle direct sur une instance spécifique, pour les scénarios où l'utilisation du point de terminaison de cluster ou du point de terminaison de lecteur peut ne pas être appropriée. Un exemple de cas d'utilisation est la mise en service pour une charge de travail périodique des analyses en lecture seule. Vous pouvez provisionner une instance de larger-than-normal réplique, vous connecter directement à la nouvelle instance plus grande avec son point de terminaison, exécuter les requêtes d'analyse, puis mettre fin à l'instance. L'utilisation du point de terminaison d'instance empêche le trafic des analyses d'avoir un effet sur d'autres instances de cluster.

Voici un exemple de point de terminaison d'instance pour une instance unique dans un cluster Amazon DocumentDB :

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

L'exemple suivant présente une chaîne de connexion utilisant ce point de terminaison d'instance :

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

**Note**  
Un rôle de l'instance en tant que principale ou réplica peut changer suite à un événement de basculement. Vos applications ne doivent jamais supposer qu'un point de terminaison d'une instance particulière est le principal. Nous ne recommandons pas la connexion aux points de terminaison d'instance pour les applications en production. Au lieu de cela, nous vous recommandons de vous connecter à votre cluster à l'aide du point de terminaison du cluster et en mode jeu de réplicas (voir [Connexion à Amazon DocumentDB en tant que jeu de répliques](connect-to-replica-set.md)). Pour un contrôle plus avancé de la priorité de basculement d'une instance, consultez [Comprendre la tolérance aux pannes des clusters Amazon DocumentDB](db-cluster-fault-tolerance.md). 

Pour plus d'informations sur la recherche des points de terminaison d'un cluster, consultez [Trouver le point de terminaison d'une instance](db-instance-endpoint-find.md).

### Mode Replica Set
<a name="replica-set-mode"></a>

Vous pouvez vous connecter à votre point de terminaison de cluster Amazon DocumentDB en mode jeu de répliques en spécifiant le nom du jeu de répliques. `rs0` La connexion en mode Jeu de réplicas fournit la capacité de spécifier les options Problème de lecture, Problème d'écriture et Préférences de lecture. Pour de plus amples informations, veuillez consulter [Cohérence en lecture](#durability-consistency-isolation.read-consistency).

Voici un exemple de chaîne de connexion se connectant en mode Jeu de réplicas :

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

Lorsque vous vous connectez en mode jeu de répliques, votre cluster Amazon DocumentDB apparaît à vos pilotes et clients sous la forme d'un jeu de répliques. Les instances ajoutées et supprimées de votre cluster Amazon DocumentDB sont automatiquement reflétées dans la configuration du jeu de répliques.

Chaque cluster Amazon DocumentDB se compose d'un seul ensemble de répliques portant le nom par défaut. `rs0` Le nom du jeu de réplicas ne peut pas être modifié.

La connexion au point de terminaison du cluster en mode Jeu de réplicas est la méthode recommandée pour une utilisation générale.

**Note**  
Toutes les instances d'un cluster Amazon DocumentDB écoutent les connexions sur le même port TCP.

## Prise en charge du protocole TLS
<a name="how-it-works.ssl"></a>

Pour plus d'informations sur la connexion à Amazon DocumentDB à l'aide du protocole TLS (Transport Layer Security), consultez. [chiffrement des données en transit](security.encryption.ssl.md)

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

Les données Amazon DocumentDB sont stockées dans un *volume de cluster*, qui est un volume virtuel unique utilisant des disques SSD ()SSDs. Un volume de cluster se compose de six copies de vos données, qui sont répliquées automatiquement sur plusieurs zones de disponibilité en une seule Région AWS. Cette réplication garantit que vos données sont hautement durables, avec une possibilité moindre de perte des données. Elle permet également de vous assurer que votre cluster est plus disponible pendant un basculement, car les copies de vos données existent déjà dans d'autres zones de disponibilité. Ces copies peuvent continuer à envoyer des demandes de données aux instances de votre cluster Amazon DocumentDB. 

### Facturation du stockage des données
<a name="how-it-works-storage-billing"></a>

Amazon DocumentDB augmente automatiquement la taille d'un volume de cluster à mesure que la quantité de données augmente. Un volume de cluster Amazon DocumentDB peut atteindre une taille maximale de 128 TiB ; toutefois, seul l'espace que vous utilisez dans un volume de cluster Amazon DocumentDB vous est facturé. À partir d'Amazon DocumentDB 4.0, lorsque des données sont supprimées, par exemple en supprimant une collection ou un index, l'espace global alloué diminue d'une quantité comparable. Ainsi, vous pouvez réduire les frais de stockage en supprimant les collections, les index et les bases de données dont vous n'avez plus besoin. Dans Amazon DocumentDB version 3.6, le volume du cluster peut réutiliser l'espace libéré lorsque vous supprimez des données, mais la taille du volume lui-même ne diminue jamais. Par conséquent, dans la version 3.6, il est possible que vous ne constatiez aucun changement de stockage lorsque vous supprimez une collection ou un index, même si l'espace libéré est réutilisé. 

**Note**  
Avec Amazon DocumentDB 3.6, les coûts de stockage sont basés sur le « seuil maximum » de stockage (le montant maximum alloué au cluster Amazon DocumentDB à un moment donné). Vous pouvez gérer les coûts en évitant les pratiques ETL qui créent de gros volumes d'informations temporaires ou qui chargent de gros volumes de nouvelles données avant de supprimer les anciennes données inutiles. Si la suppression de données d'un cluster Amazon DocumentDB se traduit par une quantité importante d'espace alloué mais inutilisé, la réinitialisation du seuil maximum nécessite d'effectuer un vidage logique des données et de les restaurer sur un nouveau cluster, à l'aide d'un outil tel que ou. `mongodump` `mongorestore` Le fait de créer et de restaurer un instantané n'a pas pour effet de réduire le stockage alloué, car la structure physique du stockage sous-jacent reste inchangée dans l'instantané restauré.

**Note**  
L'utilisation d'utilitaires tels que `mongodump` et `mongorestore` entraîne des I/O frais en fonction de la taille des données lues et écrites sur le volume de stockage.

[Pour plus d'informations sur le stockage et la tarification des données Amazon DocumentDB, consultez la section I/O Tarification et tarification [d'Amazon DocumentDB (compatible avec MongoDB](https://aws.amazon.com/documentdb/pricing)). FAQs](https://aws.amazon.com/documentdb/faqs/#Pricing)

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

Dans un cluster Amazon DocumentDB, chaque instance de réplique expose un point de terminaison indépendant. Ces points de terminaison de réplica fournissent l'accès en lecture seule aux données du volume de cluster. Ils vous permettent de dimensionner la charge de travail en lecture pour vos données sur plusieurs instances répliquées. Ils contribuent également à améliorer les performances de lecture des données et à augmenter la disponibilité des données dans votre cluster Amazon DocumentDB. Les répliques Amazon DocumentDB sont également des cibles de basculement et sont rapidement promues en cas de défaillance de l'instance principale de votre cluster Amazon DocumentDB. 

## Fiabilité d'Amazon DocumentDB
<a name="how-it-works.reliability"></a>

Amazon DocumentDB est conçu pour être fiable, durable et tolérant aux pannes. (Pour améliorer la disponibilité, vous devez configurer votre cluster Amazon DocumentDB de manière à ce qu'il dispose de plusieurs instances de réplication dans différentes zones de disponibilité.) Amazon DocumentDB inclut plusieurs fonctionnalités automatiques qui en font une solution de base de données fiable. 

### Réparation automatique du stockage
<a name="how-it-works.reliability.storage-auto-repair"></a>

Amazon DocumentDB conserve plusieurs copies de vos données dans trois zones de disponibilité, ce qui réduit considérablement le risque de perte de données en cas de panne de stockage. Amazon DocumentDB détecte automatiquement les défaillances dans le volume du cluster. Lorsqu'un segment d'un volume de cluster tombe en panne, Amazon DocumentDB répare immédiatement le segment. Il utilise les données des autres volumes qui composent le volume de cluster pour garantir que les données du segment réparé sont actives. Amazon DocumentDB évite ainsi les pertes de données et réduit le besoin d'effectuer une point-in-time restauration pour récupérer après une défaillance d'instance. 

### Préparation du cache « survivable »
<a name="how-it-works.reliability.survivable-cache-warming"></a>

Amazon DocumentDB gère son cache de pages dans le cadre d'un processus distinct de celui de la base de données afin que le cache de pages puisse survivre indépendamment de la base de données. Dans l'éventualité peu probable d'une défaillance de la base de données, le cache de page reste en mémoire. Cela garantit que le groupe de tampons est préparé avec l'état le plus courant au redémarrage de la base de données.

### Récupération sur incident
<a name="how-it-works.reliability.crash-recovery"></a>

Amazon DocumentDB est conçu pour effectuer une restauration quasi instantanée en cas de panne et pour continuer à diffuser les données de votre application. Amazon DocumentDB effectue une restauration après incident de manière asynchrone sur des threads parallèles afin que votre base de données soit ouverte et disponible presque immédiatement après un crash. 

### Gouvernance des ressources
<a name="how-it-works.reliability.resource-governance"></a>

Amazon DocumentDB protège les ressources nécessaires à l'exécution des processus critiques du service, tels que les bilans de santé. Pour ce faire, et lorsqu'une instance est confrontée à une pression de mémoire élevée, Amazon DocumentDB limite les demandes. Par conséquent, certaines opérations peuvent être mises en file d'attente pour attendre que la pression sur la mémoire diminue. Si la pression sur la mémoire persiste, les opérations en file d'attente peuvent expirer. Vous pouvez vérifier si le service ralentit les opérations en raison d'un manque de mémoire à l'aide des CloudWatch mesures suivantes :`LowMemThrottleQueueDepth`,`LowMemThrottleMaxQueueDepth`,`LowMemNumOperationsThrottled`. `LowMemNumOperationsTimedOut` Pour plus d'informations, consultez la section Surveillance d'Amazon DocumentDB avec. CloudWatch Si vous constatez une pression de mémoire soutenue sur votre instance en raison de ces LowMem CloudWatch indicateurs, nous vous conseillons de la dimensionner afin de fournir de la mémoire supplémentaire pour votre charge de travail.

## Options de préférence de lecture
<a name="durability-consistency-isolation"></a>

Amazon DocumentDB utilise un service de stockage partagé cloud natif qui réplique les données six fois sur trois zones de disponibilité afin de garantir des niveaux de durabilité élevés. Amazon DocumentDB ne repose pas sur la réplication de données vers plusieurs instances pour garantir la durabilité. Les données de votre cluster sont durable qu'elles contiennent une seule instance ou 15 instances.

**Topics**
+ [Durabilité de l'écriture](#durability-consistency-isolation.write-durability)
+ [Lire l'isolation](#durability-consistency-isolation.read-isolation)
+ [Cohérence en lecture](#durability-consistency-isolation.read-consistency)
+ [Haute disponibilité](#durability-consistency-isolation.high-availability)
+ [Dimensionnement des lectures](#durability-consistency-isolation.scaling-reads)

### Durabilité de l'écriture
<a name="durability-consistency-isolation.write-durability"></a>

Amazon DocumentDB utilise un système de stockage unique, distribué, tolérant aux pannes et autoréparateur. Ce système réplique six copies (V=6) de vos données dans trois zones de disponibilité pour garantir une AWS disponibilité et une durabilité élevées. Lors de l'écriture de données, Amazon DocumentDB s'assure que toutes les écritures sont enregistrées de manière durable sur la majorité des nœuds avant de confirmer l'écriture au client. Si vous utilisez un jeu de répliques MongoDB à trois nœuds, l'utilisation d'un souci d'écriture `{w:3, j:true}` de permettrait d'obtenir la meilleure configuration possible par rapport à Amazon DocumentDB.

Les écritures vers un cluster Amazon DocumentDB doivent être traitées par l'instance d'écriture du cluster. Toute tentative d'écriture dans un lecteur entraîne une erreur. Une écriture confirmée depuis une instance principale Amazon DocumentDB est durable et ne peut pas être annulée. Amazon DocumentDB est très durable par défaut et ne prend pas en charge les options d'écriture non durables. Vous ne pouvez pas modifier le niveau de durabilité (c'est-à-dire, le problème d'écriture). Amazon DocumentDB ignore w=anything et affiche effectivement w : 3 et j : true. Vous ne pouvez pas le réduire.

Le stockage et le calcul étant séparés dans l'architecture Amazon DocumentDB, un cluster avec une seule instance est extrêmement durable. La durabilité est gérée au niveau de la couche de stockage. Par conséquent, un cluster Amazon DocumentDB avec une seule instance et un cluster avec trois instances atteint le même niveau de durabilité. Vous pouvez configurer votre cluster pour votre cas d'utilisation spécifique tout en fournissant une durabilité élevée pour vos données.

Les écritures vers un cluster Amazon DocumentDB sont atomiques au sein d'un même document. 

Amazon DocumentDB ne prend pas en charge `wtimeout` cette option et ne renverra pas d'erreur si une valeur est spécifiée. Il est garanti que les écritures sur l'instance Amazon DocumentDB principale ne seront pas bloquées indéfiniment.

### Lire l'isolation
<a name="durability-consistency-isolation.read-isolation"></a>

Les lectures effectuées à partir d'une instance Amazon DocumentDB ne renvoient que des données durables avant le début de la requête. Les lectures ne renvoient jamais des données modifiées après la début de l'exécution par la requête et des lectures sales ne sont pas possibles, quelles que soient les circonstances.

### Cohérence en lecture
<a name="durability-consistency-isolation.read-consistency"></a>

Les données lues depuis un cluster Amazon DocumentDB sont durables et ne seront pas annulées. Vous pouvez modifier la cohérence de lecture pour les lectures Amazon DocumentDB en spécifiant la préférence de lecture pour la demande ou la connexion. Amazon DocumentDB ne prend pas en charge les options de lecture non durables.

Les lectures effectuées à partir de l'instance principale d'un cluster Amazon DocumentDB sont parfaitement cohérentes dans des conditions de fonctionnement normales et sont read-after-write cohérentes. Si un basculement se produit entre la lecture et l'écriture ultérieure, le système peut brièvement renvoyer une lecture qui n'est pas fortement cohérente. Toutes les lectures à partir d'un réplica en lecture présentent une cohérence éventuelle et renvoient les données dans le même ordre, et souvent avec une latence de réplica inférieure à 100 millisecondes.

#### Préférences de lecture d'Amazon DocumentDB
<a name="durability-consistency-isolation.read-preferences"></a>

Amazon DocumentDB prend en charge la définition d'une option de préférence de lecture uniquement lors de la lecture de données depuis le point de terminaison du cluster en mode Replica Set. La définition d'une option de préférence de lecture affecte la manière dont votre client ou pilote MongoDB achemine les demandes de lecture vers les instances de votre cluster Amazon DocumentDB. Vous pouvez définir des options de préférence de lecture pour une requête spécifique, ou en tant qu'option générale dans votre pilote MongoDB. (Consultez votre client ou la documentation du pilote pour obtenir des instructions sur la façon de définir une option de préférence de lecture).

Si votre client ou pilote ne se connecte pas à un point de terminaison du cluster Amazon DocumentDB en mode Replica Set, le résultat de la spécification d'une préférence de lecture n'est pas défini.

Amazon DocumentDB ne prend pas en charge la définition de *jeux de balises* comme préférence de lecture.

**Options de préférences de lecture prises en charge**
+ **`primary`**—La spécification d'une préférence de `primary` lecture permet de garantir que toutes les lectures sont acheminées vers l'instance principale du cluster. Si l'instance principale n'est pas disponible, l'opération de lecture échoue. Une préférence de `primary` lecture garantit la read-after-write cohérence et convient aux cas d'utilisation qui privilégient la read-after-write cohérence par rapport à la haute disponibilité et à la mise à l'échelle de lecture.

  L'exemple suivant spécifie une préférence de lecture « `primary` » :

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

   
+ **`primaryPreferred`**—La spécification d'une préférence de `primaryPreferred` lecture achemine les lectures vers l'instance principale dans le cadre d'un fonctionnement normal. En cas de basculement principal, le client achemine les demandes vers un réplica. Une préférence de `primaryPreferred` lecture garantit read-after-write la cohérence pendant le fonctionnement normal et, en fin de compte, la cohérence des lectures lors d'un événement de basculement. Une préférence de `primaryPreferred` lecture convient aux cas d'utilisation qui privilégient la read-after-write cohérence par rapport à la mise à l'échelle de lecture, mais qui nécessitent tout de même une haute disponibilité.

  L'exemple suivant spécifie une préférence de lecture « `primaryPreferred` » :

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

   
+ **`secondary`**—La spécification d'une préférence de `secondary` lecture garantit que les lectures ne sont acheminées que vers une réplique, jamais vers l'instance principale. S'il n'y a pas d'instances de réplica dans un cluster, la demande de lecture échoue. Une préférence de `secondary` lecture aboutit à des lectures cohérentes et convient aux cas d'utilisation qui privilégient le débit d'écriture de l'instance principale par rapport à la haute disponibilité et à la read-after-write cohérence.

  L'exemple suivant spécifie une préférence de lecture « `secondary` » :

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

   
+ **`secondaryPreferred`**—La spécification d'une préférence de `secondaryPreferred` lecture garantit que les lectures sont acheminées vers une réplique en lecture lorsqu'une ou plusieurs répliques sont actives. S'il n'y a pas d'instances de réplica actives dans un cluster, la demande de lecture est acheminé vers l'instance principale. Une préférence de lecture « `secondaryPreferred` » génère des lectures cohérentes à terme (eventually consistent) lorsque la lecture est traitée par un réplica en lecture. Cela permet d'obtenir de la read-after-write cohérence lorsque la lecture est prise en charge par l'instance principale (sauf en cas de basculement). Une préférence de `secondaryPreferred` lecture convient aux cas d'utilisation qui privilégient le dimensionnement de la lecture et la haute disponibilité plutôt que la read-after-write cohérence.

  L'exemple suivant spécifie une préférence de lecture « `secondaryPreferred` » :

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

   
+ **`nearest`**—La spécification d'une préférence de `nearest` lecture achemine les lectures uniquement en fonction de la latence mesurée entre le client et toutes les instances du cluster Amazon DocumentDB. Une préférence de lecture « `nearest` » génère des lectures cohérentes à terme (eventually consistent) lorsque la lecture est traitée par un réplica en lecture. Cela permet d'obtenir de la read-after-write cohérence lorsque la lecture est prise en charge par l'instance principale (sauf en cas de basculement). Une préférence de `nearest` lecture convient aux cas d'utilisation qui privilégient la latence de lecture la plus faible possible et la haute disponibilité plutôt que la read-after-write cohérence et la mise à l'échelle de lecture.

  L'exemple suivant spécifie une préférence de lecture « `nearest` » :

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

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

Amazon DocumentDB prend en charge les configurations de clusters à haute disponibilité en utilisant des répliques comme cibles de basculement pour l'instance principale. En cas de défaillance de l'instance principale, une réplique Amazon DocumentDB est promue en tant que nouvelle instance principale, avec une brève interruption au cours de laquelle les demandes de lecture et d'écriture adressées à l'instance principale échouent, sauf exception.

Si votre cluster Amazon DocumentDB n'inclut aucune réplique, l'instance principale est recréée en cas de panne. Cependant, la promotion d'une réplique Amazon DocumentDB est beaucoup plus rapide que la recréation de l'instance principale. Nous vous recommandons donc de créer une ou plusieurs répliques Amazon DocumentDB comme cibles de basculement.

Les réplicas qui sont destinés à être utilisés comme cibles de basculement doivent appartenir à la même classe d'instance que l'instance principale. Ils doivent être mis en service dans des zones de disponibilité autres que celle de l'instance principale. Vous pouvez décider les réplicas préférés comme cibles de basculement. Pour connaître les meilleures pratiques relatives à la configuration d'Amazon DocumentDB pour une haute disponibilité, consultez. [Comprendre la tolérance aux pannes des clusters Amazon DocumentDB](db-cluster-fault-tolerance.md)

### Dimensionnement des lectures
<a name="durability-consistency-isolation.scaling-reads"></a>

Les répliques Amazon DocumentDB sont idéales pour le dimensionnement des lectures. Elles sont entièrement dédiées aux opérations de lecture sur votre volume de cluster, ce qui signifie que les réplicas ne traitent pas les écritures. La réplication de données se produit au sein du volume de cluster et non pas entre les instances. Par conséquent, les ressources de chaque réplica sont dédiées au traitement de vos requêtes, et non à la réplication et à l'écriture des données.

Si votre application exige plus de capacité de lecture, vous pouvez rapidement ajouter un réplica à votre cluster (généralement en moins de 10 minutes). Si vos exigences en matière de capacités en lecture diminuent, vous pouvez supprimer les réplicas devenus inutiles. Avec les répliques Amazon DocumentDB, vous ne payez que pour la capacité de lecture dont vous avez besoin.

Amazon DocumentDB prend en charge le dimensionnement de lecture côté client grâce à l'utilisation des options de préférence de lecture. Pour de plus amples informations, veuillez consulter [Préférences de lecture d'Amazon DocumentDB](#durability-consistency-isolation.read-preferences).

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

Les suppressions depuis une zone d'index TTL via un processus en arrière-plan sont effectuées dans la mesure du possible et ne sont pas garanties au cours d'une période spécifique. Des facteurs tels que la taille des instances, l'utilisation de ressources des instances, la taille de document et le débit global peuvent affecter le déroulement d'une suppression TTL.

Lorsque le moniteur TTL supprime vos documents, chaque suppression entraîne des coûts d'E/S, ce qui augmente le montant de votre facture. Si le débit et les taux de suppression TTL augmentent, vous devez vous attendre à une augmentation de votre facture en raison de l'utilisation accrue des E/S.

Lorsque vous créez un index TTL sur une collection existante, vous devez supprimer tous les documents expirés avant de créer l'index. L'implémentation TTL actuelle est optimisée pour supprimer une petite partie des documents de la collection, ce qui est typique si le TTL a été activé sur la collection dès le début, et peut entraîner des IOPS plus élevées que nécessaire si un grand nombre de documents doivent être supprimés en une seule fois.

Si vous ne souhaitez pas créer d'index TTL pour supprimer des documents, vous pouvez segmenter les documents en collections en fonction du temps et simplement supprimer ces collections lorsque les documents ne sont plus nécessaires. Par exemple : vous pouvez créer une collection par semaine et la supprimer sans encourir de frais d'E/S. Cela peut s'avérer nettement plus rentable que l'utilisation d'un indice TTL.

## Ressources facturables
<a name="billing"></a>

### Identification des ressources Amazon DocumentDB facturables
<a name="billing.identifying-billable-resources"></a>

En tant que service de base de données entièrement géré, Amazon DocumentDB facture les instances, le stockage, les E/S, les sauvegardes et le transfert de données. Pour plus d'informations, consultez la tarification [d'Amazon DocumentDB (compatible avec MongoDB](https://aws.amazon.com/documentdb/pricing/)). 

Pour découvrir les ressources facturables présentes sur votre compte et éventuellement les supprimer, vous pouvez utiliser le AWS Management Console ou AWS CLI.

#### À l'aide du AWS Management Console
<a name="billing.identifying-billable-resources-con"></a>

À l'aide de AWS Management Console, vous pouvez découvrir les clusters, les instances et les instantanés Amazon DocumentDB que vous avez provisionnés pour un usage donné. Région AWS

**Pour découvrir des clusters, instances et instantanés**

1. [Connectez-vous à la AWS Management Console console Amazon DocumentDB et ouvrez-la à https://console.aws.amazon.com l'adresse /docdb.](https://console.aws.amazon.com/docdb)

1. Pour découvrir les ressources facturables dans une région autre que votre région par défaut, dans le coin supérieur droit de l'écran, choisissez Région AWS celle que vous souhaitez rechercher.   
![\[La région de Virginie du Nord dans le sélecteur de région.\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/images/db-cluster-console-region.png)

1. Dans le panneau de navigation, choisissez le type de ressource facturable qui vous intéresse : **Clusters**, **Instances** ou **Snapshots (Instantanés)**.  
![\[Clusters, instances et instantanés dans le volet de navigation.\]](http://docs.aws.amazon.com/fr_fr/documentdb/latest/developerguide/images/db-navigation-pane-clusters-instances-snapshots.png)

1. Tous vos clusters,instances ou instantanés mis en service pour la région sont répertoriés dans le panneau droit. Vous serez facturé pour les clusters, les instances et les instantanés.

#### À l'aide du AWS CLI
<a name="billing.identifying-billable-resources-cli"></a>

À l'aide de AWS CLI, vous pouvez découvrir les clusters, les instances et les instantanés Amazon DocumentDB que vous avez provisionnés pour un usage donné. Région AWS

**Pour découvrir des clusters et des instances**  
Le code suivant répertorie tous vos clusters et instances pour la région spécifiée. Si vous souhaitez rechercher des clusters et des instances dans votre région par défaut, vous pouvez omettre le paramètre `--region`.

**Example**  
Pour Linux, macOS ou Unix :  

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

```
aws docdb describe-db-clusters ^
    --region us-east-1 ^
    --query 'DBClusters[?Engine==`docdb`]' | ^
       grep -e "DBClusterIdentifier" -e "DBInstanceIdentifier"
```
Le résultat de cette opération ressemble à ceci.  

```
"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",
```
**Pour découvrir des instantanés**  
Le code suivant répertorie tous vos instantanés pour la région spécifiée. Si vous souhaitez rechercher des instantanés dans votre région par défaut, vous pouvez omettre le paramètre `--region`.
Pour Linux, macOS ou Unix :  

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

```
aws docdb describe-db-cluster-snapshots ^
  --region us-east-1 ^
  --query 'DBClusterSnapshots[?Engine==`docdb`].[DBClusterSnapshotIdentifier,SnapshotType]'
```
Le résultat de cette opération ressemble à ceci.  

```
[
    [
        "rds:docdb-2019-01-09-23-55-38-2019-02-13-00-06",
        "automated"
    ],
    [
        "test-snap",
        "manual"
    ]
]
```
Il vous suffit de supprimer les instantanés `manual`. Les instantanés`Automated` sont supprimés lorsque vous supprimez le cluster.

### Supprimer les ressources facturables indésirables
<a name="billing.deleting-billable-resources"></a>

Pour supprimer un cluster, vous devez d'abord supprimer toutes les instances du cluster.
+ Pour supprimer des instances, consultez [Suppression d'une instance Amazon DocumentDB](db-instance-delete.md). 
**Important**  
Même si vous supprimez les instances d'un cluster, vous êtes encore facturé pour l'utilisation du stockage et des sauvegardes associée à ce cluster. Pour arrêter tous les frais, vous devez également supprimer votre cluster et les instantanés manuels.
+ Pour supprimer des clusters, consultez [Suppression d'un cluster Amazon DocumentDB](db-cluster-delete.md). 
+ Pour supprimer des instantanés manuels, veuillez consulter [Suppression d'un instantané de cluster](backup_restore-delete_cluster_snapshot.md). 

# Qu'est-ce qu'une base de données documentaire ?
<a name="what-is-document-db"></a>

Certains développeurs ne considèrent pas leur modèle de données en termes de lignes et de colonnes normalisées. En général, dans le niveau de l'application, les données sont représentées comme un document JSON parce qu'il est plus intuitif pour les développeurs de considérer leur modèle de données comme un document. 

La popularité des bases de données de documents s'est accrue parce qu'elles permettent de conserver des données dans une base de données en utilisant le même format de modèle de document qu'on utilise dans le code d'application. Les bases de données documentaires sont puissantes et intuitives APIs pour un développement flexible et agile.

**Topics**
+ [Cas d’utilisation](document-database-use-cases.md)
+ [Comprendre les documents](document-database-documents-understanding.md)
+ [Utilisation de documents](document-database-working-with-documents.md)

# Cas d'utilisation de bases de données documentaires
<a name="document-database-use-cases"></a>

Selon votre cas d'utilisation, vous aurez besoin d'une base de données de documents ou d'un autre type de base de données pour la gestion de vos données. Les bases de données de documents sont utiles pour les charges de travail qui nécessitent un schéma flexible et rapide, et un développement itératif. Voici quelques exemples de cas d'utilisation pour lesquels les bases de données de documents peuvent offrir des avantages significatifs :

**Topics**
+ [Profils utilisateurs](#document-databases-use-cases.user-profiles)
+ [Big data en temps réel](#document-databases-use-cases.big-data)
+ [Gestion de contenu](#document-databases-use-cases.content-management)

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

Les bases de données de documents présentent un schéma flexible, elles peuvent donc stocker des documents qui ont différents attributs et valeurs de données. Les bases de données de documents constituent une solution pratique pour les profils en ligne dans lesquels différents utilisateurs fournissent différents types d'informations. L'utilisation d'une base de données de documents, vous permet de stocker efficacement le profil de chaque utilisateur en stockant uniquement les attributs qui sont spécifiques à chacun d'eux.

Supposons qu'un utilisateur choisisse d'ajouter ou de supprimer des informations dans son profil. Dans ce cas, son document peut être facilement remplacé par une version mise à jour qui contient des attributs et des données récemment ajoutés ou nouvellement omises. Les bases de données de documents gèrent facilement ce niveau d'individualité et de fluidité.

## Big data en temps réel
<a name="document-databases-use-cases.big-data"></a>

Historiquement, la capacité d'extraire des informations à partir de données opérationnelles était entravée par le fait que les bases de données opérationnelles et les bases de données analytiques étaient maintenues dans des environnements différents, opérationnels et respectivement. business/reporting Dans un environnement professionnel très compétitif, la capacité d'extraire des informations opérationnelles en temps réel est critique. En utilisant des bases de données de documents, une entreprise peut stocker et gérer des données opérationnelles à partir de n'importe quelle source et envoyer simultanément les données vers le moteur de BI choisi pour l'analyse. Il n'est pas nécessaire d'avoir deux environnements.

## Gestion de contenu
<a name="document-databases-use-cases.content-management"></a>

Pour gérer de manière efficace le contenu, vous devez être en mesure de collecter et regrouper du contenu à partir d'une variété de sources, pour ensuite le délivrer au client. Grâce à leur schéma flexible, les bases de données de documents sont parfaites pour collecter et stocker tous les types de données. Vous pouvez les utiliser pour créer et intégrer de nouveaux types de contenu, y compris le contenu généré par l'utilisateur, notamment des images, des commentaires et des vidéos.

# Comprendre les documents
<a name="document-database-documents-understanding"></a>

Les bases de données documentaires sont utilisées pour stocker des données semi-structurées sous forme de document, plutôt que de normaliser les données dans plusieurs tables, chacune ayant une structure unique et fixe, comme dans une base de données relationnelle. Les documents stockés dans une base de données de documents utilisent des paires clé-valeur imbriquées pour fournir la structure ou le schéma du document. Cependant, différents types de documents peuvent être stockés dans une même base de données de documents, pour satisfaire ainsi à l'exigence de traitement des données similaires dans des formats différents. Par exemple, chaque document étant auto-descriptif, les documents codés au format JSON pour une boutique en ligne qui sont décrits dans la rubrique [Exemples de documents dans une base de données de documents](#document-database-documents) peuvent être stockés dans la même base de données de documents. 

**Topics**
+ [Terminologie SQL et terminologie non relationnelle](#document-database-sql-vs-nosql-terms)
+ [Des documents simples](#document-database-documents-simple)
+ [Documents intégrés](#document-database-documents-embeded)
+ [Exemples de documents dans une base de données de documents](#document-database-documents)
+ [Comprendre la normalisation dans une base de données de documents](#document-database-normalization)

## Terminologie SQL et terminologie non relationnelle
<a name="document-database-sql-vs-nosql-terms"></a>

Le tableau suivant compare la terminologie utilisée par certaines bases de données de documents (MongoDB) avec la terminologie utilisée par les bases de données SQL.


|  SQL  |  MongoDB  | 
| --- | --- | 
|  Table  |  Collection  | 
|  Row  |  Document  | 
|  Colonne  |  Champ  | 
|  Clé primaire  |  ObjectId  | 
|  Index  |  Index  | 
|  Afficher  |  Afficher  | 
|  Table ou objet imbriqué  |  Document intégré  | 
|  Tableau  |  Tableau  | 

## Des documents simples
<a name="document-database-documents-simple"></a>

Tous les documents d'une base de données de documents sont auto-descriptifs. Cette documentation utilise des documents au format JSON, mais vous pouvez utiliser d'autres moyens de codage.

Un document simple possède un ou plusieurs champs qui se trouvent tous au même niveau dans le document. Dans l'exemple suivant, les champs `SSN`, `LName`, `FName`, `DOB`, `Street`, `City`, `State-Province`, `PostalCode`, et `Country` sont tous des parents dans le document.

```
{
   "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"
}
```

Lorsque les informations sont organisées dans un document simple, chaque champ est gérée de manière individuelle. Pour récupérer l'adresse d'une personne, vous devez extraire `Street`, `City`, `State-Province`, `PostalCode`, et `Country` comme des éléments de données individuels.

## Documents intégrés
<a name="document-database-documents-embeded"></a>

Un document complexe organise ses données en créant des documents intégrés dans le document. Les documents intégrés permettent de gérer les données au sein de regroupements et en tant qu'éléments de données individuels, selon ce qui est le plus efficace dans un cas donné. En utilisant l'exemple précédent, vous pouvez intégrer un document `Address` dans le document principal. Cette action se traduit par la structure de document suivante :

```
{
   "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" 
   }
}
```

Vous pouvez désormais accéder aux données du document sous forme de champs individuels (`"SSN":`), de document intégré (`"Address":`) ou de membre d'un document intégré (`"Address":{"Street":}`).

## Exemples de documents dans une base de données de documents
<a name="document-database-documents"></a>

Comme indiqué précédemment, chaque document d'une base de données documents est auto-descriptif, par conséquent la structure des documents au sein d'une base de données de documents peut être différente de l'un à l'autre. Les deux documents suivants, l'un pour un livre et l'autre pour une revue, ont des structures différentes. Cependant, tous les deux peuvent se trouver dans la même base de données de documents.

Voici un exemple de document de livre :

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

Voici un exemple de document de revue avec deux articles :

```
{
    "_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"
}
```

Comparez la structure de ces deux documents. Avec une base de données relationnelle, vous devez soit séparer les tables « périodique » et « livres », soit avoir une seule table avec des champs non utilisés, par exemple « Publication », « Numéro », « Articles » et « MI », en tant que valeurs `null`. Les bases de données de documents sont semi-structurées, chaque document définit sa propre structure, par conséquent ces deux documents peuvent coexister dans la même base de données de documents sans champs `null`. Les bases de données de documents facilitent le traitement de données fragmentées.

Le développement à partir d'une base de données de documents permet un développement rapide et itératif. En effet, vous pouvez modifier la structure des données d'un document de manière dynamique, sans devoir modifier le schéma pour la totalité de la collection. Les bases de données de documents sont idéales pour le développement souple et les environnements dynamiques et évolutifs.

## Comprendre la normalisation dans une base de données de documents
<a name="document-database-normalization"></a>

Les bases de données de documents ne sont pas normalisées. Les données trouvées dans un document peut être répétées dans un autre document. De plus, il peut exister certaines divergences de données entre les documents. Par exemple, prenez le scénario dans lequel vous effectuez un achat dans une boutique en ligne et tous les détails de vos achats sont stockés dans un seul document. Le document peut ressembler au document JSON suivant :

```
{
    "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" 
}
```

Toutes ces informations sont stockées en tant que document dans une collection de transactions. Par la suite, vous vous rendez compte que vous avez oublié d'acheter un élément. Par conséquent, vous vous connectez à la même boutique et vous effectuez un autre achat, lequel est également stocké en tant qu'un autre document dans la collection de transactions.

```
{
    "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" 
}
```

Notez la redondance entre ces deux documents : votre nom et votre identifiant d'acheteur (et, si vous avez utilisé la même carte de crédit, les informations de votre carte de crédit). C'est acceptable, car le stockage est peu coûteux, et chaque document enregistre complètement une seule transaction que l'on peut récupérer rapidement avec une simple requête clé-valeur qui ne nécessite pas de jonctions.

Il existe également une divergence apparente entre les deux documents : les informations de votre carte de crédit. Il s'agit uniquement d'une différence apparente, car vous avez probablement utilisé une autre carte de paiement différente pour chaque achat. Chaque document est approprié pour la transaction qu'il documente.

# Utilisation de documents
<a name="document-database-working-with-documents"></a>

En tant que base de données de documents, Amazon DocumentDB facilite le stockage, l'interrogation et l'indexation des données JSON. Dans Amazon DocumentDB, une collection est analogue à une table dans une base de données relationnelle, sauf qu'aucun schéma unique n'est appliqué à tous les documents. Les collections vous permettent de regrouper des documents similaires, tout en les conservant tous dans la même base de données, sans que leur structure doive être identique.

En utilisant les documents d'exemple des rubriques précédentes, il est probable que vous ayez des collections pour `reading_material` et `office_supplies`. Votre logiciel est responsable d'associer un document avec la collection à laquelle il appartient.

Les exemples suivants utilisent l'API MongoDB pour montrer comment ajouter, interroger, mettre à jour et supprimer des documents.

**Topics**
+ [Ajouter des documents](#document-database-adding-documents)
+ [Interrogation de documents](#document-database-queries)
+ [Mettre à jour des documents](#document-database-updating)
+ [Supprimer des documents](#document-database-deleting)

## Ajouter des documents
<a name="document-database-adding-documents"></a>

Dans Amazon DocumentDB, une base de données est créée lorsque vous ajoutez un document pour la première fois à une collection. Dans cet exemple, vous créez une collection nommée `example` dans la base de données `test`, qui est la base de données par défaut lorsque vous vous connectez à un cluster. Comme la collection est créée implicitement lors de l'insertion du premier document, aucune erreur ne vérifie le nom de la collection. Par conséquent, une faute de frappe dans le nom de la collection, telle que `eexample` au lieu de `example`, créera et ajoutera le document à la collection `eexample` au lieu de l’ajouter à la collection souhaitée. Votre application est chargée de la vérification des erreurs.

Les exemples suivants utilisent l'API MongoDB pour ajouter des documents.

**Topics**
+ [Ajouter un seul document](#document-database-adding-documents-single)
+ [Ajouter plusieurs documents](#document-database-adding-documents-multiple)

### Ajouter un seul document
<a name="document-database-adding-documents-single"></a>

Pour ajouter un seul document à une collection, utilisez l'opération `insertOne( {} )` avec le document que vous souhaitez ajouter à la collection.

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

La sortie de cette opération ressemble à ceci (format JSON).

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

### Ajouter plusieurs documents
<a name="document-database-adding-documents-multiple"></a>

Pour ajouter plusieurs documents à une collection, utilisez l'opération `insertMany( [{},...,{}] )` avec une liste des document que vous souhaitez ajouter à la collection. Bien que dans cette liste particulière, les documents ont des schémas différents, ils peuvent tous être ajoutés à la même collection.

```
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
            }
        }    
    ]
)
```

La sortie de cette opération ressemble à ceci (format JSON).

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

## Interrogation de documents
<a name="document-database-queries"></a>

Il arrive que vous ayez besoin de consulter le stock de votre boutique en ligne, pour que les clients puissent voir et acheter ce que vous vendez. Interroger une collection est relativement simple, qu'il s'agisse de tous les documents dans la collection ou uniquement ceux qui répondent à un critère particulier.

Pour interroger des documents, utilisez l'opération `find()`. La commande `find()` possède un seul paramètre de document qui définit les critères à utiliser pour choisir le documents à renvoyer Le résultat obtenu à partir de `find()` est d'un document formaté en une seule ligne de texte sans sauts de ligne. Pour formater le document de sortie afin d'en faciliter la lecture, utilisez `find().pretty()`. Tous les exemples de cette rubrique utilisent `.pretty()` pour mettre en forme les données de sortie.

Utilisez les quatre documents que vous avez insérés dans la `example` collection lors des deux exercices précédents — `insertOne()` et`insertMany()`.

**Topics**
+ [Récupération de tous les documents d'une collection](#document-database-queries-all-documents)
+ [Récupération de documents correspondant à une valeur de champ](#document-database-queries-match-criteria)
+ [Récupération de documents correspondant à un document intégré](#document-database-queries-entire-embedded-document)
+ [Extraction de documents qui correspondent à une valeur de champ dans un document intégré](#document-database-queries-embeded-document-field)
+ [Récupération de documents correspondant à un tableau](#document-database-queries-array-match)
+ [Récupération de documents correspondant à une valeur d'un tableau](#document-database-queries-array-value-match)
+ [Récupération de documents à l'aide d'opérateurs](#document-database-query-operators)

### Récupération de tous les documents d'une collection
<a name="document-database-queries-all-documents"></a>

Pour récupérer tous les documents de votre collection, utilisez l'opération `find()` avec un document de requête vide.

La requête suivante renvoie tous les documents de la collection `example`.

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

### Récupération de documents correspondant à une valeur de champ
<a name="document-database-queries-match-criteria"></a>

Pour récupérer tous les documents qui correspondent à un champ et à une valeur, utilisez l'opération `find()` avec un document de requête qui identifie les champs et les valeurs à faire correspondre.

En utilisant les documents précédents, cette requête renvoie tous les documents où le champ « Item (Élément) » est défini sur « Pen ».

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

### Récupération de documents correspondant à un document intégré
<a name="document-database-queries-entire-embedded-document"></a>

Pour rechercher tous les documents qui correspondent à un document intégré, utilisez l'opération `find()` avec un document de requête qui spécifie le nom du document intégré et tous les champs et les valeurs de ce document intégré.

Lorsqu'une correspondance est établie avec un document intégré , le nom de ce document doit être identique à celui spécifié dans la requête. De plus, les champs et les valeurs dans le document intégré doivent correspondre à la requête.

La requête suivante renvoie uniquement le document « Poster Paint ». Cela est dû au fait que « Pen » a des valeurs différentes pour « `OnHand` » et « `MinOnHand` », et que et « Spray Paint » a un champ de plus (`OrderQnty`) que le document de requête.

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

### Extraction de documents qui correspondent à une valeur de champ dans un document intégré
<a name="document-database-queries-embeded-document-field"></a>

Pour rechercher tous les documents qui correspondent à un document intégré, utilisez l'opération `find()` avec un document de requête qui spécifie le nom du document intégré et tous les champs et les valeurs de ce document intégré.

Au vu des documents précédents, la requête suivante utilise la « notation de points » pour spécifier le document intégré et les champs d'intérêt. Tout document correspondant est renvoyé, quels que soient les autres champs présents dans le document intégré. La requête renvoie « Poster Paint » et « Spray Paint », car ils correspondent tous deux aux champs et aux valeurs spécifiés.

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

### Récupération de documents correspondant à un tableau
<a name="document-database-queries-array-match"></a>

Pour rechercher tous les documents qui correspondent à un tableau, utilisez l'opération `find()` avec le nom du tableau qui vous intéresse et toutes les valeurs de ce tableau. La requête renvoie tous les documents ayant un tableau avec ce nom et dans lequel les valeurs sont identiques et figurent dans le même ordre que dans la requête.

La requête suivante renvoie uniquement « Pen », car « Poster Paint » a une couleur supplémentaire (blanc) et les couleurs de « Spray Paint » figurent dans un ordre différent.

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

### Récupération de documents correspondant à une valeur d'un tableau
<a name="document-database-queries-array-value-match"></a>

Pour rechercher tous les documents contenant une valeur de tableau particulière, utilisez l'opération `find()` avec le nom du tableau et la valeur qui vous intéressent.

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

L'opération précédente renvoie les trois documents, car chacun d'entre eux possède un tableau nommé `Colors` et la valeur « `Red` » dans le tableau. Si vous spécifiez la valeur « `White` », la requête renvoie uniquement « Poster Paint ».

### Récupération de documents à l'aide d'opérateurs
<a name="document-database-query-operators"></a>

La requête suivante renvoie tous les documents où la valeur « `Inventory.OnHand` » est inférieure à 50.

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

Pour obtenir une liste des opérateurs de requête pris en charge, consultez [Opérateurs de requête et de projection](mongo-apis.md#mongo-apis-query). 

## Mettre à jour des documents
<a name="document-database-updating"></a>

Généralement, vos documents ne sont pas statiques et sont mis à jour dans le cadre de vos flux de travaux applicatifs. Les exemples suivants illustrent les différentes façons de mettre à jour des documents.

Pour mettre à jour un document existant, utilisez l'opération `update()`. L'opération `update()` possède deux paramètres de document. Le premier document identifie le ou les documents à mettre à jour. Le deuxième document spécifie les mises à jour à effectuer.

Lorsque vous mettez à jour un champ existant, qu'il s'agisse d'un champ simple, d'un tableau ou d'un document intégré, vous spécifiez le nom du champ et ses valeurs. À la fin de l'opération, c'est comme si le champ de l'ancien document avait été remplacé par le nouveau champ et ses valeurs.

**Topics**
+ [Mettre à jour les valeurs d'un champ existant](#document-database-updating-existing-fields)
+ [Ajouter un nouveau champ](#document-database-updating-adding-field)
+ [Remplacement d'un document intégré](#document-database-replacing-embedded-document)
+ [Insertion de nouveaux champs dans un document intégré](#document-database-updating-adding-field-embedded)
+ [Supprimer un champ d'un document](#document-database-remove-field)
+ [Supprimer un champ de plusieurs documents](#document-database-remove-field-all)

### Mettre à jour les valeurs d'un champ existant
<a name="document-database-updating-existing-fields"></a>

Utilisez les quatre documents suivants que vous avez ajoutés précédemment pour les opérations de mise à jour suivantes.

```
{
    "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
    }
}
```

**Pour mettre à jour un champ simple**  
Pour mettre à jour un champ simple, utilisez `update()` avec `$set` pour spécifier le nom du champ et la nouvelle valeur. L'exemple suivant modifie l'élément `Item` de « Pen » en « Gel Pen ».

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

Les résultats de cette opération ressemblent à ce qui suit.

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

**Pour mettre à jour un tableau :**  
L'exemple suivant remplace le tableau de couleurs existant par un nouveau tableau qui inclut `Orange` et supprime `White` de la liste des couleurs. La nouvelle liste de couleurs est dans l'ordre spécifié dans l'opération `update()`.

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

Les résultats de cette opération ressemblent à ce qui suit.

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

### Ajouter un nouveau champ
<a name="document-database-updating-adding-field"></a>

Pour modifier un document en ajoutant un ou plusieurs nouveaux champs, utilisez l'opération `update()`, avec un document de requête qui identifie le document à insérer et les nouveaux champs et valeurs à insérer à l'aide de l'opérateur `$set`.

L'exemple suivant ajoute le champ `UnitPrice` avec la valeur `3.99` pour le document Spray Paints. Notez que la valeur `3.99` est numérique et non une chaîne.

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

Les résultats de cette opération ressemblent à ce qui suit (format JSON).

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

### Remplacement d'un document intégré
<a name="document-database-replacing-embedded-document"></a>

Pour modifier un document en remplaçant un document intégré, utilisez l'opération `update()` avec des documents qui identifient le document intégré et ses nouveaux champs et valeurs à insérer à l'aide de l'opérateur `$set`.

Prenons l'exemple du document suivant :

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

**Pour remplacer un document intégré**  
L'exemple suivant remplace le document actuel Date par un nouveau, qui dispose uniquement des champs `Month` et `Day`, `Year` ayant été supprimé.

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

Les résultats de cette opération ressemblent à ce qui suit.

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

### Insertion de nouveaux champs dans un document intégré
<a name="document-database-updating-adding-field-embedded"></a>

**Pour ajouter des champs à un document intégré**  
Pour modifier un document en ajoutant un ou plusieurs nouveaux champs à un document intégré, utilisez l'opération `update()`, avec des documents qui identifient le document intégré et la « notation de points » pour spécifier le document intégré et les nouveaux champs et valeurs à insérer à l'aide de l'opérateur `$set`.

Au vu du document suivant, le code ci-après utilise la « notation de points » pour insérer les champs `Year` et `DoW` dans le document intégré `Date` et `Words` dans le document parent.

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

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

Les résultats de cette opération ressemblent à ce qui suit.

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

### Supprimer un champ d'un document
<a name="document-database-remove-field"></a>

Pour modifier un document en supprimant un champ dans le document, utilisez l'opération `update()`, avec un document de requête qui identifie le document dans lequel il faut supprimer le champ, ainsi que le champ à supprimer à l'aide de l'opérateur `$unset`.

L'exemple suivant supprime le champ `Words` dans le document précédent.

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

Les résultats de cette opération ressemblent à ce qui suit.

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

### Supprimer un champ de plusieurs documents
<a name="document-database-remove-field-all"></a>

Pour modifier un document en supprimant un champ de plusieurs documents, utilisez l'opération `update()` avec l'opérateur `$unset` et l'option `multi` définie sur `true`.

L'exemple suivant supprime le champ `Inventory` de tous les documents de l’exemple de collection. Si un document n'a pas de champ `Inventory`, aucune action n'est effectuée sur celui-ci. Si `multi: true` n'est pas spécifié, l'action est uniquement effectuée sur le premier document qui répond aux critères.

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

## Supprimer des documents
<a name="document-database-deleting"></a>

Pour supprimer un document de votre base de données, utilisez l'opération `remove()`, en indiquant quel document il faut supprimer. Le code suivant supprime « Gel Pen » de votre collection `example`.

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

Pour supprimer tous les documents de votre base de données, utilisez l'`remove()`opération avec une requête vide.

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