Apache 如何让Mahout推荐人更快地工作?

Apache 如何让Mahout推荐人更快地工作?,apache,hadoop,mahout,Apache,Hadoop,Mahout,您好,SO的Mahout社区 我有几个关于加速推荐计算的问题。在我的服务器上,我安装了没有Hadoop的Mahout。jRuby还用于推荐脚本。在数据库中,我有3k个用户和100k个项目(join表中有270k个项目)。因此,当用户请求推荐时,简单脚本开始工作: 首先,它使用pgpooligdatasource建立数据库连接,如下所示: connection = org.postgresql.ds.PGPoolingDataSource.new() connection.setDataS

您好,SO的Mahout社区

我有几个关于加速推荐计算的问题。在我的服务器上,我安装了没有Hadoop的Mahout。jRuby还用于推荐脚本。在数据库中,我有3k个用户和100k个项目(join表中有270k个项目)。因此,当用户请求推荐时,简单脚本开始工作:

首先,它使用
pgpooligdatasource
建立数据库连接,如下所示:

  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
我得到这个警告:

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秒。问题是如何更快地提出建议(最好是200毫秒)?

如果您知道正在使用池数据源,可以忽略警告。这意味着该实现没有实现池实现的常用接口,
ConnectionPoolDataSource


如果您试图直接从数据库中运行,则永远无法使其快速运行。数据访问太多了。将
JDBCDataModel
包装在
ReloadFromJDBCDataModel
中,它将被缓存在内存中,这样的速度应该会快100倍。

Sean,我希望得到你的答案,非常感谢-ReloadFromJDBCDataModel正是我所需要的。如果不重新加载,一个用户需要8秒,而使用重新加载,我在18秒内处理了119个用户。现在是53倍加速!