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 2008/12/03 19:00:51 UTC

svn commit: r722986 - in /lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl: model/jdbc/AbstractJDBCDataModel.java model/jdbc/MySQLJDBCDataModel.java recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java

Author: srowen
Date: Wed Dec  3 10:00:50 2008
New Revision: 722986

URL: http://svn.apache.org/viewvc?rev=722986&view=rev
Log:
Address MAHOUT-100: record and save table and column names, not just SQL statement, in JDBCDataModel implementations, and reuse them when configuring JDBCDiffStorage implementations.

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/MySQLJDBCDataModel.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.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=722986&r1=722985&r2=722986&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 Wed Dec  3 10:00:50 2008
@@ -78,6 +78,10 @@
   public static final String DEFAULT_PREFERENCE_COLUMN = "preference";
 
   private final DataSource dataSource;
+  private final String preferenceTable;
+  private final String userIDColumn;
+  private final String itemIDColumn;
+  private final String preferenceColumn;
   private final String getUserSQL;
   private final String getNumItemsSQL;
   private final String getNumUsersSQL;
@@ -102,8 +106,48 @@
                                   String getPrefsForItemSQL,
                                   String getNumPreferenceForItemSQL,
                                   String getNumPreferenceForItemsSQL) {
+    this(dataSource,
+         DEFAULT_PREFERENCE_TABLE,
+         DEFAULT_USER_ID_COLUMN,
+         DEFAULT_ITEM_ID_COLUMN,
+         DEFAULT_PREFERENCE_COLUMN,
+         getUserSQL,
+         getNumItemsSQL,
+         getNumUsersSQL,
+         setPreferenceSQL,
+         removePreferenceSQL,
+         getUsersSQL,
+         getItemsSQL,
+         getItemSQL,
+         getPrefsForItemSQL,
+         getNumPreferenceForItemSQL,
+         getNumPreferenceForItemsSQL);
+  }
+
+  protected AbstractJDBCDataModel(DataSource dataSource,
+                                  String preferenceTable,
+                                  String userIDColumn,
+                                  String itemIDColumn,
+                                  String preferenceColumn,
+                                  String getUserSQL,
+                                  String getNumItemsSQL,
+                                  String getNumUsersSQL,
+                                  String setPreferenceSQL,
+                                  String removePreferenceSQL,
+                                  String getUsersSQL,
+                                  String getItemsSQL,
+                                  String getItemSQL,
+                                  String getPrefsForItemSQL,
+                                  String getNumPreferenceForItemSQL,
+                                  String getNumPreferenceForItemsSQL) {
 
     log.debug("Creating AbstractJDBCModel...");
+
+    checkNotNullAndLog("preferenceTable", preferenceTable);
+    checkNotNullAndLog("userIDColumn", userIDColumn);
+    checkNotNullAndLog("itemIDColumn", itemIDColumn);
+    checkNotNullAndLog("preferenceColumn", preferenceColumn);
+
     checkNotNullAndLog("dataSource", dataSource);
     checkNotNullAndLog("getUserSQL", getUserSQL);
     checkNotNullAndLog("getNumItemsSQL", getNumItemsSQL);
@@ -122,6 +166,11 @@
                "to the database itself, or database performance will be severely reduced.");
     }
 
+    this.preferenceTable = preferenceTable;
+    this.userIDColumn = userIDColumn;
+    this.itemIDColumn = itemIDColumn;
+    this.preferenceColumn = preferenceColumn;
+
     this.dataSource = dataSource;
     this.getUserSQL = getUserSQL;
     this.getNumItemsSQL = getNumItemsSQL;
@@ -176,6 +225,22 @@
     return dataSource;
   }
 
+  public String getPreferenceTable() {
+    return preferenceTable;
+  }
+
+  public String getUserIDColumn() {
+    return userIDColumn;
+  }
+
+  public String getItemIDColumn() {
+    return itemIDColumn;
+  }
+
+  public String getPreferenceColumn() {
+    return preferenceColumn;
+  }
+
   public final Iterable<? extends User> getUsers() throws TasteException {
     log.debug("Retrieving all users...");
     return new IteratorIterable<User>(new ResultSetUserIterator(dataSource, getUsersSQL));

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=722986&r1=722985&r2=722986&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 Wed Dec  3 10:00:50 2008
@@ -133,6 +133,10 @@
                             String itemIDColumn,
                             String preferenceColumn) {
     super(dataSource,
+          preferenceTable,
+          userIDColumn,
+          itemIDColumn,
+          preferenceColumn,
           // getUserSQL
           "SELECT " + itemIDColumn + ", " + preferenceColumn + " FROM " + preferenceTable +
           " WHERE " + userIDColumn + "=? ORDER BY " + itemIDColumn,

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java?rev=722986&r1=722985&r2=722986&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/MySQLJDBCDiffStorage.java Wed Dec  3 10:00:50 2008
@@ -18,7 +18,6 @@
 package org.apache.mahout.cf.taste.impl.recommender.slopeone.jdbc;
 
 import org.apache.mahout.cf.taste.common.TasteException;
-import org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel;
 import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
 
 /**
@@ -58,10 +57,6 @@
 
   public MySQLJDBCDiffStorage(MySQLJDBCDataModel dataModel) throws TasteException {
     this(dataModel,
-         AbstractJDBCDataModel.DEFAULT_PREFERENCE_TABLE,
-         AbstractJDBCDataModel.DEFAULT_USER_ID_COLUMN,
-         AbstractJDBCDataModel.DEFAULT_ITEM_ID_COLUMN,
-         AbstractJDBCDataModel.DEFAULT_PREFERENCE_COLUMN,
          DEFAULT_DIFF_TABLE,
          DEFAULT_ITEM_A_COLUMN,
          DEFAULT_ITEM_B_COLUMN,
@@ -71,10 +66,6 @@
   }
 
   public MySQLJDBCDiffStorage(MySQLJDBCDataModel dataModel,
-                              String preferenceTable,
-                              String userIDColumn,
-                              String itemIDColumn,
-                              String preferenceColumn,
                               String diffsTable,
                               String itemIDAColumn,
                               String itemIDBColumn,
@@ -89,11 +80,11 @@
           " WHERE " + itemIDAColumn + "=? AND " + itemIDBColumn + "=?",
           // getDiffsSQL
           "SELECT " + countColumn + ", " + avgColumn + ", " + itemIDAColumn + " FROM " + diffsTable + ", " +
-          preferenceTable + " WHERE " + itemIDBColumn + "=? AND " + itemIDAColumn + " = " + itemIDColumn +
-          " AND " + userIDColumn + "=? ORDER BY " + itemIDAColumn,
+          dataModel.getPreferenceTable() + " WHERE " + itemIDBColumn + "=? AND " + itemIDAColumn + " = " + dataModel.getItemIDColumn() +
+          " AND " + dataModel.getUserIDColumn() + "=? ORDER BY " + itemIDAColumn,
           // getAverageItemPrefSQL
-          "SELECT COUNT(1), AVG(" + preferenceColumn + ") FROM " + preferenceTable +
-          " WHERE " + itemIDColumn + "=?",
+          "SELECT COUNT(1), AVG(" + dataModel.getPreferenceColumn() + ") FROM " + dataModel.getPreferenceTable() +
+          " WHERE " + dataModel.getItemIDColumn() + "=?",
           // updateDiffSQLs
           new String[]{
                   "UPDATE " + diffsTable + " SET " + avgColumn + " = " + avgColumn + " - (? / " + countColumn +
@@ -112,22 +103,22 @@
           },
           // getRecommendableItemsSQL
           "SELECT id FROM " +
-          "(SELECT " + itemIDAColumn + " AS id FROM " + diffsTable + ", " + preferenceTable +
-          " WHERE " + itemIDBColumn + " = item_id AND " + userIDColumn + "=? UNION DISTINCT" +
-          " SELECT " + itemIDBColumn + " AS id FROM " + diffsTable + ", " + preferenceTable +
-          " WHERE " + itemIDAColumn + " = item_id AND " + userIDColumn +
-          "=?) possible_item_ids WHERE id NOT IN (SELECT " + itemIDColumn + " FROM " + preferenceTable +
-          " WHERE " + userIDColumn + "=?)",
+          "(SELECT " + itemIDAColumn + " AS id FROM " + diffsTable + ", " + dataModel.getPreferenceTable() +
+          " WHERE " + itemIDBColumn + " = item_id AND " + dataModel.getUserIDColumn() + "=? UNION DISTINCT" +
+          " SELECT " + itemIDBColumn + " AS id FROM " + diffsTable + ", " + dataModel.getPreferenceTable() +
+          " WHERE " + itemIDAColumn + " = item_id AND " + dataModel.getUserIDColumn() +
+          "=?) possible_item_ids WHERE id NOT IN (SELECT " + dataModel.getItemIDColumn() + " FROM " + dataModel.getPreferenceTable() +
+          " WHERE " + dataModel.getUserIDColumn() + "=?)",
           // deleteDiffsSQL
           "DELETE FROM " + diffsTable,
           // createDiffsSQL
           "INSERT INTO " + diffsTable + " (" + itemIDAColumn + ", " + itemIDBColumn + ", " + avgColumn +
-          ", " + countColumn + ") SELECT prefsA." + itemIDColumn + ", prefsB." + itemIDColumn + ',' +
-          " AVG(prefsB." + preferenceColumn + " - prefsA." + preferenceColumn + ")," +
-          " COUNT(1) AS count FROM " + preferenceTable + " prefsA, " + preferenceTable + " prefsB WHERE prefsA." +
-          userIDColumn + " = prefsB." + userIDColumn + " AND prefsA." + itemIDColumn + " < prefsB." +
-          itemIDColumn + ' ' + " GROUP BY prefsA." + itemIDColumn +
-          ", prefsB." + itemIDColumn + " HAVING count >=?",
+          ", " + countColumn + ") SELECT prefsA." + dataModel.getItemIDColumn() + ", prefsB." + dataModel.getItemIDColumn() + ',' +
+          " AVG(prefsB." + dataModel.getPreferenceColumn() + " - prefsA." + dataModel.getPreferenceColumn() + ")," +
+          " COUNT(1) AS count FROM " + dataModel.getPreferenceTable() + " prefsA, " + dataModel.getPreferenceTable() + " prefsB WHERE prefsA." +
+          dataModel.getUserIDColumn() + " = prefsB." + dataModel.getUserIDColumn() + " AND prefsA." + dataModel.getItemIDColumn() + " < prefsB." +
+          dataModel.getItemIDColumn() + ' ' + " GROUP BY prefsA." + dataModel.getItemIDColumn() +
+          ", prefsB." + dataModel.getItemIDColumn() + " HAVING count >=?",
           // diffsExistSQL
           "SELECT COUNT(1) FROM " + diffsTable,
           minDiffCount);