Мне нужна помощь с одним из моих графиков Neo4j. Мои узлы и отношения выглядят примерно так
Это пример сквозных отношений в графе.
проблема связана с тем, что узел (хранилище) имеет несколько (уведомления), и они связаны со множеством (типы действий уведомления) и (типы уведомления)
Запрос выглядит примерно так:
MATCH (s:app)-[:HAS_GEOZONE]->(g:geozone)-[:HAS_ENGAGEMENTZONE]->(e:engagement_zone)-[:HAS_STORE]->(st:store)-[:HAS_NOTIFICATION]->(nt:notification), shortestPath((nt)-[r:HAS_NOTIFICATION_TYPE]->(ntt:notification_type)), shortestPath((nt)-[ra:HAS_NOTIFICATION_ACTION_TYPE]->(ntta:notification_action_type)), (st)-[:HAS_ATTRIBUTE]->(sta:store_attribute) WHERE s.uuid={app_id} AND sta.key='name' OPTIONAL MATCH (nt)-[:HAS_BRAND]->(br:brand) OPTIONAL MATCH (nt)-[:HAS_LABEL]->(l:loyalty) RETURN nt.uuid as nt_id, COLLECT(DISTINCT st.uuid) as st_ids, COLLECT(DISTINCT sta.value) as store_names, COLLECT(DISTINCT properties(br)) as notification_brands, COLLECT(DISTINCT properties(l)) as notification_labels, COLLECT(DISTINCT properties(nt)) as notification, COLLECT(DISTINCT properties(ntt)) as notification_type, COLLECT(DISTINCT properties(ntta)) as notification_action_type ORDER BY nt_id
А время ответа на один запрос составляет более 8 секунд. И моя заявка в конечном итоге требует эту информацию довольно часто. Который вызывал общий плохой отклик и сбои, поэтому в промежутке времени я ввел redis, чтобы кэшировать некоторые из этих данных, требуемых приложением.
например, ответ одной записи из исходного запроса -
И, json выглядит как ниже, где имена столбцов являются узлами в графе
[
{
"nt_id": "002a3ba0-2584-11ea-93de-118eb121a0f8",
"st_ids": [
"e5fb2cc0-2246-11ea-a327-c1a6ac2ca4a0"
],
"store_names": [
"AND"
],
"notification_brands": [],
"notification_labels": [],
"notification": [
{
"sub_text": "Happy shopping!!",
"action_url": "https://www.tatacliq.com/and/c-mbh11a00015",
"image_url": "",
"notification_match_type": "GENERAL",
"validity_start": 1,
"text": "Welcome to {{store_name}}",
"inventory_request_params": "",
"isActive": true,
"validity_end": 1,
"uuid": "002a3ba0-2584-11ea-93de-118eb121a0f8",
"active_days": "{\"SUNDAY\":\"1100-2100\",\"MONDAY\":\"1100-2100\",\"TUESDAY\":\"1100-2100\",\"WEDNESDAY\":\"1100-2100\",\"THURSDAY\":\"1100-2100\",\"FRIDAY\":\"1100-2100\",\"SATURDAY\":\"1100-2100\"}"
}
],
"notification_type": [
{
"name": "Deals & Offers",
"uuid": "2fdc2b20-4faf-11e9-bfff-47192e190163"
}
],
"notification_action_type": [
{
"name": "In Store",
"uuid": "ce78fc50-4fae-11e9-b974-7995b4e2b93d"
}
]
}
]
neo4j версия: neo4j: 3.5.12-enterprise и работает на Docker на AWS m5.xlarge машине с настроенной кучей 12G и размером кеша
что за Используемый вами API / драйвер: Rest API на ECS и Node JS на отдельных экземплярах
снимок экрана [PROFILE or EXPLAIN]
Кроме того, добавляется query.log, который объясняет временные рамки выполнения в реальной среде.
query.log query.log .1
Любая помощь в этом очень ценится!
Спасибо, Арнаб