Пожалуйста, обратитесь к следующему GraphGist для учебника о том, как сделать хранение графиков на основе времени с использованием временных шкал.
http://gist.neo4j.org/?github-kbastani%2Fgists%2F%2Fmeta%2FTimeScaleEventMetaModel.adoc
![Time Scale Graph](https://raw.github.com/kbastani/gists/master/meta/TSEMM-v1.04.png)
На графике шкалы времени, который смоделирован выше, кратчайший путь от узла, окрашенного в синий цвет, до узла, окрашенного в прозрачный цвет, представляет собой уникальную временную идентификацию в битах.
Идентичность, обозначенная красным путем, равна 0 → 1 → 0 → 1 → 0 → 0. Обратный путь - это 0 → 0 → 1 → 0 → 1 → 0 или просто 001010, уникальный идентификатор в битах.
MATCH p=shortestPath((n1:d)-[:child_of*]->(n2:y))
WHERE n1.key = 'd10'
RETURN DISTINCT reduce(s = '' , n IN nodes(p)| n.tempo + s) AS TimeIdentity
ORDER BY TimeIdentity
Приведенный выше запрос Cypher моделирует кратчайший путь от узла, окрашенного в синий цвет, до узла, окрашенного в прозрачный цвет. Это битовая строка, представляющая идентификатор времени, который можно упорядочить по событию в зависимости от его положения в подграфе события шкалы времени.
См. Ниже подграф события шкалы времени:
![Time Scale Event Subgraph](https://raw.github.com/kbastani/gists/master/meta/TSEMM-Temporal-Binding.png)
На изображении выше представлена шкала времени, связанная с серией событий (встретились). События, представленные в виде треугольных узлов на изображении, также связаны с иерархией объектов (Джон, Салли, Пэм, Энн), которые затем обобщаются в классы (Персона).
Теперь вы можете запустить запрос Cypher, подобный тому, который я перечислил ранее, который затем упорядочит события по времени появления в виде битовой строки. Примечание. Необходимо применить временную метку к узлу, который извлекает фактическое время. Каждый синий узел представляет событие, разделенное временем, но не обязательно фактическое время, просто представление событий, которые произошли в заказе.
MATCH p=(p0:person)-[:event]->(ev)-[:event]->(p1:person)
WITH p, ev
MATCH time_identity = (d0:d)<-[:event]-(ev)
WITH d0, p
MATCH p1=(d0)-[:child_of*]->(y0:y)
RETURN extract(x IN nodes(p)| coalesce(x.name, x.future)) AS Interaction, reduce(s = '' , n IN nodes(p1)| n.tempo + s) AS TimeIdentity
ORDER BY TimeIdentity
Иерархии в шкале времени позволяют группировать события и видеть представления на более высоких уровнях. Таким образом, при выборе всех зеленых узлов под оранжевым узлом выбираются 4 возможных события (представленных синими узлами).
Дайте мне знать, если у вас есть какие-либо вопросы, и обязательно посетите GraphGist, чтобы увидеть более подробную информацию и реальные примеры подграфа события шкалы времени.