Про ArangoDB было уже несколько статей на Хабре, так что подробно расписывать, что это такое тут не буду. Скажу только, что это мультимодельная база данных (графовая и документная). Может возникнуть вопрос - "зачем" и для "каких задач" надо использовать ArangoDB по сравнению с популярными и хорошо известными реляционными или документными базами данных. И сегодня мы посмотрим, как с использованием его графовых возможностей можно решать практические задачи.
ArangoDB часто используется в Финтехе - наверное, в первую очередь потому, что модель транзакций хорошо ложится на графы - ноды - это счета, транзакции - это ребра. Одна из задач, в которой используется эта база - это AntiFraud - отслеживание мошеннических действий.
Для быстрого освоения ArangoDB можно использовать сервис Arango Oasis - это SaaS решение с развернутой версией ArangoDB. Первые две недели этого сервиса даются бесплатно - этого достаточно чтобы понять базовые возможности базы и принять решение - надо вам это или нет, и если надо - то развертывать бесплатную Community версию самотоятельно (благо это достаточно легко) или дальше использовать сервис ArangoDB Oasis.
В рамках ArangoDB Oasis есть руководство с примерами - в частности как раз по поиску "каруселей". На самом деле, используя функции импорта-экспорта, базу этого руководства можно забрать к себе локально для дальнейшего изучения и тестирования. Что я в свое время и сделал.
Итак - что такое "карусель"? Это термин, обозначающий перевод денег "по кругу". Клиент банка переводит деньгу другому клиенту, тот третьему, этот четвертому, а тот в итоге обрантно первому. Зачем? Много причин, в основном это один из механизмов "отмывания денег" - например если потом к первому клиенту придут и спросят - "а откуда у вас данная сумма" она скажет "дэдушка подарил" "клиент 4 перевел - вот и запись о транзакции" (очень утрировано, на самом деле все сложнее).
С точки зрения графовов - это циклы.
Работа с графом в админке ArangoDB
Запускаем базу ArangoDB (например используя docker), ну или логинимся в базу, запущенную на ArangoDB Oasis. Открываем базу Fraud. В интерфейсе сразу видим, что у нас есть несколько вариантов работы с данными - через коллекции, через view и в виде графов. Нам конечно интересней последний вариант - открываем базу как граф.
При первом открытии нам откроется какая-то часть графа (потому что база может быть очень большой, и построение графа может занять много времени)
но справа-сверху есть пункт меню
который позволяет открыть всю базу.
Еще один удобный момент - права же есть меню управления отображения графа - там можно указать, например, текст, который выводится для ребер (в нашем случае это 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 станет чуть понятней, где ее можно использовать.
Комментарии (2)
jvmdude
08.01.2022 17:00-1Странно сравнивать аранго с реляционными СУБД, а не лидером среди графовых - neo4j.
По моему опыту, аранго заметно медленнее neo4j в более менее сложных запросах. Вдобавок в issues аранго ещё совсем недавно просто лютые косяки мелькали (shortestpath реально возвращал не самый короткий путь). Не знаю как у финтехов совести хватает такое использовать...
niyaho8778
кошельки эфира уже пропускали через эту прогу?