【发布时间】:2014-04-22 03:51:06
【问题描述】:
在我的数据模型中,我使用主题标签对用户进行陈述,每个主题标签都变成了node,它们的共同出现是它们之间的relationship。对于我需要考虑的每一种关系:
- 创建它的用户
rel.user属性 - 创建时间 -
rel.timestamp属性 - 创建它的上下文 -
rel.context属性 - 它的声明 -
rel.statementproperty
现在,Neo4J 不允许关系属性索引,因此当我进行需要检索和评估这些属性的搜索时,需要很长时间。具体来说,当我执行此类 Cypher 请求时:
MERGE hashtag1-[rel:TO
{context:"deb659c0-a18d-11e3-ace9-1fa4c6cf2894",
statement:"824acc80-aaa6-11e3-88e3-453baabaa7ed",
user:"b9745f70-a13f-11e3-98c5-476729c16049"}]->hashtag2
ON CREATE
SET
rel.uid="824f6061-aaa6-11e3-88e3-453baabaa7ed",
rel.timestamp="13947117878770000";
此请求首先检查是否与这些属性有关系,如果有,它不会做任何事情,但如果没有,它将添加一个新的(具有唯一 ID 和时间戳)。因此,由于必须对每个关系进行评估——而且它们没有被索引——这个请求需要很长时间才能通过。现在我遇到了这样的请求的问题,因为我在一个查询中处理大约 100 个节点和 300 个关系(上面的只有一种类型,还有一些其他的添加到查询中,但上面的那些是最多的贵的)。
因此实际问题:
是否有人知道保留这些关系属性并以某种方式使它们更快工作的好方法,以便在需要时更快地检索和评估它们?或者你认为我应该使用不同类型的请求(如果是,哪个?)
谢谢!
【问题讨论】:
标签: performance indexing neo4j cypher graph-databases