You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2009/07/09 13:03:36 UTC
svn commit: r792497 - in
/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc:
AbstractJDBCDataModel.java MySQLBooleanPrefJDBCDataModel.java
MySQLJDBCDataModel.java
Author: srowen
Date: Thu Jul 9 11:03:35 2009
New Revision: 792497
URL: http://svn.apache.org/viewvc?rev=792497&view=rev
Log:
Added much needed num user/item caching to JDBC model, fixed SQL bug, no longer requires preference column name in 'boolean' version
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java?rev=792497&r1=792496&r2=792497&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java Thu Jul 9 11:03:35 2009
@@ -96,6 +96,8 @@
private final String getPrefsForItemSQL;
private final String getNumPreferenceForItemSQL;
private final String getNumPreferenceForItemsSQL;
+ private int cachedNumUsers;
+ private int cachedNumItems;
protected AbstractJDBCDataModel(DataSource dataSource,
String getUserSQL,
@@ -186,6 +188,9 @@
this.getPrefsForItemSQL = getPrefsForItemSQL;
this.getNumPreferenceForItemSQL = getNumPreferenceForItemSQL;
this.getNumPreferenceForItemsSQL = getNumPreferenceForItemsSQL;
+
+ this.cachedNumUsers = -1;
+ this.cachedNumItems = -1;
}
private static void checkNotNullAndLog(String argName, Object value) {
@@ -387,12 +392,18 @@
@Override
public int getNumItems() throws TasteException {
- return getNumThings("items", getNumItemsSQL);
+ if (cachedNumItems < 0) {
+ cachedNumItems = getNumThings("items", getNumItemsSQL);
+ }
+ return cachedNumItems;
}
@Override
public int getNumUsers() throws TasteException {
- return getNumThings("users", getNumUsersSQL);
+ if (cachedNumUsers < 0) {
+ cachedNumUsers = getNumThings("users", getNumUsersSQL);
+ }
+ return cachedNumUsers;
}
@Override
@@ -504,7 +515,8 @@
@Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
- // do nothing
+ cachedNumUsers = -1;
+ cachedNumItems = -1;
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java?rev=792497&r1=792496&r2=792497&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLBooleanPrefJDBCDataModel.java Thu Jul 9 11:03:35 2009
@@ -36,6 +36,8 @@
*/
public class MySQLBooleanPrefJDBCDataModel extends AbstractBooleanPrefJDBCDataModel {
+ private static final String NO_SUCH_COLUMN = "NO_SUCH_COLUMN";
+
/**
* <p>Creates a {@link MySQLBooleanPrefJDBCDataModel} using the default {@link javax.sql.DataSource}
* (named {@link #DEFAULT_DATASOURCE_NAME} and default table/column names.</p>
@@ -57,8 +59,7 @@
this(lookupDataSource(dataSourceName),
DEFAULT_PREFERENCE_TABLE,
DEFAULT_USER_ID_COLUMN,
- DEFAULT_ITEM_ID_COLUMN,
- DEFAULT_PREFERENCE_COLUMN);
+ DEFAULT_ITEM_ID_COLUMN);
}
/**
@@ -71,8 +72,7 @@
this(dataSource,
DEFAULT_PREFERENCE_TABLE,
DEFAULT_USER_ID_COLUMN,
- DEFAULT_ITEM_ID_COLUMN,
- DEFAULT_PREFERENCE_COLUMN);
+ DEFAULT_ITEM_ID_COLUMN);
}
/**
@@ -83,18 +83,16 @@
* @param preferenceTable name of table containing preference data
* @param userIDColumn user ID column name
* @param itemIDColumn item ID column name
- * @param preferenceColumn preference column name
*/
public MySQLBooleanPrefJDBCDataModel(DataSource dataSource,
String preferenceTable,
String userIDColumn,
- String itemIDColumn,
- String preferenceColumn) {
+ String itemIDColumn) {
super(dataSource,
preferenceTable,
userIDColumn,
itemIDColumn,
- preferenceColumn,
+ NO_SUCH_COLUMN,
// getUserSQL
"SELECT " + itemIDColumn + " FROM " + preferenceTable + " WHERE " + userIDColumn + "=?",
// getNumItemsSQL
@@ -117,7 +115,7 @@
// getNumPreferenceForItemSQL
"SELECT COUNT(1) FROM " + preferenceTable + " WHERE " + itemIDColumn + "=?",
// getNumPreferenceForItemsSQL
- "SELECT COUNT(1) FROM " + preferenceTable + " tp1 INNER JOIN " + preferenceColumn + " tp2 " +
+ "SELECT COUNT(1) FROM " + preferenceTable + " tp1 INNER JOIN " + preferenceTable + " tp2 " +
"ON (tp1." + userIDColumn + "=tp2." + userIDColumn + ") " +
"WHERE tp1." + itemIDColumn + "=? and tp2." + itemIDColumn + "=?");
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java?rev=792497&r1=792496&r2=792497&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.java Thu Jul 9 11:03:35 2009
@@ -162,7 +162,7 @@
// getNumPreferenceForItemSQL
"SELECT COUNT(1) FROM " + preferenceTable + " WHERE " + itemIDColumn + "=?",
// getNumPreferenceForItemsSQL
- "SELECT COUNT(1) FROM " + preferenceTable + " tp1 INNER JOIN " + preferenceColumn + " tp2 " +
+ "SELECT COUNT(1) FROM " + preferenceTable + " tp1 INNER JOIN " + preferenceTable + " tp2 " +
"ON (tp1." + userIDColumn + "=tp2." + userIDColumn + ") " +
"WHERE tp1." + itemIDColumn + "=? and tp2." + itemIDColumn + "=?");
}