在数据库中存储和搜索集(具有许多可能的值)(来自Java)

在数据库中存储和搜索集(具有许多可能的值)(来自Java),java,sql,database,set,nosql,Java,Sql,Database,Set,Nosql,问题是如何存储(和搜索)一组用户喜欢和不喜欢的项目。虽然每个用户的集合中可能有2-100个项目,但项目的可能值以数万计(并且正在扩展) 与每个项目相关联的是一个值,比如从10(like)到0(neutral)到-10(loke) 因此,给定一个具有特定集合的用户,如何找到具有相似集合的用户(例如交叉点上的重叠百分比)?理想情况下,可以通过一个过滤器减少匹配集,该过滤器只包括在一定百分比内具有相似/不相似值的项目 我不知道如何使用键/值或列存储来实现这一点,为每个用户遍历项目的关系表似乎会消耗太多

问题是如何存储(和搜索)一组用户喜欢和不喜欢的项目。虽然每个用户的集合中可能有2-100个项目,但项目的可能值以数万计(并且正在扩展)

与每个项目相关联的是一个值,比如从10(like)到0(neutral)到-10(loke)

因此,给定一个具有特定集合的用户,如何找到具有相似集合的用户(例如交叉点上的重叠百分比)?理想情况下,可以通过一个过滤器减少匹配集,该过滤器只包括在一定百分比内具有相似/不相似值的项目

我不知道如何使用键/值或列存储来实现这一点,为每个用户遍历项目的关系表似乎会消耗太多的资源。将这些集合编入文档似乎会失去清晰度


这个web应用程序是用Java编写的。我搜索过ORMS、NoSQL、ElasticSearch以及相关的工具和数据库。有什么建议吗?

好的,看起来实际存储不是问题所在,但您希望根据喜欢/不喜欢的内容建立一个建议系统

关键是,您可以随心所欲地存储东西,即使在SQL中,大多数SQL RDBMS对于您的数据存储来说已经足够好了,但是您当然也可以使用任何其他您想要的东西。关键是,没有任何SQL解决方案(据我所知)能在这方面给您带来好的结果。您正在寻找的是一个基于人工智能的建议系统,而对于分布式系统来说,最好的建议系统是

根据我到目前为止对它的了解,它可以做你需要的基本上是开箱即用。我知道它是基于Hadoop和Thread的,但我不确定是否可以从任何地方导入数据,或者是否需要在HDFS中导入数据

另一个选择是自己实现一个机器学习算法,它只在一台机器上运行,但在任何sql系统中,通过简单的查询都无法得到想要的结果


在大多数情况下,你需要机器学习算法和带有一些数字的查询是不够的,因为你所面对的用户的多样性……如果你有一个用户B,他以同样的方式喜欢/不喜欢他与用户a的所有共同点,但覆盖率只有15%,该怎么办。另一方面,用户C与A非常相似(虽然不是100%,但方向基本相同),C标记了90%以上的东西,A也标记了。在这种情况下,C比B更接近A,但B有100%的覆盖率。还有许多其他情况下,大多数简单的百分比是不够的,这就是为什么许多拥有建议系统的公司(亚马逊、Netflix、Spotify等)使用Apache Mahout和类似的系统来完成这些任务。

我认为你应该调查推荐系统。我不认为通过一两个查询就可以轻松实现这类问题。一个具体的示例可能会澄清您的问题并激发更多的答案。谢谢。你是对的,问题更复杂。我缩小了提问的范围。我将投入更多的精力来学习Mahout。你能为我的问题推荐最好的算法吗?