2017-02-06 1 views
0

В настоящее время у меня есть код, который просматривает различные наборы данных и моделирует электронные отношения между ними. Например, JSESSIONID.Моделирование отношений в neo4j, когда они неизвестны изначально

Я хотел бы моделировать взаимодействие каждого пользователя с приложением, в котором им нужно отправлять уникальные идентификаторы. Например, адрес электронной почты.

При обработке журналов приложения я вижу [email protected], используя приложение с JSESSIONID asdfghjkl. Затем я вижу, что на [email protected] также используется аппликация с JESSIONID asdfghjkl. Наконец, я вижу, что [email protected] использует JSESSIONID qwertyuiop.

В моем коде перехода мне легко обрабатывать журналы и выписывать как [email protected], так и [email protected] как Узлы, а затем писать отношения JSESSIONID между ними.

MERGE (a:EMAIL {label:[email protected]}) MERGE (b:EMAIL {label:[email protected]}) MERGE (a)-[:asdfghjkl]-(b) 

Однако, я не знаю, как это сделать в масштабе. (т. е. журналы приложений имеют размер 1 ТБ). Ограничение - это память. Я не могу найти все адреса электронной почты, которые используют asdfghjkl в качестве SessionID без обработки всех данных, поэтому я не могу записать связь между ними из-за ограничений памяти.

Что я действительно хотел бы сделать, это написать что-то, как следует, но это явно не удается:

MERGE (a:EMAIL {label:[email protected]}) (a)-[:asdfghjkl] 

Тогда позже: MERGE (б: EMAIL {метка: [email protected]}) (b) - [: asdfghjkl]

Могу ли я создать эти отношения с запросом после факта?

ответ

1

Похоже, что вы должны моделировать JSESSIONID как узлы, а не как отношения, поскольку это позволит вам связать JSESSIONID с несколькими адресами электронной почты, и вы можете добавить уникальное ограничение для идентификатора для быстрого поиска.

MERGE (a:EMAIL {label:[email protected]}) 
MERGE (b:EMAIL {label:[email protected]}) 
MERGE (jsid:JSESSIONID {id:'asdfghjkl'}) 
MERGE (a)-[:jsid]->(jsid) 
MERGE (b)-[:jsid]->(jsid) 

Ваши запросы, чтобы найти все: EMAIL узлы, используя специфический JSESSION идентификатор должен быть довольно быстро:

MATCH (email:EMAIL)-[:jsid]->(jsid:JSESSIONID {id:'asdfghjkl'}) 
RETURN email 
+0

К сожалению, я думаю, что вы правы, и я наклонялся, что путь уже. Поскольку мои диаграммы могут стать довольно большими, я надеялся упростить их (по крайней мере, для графического просмотра). Учитывая вашу предложенную модель данных, есть ли способ запросить, где я буду получать идентификатор JSESSION как отношение, а не узел? I.e., (a) - [: jsid] - (b) вместо (a) - (jsid) - (b)? – mzimmerman

+0

Я так не думаю. Тем более, что отношения требуют двух узлов, в Neo4j не допускаются оборванные отношения, поэтому вы не сможете сохранить эту информацию, если только один узел использует идентификатор сеанса. Кроме того, вам нужно выяснить, как это масштабируется с несколькими узлами электронной почты с использованием одного и того же идентификатора. Если их 5, как вы это моделируете? Соединить все 5 узлов друг с другом? Это не кажется эффективным. Вероятно, вам нужно создать цепочку отношений. Вы также не сможете быстро выполнять поиск по идентификатору сеанса, по крайней мере, не с индексами схемы. Однако устаревшие индексы могут работать. – InverseFalcon

Смежные вопросы