On 07/18/2012 11:56 PM, Sean Owen wrote:
Unless your data set is tiny, like 100K records or less, it is not going to
be feasible to run recommendations off the database directly. It's just too
data intensive. You need to read into memory to make real-time recs. Check
out ReloadFromJDBCDataModel.
Dear Sean,
Thank you for your answer. I tried to understand the use of
ReloadFromJDBCDataModel but I am not sure If I am using it right:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setServerName("localhost");
dataSource.setUser("user");
dataSource.setPassword("user_pass");
dataSource.setDatabaseName("user_preference_DB");
dataSource.setCachePreparedStatements(true);
dataSource.setCachePrepStmts(true);
dataSource.setCacheResultSetMetadata(true);
dataSource.setAlwaysSendSetIsolation(false);
dataSource.setElideSetAutoCommits(true);
JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource,
"user_preferences", "user_id", "item_id", "preference",
"timestamp");
ReloadFromJDBCDataModel reloadModel =
new ReloadFromJDBCDataModel(dataModel);
DataModel model = reloadModel.getDelegateInMemory();
UserSimilarity userSimilarity =
new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood(3, userSimilarity, model);
Recommender recommender =
new GenericUserBasedRecommender(model, neighborhood,
userSimilarity);
Recommender cachingRecommender = new
CachingRecommender(recommender);
List<RecommendedItem> recommendations =
cachingRecommender.recommend(1234, 10);
When I attempt to run the application, It does not produce any results.
Also, I would like to inform you that the database I am using has 10
million records.
Am I doing it right, or am I still missing something?
Thank you for your time,
Nick Katsipoulakis