Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengoptimumkan akses pangkalan data dalam pembangunan fungsi backend Java?

Bagaimana untuk mengoptimumkan akses pangkalan data dalam pembangunan fungsi backend Java?

PHPz
PHPzasal
2023-08-06 20:29:06846semak imbas

Bagaimana untuk mengoptimumkan akses pangkalan data dalam pembangunan fungsi backend Java?

Ikhtisar:
Dalam pembangunan back-end Java, akses pangkalan data ialah pautan yang sangat penting. Mengoptimumkan akses pangkalan data boleh meningkatkan prestasi sistem dan responsif. Artikel ini akan memperkenalkan beberapa teknik biasa untuk mengoptimumkan akses pangkalan data dalam pembangunan fungsi back-end Java dan menyediakan contoh kod yang sepadan.

  1. Kurangkan penciptaan dan pemusnahan sambungan pangkalan data
    Di Java, mencipta sambungan pangkalan data adalah operasi yang sangat memakan masa. Oleh itu, kita boleh mengurangkan bilangan penciptaan dan pemusnahan sambungan dengan menggunakan kumpulan sambungan pangkalan data. Kolam sambungan boleh mencipta bilangan sambungan tertentu apabila aplikasi bermula, mendapatkan sambungan daripada kolam apabila diperlukan dan mengembalikannya ke kolam selepas digunakan untuk kegunaan seterusnya.

Berikut ialah contoh penggunaan kumpulan sambungan DBCP Apache Commons:

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();
    }
}

Dalam kod, kami telah memulakan kumpulan sambungan menggunakan blok kod statik dan menetapkan beberapa sifat kumpulan sambungan. Kaedah getConnection() digunakan untuk mendapatkan sambungan pangkalan data. Apabila anda perlu mengakses pangkalan data, hanya panggil kaedah getConnection() untuk mendapatkan sambungan.

  1. Gunakan operasi kelompok
    Dalam sesetengah senario, kita perlu melakukan sejumlah besar operasi pangkalan data Jika setiap operasi dihantar ke pelayan pangkalan data, overhed rangkaian yang tidak perlu akan berlaku. Pada masa ini, kita boleh menggunakan operasi kelompok pangkalan data untuk menggabungkan berbilang operasi ke dalam satu operasi kelompok, dan kemudian menghantarnya ke pelayan pangkalan data untuk dilaksanakan pada satu masa.

Berikut ialah contoh operasi kelompok menggunakan 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();
    }
}

Dalam kod, kami mula-mula mendapatkan sambungan pangkalan data, kemudian mencipta objek PreparedStatement, dan gunakan kaedah addBatch() untuk menambah pernyataan untuk operasi kelompok. Selepas menambah semua operasi, panggil kaedah executeBatch() untuk melaksanakan operasi kelompok, dan akhirnya menutup sumber yang berkaitan.

  1. Penggunaan indeks yang munasabah
    Indeks pangkalan data boleh meningkatkan kelajuan pertanyaan. Apabila mereka bentuk jadual pangkalan data, kita harus mencipta indeks secara munasabah berdasarkan keperluan perniagaan. Secara umumnya, medan yang kerap digunakan untuk pertanyaan dan medan yang kerap digunakan untuk pengisihan hendaklah diindeks.

Berikut ialah contoh mencipta indeks:

CREATE INDEX idx_name ON user (name);

Dalam kod, kami menggunakan pernyataan CREATE INDEX untuk mencipta indeks pada medan nama jadual pengguna.

  1. Elak menggunakan SELECT *
    Dalam pernyataan pertanyaan, cuba elakkan menggunakan SELECT , terutamanya apabila jadual mengandungi sejumlah besar medan. SELECT akan mengembalikan data dari semua medan, yang akan menyebabkan banyak pertukaran data dan overhed memori yang tidak diperlukan. Anda harus bertanya hanya medan yang diperlukan berdasarkan keperluan sebenar untuk mengurangkan penghantaran data dan penggunaan memori yang tidak diperlukan.

Berikut ialah contoh penggunaan 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;
    }
}

Dalam kod, kami menggunakan SELECT untuk menanyakan semua medan jadual pengguna dan menyimpan hasilnya ke dalam koleksi Senarai. Jika terdapat sejumlah besar medan dalam jadual, menggunakan SELECT akan menjejaskan prestasi pertanyaan.

  1. Gunakan jenis data yang sesuai
    Apabila mereka bentuk jadual pangkalan data, anda harus memilih jenis data yang sesuai berdasarkan keperluan sebenar. Memilih jenis data yang terlalu besar membazirkan ruang storan, manakala memilih jenis data yang terlalu kecil boleh mengakibatkan kehilangan atau limpahan data. Jenis data yang betul boleh memenuhi keperluan perniagaan sambil meminimumkan ruang storan.

Berikut ialah contoh pemilihan jenis data yang sesuai:

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

Dalam kod, kami mencipta medan jadual pengguna masing-masing menggunakan jenis data INT, VARCHAR dan TINYINT.

Ringkasan:
Dengan mengoptimumkan akses pangkalan data dalam pembangunan fungsi backend Java, kami boleh meningkatkan prestasi dan kelajuan tindak balas sistem. Apabila menulis kod, anda perlu memberi perhatian untuk mengurangkan bilangan penciptaan dan pemusnahan sambungan pangkalan data dan menggunakan kumpulan sambungan pangkalan data secara rasional menggunakan operasi kelompok untuk mengurangkan overhed rangkaian secara rasional untuk meningkatkan kelajuan pertanyaan; medan yang diperlukan; Pilih jenis data yang sesuai untuk mengurangkan ruang storan. Saya harap artikel ini akan membantu anda mengoptimumkan akses pangkalan data.

Rujukan:

  • Apache Commons DBCP: http://commons.apache.org/proper/commons-dbcp/
  • JDBC Batch Updates: https://docs.oracle.com/javase/tutorial/jdbc/ basics /batch.html
  • Berapa banyak indeks yang terlalu banyak? https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html

Atas ialah kandungan terperinci Bagaimana untuk mengoptimumkan akses pangkalan data dalam pembangunan fungsi backend Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn