Neo4j генерирует данные тепловой карты из координат X и Y - PullRequest
1 голос
/ 22 января 2020

Мне нужно сгенерировать данные тепловых карт в формате CSV, что-то вроде этого:

X,Y,OCCURRENCES
269,697,41
199,493,8
125,318,2
205,526,24
261,572,2

В моей базе данных neo4j есть объект «Точка», который содержит дату, координаты X и Y, и выглядит вот так:

Point: {
  "at": "2018-06-26T06:54:42.671141000+12:00"
  "locationPlanX": 367,
  "locationPlanY": 716  
}

У меня есть запрос, который дает желаемый результат, он хорошо работает с несколькими тысячами точек, но начинает бороться с миллионами.

Запрос:

MATCH (point:Point)
WHERE datetime("2018-06-22T15:00:00.000000+12:00") <= point.at < datetime("2018-06-23T16:00:00.000000+12:00")
AND point.locationPlanX >= 0
AND point.locationPlanY >= 0
WITH point.locationPlanX as x, point.locationPlanY as y, COUNT(point) AS occurrences
RETURN x, y, occurrences

Как я уже говорил, запрос хорошо работает для часа данных, но начинает бороться с днями / неделями. Есть ли что-то еще, что я могу сделать, чтобы улучшить свой запрос? Или любой другой способ сделать это?

ОБНОВЛЕНИЕ: 3 свойства в узле проиндексированы.

1 Ответ

1 голос
/ 22 января 2020

Вы должны создать index для :Point(at):

CREATE INDEX ON :Point(at);

, что позволит вашему запросу избежать сканирования через каждый Point узел, чтобы найти те, которые имеют приемлемый at ценности. Это должно значительно ускорить ваш запрос.

Кроме того, если нет необходимости проверять locationPlanX и locationPlanY на неотрицательность, отмените эти проверки.

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