azure-cosmos-java

I'm ready to translate text to French while preserving Markdown formatting. However, I notice your message appears to be incomplete - it only contains "---" and "|" characters. Please provide the complete text you'd like me to translate, and I'll: - Preserve all Markdown formatting (headings, lists, code blocks, tables, links) - Keep proper nouns, brands, technical identifiers, and commands in English - Return only the translation without preamble Please share the text you want translated.

npx skills add https://github.com/microsoft/skills --skill azure-cosmos-java

SDK Azure Cosmos DB pour Java

Bibliothèque cliente pour l'API NoSQL Azure Cosmos DB avec distribution mondiale et modèles réactifs.

Installation

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-cosmos</artifactId>
    <version>LATEST</version>
</dependency>

Ou utilisez Azure SDK BOM :

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-cosmos</artifactId>
    </dependency>
</dependencies>

Variables d'environnement

COSMOS_ENDPOINT=https://<account>.documents.azure.com:443/
COSMOS_KEY=<your-primary-key>

Authentification

Authentification basée sur les clés

import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;

CosmosClient client = new CosmosClientBuilder()
    .endpoint(System.getenv("COSMOS_ENDPOINT"))
    .key(System.getenv("COSMOS_KEY"))
    .buildClient();

Client asynchrone

import com.azure.cosmos.CosmosAsyncClient;

CosmosAsyncClient asyncClient = new CosmosClientBuilder()
    .endpoint(serviceEndpoint)
    .key(key)
    .buildAsyncClient();

Avec personnalisations

import com.azure.cosmos.ConsistencyLevel;
import java.util.Arrays;

CosmosClient client = new CosmosClientBuilder()
    .endpoint(serviceEndpoint)
    .key(key)
    .directMode(directConnectionConfig, gatewayConnectionConfig)
    .consistencyLevel(ConsistencyLevel.SESSION)
    .connectionSharingAcrossClientsEnabled(true)
    .contentResponseOnWriteEnabled(true)
    .userAgentSuffix("my-application")
    .preferredRegions(Arrays.asList("West US", "East US"))
    .buildClient();

Hiérarchie des clients

Classe Objectif
CosmosClient / CosmosAsyncClient Opérations au niveau du compte
CosmosDatabase / CosmosAsyncDatabase Opérations de base de données
CosmosContainer / CosmosAsyncContainer Opérations de conteneur/élément

Flux de travail principal

Créer une base de données

// Synchrone
client.createDatabaseIfNotExists("myDatabase")
    .map(response -> client.getDatabase(response.getProperties().getId()));

// Asynchrone avec chaînage
asyncClient.createDatabaseIfNotExists("myDatabase")
    .map(response -> asyncClient.getDatabase(response.getProperties().getId()))
    .subscribe(database -> System.out.println("Created: " + database.getId()));

Créer un conteneur

asyncClient.createDatabaseIfNotExists("myDatabase")
    .flatMap(dbResponse -> {
        String databaseId = dbResponse.getProperties().getId();
        return asyncClient.getDatabase(databaseId)
            .createContainerIfNotExists("myContainer", "/partitionKey")
            .map(containerResponse -> asyncClient.getDatabase(databaseId)
                .getContainer(containerResponse.getProperties().getId()));
    })
    .subscribe(container -> System.out.println("Container: " + container.getId()));

Opérations CRUD

import com.azure.cosmos.models.PartitionKey;

CosmosAsyncContainer container = asyncClient
    .getDatabase("myDatabase")
    .getContainer("myContainer");

// Créer
container.createItem(new User("1", "John Doe", "john@example.com"))
    .flatMap(response -> {
        System.out.println("Created: " + response.getItem());
        // Lire
        return container.readItem(
            response.getItem().getId(),
            new PartitionKey(response.getItem().getId()),
            User.class);
    })
    .flatMap(response -> {
        System.out.println("Read: " + response.getItem());
        // Mettre à jour
        User user = response.getItem();
        user.setEmail("john.doe@example.com");
        return container.replaceItem(
            user,
            user.getId(),
            new PartitionKey(user.getId()));
    })
    .flatMap(response -> {
        // Supprimer
        return container.deleteItem(
            response.getItem().getId(),
            new PartitionKey(response.getItem().getId()));
    })
    .block();

Interroger des documents

import com.azure.cosmos.models.CosmosQueryRequestOptions;
import com.azure.cosmos.util.CosmosPagedIterable;

CosmosContainer container = client.getDatabase("myDatabase").getContainer("myContainer");

String query = "SELECT * FROM c WHERE c.status = @status";
CosmosQueryRequestOptions options = new CosmosQueryRequestOptions();

CosmosPagedIterable<User> results = container.queryItems(
    query,
    options,
    User.class
);

results.forEach(user -> System.out.println("User: " + user.getName()));

Concepts clés

Clés de partition

Choisissez une clé de partition avec :

  • Cardinalité élevée (nombreuses valeurs distinctes)
  • Distribution uniforme des données et des demandes
  • Utilisation fréquente dans les requêtes

Niveaux de cohérence

Niveau Garantie
Strong Linéarité
Bounded Staleness Préfixe cohérent avec décalage limité
Session Préfixe cohérent dans la session
Consistent Prefix Les lectures ne voient jamais les écritures désordonnées
Eventual Aucune garantie de classement

Unités de requête (RUs)

Toutes les opérations consomment des RUs. Vérifiez les en-têtes de réponse :

CosmosItemResponse<User> response = container.createItem(user);
System.out.println("RU charge: " + response.getRequestCharge());

Bonnes pratiques

  1. Réutilisez CosmosClient — Créez une seule fois, réutilisez dans toute l'application
  2. Utilisez le client asynchrone pour les scénarios à débit élevé
  3. Choisissez la clé de partition avec soin — Affecte les performances et l'extensibilité
  4. Activez la réponse de contenu à l'écriture pour accéder immédiatement aux éléments créés
  5. Configurez les régions préférées pour les applications géo-distribuées
  6. Gérez les erreurs 429 avec les politiques de nouvelle tentative (intégrées par défaut)
  7. Utilisez le mode direct pour la latence la plus faible en production

Gestion des erreurs

import com.azure.cosmos.CosmosException;

try {
    container.createItem(item);
} catch (CosmosException e) {
    System.err.println("Status: " + e.getStatusCode());
    System.err.println("Message: " + e.getMessage());
    System.err.println("Request charge: " + e.getRequestCharge());

    if (e.getStatusCode() == 409) {
        System.err.println("Item already exists");
    } else if (e.getStatusCode() == 429) {
        System.err.println("Rate limited, retry after: " + e.getRetryAfterDuration());
    }
}

Liens de référence

Ressource URL
Package Maven https://central.sonatype.com/artifact/com.azure/azure-cosmos
Documentation API https://azuresdkdocs.z19.web.core.windows.net/java/azure-cosmos/latest/index.html
Documentation produit https://learn.microsoft.com/azure/cosmos-db/
Exemples https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples
Guide de performance https://learn.microsoft.com/azure/cosmos-db/performance-tips-java-sdk-v4-sql
Dépannage https://learn.microsoft.com/azure/cosmos-db/troubleshoot-java-sdk-v4-sql