Terkadang perlu menghitung jumlah klik untuk setiap artikel. Jika database perlu diperbarui setiap kali dijelajahi, kinerjanya akan sangat tinggi ketika jumlah kunjungannya besar. Cara yang lebih baik adalah dengan terlebih dahulu melakukan cache data yang akan diperbarui, lalu menggunakan pemrosesan batch database secara berkala untuk memperbarui database secara batch. Kode sumbernya adalah sebagai berikut:
CountBean.java
/*
*HitungData.java
*
* Dibuat pada 18 Oktober 2006, 16:44
*
* Untuk mengubah templat ini, pilih Alat |. Pilihan dan cari templat di bawah
* node Pembuatan dan Manajemen Sumber. Klik kanan templat dan pilih
* Buka. Anda kemudian dapat membuat perubahan pada template di Editor Sumber.
*/
paket com.tot.count;
/**
*
* @penulis http://www.tot.name
*/
CountBean kelas publik {
tipe hitungan String pribadi;
int hitunganId;
/** Membuat instance baru dari CountData */
CountBean publik() {}
public void setCountType(String countTypes){
this.countType=countType;
}
kekosongan publik setCountId(int countIds){
this.countId=countId;
}
String publik getCountType(){
kembalikan countType;
}
publik int getCountId(){
kembalikan countId;
}
}
CountCache.java
/*
*HitungCache.java
*
* Dibuat pada 18 Oktober 2006, 17:01
*
* Untuk mengubah templat ini, pilih Alat |. Pilihan dan cari templat di bawah
* node Pembuatan dan Manajemen Sumber. Klik kanan templat dan pilih
* Buka. Anda kemudian dapat membuat perubahan pada template di Editor Sumber.
*/
paket com.tot.count;
import java.util.*;
/**
*
* @penulis http://www.tot.name
*/
kelas publik CountCache {
daftar LinkedList statis publik=LinkedList baru();
/** Membuat instance baru dari CountCache */
CountCache publik() {}
public static void add(CountBean cb){
jika(cb!=batal){
daftar.tambahkan(cb);
}
}
}
CountControl.java
/*
*HitungThread.java
*
* Dibuat pada 18 Oktober 2006, 16:57
*
* Untuk mengubah templat ini, pilih Alat |. Pilihan dan cari templat di bawah
* node Pembuatan dan Manajemen Sumber. Klik kanan templat dan pilih
* Buka. Anda kemudian dapat membuat perubahan pada template di Editor Sumber.
*/
paket com.tot.count;
impor tot.db.DBUtils;
impor java.sql.*;
/**
*
* @penulis http://www.tot.name
*/
kelas publik CountControl{
private static long lastExecuteTime=0;//Waktu pembaruan terakhir private static longexecuteSep=60000;//Tentukan interval pembaruan dalam milidetik/** Membuat instance baru dari CountThread */
CountControl publik() {}
kekosongan yang disinkronkan publik, eksekusiUpdate(){
Sambungan koneksi=null;
Pernyataan yang Disiapkan ps=null;
mencoba{
samb = DBUtils.getConnection();
samb.setAutoCommit(salah);
ps=conn.prepareStatement("perbarui t_news set hits=hits+1 di mana id=?");
for(int i=0;i<CountCache.daftar.ukuran();i++){
CountBean cb=(CountBean)CountCache.list.getFirst();
CountCache.list.removeFirst();
ps.setInt(1, cb.getCountId());
ps.executeUpdate();⑴
//ps.addBatch();⑵
}
//int [] dihitung = ps.executeBatch();⑶
samb.commit();
}menangkap(Pengecualian e){
e.printStackTrace();
} Akhirnya{
mencoba{
jika(ps!=batal) {
ps.clearParameters();
ps.tutup();
ps=nol;
}
}menangkap(SQLException e){}
DBUtils.closeConnection(sambungan);
}
}
publik long getLast(){
kembalikan lastExecuteTime;
}
menjalankan kekosongan publik(){
lama sekarang = System.currentTimeMillis();
if ((sekarang - lastExecuteTime) > mengeksekusiSep) {
//System.out.print("lastExecuteTime:"+lastExecuteTime);
//System.out.print(" sekarang:"+sekarang+"n");
// System.out.print(" sep="+(sekarang - lastExecuteTime)+"n");
lastExecuteTime=sekarang;
eksekusiPembaruan();
}
kalau tidak{
//System.out.print("tunggu "+(sekarang - lastExecuteTime)+" detik:"+"n");
}
}
}
//Catatan: Jika driver database Anda mendukung pemrosesan batch, Anda dapat menghapus komentar sebelum kode yang ditandai dengan ⑵ dan ⑶, dan menambahkan
kelas komentar sebelum kode ⑴.
<%
CountBean cb=CountBean baru();
cb.setCountId(Integer.parseInt(request.getParameter("cid")));
CountCache.tambahkan(cb);
keluar.print(CountCache.list.size()+"<br>");
CountControl c=New CountControl();
c.jalankan();
keluar.print(CountCache.list.size()+"<br>");
%>