Tous les produits
Search
Centre de documentation

Lindorm:Write data in an efficient manner

Dernière mise à jour :Aug 11, 2026

Utilisez PreparedStatement avec une exécution par lots pour écrire plusieurs enregistrements dans LindormTSDB lors d'un seul appel JDBC. Cette approche réduit les allers-retours réseau et améliore le débit d'écriture.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

Fonctionnement

PreparedStatement vous permet de définir une instruction INSERT une seule fois et de l'exécuter plusieurs fois avec différentes valeurs de paramètres. En appelant addBatch() pour chaque ligne, puis executeBatch(), vous envoyez toutes les lignes en un seul aller-retour vers la base de données. Cette méthode est nettement plus efficace que l'exécution d'instructions INSERT individuelles.

Tous les paramètres de colonne sont liés par position à l'aide du caractère de remplacement point d'interrogation (?). L'index transmis à chaque appel setXXX() doit correspondre à l'ordre des colonnes défini dans l'instruction INSERT.

Écriture des données par lots

Les étapes suivantes utilisent la table de qualité de l'air aqm présentée dans la rubrique Conception d'une table de séries temporelles à titre d'exemple.

  1. Créez un objet connection. Reportez-vous à la rubrique Utilisation du pilote Lindorm JDBC pour se connecter à Lindorm TSDB et l'utiliser (recommandé) pour configurer la connexion.

  2. Créez un objet PreparedStatement contenant l'instruction INSERT.

    StringBuilder builder = new StringBuilder();
    builder.append("INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2) ");
    builder.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    
    PreparedStatement preparedStmt = connection.prepareStatement(builder.toString());
  3. Liez les paramètres pour chaque ligne et exécutez le lot.

    for (int i = 0; i < batchSize; i++) {
        // Bind values in the same order as the columns in the INSERT statement.
        // city, district, id, ts, pm25, pm10, so2, no2 are local variables.
        preparedStmt.setString(1, city);
        preparedStmt.setString(2, district);
        preparedStmt.setString(3, id);
        preparedStmt.setTimestamp(4, ts);
        preparedStmt.setDouble(5, pm25);
        preparedStmt.setDouble(6, pm10);
        preparedStmt.setDouble(7, so2);
        preparedStmt.setDouble(8, no2);
    
        // Queue the row for batch execution.
        preparedStmt.addBatch();
    }
    
    // Write all queued rows to the database.
    int[] results = preparedStmt.executeBatch();
    
    // results[i] contains the update count for each row in the batch.

Remarques d'utilisation

Liaison des paramètres : Dans LindormTSDB, PreparedStatement prend uniquement en charge le caractère de remplacement point d'interrogation (?). L'index utilisé dans chaque appel setXXX() doit correspondre exactement à la position de la colonne dans l'instruction INSERT.

Taille du lot : La taille du lot détermine l'équilibre entre le débit et la latence. Des lots plus grands réduisent le nombre d'allers-retours, mais augmentent l'utilisation de la mémoire et la latence par requête. Une taille de lot plus élevée n'améliore pas systématiquement les performances d'écriture ; la valeur optimale dépend de la structure de votre table.

Structure de la table **Valeur recommandée pour batchSize**
Une colonne de champ, jusqu'à cinq colonnes de tag 5 000
Autres structures Ajustez la valeur en fonction du débit et de la latence observés dans votre environnement

Étapes suivantes