Я пытаюсь улучшить систему обнаружения мошенничества для веб-сайта коммерции. Мы имеем дело с прямыми банковскими транзакциями, поэтому мошенничество - это риск, которым мы должны управлять. Недавно я узнал о графических базах данных и узнал, как это относится к этим проблемам. Итак, за последние пару дней я создал neo4j и проанализировал наши данные: exampleneo4j для обнаружения мошенничества - эффективная структура данных
Моей интуицией было создание узла для каждого заказа и узла для каждой связанной с ним части данных, а затем подключения все они вместе. Как это:
MATCH (w:Wallet),(i:Ip),(e:Email),(o:Order)
WHERE w.wallet="ex" AND i.ip="ex" AND e.email="ex" AND o.refcode="ex"
CREATE (w)-[:USED]->(o),(i)-[:USED]->(o),(e)-[:USED]->(o)
Но этот запрос выполняется очень медленно по мере увеличения размера базы данных (я предполагаю, потому что нужно искать весь набор данных для узлов Я прошу). Он также занимает много времени, чтобы выполнить запрос, как это:
START a=node(179)
MATCH (a)-[:USED*]-(d)
WHERE EXISTS(d.refcode)
RETURN distinct d
Это предназначено, чтобы извлечь все заказы, которые подключены к исходной точке. Я очень новичок в Cypher (< 24 часа), и мне особенно сложно искать решения.
Существуют ли какие-либо конкретные проблемы с структурой данных или запросами, которые я могу адресовать для повышения производительности? Это идеальное решение для завершения такого рода вещей в течение нескольких секунд, как я ожидал бы от базы данных SQL. В это время у нас около 17 000 узлов.