## org.apache.mahout.cf.taste.impl.recommender.slopeone.jdbc
Class AbstractJDBCDiffStorage

    java.lang.Object
      org.apache.mahout.cf.taste.impl.common.jdbc.AbstractJDBCComponent
          org.apache.mahout.cf.taste.impl.recommender.slopeone.jdbc.AbstractJDBCDiffStorage

All Implemented Interfaces:
  Refreshable, DiffStorage

Direct Known Subclasses:
  MySQLJDBCDiffStorage

    public abstract class AbstractJDBCDiffStorage

extends AbstractJDBCComponent
implements DiffStorage

A `DiffStorage` which stores diffs in a database. Database-specific implementations subclass this abstract class. Note that this implementation has a fairly particular dependence on the `DataModel` used; it needs a `JDBCDataModel` attached to the same database since its efficient operation depends on accessing preference data in the database directly.

Field Summary
`static java.lang.String` `DEFAULT_AVERAGE_DIFF_COLUMN`
`static java.lang.String` `DEFAULT_COUNT_COLUMN`
`static java.lang.String` `DEFAULT_DIFF_TABLE`
`static java.lang.String` `DEFAULT_ITEM_A_COLUMN`
`static java.lang.String` `DEFAULT_ITEM_B_COLUMN`
`static java.lang.String` `DEFAULT_STDEV_COLUMN`

Fields inherited from class org.apache.mahout.cf.taste.impl.common.jdbc.AbstractJDBCComponent
`DEFAULT_DATASOURCE_NAME`

Constructor Summary
`protected` `AbstractJDBCDiffStorage(JDBCDataModel dataModel, java.lang.String getDiffSQL, java.lang.String getDiffsSQL, java.lang.String getAverageItemPrefSQL, java.lang.String[] updateDiffSQLs, java.lang.String[] removeDiffSQLs, java.lang.String getRecommendableItemsSQL, java.lang.String deleteDiffsSQL, java.lang.String createDiffsSQL, java.lang.String diffsExistSQL, int minDiffCount)`

Method Summary
`RunningAverage` `getAverageItemPref(long itemID)`
`RunningAverage` `getDiff(long itemID1, long itemID2)`
`RunningAverage[]` `getDiffs(long userID, long itemID, PreferenceArray prefs)`
`FastIDSet` `getRecommendableItemIDs(long userID)`
`void` `refresh(java.util.Collection<Refreshable> alreadyRefreshed)` Triggers "refresh" -- whatever that means -- of the implementation.
`void` `updateItemPref(long itemID, float prefDelta, boolean remove)` Note that this implementation does not update standard deviations.

Methods inherited from class org.apache.mahout.cf.taste.impl.common.jdbc.AbstractJDBCComponent
`advanceResultSet, checkNotNullAndLog, checkNotNullAndLog, getFetchSize, lookupDataSource`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### DEFAULT_DIFF_TABLE

    public static final java.lang.String DEFAULT_DIFF_TABLE

See Also:
  Constant Field Values

### DEFAULT_ITEM_A_COLUMN

    public static final java.lang.String DEFAULT_ITEM_A_COLUMN

See Also:
  Constant Field Values

### DEFAULT_ITEM_B_COLUMN

    public static final java.lang.String DEFAULT_ITEM_B_COLUMN

See Also:
  Constant Field Values

### DEFAULT_COUNT_COLUMN

    public static final java.lang.String DEFAULT_COUNT_COLUMN

See Also:
  Constant Field Values

### DEFAULT_AVERAGE_DIFF_COLUMN

    public static final java.lang.String DEFAULT_AVERAGE_DIFF_COLUMN

See Also:
  Constant Field Values

### DEFAULT_STDEV_COLUMN

    public static final java.lang.String DEFAULT_STDEV_COLUMN

See Also:
  Constant Field Values

Constructor Detail

### AbstractJDBCDiffStorage

    protected AbstractJDBCDiffStorage(JDBCDataModel dataModel,
                                      java.lang.String getDiffSQL,
                                      java.lang.String getDiffsSQL,
                                      java.lang.String getAverageItemPrefSQL,
                                      java.lang.String[] updateDiffSQLs,
                                      java.lang.String[] removeDiffSQLs,
                                      java.lang.String getRecommendableItemsSQL,
                                      java.lang.String deleteDiffsSQL,
                                      java.lang.String createDiffsSQL,
                                      java.lang.String diffsExistSQL,
                                      int minDiffCount)
                               throws TasteException

Throws:
  `TasteException`

Method Detail

### getDiff

    public RunningAverage getDiff(long itemID1,
                                  long itemID2)
                           throws TasteException

  Specified by:
    `getDiff` in interface `DiffStorage`
  Returns:
    `RunningAverage` encapsulating the average difference in preferences between items corresponding to `itemID1` and `itemID2`, in that direction; that is, it's the average of item 2's preferences minus item 1's preferences
  Throws:
    `TasteException`

### getDiffs

    public RunningAverage[] getDiffs(long userID,
                                     long itemID,
                                     PreferenceArray prefs)
                              throws TasteException

  Specified by:
    `getDiffs` in interface `DiffStorage`
  Parameters:
    `userID` - user ID to get diffs for
    `itemID` - itemID to assess
    `prefs` - user's preferendces
  Returns:
    `RunningAverage`s for that user's item-item diffs
  Throws:
    `TasteException`

### getAverageItemPref

    public RunningAverage getAverageItemPref(long itemID)
                                      throws TasteException

  Specified by:
    `getAverageItemPref` in interface `DiffStorage`
  Returns:
    `RunningAverage` encapsulating the average preference for the given item
  Throws:
    `TasteException`

### updateItemPref

    public void updateItemPref(long itemID,
                               float prefDelta,
                               boolean remove)
                        throws TasteException

  Note that this implementation does not update standard deviations. This would be expensive relative to the value of slightly adjusting these values, which are merely used as weighted. Rebuilding the diffs table will update standard deviations.

  Specified by:
    `updateItemPref` in interface `DiffStorage`
  Parameters:
    `itemID` - item to update preference value for
    `prefDelta` - amount by which preference value changed (or its old value, if being removed
    `remove` - if `true`, operation reflects a removal rather than change of preference
  Throws:
    `TasteException`

### getRecommendableItemIDs

    public FastIDSet getRecommendableItemIDs(long userID)
                                      throws TasteException

  Specified by:
    `getRecommendableItemIDs` in interface `DiffStorage`
  Returns:
    item IDs that may possibly be recommended to the given user, which may not be all items since the item-item diff matrix may be sparse
  Throws:
    `TasteException`

### refresh

    public void refresh(java.util.Collection<Refreshable> alreadyRefreshed)

  Description copied from interface: `Refreshable`

  Triggers "refresh" -- whatever that means -- of the implementation. The general contract is that any should always leave itself in a consistent, operational state, and that the refresh atomically updates internal state from old to new.

  Specified by:
    `refresh` in interface `Refreshable`
  Parameters:
    `alreadyRefreshed` - s that are known to have already been refreshed as a result of an initial call to a method on some object. This ensure that objects in a refresh dependency graph aren't refreshed twice needlessly.

Copyright © 2008-2010 The Apache Software Foundation. All Rights Reserved.