{"id":498123,"date":"2026-10-10T15:41:45","date_gmt":"2026-10-10T12:41:45","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=498123"},"modified":"2026-10-10T15:41:45","modified_gmt":"2026-10-10T12:41:45","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=498123","title":{"rendered":"\u041a\u0430\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u0432\u00a0data engineering \u043f\u0440\u043e\u0435\u043a\u0442\u0435: \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u00a0Kafka, ClickHouse \u0438 Airflow"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0426\u0435\u043b\u044c<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e\u00a0Neo4j, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 social networks, fraud detection, recommendation systems \u0438\u043b\u0438\u00a0knowledge graphs. \u041d\u043e\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e\u00a0<strong>data engineering \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/strong>, \u0433\u0434\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Kafka, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0430\u0437\u0430 \u0442\u0438\u043f\u0430 ClickHouse, DBT, Airflow \u0438 BI. \u041c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439:<\/p>\n<blockquote>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c Neo4j \u0432\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 data stack \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435\u00a0\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b data warehouse, \u0430\u00a0\u0440\u0435\u0448\u0430\u043b \u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 SQL?<\/p>\n<\/blockquote>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b AIS\u00a0\u2014 \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u00a0\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0443\u0434\u043e\u0432, <a href=\"https:\/\/www.barentswatch.no\/en\/\" rel=\"noopener nofollow\">https:\/\/www.barentswatch.no\/en\/<\/a>. \u041d\u043e\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435\u00a0AIS. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0435\u043c\u0430\u00a0\u2014\u00a0<strong>\u043c\u0435\u0441\u0442\u043e Neo4j \u0432\u00a0data engineering \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435<\/strong>.<\/p>\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h2>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code>Data sources    \u2193Kafka    \u2193ClickHouse    \u2193dbt    \u2193Airflow    \u2193Metabase<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>ClickHouse \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e AIS\u2011\u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>DBT \u0441\u0442\u0440\u043e\u0438\u0442 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>Airflow \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u043c\u0438 pipeline.<\/p>\n<\/li>\n<li>\n<p>Metabase \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: <strong>\u0417\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0435 Neo4j?<\/strong><\/p>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043d\u043e\u00a0\u0438\u00a0<strong>\u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>Vessel  \u2193VISITED  \u2193Port  \u2193CONNECTED_TO  \u2193Port<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0410\u00a0\u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b \u0432\u00a0\u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0440\u0442\u043e\u0432 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u0438\u0435 \u0441\u0443\u0434\u0430 \u043f\u043e\u0441\u0435\u0449\u0430\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0440\u0442\u0430\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u043d\u043e\u00a0\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u043f\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u042d\u0442\u043e \u0433\u0440\u0430\u0444.<\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430\u00a0\u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/073\/0df\/0e7\/0730df0e76bd416d35c843b5e30a8bea.png\" width=\"3367\" height=\"818\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/073\/0df\/0e7\/0730df0e76bd416d35c843b5e30a8bea.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/073\/0df\/0e7\/0730df0e76bd416d35c843b5e30a8bea.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: Neo4j \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 ClickHouse<\/h2>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e\u00a0\u044f \u0445\u043e\u0442\u0435\u043b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c,\u00a0\u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043a\u0430\u043a\u00a0\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0411\u0414. \u0412\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b.<\/p>\n<p>ClickHouse \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430:<\/p>\n<pre><code>raw eventshistorical datatime seriesaggregationsdaily featureshistorical snapshots<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Neo4j \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430:<\/p>\n<pre><code>entitiesrelationshipscurrent graph statepathsgraph topologygraph algorithms<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c Neo4j \u043d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e AIS\u2011\u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u041f\u043e\u043b\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u00a0raw\u2011\u0441\u043b\u043e\u0435 ClickHouse\u00a0\u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>raw.ais_positions <\/code>\u0410\u00a0Neo4j \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e, \u0447\u0442\u043e\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u00a0\u0433\u0440\u0430\u0444. \u0412\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Neo4j \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u0441\u043b\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430\u00a0\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 graph snapshots \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse. \u0414\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0430:<\/p>\n<blockquote>\n<p>\u0413\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u00a0\u043d\u0435\u00a0\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0435\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c.<\/p>\n<\/blockquote>\n<h2>\u0427\u0442\u043e\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u00a0Neo4j<\/h2>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<pre><code>(Vessel)-[:VISITED]-&gt;(Port)(Port)-[:CONNECTED_TO]-&gt;(Port)(Port)-[:MEMBER_OF]-&gt;(Community)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code>mmsitimestamplatitudelongitudespeed...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0432\u00a0Neo4j \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<pre><code>VesselPortCommunity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 1: Kafka \u2192 Neo4j \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Neo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435\u00a0\u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>BarentsWatch    \u2193Python producer    \u2193Kafka   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 ClickHouse   \u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 Kafka Connect                      \u2193                    Neo4j<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>Producer (\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u00a0Python) \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 AIS event \u0432\u00a0Kafka.<\/p>\n<\/li>\n<li>\n<p>ClickHouse \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>Kafka Connect Neo4j Sink \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b\u00a0<code>Vessel<\/code> \u0432\u00a0Neo4j.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u00a0\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 Kafka \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438:<\/p>\n<pre><code>Kafka event   \u251c\u2500\u2192 ClickHouse   \u2502     historical event   \u2502   \u2514\u2500\u2192 Neo4j         current entity state<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Producer \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 MMSI \u043a\u0430\u043a\u00a0\u043a\u043b\u044e\u0447 \u0432\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 Kafka, \u0430\u00a0Neo4j sink connector \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Vessel \u043f\u043e\u00a0MMSI. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>MERGE (v:Vessel {mmsi: event.mmsi})SET    v.name = event.name,    v.shipType = event.shipType,    v.latitude = event.latitude,    v.longitude = event.longitude,    v.speedOverGround = event.speedOverGround,    v.courseOverGround = event.courseOverGround,    v.lastSeen = datetime(event.msgtime)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c Neo4j \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u043a\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435.<\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Position node \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e AIS event?<\/h2>\n<p>\u041c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<pre><code>(Vessel)-[:HAS_POSITION]-&gt;(Position)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041d\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 Neo4j\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f\u00a0\u0431\u044b \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 time\u2011series \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b:<\/p>\n<pre><code>all events\u2192 ClickHouse<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0430\u00a0\u0432 Neo4j:<\/p>\n<pre><code>current vesselportsrelationshipscommunities<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>ClickHouse \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438?\u00bb<\/p>\n<\/li>\n<li>\n<p>Neo4j \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439?\u00bb<\/p>\n<\/li>\n<\/ul>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 2: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043f\u043e\u0441\u043b\u0435 SQL\/data warehouse \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043d\u0435\u00a0\u043a\u0430\u043a\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u00a0<strong>\u043f\u043e\u0441\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/strong>. AIS \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0ClickHouse. \u0418\u0437\u00a0\u043d\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430. \u0423\u0441\u043b\u043e\u0432\u043d\u043e:<\/p>\n<pre><code>raw.ais_positions       \u2193port detection       \u2193port visits<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0ClickHouse \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u00a0\u0432\u0438\u0437\u0438\u0442\u0435 \u043f\u043e\u0440\u0442\u0430. \u041d\u043e\u00a0\u0437\u0430\u0442\u0435\u043c \u0438\u0437\u00a0\u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u0444:<\/p>\n<pre><code>(Vessel)-[:VISITED]-&gt;(Port)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 Neo4j \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u043d \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c\u00a0\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c:<\/p>\n<pre><code>raw data   \u2193warehouse   \u2193transformations   \u2193business entities   \u2193Neo4j<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 Neo4j \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0434\u043b\u044f\u00a0data engineering.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 3: \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0444\u0430\u043a\u0442\u044b \u0432\u00a0\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u00a0<code>VISITED<\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0440\u0442\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>Vessel A:BERGEN \u2192 TANANGER \u2192 EGERSUND<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>(:Port)-[:CONNECTED_TO]-&gt;(:Port)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f network:<\/p>\n<pre><code>        Port B       \/      \\Port A          Port D       \\      \/        Port C<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439:<\/p>\n<pre><code>port_fromport_toweight<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u0438, \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0441\u00a0\u0440\u043e\u0441\u0442\u043e\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0443\u0440\u043e\u0432\u043d\u0435\u0439.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 4: \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u043e\u0432 \u0432\u00a0Neo4j<\/h2>\n<p>Neo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 Neo4j.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u043e\u0439\u00a0\u2014\u00a0<strong>Neo4j Graph Data Science <\/strong>(<a href=\"https:\/\/neo4j.com\/docs\/graph-data-science\/current\/\" rel=\"noopener nofollow\">https:\/\/neo4j.com\/docs\/graph\u2011data\u2011science\/current\/<\/a>).<\/p>\n<p>\u041d\u0430\u00a0\u0433\u0440\u0430\u0444\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<\/p>\n<pre><code>PageRankLouvain<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 PageRank \u0434\u043b\u044f\u00a0\u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 Louvain \u0434\u043b\u044f\u00a0\u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f community. \u0418 \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u043e\u043b\u044c Neo4j. \u041e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430: <strong>\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447<\/strong><\/p>\n<h2>PageRank \u043a\u0430\u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 \u0433\u0440\u0430\u0444\u0430 Port<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0432\u00a0SQL \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>connections_count<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<pre><code>Port A = 10 connectionsPort B = 7 connectionsPort C = 4 connections<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u043d\u0435\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0440\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u043b\u043e \u0441\u0432\u044f\u0437\u0435\u0439, \u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d \u0441\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0445\u0430\u0431\u0430\u043c\u0438 \u043f\u043e\u0440\u0442\u043e\u0432. PageRank \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0435\u0442\u0438. \u0412\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430 Port:<\/p>\n<pre><code>Port.pageRank<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>BERGEN      0.63TANANGER    0.42EGERSUND    0.42<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>Neo4j\u2192 PageRank\u2192 ClickHouse\u2192 dbt\u2192 Metabase<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>Louvain \u043a\u0430\u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440 feature engineering \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u0444<\/h2>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430\u00a0\u2014 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432 (community). \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 (community). \u041d\u0430\u00a0\u0432\u0445\u043e\u0434\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c:<\/p>\n<pre><code>Port \u2194 Port \u2194 Port \u2194 Port<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 Louvain:<\/p>\n<pre><code>Community A\u251c\u2500\u2500 Port 1\u251c\u2500\u2500 Port 2\u2514\u2500\u2500 Port 3Community B\u251c\u2500\u2500 Port 4\u251c\u2500\u2500 Port 5\u2514\u2500\u2500 Port 6<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u00a0\u0431\u044b:<\/p>\n<pre><code>port_id | community_id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e\u00a0Neo4j \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0437\u0435\u043b Community \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>(:Port)-[:MEMBER_OF]-&gt;(:Community)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u043f\u043e\u00a0\u0443\u0437\u043b\u0430\u043c \u0433\u0440\u0430\u0444\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>Vessel  \u2193 VISITEDPort  \u2193 MEMBER_OFCommunity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:<\/p>\n<pre><code>Vessel \u2192 Port \u2192 Community<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0447\u0435\u043d\u044c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443\u0437\u043b\u044b Community<\/h2>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 community\u00a0\u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0443\u0437\u043b\u0430 Port:<\/p>\n<pre><code>Port.communityId = 1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e\u00a0\u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0community \u043a\u0430\u043a\u00a0\u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>Community\u251c\u2500\u2500 community_id\u251c\u2500\u2500 community_name\u251c\u2500\u2500 community_label\u2514\u2500\u2500 port_count<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438 \u0441\u0432\u044f\u0437\u044c:<\/p>\n<pre><code>Port-[:MEMBER_OF]-&gt;Community<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0433\u0440\u0430\u0444\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0439. \u041f\u043e\u0437\u0436\u0435 \u043a\u00a0\u0443\u0437\u043b\u0443\u00a0<code>Community<\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:<\/p>\n<pre><code>regiondominant traffic typerisk scorehistorical metricsLLM summary<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0440\u0442\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 community \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0e0\/10c\/dc5\/0e010cdc52912b44099c2ecf79e9f58b.png\" width=\"4286\" height=\"2346\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0e0\/10c\/dc5\/0e010cdc52912b44099c2ecf79e9f58b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0e0\/10c\/dc5\/0e010cdc52912b44099c2ecf79e9f58b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u041e\u0442\u00a0\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e community ID \u043a\u00a0\u0441\u043c\u044b\u0441\u043b\u043e\u0432\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e community<\/h2>\n<p>\u0413\u0440\u0430\u0444\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Louvain \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>communityId = 1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0414\u043b\u044f\u00a0BI\u00a0\u2014 \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>community_id = 1community_name = BERGENcommunity_label = BERGEN \/ TANANGER \/ EGERSUND<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f PageRank. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u044e\u0447 community ID, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0438\u043c\u044f. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430:<\/p>\n<pre><code>graph algorithm output        \u2193business-oriented data model<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 5: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b Neo4j \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse<\/h2>\n<p>\u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b GDS \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0Neo4j. \u041f\u043e\u0447\u0435\u043c\u0443 \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f:<\/p>\n<pre><code>BERGEN.pageRank = 0.63<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0430\u00a0\u0437\u0430\u0432\u0442\u0440\u0430:<\/p>\n<pre><code>BERGEN.pageRank = 0.58<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Neo4j property, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0Neo4j \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>Neo4j   \u2193GDS   \u2193PageRank + Communities   \u2193ClickHouse snapshots   \u2193dbt   \u2193Metabase<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c Neo4j \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0441\u0447\u0435\u0442\u044b, \u0430\u00a0ClickHouse \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u042d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430\u00a0ML \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>warehouse   \u2193ML engine   \u2193predictions\/features   \u2193warehouse<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code>warehouse   \u2193graph engine   \u2193graph features   \u2193warehouse<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Neo4j \u0432\u00a0data engineering.<\/p>\n<h2>Neo4j \u043a\u0430\u043a\u00a0\u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0448\u0438\u0440\u0435, PageRank \u0438 communityId\u00a0\u2014 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 Neo4j. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>port_idpage_rankcommunity_idcommunity_namecommunity_size<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432:<\/p>\n<pre><code>BIMLanomaly detectionLLM contextranking<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0440\u043e\u043b\u044c Neo4j \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a: <strong>Neo4j \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u043b\u0438\u00a0\u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c\u0438.<\/strong><\/p>\n<p>\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0434\u043b\u044f\u00a0Data Engineer.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 6: Neo4j + Kafka Connect<\/h2>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u00a0\u2014 Kafka Connect. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code>Python\u2192 consume Kafka\u2192 open Neo4j connection\u2192 execute Cypher<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>Kafka\u2192 Kafka Connect\u2192 Neo4j Sink<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c. Producer \u0437\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e Kafka. Kafka Connect \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u00a0\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0Neo4j. Neo4j \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. Bootstrap \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 constraints \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043b\u0438\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 Neo4j Kafka Sink connector. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>source application       \u2193     Kafka       \u2193integration layer       \u2193     Neo4j<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 7: Neo4j + Airflow<\/h2>\n<p>Neo4j \u043d\u0435\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0436\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u00a0\u043e\u0431\u044b\u0447\u043d\u043e\u0439 orchestration \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0412\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\/\u0438\u0437 \u0433\u0440\u0430\u0444\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432\u00a0Airflow. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 daily flow \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>AIS ready   \u2193dbt   \u2193port visits   \u2193Neo4j sync   \u2193GDS   \u2193graph metrics export   \u2193ClickHouse   \u2193BI<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c Neo4j \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0437\u0432\u0435\u043d\u043e\u043c \u0432\u00a0\u043f\u043e\u0442\u043e\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. Airflow \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<pre><code>\u2192 data prepared\u2192 graph updated\u2192 algorithms executed\u2192 results exported<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. Neo4j \u043d\u0435\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u00a0\u0440\u0443\u0447\u043d\u044b\u043c\u0438 Cypher \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438. \u041e\u043d \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432\u00a0\u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 8: Neo4j + dbt<\/h2>\n<p>dbt \u0438 Neo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0440\u0435\u0448\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>dbt:<\/p>\n<pre><code>SQL transformationsdata quality testsdimensionsfactsdaily featuresaggregations<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Neo4j:<\/p>\n<pre><code>relationshipsnetwork topologycentralitycommunity detectiongraph traversal<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>dbt \u2193prepare graph input \u2193Neo4j \/ GDS \u2193graph features \u2193ClickHouse \u2193dbt \u2193final analytics marts<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 dbt \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 vessel features, anomalies, current port visits, enriched graph metrics \u0438 community reporting models. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f:<\/p>\n<pre><code>SQL analytics+graph analytics<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 9: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 Neo4j Docker image<\/h2>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: Neo4j \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0447\u0430\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 plugins. \u0412\u00a0\u043c\u043e\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f:<\/p>\n<pre><code>APOCAPOC ExtendedGraph Data ScienceClickHouse JDBC<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Docker Compose \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 APOC, APOC Extended \u0438 GDS, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 JDBC connection \u043a\u00a0ClickHouse. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 Docker image:<\/p>\n<pre><code>ais-graph-analytics-neo4j<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code>Neo4j upstream image       +APOC       +APOC Extended       +GDS       +ClickHouse JDBC<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0438 \u0432\u00a0CI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430\u00a0\u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Docker image.<\/p>\n<h2>\u0428\u0430\u0431\u043b\u043e\u043d 10: Neo4j \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u00a0CI<\/h2>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0432\u00a0\u0434\u0435\u043b\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445:<\/p>\n<pre><code>Cypher works locally<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0435\u0449\u0435 \u043d\u0435\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:<\/p>\n<pre><code>graph pipeline is reproducible<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 CI \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Kafka + Neo4j smoke test.<\/p>\n<p>\u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442:<\/p>\n<pre><code>custom Neo4j image buildstartuppluginsauthenticationconstraintswrite\/read<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u043e\u0431\u0449\u0435\u043c CI \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 jobs \u0434\u043b\u044f\u00a0Compose, pipeline, producer, dbt+ClickHouse \u0438 Kafka+Neo4j. \u0414\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 Neo4j \u0438\u043c\u0435\u043d\u043d\u043e\u00a0<strong>\u043a\u0430\u043a\u00a0data engineering component<\/strong>, \u0430\u00a0\u043d\u0435\u00a0\u043a\u0430\u043a\u00a0\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0432\u00a0Neo4j Desktop.<\/p>\n<h2>\u0410\u00a0\u0433\u0434\u0435 \u0437\u0434\u0435\u0441\u044c BI?<\/h2>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u00a0Metabase. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>Top ports by PageRankCommunityCommunity labelPorts per communitygraph activity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e BI \u043d\u0435\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 Neo4j GDS. \u0414\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e <strong>\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/strong>. \u0418 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u0413\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f\u00a0\u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0Metabase.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/715\/5d0\/d58\/7155d0d5836fce2b31df5e85c6915117.png\" width=\"4928\" height=\"2348\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/715\/5d0\/d58\/7155d0d5836fce2b31df5e85c6915117.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/715\/5d0\/d58\/7155d0d5836fce2b31df5e85c6915117.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u041e\u0431\u0449\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c AIS, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 warehouse:<\/p>\n<pre><code>Raw \u2193Warehouse \u2193Transformations<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:<\/p>\n<pre><code>Customer \u2192 AccountAccount \u2192 TransactionPerson \u2192 DeviceProduct \u2192 CustomerService \u2192 DependencyDocument \u2192 Entity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c:<\/p>\n<pre><code>Warehouse   \u2193prepare entities\/relationships   \u2193Neo4j   \u2193Graph algorithms   \u2193graph features   \u2193Warehouse<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>             \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510             \u2502    Sources    \u2502             \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u2193                  Kafka                     \u2193               Data warehouse                     \u2193                  dbt\/SQL                     \u2193             Graph preparation                     \u2193                   Neo4j                     \u2193             Graph Data Science                     \u2193              graph features                     \u2193               Data warehouse                     \u2193                 BI \/ ML \/ AI<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u044f \u0438 \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 Neo4j \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b<\/h2>\n<p>\u042f\u00a0\u0431\u044b \u043d\u0435\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b Neo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041e\u043d \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b, \u043a\u043e\u0433\u0434\u0430 \u0431\u0438\u0437\u043d\u0435\u0441\u2011\u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>fraud<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Person\u2192 Account\u2192 Transaction\u2192 Merchant<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>customer identity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Email\u2192 Person\u2192 Device\u2192 Account<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>supply chain<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Supplier\u2192 Component\u2192 Product\u2192 Warehouse<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>infrastructure<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>Service\u2192 Depends On\u2192 Service<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438, \u043a\u0430\u043a\u00a0\u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<pre><code>Vessel\u2192 Port\u2192 Port\u2192 Community<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0432\u0443\u0447\u0438\u0442: <strong>\u041a\u0430\u043a\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u044b?<\/strong> Neo4j \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 Neo4j \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430:<\/p>\n<pre><code>SUM(revenue)GROUP BY month<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438<\/p>\n<pre><code>AVG(speed)GROUP BY vessel<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0434\u043b\u044f\u00a0\u043d\u0435\u0435 \u043d\u0443\u0436\u0435\u043d ClickHouse.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430:<\/p>\n<pre><code>daily KPI<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u044d\u0442\u043e SQL\/dbt.<\/p>\n<p>\u041d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0432\u00a0Neo4j \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u042f\u00a0\u0431\u044b \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u0430\u043a:<\/p>\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0441\u0430\u043c\u0430 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438\u00a0\u2014 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c Neo4j.<\/p>\n<\/blockquote>\n<h2>\u0427\u0442\u043e\u00a0Neo4j \u0434\u0430\u043b \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/h2>\n<p>\u0411\u0435\u0437\u00a0Neo4j \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f\u00a0\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c data engineering stack:<\/p>\n<pre><code>KafkaClickHousedbtAirflowMetabase<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e\u00a0Neo4j \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code>\u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043f\u043e\u0441\u0435\u0449\u0430\u043b\u0438\u0441\u044c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>\u043a\u0430\u043a \u043f\u043e\u0440\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u044b<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0440\u0442<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u043c\u043e\u0436\u0435\u043c:<\/p>\n<pre><code>\u043a\u0430\u043a\u043e\u0432\u0430 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u0442\u0430 \u0432 \u0441\u0435\u0442\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e:<\/p>\n<pre><code>\u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u044b \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u043c\u043e\u0436\u0435\u043c:<\/p>\n<pre><code>\u043a\u0430\u043a\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0432\u0435\u0441\u044c \u0433\u0440\u0430\u0444<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u044d\u0442\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e analytics stack.<\/p>\n<h2>\u0427\u0442\u043e\u00a0\u0434\u0430\u043b\u044c\u0448\u0435<\/h2>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u00a0\u2014 streaming processing \u0447\u0435\u0440\u0435\u0437 Apache Flink. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c near real\u2011time \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0Metabase.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0443\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>Kafka  \u2193Flink  \u2193stream transformation  \u2193Kafka<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e:<\/p>\n<pre><code>Historical data  \u2193Iceberg  \u2193Trino<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c:<\/p>\n<pre><code>streaming features+graph features+ML+LLM<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f AI Agent, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a:<\/p>\n<pre><code>ClickHouseNeo4jIceberg \/ Trino<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<blockquote>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0441\u0443\u0434\u0430 \u0438\u043c\u0435\u043b\u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0435\u0449\u0430\u043b\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u043f\u043e\u0440\u0442\u044b?<\/p>\n<\/blockquote>\n<p>\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>time-series analytics+graph features+anomaly detection+LLM interpretation<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418 \u0437\u0434\u0435\u0441\u044c Neo4j \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0435\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u00a0\u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u0418\u0442\u043e\u0433<\/h2>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<blockquote>\n<p><strong>Neo4j \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0data engineering \u043d\u0435\u00a0\u0432\u043c\u0435\u0441\u0442\u043e data warehouse, \u0430\u00a0\u0440\u044f\u0434\u043e\u043c \u0441\u00a0\u043d\u0438\u043c.<\/strong><\/p>\n<\/blockquote>\n<ul>\n<li>\n<p>ClickHouse \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p>DBT \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>Kafka \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u00a0API.<\/p>\n<\/li>\n<li>\n<p>Airflow \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>Neo4j \u0441\u0442\u0440\u043e\u0438\u0442 \u0433\u0440\u0430\u0444\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/li>\n<li>\n<p>GDS \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u043e\u0432 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0ClickHouse.<\/p>\n<\/li>\n<li>\n<p>BI, ML \u0438\u043b\u0438\u00a0AI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u0436\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u00a0\u043c\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>Kafka   \u2193ClickHouse   \u2193dbt   \u2193Neo4j   \u2193GDS   \u2193ClickHouse   \u2193Metabase<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. Neo4j \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043d\u0435\u00a0\u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u0443\u044e \u0444\u043e\u0440\u043c\u0443, \u0430\u00a0\u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430:<\/p>\n<blockquote>\n<p><strong>\u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/strong><\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f\u00a0AIS \u044d\u0442\u043e:<\/p>\n<pre><code>Vessel  \u2193Port  \u2193Connected Port  \u2193Community<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0434\u0440\u0443\u0433\u043e\u0433\u043e data engineering \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c:<\/p>\n<pre><code>Customer \u2192 Account \u2192 Transaction<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>Device \u2192 User \u2192 Identity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0438\u043b\u0438:<\/p>\n<pre><code>Service \u2192 Dependency \u2192 Service<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438 domain \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0421\u0430\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u00a0\u0436\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0430\u00a0\u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Docker. \u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <strong>GitHub:<\/strong><br \/><a href=\"https:\/\/github.com\/KonstantinLofichenko\/ais-graph-analytics\" rel=\"noopener nofollow\">https:\/\/github.com\/KonstantinLofichenko\/ais\u2011graph\u2011analytics<\/a><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1092712\/\">https:\/\/habr.com\/ru\/articles\/1092712\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0426\u0435\u043b\u044c\u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e\u00a0Neo4j, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 social networks, fraud detection, recommendation systems \u0438\u043b\u0438\u00a0knowledge graphs. \u041d\u043e\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e\u00a0data engineering \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0433\u0434\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Kafka, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0430\u0437\u0430 \u0442\u0438\u043f\u0430 ClickHouse, DBT, Airflow \u0438 BI. \u041c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439:\u041a\u0430\u043a\u00a0\u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c Neo4j \u0432\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 data stack \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435\u00a0\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b data warehouse, \u0430\u00a0\u0440\u0435\u0448\u0430\u043b \u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0434\u043b\u044f\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 SQL?\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b AIS\u00a0\u2014 \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u00a0\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0443\u0434\u043e\u0432, https:\/\/www.barentswatch.no\/en\/. \u041d\u043e\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435\u00a0AIS. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0435\u043c\u0430\u00a0\u2014\u00a0\u043c\u0435\u0441\u0442\u043e Neo4j \u0432\u00a0data engineering \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:Data sources    \u2193Kafka    \u2193ClickHouse    \u2193dbt    \u2193Airflow    \u2193MetabaseClickHouse \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e AIS\u2011\u0441\u043e\u0431\u044b\u0442\u0438\u0439.DBT \u0441\u0442\u0440\u043e\u0438\u0442 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.Airflow \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u043c\u0438 pipeline.Metabase \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0417\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0435 Neo4j?\u041e\u0442\u0432\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043d\u043e\u00a0\u0438\u00a0\u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:Vessel  \u2193VISITED  \u2193Port  \u2193CONNECTED_TO  \u2193Port\u0410\u00a0\u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b:\u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b \u0432\u00a0\u0441\u0435\u0442\u0438;\u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0440\u0442\u043e\u0432 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439;\u043a\u0430\u043a\u0438\u0435 \u0441\u0443\u0434\u0430 \u043f\u043e\u0441\u0435\u0449\u0430\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0440\u0442\u044b;\u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0440\u0442\u0430\u043c\u0438;\u043c\u043e\u0436\u043d\u043e\u00a0\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0442\u0438.\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u043f\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u042d\u0442\u043e \u0433\u0440\u0430\u0444.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430\u00a0\u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435.\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: Neo4j \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 ClickHouse\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e\u00a0\u044f \u0445\u043e\u0442\u0435\u043b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c,\u00a0\u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043a\u0430\u043a\u00a0\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0411\u0414. \u0412\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b.ClickHouse \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430:raw eventshistorical datatime seriesaggregationsdaily featureshistorical snapshotsNeo4j \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430:entitiesrelationshipscurrent graph statepathsgraph topologygraph algorithms\u0422\u043e \u0435\u0441\u0442\u044c Neo4j \u043d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e AIS\u2011\u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u041f\u043e\u043b\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u00a0raw\u2011\u0441\u043b\u043e\u0435 ClickHouse\u00a0\u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 raw.ais_positions \u0410\u00a0Neo4j \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e, \u0447\u0442\u043e\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a\u00a0\u0433\u0440\u0430\u0444. \u0412\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Neo4j \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u0441\u043b\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430\u00a0\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 graph snapshots \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse. \u0414\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0430:\u0413\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u00a0\u043d\u0435\u00a0\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0435\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c.\u0427\u0442\u043e\u00a0\u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u00a0Neo4j\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:(Vessel)-[:VISITED]-&gt;(Port)(Port)-[:CONNECTED_TO]-&gt;(Port)(Port)-[:MEMBER_OF]-&gt;(Community)\u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a:mmsitimestamplatitudelongitudespeed&#8230;\u0432\u00a0Neo4j \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438:VesselPortCommunity\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.\u0428\u0430\u0431\u043b\u043e\u043d 1: Kafka \u2192 Neo4j \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Neo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435\u00a0\u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.\u041f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:BarentsWatch    \u2193Python producer    \u2193Kafka   \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 ClickHouse   \u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192 Kafka Connect                      \u2193                    Neo4jProducer (\u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u00a0Python) \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 AIS event \u0432\u00a0Kafka.ClickHouse \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u0431\u044b\u0442\u0438\u0439.Kafka Connect Neo4j Sink \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0437\u0435\u043b\u00a0Vessel \u0432\u00a0Neo4j.\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u00a0\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 Kafka \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u0441\u00a0\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438:Kafka event   \u251c\u2500\u2192 ClickHouse   \u2502     historical event   \u2502   \u2514\u2500\u2192 Neo4j         current entity stateProducer \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 MMSI \u043a\u0430\u043a\u00a0\u043a\u043b\u044e\u0447 \u0432\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 Kafka, \u0430\u00a0Neo4j sink connector \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Vessel \u043f\u043e\u00a0MMSI. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:MERGE (v:Vessel {mmsi: event.mmsi})SET    v.name = event.name,    v.shipType = event.shipType,    v.latitude = event.latitude,    v.longitude = event.longitude,    v.speedOverGround = event.speedOverGround,    v.courseOverGround = event.courseOverGround,    v.lastSeen = datetime(event.msgtime)\u0417\u0434\u0435\u0441\u044c Neo4j \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u043a\u00a0\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435.\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c Position node \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e AIS event?\u041c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c:(Vessel)-[:HAS_POSITION]-&gt;(Position)\u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041d\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 Neo4j\u00a0\u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f\u00a0\u0431\u044b \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 time\u2011series \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b:all events\u2192 ClickHouse\u0430\u00a0\u0432 Neo4j:current vesselportsrelationshipscommunities\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435:ClickHouse \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438?\u00bbNeo4j \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439?\u00bb\u0428\u0430\u0431\u043b\u043e\u043d 2: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043f\u043e\u0441\u043b\u0435 SQL\/data warehouse \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Neo4j \u043d\u0435\u00a0\u043a\u0430\u043a\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u00a0\u043f\u043e\u0441\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. AIS \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0ClickHouse. \u0418\u0437\u00a0\u043d\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430. \u0423\u0441\u043b\u043e\u0432\u043d\u043e:raw.ais_positions       \u2193port detection       \u2193port visits\u0412\u00a0ClickHouse \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u00a0\u0432\u0438\u0437\u0438\u0442\u0435 \u043f\u043e\u0440\u0442\u0430. \u041d\u043e\u00a0\u0437\u0430\u0442\u0435\u043c \u0438\u0437\u00a0\u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u0444:(Vessel)-[:VISITED]-&gt;(Port)\u0412\u00a0\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 Neo4j \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u043d \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c\u00a0\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c:raw data   \u2193warehouse   \u2193transformations   \u2193business entities   \u2193Neo4j\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 Neo4j \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0434\u043b\u044f\u00a0data engineering.\u0428\u0430\u0431\u043b\u043e\u043d 3: \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0444\u0430\u043a\u0442\u044b \u0432\u00a0\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u00a0VISITED\u00a0\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0440\u0442\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:Vessel A:BERGEN \u2192 TANANGER \u2192 EGERSUND\u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f:(:Port)-[:CONNECTED_TO]-&gt;(:Port)\u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f network:        Port B       \/      \\Port A          Port D       \\      \/        Port C\u0412\u00a0\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439:port_fromport_toweight\u0438 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u0438, \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0441\u00a0\u0440\u043e\u0441\u0442\u043e\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0443\u0440\u043e\u0432\u043d\u0435\u0439.\u0428\u0430\u0431\u043b\u043e\u043d 4: \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u043e\u0432 \u0432\u00a0Neo4jNeo4j \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 Neo4j.\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u043e\u0439\u00a0\u2014\u00a0Neo4j Graph Data Science (https:\/\/neo4j.com\/docs\/graph\u2011data\u2011science\/current\/).\u041d\u0430\u00a0\u0433\u0440\u0430\u0444\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u043e\u0432. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:PageRankLouvain\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 PageRank \u0434\u043b\u044f\u00a0\u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 Louvain \u0434\u043b\u044f\u00a0\u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f community. \u0418 \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u043e\u043b\u044c Neo4j. \u041e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430: \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f\u00a0\u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447PageRank \u043a\u0430\u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 \u0433\u0440\u0430\u0444\u0430 Port\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0432\u00a0SQL \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:connections_count\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c:Port A = 10 connectionsPort B = 7 connectionsPort C = 4 connections\u041d\u043e\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u043d\u0435\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0440\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u043b\u043e \u0441\u0432\u044f\u0437\u0435\u0439, \u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d \u0441\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0445\u0430\u0431\u0430\u043c\u0438 \u043f\u043e\u0440\u0442\u043e\u0432. PageRank \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0441\u0435\u0442\u0438. \u0412\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430 Port:Port.pageRank\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:BERGEN      0.63TANANGER    0.42EGERSUND    0.42\u042d\u0442\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:Neo4j\u2192 PageRank\u2192 ClickHouse\u2192 dbt\u2192 Metabase\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0433\u0440\u0430\u0444\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445.Louvain \u043a\u0430\u043a\u00a0\u043f\u0440\u0438\u043c\u0435\u0440 feature engineering \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u0444\u0412\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430\u00a0\u2014 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432 (community). \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 (community). \u041d\u0430\u00a0\u0432\u0445\u043e\u0434\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c:Port \u2194 Port \u2194 Port \u2194 Port\u041f\u043e\u0441\u043b\u0435 Louvain:Community A\u251c\u2500\u2500 Port 1\u251c\u2500\u2500 Port 2\u2514\u2500\u2500 Port 3Community B\u251c\u2500\u2500 Port 4\u251c\u2500\u2500 Port 5\u2514\u2500\u2500 Port 6\u0412\u00a0\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u00a0\u0431\u044b:port_id | community_id\u041d\u043e\u00a0Neo4j \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0437\u0435\u043b Community \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:(:Port)-[:MEMBER_OF]-&gt;(:Community)\u042d\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u043e\u0431\u0445\u043e\u0434\u043e\u0432 \u043f\u043e\u00a0\u0443\u0437\u043b\u0430\u043c \u0433\u0440\u0430\u0444\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:Vessel  \u2193 VISITEDPort  \u2193 MEMBER_OFCommunity\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430:Vessel \u2192 Port \u2192 Community\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0447\u0435\u043d\u044c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c.\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443\u0437\u043b\u044b Community\u0421\u043d\u0430\u0447\u0430\u043b\u0430 community\u00a0\u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0443\u0437\u043b\u0430 Port:Port.communityId = 1\u041d\u043e\u00a0\u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0community \u043a\u0430\u043a\u00a0\u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:Community\u251c\u2500\u2500 community_id\u251c\u2500\u2500 community_name\u251c\u2500\u2500 community_label\u2514\u2500\u2500 port_count\u0438 \u0441\u0432\u044f\u0437\u044c:Port-[:MEMBER_OF]-&gt;Community\u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0433\u0440\u0430\u0444\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0439. \u041f\u043e\u0437\u0436\u0435 \u043a\u00a0\u0443\u0437\u043b\u0443\u00a0Community\u00a0\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:regiondominant traffic typerisk scorehistorical metricsLLM summary\u043d\u0435\u00a0\u043c\u0435\u043d\u044f\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u0440\u0442\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 community \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435:\u041e\u0442\u00a0\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e community ID \u043a\u00a0\u0441\u043c\u044b\u0441\u043b\u043e\u0432\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e community\u0413\u0440\u0430\u0444\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Louvain \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:communityId = 1\u0414\u043b\u044f\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0414\u043b\u044f\u00a0BI\u00a0\u2014 \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:community_id = 1community_name = BERGENcommunity_label = BERGEN \/ TANANGER \/ EGERSUND\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f PageRank. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u044e\u0447 community ID, \u043d\u043e\u00a0\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0438\u043c\u044f. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430:graph algorithm output        \u2193business-oriented data model\u0428\u0430\u0431\u043b\u043e\u043d 5: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b Neo4j \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse\u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b\u00a0\u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b GDS \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0Neo4j. \u041f\u043e\u0447\u0435\u043c\u0443 \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f:BERGEN.pageRank = 0.63\u0430\u00a0\u0437\u0430\u0432\u0442\u0440\u0430:BERGEN.pageRank = 0.58\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c Neo4j property, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0Neo4j \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u00a0ClickHouse. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:Neo4j   \u2193GDS   \u2193PageRank + Communities   \u2193ClickHouse snapshots   \u2193dbt   \u2193Metabase\u0422\u043e \u0435\u0441\u0442\u044c Neo4j \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0441\u0447\u0435\u0442\u044b, \u0430\u00a0ClickHouse \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u042d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430\u00a0ML \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445:warehouse   \u2193ML engine   \u2193predictions\/features   \u2193warehouse\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c:warehouse   \u2193graph engine   \u2193graph features   \u2193warehouse\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u00a0\u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Neo4j \u0432\u00a0data engineering.Neo4j \u043a\u0430\u043a\u00a0\u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0448\u0438\u0440\u0435, PageRank \u0438 communityId\u00a0\u2014 \u044d\u0442\u043e \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 Neo4j. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:port_idpage_rankcommunity_idcommunity_namecommunity_size\u042d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432:BIMLanomaly detectionLLM contextranking\u0422\u043e \u0435\u0441\u0442\u044c \u0440\u043e\u043b\u044c Neo4j \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a: Neo4j \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-498123","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=498123"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/498123\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=498123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=498123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=498123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}