2012-10-22 9 views
2

안녕하세요 Mahout 커뮤니티!Mahout recommender를 더 빨리 작동시키는 방법은 무엇입니까?

나는 추천 계산 속도를 높이는 데 몇 가지 질문이 있습니다. 내 서버에는 Mahout이 Hadoop없이 설치되어 있습니다. 또한 jRuby는 권장 스크립트로 사용됩니다. 데이터베이스에는 3k 명의 사용자와 100,000 개의 항목 (조인 테이블의 270k 항목)이 있습니다. 사용자가 권장 사항을 요청할 그래서 때 간단한 스크립트 작업을 시작합니다

connection = org.postgresql.ds.PGPoolingDataSource.new() 
    connection.setDataSourceName("db_name"); 
    connection.setServerName("localhost") 
    connection.setPortNumber(5432) 
    connection.setDatabaseName("db_name") 
    connection.setUser("mahout") 
    connection.setPassword("password") 
    connection.setMaxConnections(100) 
    connection 

내가이 경고를 얻을 :

첫째는이 같은 PGPoolingDataSource를 사용하여 DB 연결을 설정

WARNING: You are not using ConnectionPoolDataSource. Make sure your DataSource pools connections to the database itself, or database performance will be severely reduced. 

모든 아이디어를 어떻게 해결하는 방법 그?

는 후에 나는 권고를 만듭니다 들어

model = PostgreSQLJDBCDataModel.new(
    connection, 
    'stars', 
    'user_id', 
    'repo_id', 
    'preference', 
    'created_at' 
) 

    similarity = TanimotoCoefficientSimilarity.new(model) 
    neighborhood = NearestNUserNeighborhood.new(5, similarity, model) 
    recommender = GenericBooleanPrefUserBasedRecommender.new(model, neighborhood, similarity) 
    recommendations = recommender.recommend user_id, 30 

지금은 하나의 사용자에 대한 추천을 생성하기 위해 5 ~ 10 초 정도 걸립니다. 질문은 권장 사항을 더 빨리 만드는 방법입니다 (200ms는 좋을 것입니까?).

답변

7

풀링 데이터 원본을 사용하는 것으로 알고있는 경우 경고를 무시할 수 있습니다. 구현이 풀링 구현을위한 일반적인 인터페이스 인 ConnectionPoolDataSource을 구현하지 않음을 의미합니다.

데이터베이스에서 직접 실행하려는 경우 절대 실행 속도를 높이 지 못할 것입니다. 너무 많은 데이터 액세스가 있습니다. JDBCDataModelReloadFromJDBCDataModel으로 감싸면 메모리에 캐시되어 문자 그대로 100 배 빠르게 작동합니다.

+1

Sean, 답변을 기다리고있었습니다. 대단히 감사합니다. ReloadFromJDBCDataModel은 내가 필요한 것입니다. 다시로드하지 않으면 사용자가 8 초가 걸리고 다시로드하면 18 초 안에 119 명의 사용자가 처리됩니다. 속도는 53 배입니다! – makaroni4

관련 문제