Данные на основе времени в neo4j - PullRequest
24 голосов
/ 24 февраля 2012

есть вопрос по графовым базам данных, кто-нибудь может мне помочь, пожалуйста? я обрабатывая довольно много данных в MySQL около 5 миллионов записей в день, отправленных маршрутизатор, как устройство, точки доступа, беспроводные мосты. Данные обычно данные о здоровье, GPS и т. д ... это устройства на транспортных средствах. Как Вы обрабатываете данные на основе времени в графовых базах данных? Кто-нибудь подал заявку neo4j для временных данных? Было бы здорово узнать, как вы запрашиваете интервалы и как вы будете заниматься моделированием.

Полагаю, я могу создать узел каждый раз, когда получаю данные свойства устанавливаются каждый раз как измененный gps, здоровье? Было бы время на основе графика - это звучит правильно? хорошо с 5М строк MySQL не работает плохо - но, как маршрутизатор становится новым функциональность новые данные поступают, и мне нужно создавать новые модели опять же, что не плохо, но не здорово. я хочу что-то полуструктурированное и создающее разные отношения такие вещи, как то, почему пользователь был выгнан из-за точки доступа связанный с роутером не работает. Мои обычные вопросы должны были бы поднять оповещения о том, что одно из устройств не работает или если neo4j поможет мне в браке этих отношений лучше чем mysql?

Хотелось бы узнать, что вы, ребята, думаете, любые комментарии + мысли оценили.

Ответы [ 2 ]

16 голосов
/ 29 октября 2013

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

http://gist.neo4j.org/?github-kbastani%2Fgists%2F%2Fmeta%2FTimeScaleEventMetaModel.adoc

Time Scale Graph

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

Идентичность, обозначенная красным путем, равна 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

На изображении выше представлена ​​шкала времени, связанная с серией событий (встретились). События, представленные в виде треугольных узлов на изображении, также связаны с иерархией объектов (Джон, Салли, Пэм, Энн), которые затем обобщаются в классы (Персона).

Теперь вы можете запустить запрос 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, чтобы увидеть более подробную информацию и реальные примеры подграфа события шкалы времени.

6 голосов
/ 27 февраля 2012

Вы также можете посмотреть индексирование на самом графике, см. http://blog.neo4j.org/2012/02/modeling-multilevel-index-in-neoj4.html для примера временной шкалы. В противном случае Lucene по умолчанию упакован с Neo4j, работает почти так же, как Solr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...