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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Про 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 станет чуть понятней, где ее можно использовать.

Источник: https://habr.com/ru/post/599653/


Интересные статьи

Интересные статьи

Пришло время оживить преданный забвению FizzBuzz. Попробуем найти самое компактное решение FizzBuzz на Python.
Выгрузка пользователей из 1C ЗУП в Битрикс24 или правдивая история о том как настроить интеграцию 1С-Битрикс24 с ЗУП без 1С-ника В жизни так бывает, причём бывает чаще чем хотелось б...
Graudit поддерживает множество языков программирования и позволяет интегрировать тестирование безопасности кодовой базы непосредственно в процесс разработки. Источник: Unsplash (...
Компании переполнили рынок товаров и услуг предложениями. Разнообразие наблюдается не только в офлайне, но и в интернете. Достаточно вбить в поисковик любой запрос, чтобы получить подтверждение насыще...
В настоящее время все больше компаний начинают использовать GraphQL. Это относительно новая технология (если быть более точным, то это язык запросов), которая призвана решить существующие про...