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 + "=?");
   }