You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by as...@apache.org on 2006/04/13 20:55:36 UTC
svn commit: r393886 - in /jakarta/jcs/trunk/src:
java/org/apache/jcs/auxiliary/disk/jdbc/
java/org/apache/jcs/auxiliary/disk/jdbc/hsql/
test/org/apache/jcs/auxiliary/disk/jdbc/
Author: asmuts
Date: Thu Apr 13 11:55:33 2006
New Revision: 393886
URL: http://svn.apache.org/viewcvs?rev=393886&view=rev
Log:
Added an expire time to the jdbc disk cache table struture. Without it
a full table scan is necessary in order to expire elements. With it, you can scale
into the millions of records.
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheShrinkUnitTest.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=393886&r1=393885&r2=393886&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java Thu Apr 13 11:55:33 2006
@@ -54,24 +54,30 @@
* configurable.
*
* <pre>
- * drop TABLE JCS_STORE;
- *
- * CREATE TABLE JCS_STORE
- * (
- * CACHE_KEY VARCHAR(250) NOT NULL,
- * REGION VARCHAR(250) NOT NULL,
- * ELEMENT BLOB,
- * CREATE_TIME DATE,
- * CREATE_TIME_SECONDS BIGINT,
- * MAX_LIFE_SECONDS BIGINT,
- * IS_ETERNAL CHAR(1),
- * PRIMARY KEY (CACHE_KEY, REGION)
- * );
+ * drop TABLE JCS_STORE;
+ *
+ * CREATE TABLE JCS_STORE
+ * (
+ * CACHE_KEY VARCHAR(250) NOT NULL,
+ * REGION VARCHAR(250) NOT NULL,
+ * ELEMENT BLOB,
+ * CREATE_TIME DATE,
+ * CREATE_TIME_SECONDS BIGINT,
+ * MAX_LIFE_SECONDS BIGINT,
+ * SYSTEM_EXPIRE_TIME_SECONDS BIGINT,
+ * IS_ETERNAL CHAR(1),
+ * PRIMARY KEY (CACHE_KEY, REGION)
+ * );
* </pre>
*
*
* The cleanup thread will delete non eternal items where (now - create time) >
* max life seconds * 1000
+ * <p>
+ * To speed up the deletion the SYSTEM_EXPIRE_TIME_SECONDS is used instead. It
+ * is recommended that an index be created on this column is you will have over
+ * a million records.
+ *
*
* @author Aaron Smuts
*
@@ -239,7 +245,8 @@
{
String sqlI = "insert into "
+ getJdbcDiskCacheAttributes().getTableName()
- + " (CACHE_KEY, REGION, ELEMENT, MAX_LIFE_SECONDS, IS_ETERNAL, CREATE_TIME, CREATE_TIME_SECONDS) values (?, ?, ?, ?, ?, ?, ?)";
+ + " (CACHE_KEY, REGION, ELEMENT, MAX_LIFE_SECONDS, IS_ETERNAL, CREATE_TIME, CREATE_TIME_SECONDS, SYSTEM_EXPIRE_TIME_SECONDS) "
+ + " values (?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement psInsert = con.prepareStatement( sqlI );
psInsert.setString( 1, (String) ce.getKey() );
@@ -256,9 +263,13 @@
}
Date createTime = new Date( ce.getElementAttributes().getCreateTime() );
psInsert.setDate( 6, createTime );
+
long now = System.currentTimeMillis() / 1000;
psInsert.setLong( 7, now );
+ long expireTime = now + ce.getElementAttributes().getMaxLifeSeconds();
+ psInsert.setLong( 8, expireTime );
+
psInsert.execute();
psInsert.close();
}
@@ -290,11 +301,22 @@
try
{
sqlU = "update " + getJdbcDiskCacheAttributes().getTableName()
- + " set ELEMENT = ? where CACHE_KEY = ? and REGION = ? ";
+ + " set ELEMENT = ?, CREATE_TIME = ?, CREATE_TIME_SECONDS = ?, "
+ + " SYSTEM_EXPIRE_TIME_SECONDS = ? " + " where CACHE_KEY = ? and REGION = ?";
PreparedStatement psUpdate = con.prepareStatement( sqlU );
psUpdate.setBytes( 1, element );
- psUpdate.setString( 2, (String) ce.getKey() );
- psUpdate.setString( 3, this.getCacheName() );
+
+ Date createTime = new Date( ce.getElementAttributes().getCreateTime() );
+ psUpdate.setDate( 2, createTime );
+
+ long now = System.currentTimeMillis() / 1000;
+ psUpdate.setLong( 3, now );
+
+ long expireTime = now + ce.getElementAttributes().getMaxLifeSeconds();
+ psUpdate.setLong( 4, expireTime );
+
+ psUpdate.setString( 5, (String) ce.getKey() );
+ psUpdate.setString( 6, this.getCacheName() );
psUpdate.execute();
psUpdate.close();
@@ -646,8 +668,16 @@
try
{
long now = System.currentTimeMillis() / 1000;
+
+ // This is to slow when we push over a million records
+ // String sql = "delete from " +
+ // getJdbcDiskCacheAttributes().getTableName() + " where REGION = '"
+ // + this.getCacheName() + "' and IS_ETERNAL = 'F' and (" + now
+ // + " - CREATE_TIME_SECONDS) > MAX_LIFE_SECONDS";
+
String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName() + " where REGION = '"
- + this.getCacheName() + "' and IS_ETERNAL = 'F' and (" + now + " - CREATE_TIME_SECONDS) > MAX_LIFE_SECONDS";
+ + this.getCacheName() + "' and IS_ETERNAL = 'F' and " + now + " > SYSTEM_EXPIRE_TIME_SECONDS";
+
Connection con = DriverManager.getConnection( getPoolUrl() );
Statement sStatement = null;
try
@@ -848,9 +878,9 @@
ObjectPool connectionPool = new GenericObjectPool( null, maxActive );
// TODO make configurable
- // By dfault the size is 8!!!!!!!
- ((GenericObjectPool)connectionPool).setMaxIdle( -1 );
-
+ // By dfault the size is 8!!!!!!!
+ ( (GenericObjectPool) connectionPool ).setMaxIdle( -1 );
+
// Next, we'll create a ConnectionFactory that the
// pool will use to create Connections.
// We'll use the DriverManagerConnectionFactory,
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java?rev=393886&r1=393885&r2=393886&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java Thu Apr 13 11:55:33 2006
@@ -165,6 +165,7 @@
createSql.append( "CREATE_TIME DATE, " );
createSql.append( "CREATE_TIME_SECONDS BIGINT, " );
createSql.append( "MAX_LIFE_SECONDS BIGINT, " );
+ createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS BIGINT, " );
createSql.append( "IS_ETERNAL CHAR(1), " );
createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
createSql.append( ");" );
@@ -196,6 +197,7 @@
}
}
+ //TODO create an index on SYSTEM_EXPIRE_TIME_SECONDS
String setupData[] = { "create index iKEY on " + tableName + " (CACHE_KEY, REGION)" };
if ( newT )
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheShrinkUnitTest.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheShrinkUnitTest.java?rev=393886&r1=393885&r2=393886&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheShrinkUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheShrinkUnitTest.java Thu Apr 13 11:55:33 2006
@@ -212,6 +212,7 @@
createSql.append( "CREATE_TIME DATE, " );
createSql.append( "CREATE_TIME_SECONDS BIGINT, " );
createSql.append( "MAX_LIFE_SECONDS BIGINT, " );
+ createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS BIGINT, " );
createSql.append( "IS_ETERNAL CHAR(1), " );
createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
createSql.append( ");" );
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java
URL: http://svn.apache.org/viewcvs/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java?rev=393886&r1=393885&r2=393886&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCacheUnitTest.java Thu Apr 13 11:55:33 2006
@@ -128,6 +128,7 @@
createSql.append( "CREATE_TIME DATE, " );
createSql.append( "CREATE_TIME_SECONDS BIGINT, " );
createSql.append( "MAX_LIFE_SECONDS BIGINT, " );
+ createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS BIGINT, " );
createSql.append( "IS_ETERNAL CHAR(1), " );
createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
createSql.append( ");" );
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org