我目前有一些代码可以查看各种数据集并模拟它们之间的电子关系。例如,JSESSIONID。
我想模拟每个用户与应用程序的交互,他们必须提交唯一标识符。例如,电子邮件地址。
在处理应用程序的日志时,我看到emailA@host.com使用带有JSESSIONID asdfghjkl的应用程序。然后我看到emailB@host.com也使用了与JESSIONID asdfghjkl的applcation。最后,我看到emailB@host.com使用JSESSIONID qwertyuiop。
在我的代码中,我很容易处理日志并将emailA@host.com和emailB@host.com写成节点,然后在它们之间写下JSESSIONID关系。
MERGE (a:EMAIL {label:userA@host.com}) MERGE (b:EMAIL {label:userB@host.com}) MERGE (a)-[:asdfghjkl]-(b)
但是,我不知道大规模这样做的最好方法。 (即,应用程序日志的大小为1TB)。限制是内存 - 我无法找到所有使用asdfghjkl作为SessionID而不处理所有数据的电子邮件地址,所以由于内存限制,我无法写出它们之间的关系。
我真正想做的是写出如下的内容,但这显然是失败的:
MERGE (a:EMAIL {label:userA@host.com}) (a)-[:asdfghjkl]
然后: MERGE(b:EMAIL {label:userB@host.com})(b) - [:asdfghjkl]
事后可以用查询创建这些关系吗?
答案 0 :(得分:1)
听起来你应该将JSESSIONID建模为节点而不是关系,因为这样可以将JSESSIONID链接到多个电子邮件地址,并且可以在id上添加唯一约束以便快速查找。
MERGE (a:EMAIL {label:userA@host.com})
MERGE (b:EMAIL {label:userB@host.com})
MERGE (jsid:JSESSIONID {id:'asdfghjkl'})
MERGE (a)-[:jsid]->(jsid)
MERGE (b)-[:jsid]->(jsid)
您的查询以查找所有:使用特定JSESSION ID的EMAIL节点应该非常快:
MATCH (email:EMAIL)-[:jsid]->(jsid:JSESSIONID {id:'asdfghjkl'})
RETURN email