Maison  >  Article  >  Java  >  Comment optimiser l'accès aux bases de données dans le développement de fonctions backend Java ?

Comment optimiser l'accès aux bases de données dans le développement de fonctions backend Java ?

PHPz
PHPzoriginal
2023-08-06 20:29:06819parcourir

Comment optimiser l'accès aux bases de données dans le développement de fonctions backend Java ?

Présentation :
Dans le développement back-end Java, l'accès à la base de données est un lien très important. L'optimisation de l'accès aux bases de données peut améliorer les performances et la réactivité du système. Cet article présentera quelques techniques courantes pour optimiser l'accès aux bases de données dans le développement de fonctions back-end Java et fournira des exemples de code correspondants.

  1. Réduire la création et la destruction de connexions à une base de données
    En Java, la création d'une connexion à une base de données est une opération très chronophage. Par conséquent, nous pouvons réduire le nombre de créations et de destructions de connexions en utilisant un pool de connexions à la base de données. Le pool de connexions peut créer un certain nombre de connexions au démarrage de l'application, obtenir des connexions du pool en cas de besoin et les renvoyer au pool après utilisation pour une utilisation ultérieure.

Voici un exemple d'utilisation du pool de connexions Apache Commons DBCP :

import org.apache.commons.dbcp2.BasicDataSource;

public class DatabaseUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/mydb";
    private static final String USERNAME = "username";
    private static final String PASSWORD = "password";
    
    private static BasicDataSource dataSource;

    static {
        dataSource = new BasicDataSource();
        dataSource.setUrl(URL);
        dataSource.setUsername(USERNAME);
        dataSource.setPassword(PASSWORD);
        
        // 设置连接池的一些属性
        dataSource.setInitialSize(10);
        dataSource.setMaxTotal(100);
    }

    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}

Dans le code, nous avons initialisé le pool de connexions à l'aide d'un bloc de code statique et défini certaines propriétés du pool de connexions. La méthode getConnection() est utilisée pour obtenir une connexion à une base de données. Lorsque vous avez besoin d'accéder à la base de données, appelez simplement la méthode getConnection() pour obtenir une connexion.

  1. Utiliser des opérations par lots
    Dans certains scénarios, nous devons effectuer un grand nombre d'opérations de base de données si chaque opération est envoyée au serveur de base de données, une surcharge réseau inutile sera provoquée. À ce stade, nous pouvons utiliser l'opération par lots de la base de données pour fusionner plusieurs opérations en une seule opération par lots, puis l'envoyer au serveur de base de données pour exécution en une seule fois.

Ce qui suit est un exemple d'opération par lots utilisant JDBC :

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BatchUpdateExample {
    public void batchUpdate(List<User> userList) throws SQLException {
        Connection connection = DatabaseUtil.getConnection();
        String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);

        for (User user : userList) {
            statement.setString(1, user.getName());
            statement.setInt(2, user.getAge());
            statement.addBatch();
        }

        statement.executeBatch();
        statement.close();
        connection.close();
    }
}

Dans le code, nous obtenons d'abord la connexion à la base de données, puis créons un objet PreparedStatement et utilisons la méthode addBatch() pour ajouter des instructions pour les opérations par lots. Après avoir ajouté toutes les opérations, appelez la méthodeexecuteBatch() pour effectuer des opérations par lots et enfin fermez les ressources associées.

  1. Utilisation raisonnable des index
    L'index de la base de données peut grandement améliorer la vitesse des requêtes. Lors de la conception des tables de base de données, nous devons créer des index raisonnablement basés sur les besoins de l'entreprise. De manière générale, les champs fréquemment utilisés pour les requêtes et les champs fréquemment utilisés pour le tri doivent être indexés.

Ce qui suit est un exemple de création d'un index :

CREATE INDEX idx_name ON user (name);

Dans le code, nous utilisons l'instruction CREATE INDEX pour créer un index sur le champ nom de la table utilisateur.

  1. Évitez d'utiliser SELECT *
    Dans les instructions de requête, essayez d'éviter d'utiliser SELECT , surtout lorsque la table contient un grand nombre de champs. SELECT renverra les données de tous les champs, ce qui entraînera de nombreux échanges de données et une surcharge de mémoire inutile. Seuls les champs obligatoires doivent être interrogés en fonction des besoins réels afin de réduire les transmissions de données inutiles et la consommation de mémoire.

Voici un exemple d'utilisation de SELECT * :

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SelectAllExample {
    public List<User> selectAll() throws SQLException {
        Connection connection = DatabaseUtil.getConnection();
        String sql = "SELECT * FROM user";
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet resultSet = statement.executeQuery();

        List<User> userList = new ArrayList<>();
        while (resultSet.next()) {
            User user = new User();
            user.setId(resultSet.getInt("id"));
            user.setName(resultSet.getString("name"));
            user.setAge(resultSet.getInt("age"));
            userList.add(user);
        }

        resultSet.close();
        statement.close();
        connection.close();
        
        return userList;
    }
}

Dans le code, nous utilisons SELECT pour interroger tous les champs de la table utilisateur et enregistrer les résultats dans une collection List. S'il y a un grand nombre de champs dans la table, l'utilisation de SELECT affectera les performances de la requête.

  1. Utilisez les types de données appropriés
    Lors de la conception des tables de base de données, vous devez choisir le type de données approprié en fonction des besoins réels. La sélection d'un type de données trop volumineux gaspille de l'espace de stockage, tandis que la sélection d'un type de données trop petit peut entraîner une perte ou un débordement de données. Le bon type de données peut répondre aux besoins de l’entreprise tout en minimisant l’espace de stockage.

Ce qui suit est un exemple de sélection appropriée de types de données :

CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age TINYINT
);

Dans le code, nous avons créé des champs de la table utilisateur en utilisant respectivement les types de données INT, VARCHAR et TINYINT.

Résumé :
En optimisant l'accès aux bases de données dans le développement de fonctions backend Java, nous pouvons améliorer les performances et la vitesse de réponse du système. Lors de l'écriture du code, vous devez faire attention à réduire le nombre de créations et de destructions de connexions à la base de données et utiliser les pools de connexions à la base de données de manière rationnelle ; utiliser rationnellement les opérations par lots pour réduire la surcharge du réseau ; utiliser rationnellement les index pour augmenter la vitesse des requêtes ; champs obligatoires ; Choisissez le type de données approprié pour réduire l’espace de stockage. J'espère que cet article vous aidera à optimiser l'accès aux bases de données.

Références :

  • Apache Commons DBCP : http://commons.apache.org/proper/commons-dbcp/
  • Mises à jour par lots JDBC : https://docs.oracle.com/javase/tutorial/jdbc/ basics /batch.html
  • Combien d'index sont de trop https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn