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 19:16:55 UTC

svn commit: r792612 - /lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.java

Author: srowen
Date: Thu Jul  9 17:16:54 2009
New Revision: 792612

URL: http://svn.apache.org/viewvc?rev=792612&view=rev
Log:
Added a little item-count caching

Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/jdbc/AbstractJDBCDataModel.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=792612&r1=792611&r2=792612&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 17:16:54 2009
@@ -23,6 +23,8 @@
 import org.apache.mahout.cf.taste.impl.common.IOUtils;
 import org.apache.mahout.cf.taste.impl.common.IteratorIterable;
 import org.apache.mahout.cf.taste.impl.common.SkippingIterator;
+import org.apache.mahout.cf.taste.impl.common.Cache;
+import org.apache.mahout.cf.taste.impl.common.Retriever;
 import org.apache.mahout.cf.taste.impl.model.GenericItem;
 import org.apache.mahout.cf.taste.impl.model.GenericPreference;
 import org.apache.mahout.cf.taste.impl.model.GenericUser;
@@ -98,6 +100,7 @@
   private final String getNumPreferenceForItemsSQL;
   private int cachedNumUsers;
   private int cachedNumItems;
+  private final Cache<Object,Integer> itemPrefCounts;
 
   protected AbstractJDBCDataModel(DataSource dataSource,
                                   String getUserSQL,
@@ -191,6 +194,8 @@
 
     this.cachedNumUsers = -1;
     this.cachedNumItems = -1;
+    this.itemPrefCounts = new Cache<Object,Integer>(new ItemPrefCountRetriever(getNumPreferenceForItemSQL));
+
   }
 
   private static void checkNotNullAndLog(String argName, Object value) {
@@ -426,7 +431,7 @@
       throw new IllegalArgumentException("Illegal number of item IDs: " + length);
     }
     return length == 1 ?
-        getNumThings("user preferring item", getNumPreferenceForItemSQL, itemIDs) :
+        itemPrefCounts.get(itemIDs[0]) :
         getNumThings("user preferring items", getNumPreferenceForItemsSQL, itemIDs);
   }
 
@@ -529,6 +534,7 @@
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     cachedNumUsers = -1;
     cachedNumItems = -1;
+    itemPrefCounts.clear();
   }
 
 
@@ -796,4 +802,16 @@
 
   }
 
+  private class ItemPrefCountRetriever implements Retriever<Object,Integer> {
+    private final String getNumPreferenceForItemSQL;
+
+    private ItemPrefCountRetriever(String getNumPreferenceForItemSQL) {
+      this.getNumPreferenceForItemSQL = getNumPreferenceForItemSQL;
+    }
+
+    @Override
+    public Integer get(Object key) throws TasteException {
+      return getNumThings("user preferring item", getNumPreferenceForItemSQL, key);
+    }
+  }
 }