【发布时间】:2013-08-26 21:28:28
【问题描述】:
我目前正在尝试使用 neo4j (v1.9.2) 作为产品推荐工具。
该模型非常简单,只有几笔交易,每笔交易都使用“包含”关系与产品相关联。
给定一个产品,以下密码查询返回包含在其他交易中的推荐产品。
START product=node(3)
MATCH product-[:CONTAINS]-otherTransaction-[:CONTAINS]->other_product
WHERE product <> other_product
RETURN other_product.number AS productCode,
COUNT(other_product) AS ranking
ORDER BY ranking DESC
查询按预期工作,返回其他推荐产品,但是,对于大型数据集,它非常慢!使用 JavaAPI 方法而不是 cypher 并没有太大的区别。即使使用 neo4j 服务器也会导致内存不足的问题。
对于如何处理性能问题,我将不胜感激。
- 是否有多线程方法来遍历图?
- 如何将上述密码查询拆分为多个子查询,然后整理答案?
- 是否应该更改遍历方法,而不是尝试到达与起始产品关联的所有节点?
【问题讨论】:
-
多大是多大?慢有多慢?您的图表中有多少个节点,每个产品包含多少个关系?只是第一次运行很慢,还是多次运行查询仍然很慢?
-
嗨,Bill,我开始查看大约 600,000 行记录,这些记录映射到具有 600K 关系的大约 28,000 个节点。一些产品出现在大约 20 次交易中,而更常见的产品出现在大约 3000 次交易中。即使有大数据,找到包含给定产品的交易数量似乎也很好。确定推荐产品的第二部分是慢的(即运行30分钟后,您仍然没有得到结果)。我还没有完整的第一次运行。问候,设拉子
-
嗨,你试过reco4j吗?它有一个 neo4j 插件,可让您在几分钟内开始推荐。看看吧:reco4j.org
-
格拉齐亚历山德罗。不,我还没有研究过reco4j。我试试看,谢谢。我的理解是,reco4j 是基于 neo4j 之上的,因此可能会遇到与大数据相同的性能问题。问候,设拉子
-
是否有可能将 neo4j 纯粹用于大数据推荐引擎?如果是,那么我是否必须事先遍历图表并将数据加载到内存中以加快后续搜索?还是我必须重新审视模型结构。目前,我有一个包含多个产品 P1 和 P2 的交易 T1(产品的传出路径)。如果neo4j 不适合那么,是的,我会考虑看看reco4j。 Gremlin 在哪里适合这个?对于我打算查询的内容,它会比 Cypher 更快吗?谢谢,设拉子