问题是如何存储(和搜索)用户喜欢和不喜欢的一组项目。虽然每个用户的集合中可能有2-100个项目,但项目的可能值数量为数万(并且正在扩展)。
与每个项目相关联的值是10(从)到0(中性)到-10(不喜欢)。
因此,如果给定具有特定集合的用户,如何查找具有相似集合的用户(例如交叉点上的百分比重叠)?理想情况下,匹配集可以通过过滤器减少,该过滤器仅包含具有特定百分比内的相似/不喜欢值的项目。
我没有看到如何为此使用键/值或列存储,并且每个用户的步行关系表项似乎消耗了太多资源。将这些集合变成文档似乎会失去清晰度。
网络应用程序是Java。我搜索过ORMS,NoSQL,ElasticSearch以及相关的工具和数据库。有什么建议吗?
答案 0 :(得分:0)
好的,这似乎是实际存储不是问题,但你想根据喜欢/不喜欢的方式建立一个建议系统。
关键是你可以随意存储东西,即使在SQL中,大多数SQL RDBMS对于你的数据存储都足够好,但你当然也可以使用你想要的任何东西。关键是,没有SQL解决方案(我知道)会给你带来好的结果。你正在寻找的是一个基于人工智能的建议系统,对于分布式系统来说,最好的系统是Apache Mahout。
根据我到目前为止所学到的知识,它可以基本上开箱即用。我知道它基于Hadoop和Yarn,但我不确定您是否可以从任何地方导入数据,或者需要在HDFS中使用它。
其他选择是自己实现一个机器学习算法,它只能在一台机器上运行,但你不会在任何sql系统中通过简单的查询得到你想要的结果。
在大多数情况下,你需要机器学习算法和带有一些数字的查询的原因是不够的,你所面临的用户的多样性......如果你有一个喜欢/不喜欢他所拥有的一切的用户B怎么办?与用户A相同的方式 - 但覆盖率仅为15%。另一方面,你有一个非常类似于A的用户C(虽然不是100%,方向几乎相同)而且C标记了超过90%的东西,A也标记了。在这种情况下,C比B更接近A,但B的覆盖率为100%。还有许多其他场景,其中大多数简单的百分比都不够,这就是为什么许多拥有建议系统的公司(亚马逊,Netflix,Spotify,......)都使用Apache Mahout和类似的系统来完成这些。