View a markdown version of this page

Caching hasil kueri database - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Caching hasil kueri database

Pola umum untuk mengurangi latensi kueri database adalah query caching. Aplikasi menerapkan query caching dengan query cache untuk hasil yang terkait dengan query database, mengembalikan hasil tersebut jika mereka di-cache. Jika tidak ada hasil cache yang ditemukan, kueri dijalankan pada database, hasilnya diisi dalam cache, dan hasilnya kemudian dikembalikan ke aplikasi yang memulai kueri. Kueri database berikutnya kemudian akan mengembalikan hasil cache selama mereka tetap dalam cache.

Kapan menggunakan cache kueri

Caching kueri dengan ElastiCache paling efektif untuk jenis beban kerja berikut:

  • Read-heavy aplikasi di mana kueri yang sama dijalankan berulang kali dengan data yang jarang berubah.

  • Kueri mahal seperti pencarian yang tidak diindeks, agregasi, atau gabungan multi-tabel di mana waktu eksekusi kueri lama.

  • High-concurrency skenario di mana pembongkaran membaca untuk ElastiCache mengurangi tekanan CPU database dan meningkatkan throughput keseluruhan.

Caching kueri tidak disarankan untuk kueri di mana konsistensi yang kuat diperlukan, atau untuk kueri di dalam transaksi multi-pernyataan yang memerlukan konsistensi baca-setelah-tulis.

Menggunakan AWS Pembungkus JDBC Tingkat Lanjut

Jika aplikasi Anda menggunakan driver JDBC untuk query database relasional, Anda dapat menerapkan query caching dengan Remote Query Cache Plugin di Advanced JDBC Wrapper.AWS Plugin secara otomatis menyimpan set hasil kueri SQL yang dipilihElastiCache, mengembalikan set hasil dari cache, bukan database untuk kueri masa depan. Hasil kueri caching dapat mengurangi beban database dan menurunkan latensi kueri rata-rata dengan perubahan kode aplikasi minimal.

Bagaimana query caching bekerja dengan plugin

Plugin Cache Kueri Jarak Jauh memudahkan aplikasi Java yang menanyakan database PostgreSQL, MySQL, atau MariaDB untuk secara otomatis menyimpan hasil kueri di cache. ElastiCache Anda mengonfigurasi plugin dengan informasi titik akhir cache Anda dan menunjukkan kueri mana dalam kode Anda untuk di-cache menggunakan petunjuk kueri. Ketika plugin mendeteksi kueri yang diisyaratkan, ia mengembalikan hasil kueri dari cache jika ada (cache hit). Jika hasilnya tidak dalam cache (cache hilang), plugin mengeksekusi kueri pada database, menyimpan hasil dalam cache, dan mengembalikan hasilnya ke aplikasi Anda sehingga saat berikutnya kueri dijalankan hasilnya dapat disajikan dari cache.

Petunjuk caching

Anda mengontrol kueri mana yang akan di-cache dengan menyetel petunjuk pada setiap kueri. Anda dapat menerapkan petunjuk kueri langsung ke string kueri dalam kode aplikasi Anda dengan awalan komentar:

/* CACHE_PARAM(ttl=300s) */ SELECT * FROM my_table WHERE id = 42

di mana ttl waktu-untuk-hidup dalam hitungan detik. Anda juga dapat mengatur petunjuk kueri dalam pernyataan yang disiapkan menggunakan kerangka kerja umum seperti Hibernate dan Spring Boot.

Prasyarat

Untuk menggunakan Plugin Cache Kueri Jarak Jauh dalam aplikasi Anda, Anda memerlukan cache ElastiCache untuk Valkey atau Redis OSS (baik Serverless dan berbasis node didukung) bersama dengan dependensi berikut:

Contoh: Caching kueri dengan plugin

Contoh berikut menunjukkan cara mengaktifkan plugin dan cache hasil kueri selama 300 detik (5 menit) dengan cache tanpa server ElastiCache untuk Valkey:

import java.sql.*; import java.util.Properties; public class QueryCacheExample { public static void main(String[] args) throws SQLException { Properties props = new Properties(); props.setProperty("user", "myuser"); props.setProperty("password", "mypassword"); // Enable the remote query cache plugin props.setProperty("wrapperPlugins", "remoteQueryCache"); // Point to your ElastiCache endpoint props.setProperty("cacheEndpointAddrRw", "my-cache.serverless.use1.cache.amazonaws.com:6379"); Connection conn = DriverManager.getConnection( "jdbc:aws-wrapper:postgresql://my-database.cluster-abc123.us-east-1.rds.amazonaws.com:5432/mydb", props ); Statement stmt = conn.createStatement(); // The SQL comment hint tells the plugin to cache this query for 300 seconds ResultSet rs = stmt.executeQuery( "/* CACHE_PARAM(ttl=300s) */ SELECT product_name, price FROM products WHERE category = 'electronics'" ); while (rs.next()) { System.out.println(rs.getString("product_name") + ": $" + rs.getBigDecimal("price")); } rs.close(); stmt.close(); conn.close(); } }

Pertama kali kueri ini berjalan, hasilnya dikembalikan dari database dan di-cache. ElastiCache Selama 300 detik berikutnya, eksekusi berikutnya dari kueri tersebut disajikan langsung dari cache.

Anda dapat menemukan contoh yang lebih luas dan informasi rinci tentang konfigurasi plugin dalam dokumentasi Plugin Cache Kueri Jarak Jauh.