Как стать автором
Обновить

Поиск каруселей в ArangoDB

Время на прочтение3 мин
Количество просмотров3.2K

Про ArangoDB было уже несколько статей на Хабре, так что подробно расписывать, что это такое тут не буду. Скажу только, что это мультимодельная база данных (графовая и документная). Может возникнуть вопрос - "зачем" и для "каких задач" надо использовать ArangoDB по сравнению с популярными и хорошо известными реляционными или документными базами данных. И сегодня мы посмотрим, как с использованием его графовых возможностей можно решать практические задачи.

Интерфейс ArabngoDB
Интерфейс ArabngoDB

ArangoDB часто используется в Финтехе - наверное, в первую очередь потому, что модель транзакций хорошо ложится на графы - ноды - это счета, транзакции - это ребра. Одна из задач, в которой используется эта база - это AntiFraud - отслеживание мошеннических действий.

Для быстрого освоения ArangoDB можно использовать сервис Arango Oasis - это SaaS решение с развернутой версией ArangoDB. Первые две недели этого сервиса даются бесплатно - этого достаточно чтобы понять базовые возможности базы и принять решение - надо вам это или нет, и если надо - то развертывать бесплатную Community версию самотоятельно (благо это достаточно легко) или дальше использовать сервис ArangoDB Oasis.

В рамках ArangoDB Oasis есть руководство с примерами - в частности как раз по поиску "каруселей". На самом деле, используя функции импорта-экспорта, базу этого руководства можно забрать к себе локально для дальнейшего изучения и тестирования. Что я в свое время и сделал.

Итак - что такое "карусель"? Это термин, обозначающий перевод денег "по кругу". Клиент банка переводит деньгу другому клиенту, тот третьему, этот четвертому, а тот в итоге обрантно первому. Зачем? Много причин, в основном это один из механизмов "отмывания денег" - например если потом к первому клиенту придут и спросят - "а откуда у вас данная сумма" она скажет "дэдушка подарил" "клиент 4 перевел - вот и запись о транзакции" (очень утрировано, на самом деле все сложнее).

С точки зрения графовов - это циклы.

Работа с графом в админке ArangoDB

Запускаем базу ArangoDB (например используя docker), ну или логинимся в базу, запущенную на ArangoDB Oasis. Открываем базу Fraud. В интерфейсе сразу видим, что у нас есть несколько вариантов работы с данными - через коллекции, через view и в виде графов. Нам конечно интересней последний вариант - открываем базу как граф.

При первом открытии нам откроется какая-то часть графа (потому что база может быть очень большой, и построение графа может занять много времени)

отображение графа в админке ArangoDB
отображение графа в админке ArangoDB

но справа-сверху есть пункт меню

который позволяет открыть всю базу.

Еще один удобный момент - права же есть меню управления отображения графа - там можно указать, например, текст, который выводится для ребер (в нашем случае это transaction_amt - размер денежного перевода)

Вот, теперь мы видим счета и переводы между ними.

Как видно, из коробки ArangoDB сразу дает достаточно удобный интерфейс для работы с графами, но, понятно, что "глазками" мы сможем увидеть циклы только в небольших графах. Ну и, нам все-таки надо иметь возможность делать это в автоматическим режиме. Тут на помощь к нам приходит язык запросов - AQL.

Итак, следующий запрос позволяет найти все циклы в графе

WITH transaction, account
FOR suspicous_account IN account
FOR acct, tx, path IN 5..10 OUTBOUND suspicous_account._id GRAPH 'fraud-detection'
PRUNE tx._to == suspicous_account._id
FILTER tx._to == suspicous_account._id
RETURN path

Данный запрос перебирает все ноды (account) и ребра между ними (transaction) и находит все пути, где мы возвращаемся к исходному account-у (suspicous_account._id), причем в нашем случае мы рассматриваем только циклы с длиной от 5 до 10 ребер.

Как видно, одним, достаточно простым запросом, мы можем решить задачу, которая в обычных реляционных базах решалась бы значительно сложнее. При этом ArangoDB дает достаточно удобный интерфейс администратора для работы и с графами, и с запросами. Тот же запрос можно легко выполнить в админке, причем просмотреть результат и в виде графа

результат запроса в виде графа
результат запроса в виде графа

так и в виде JSON

Чем мне понравилась база, это в первую очередь удобством и наглядностью именно работы с графами. Конечно ArangoDB позиционирует себя как multi-model база, но мне кажется ее возможности в основном сконцентрированы вокруг именно графов. Надеюсь, для всех, кто еще не был знаком с ArangoDB станет чуть понятней, где ее можно использовать.

Теги:
Хабы:
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн