Научная статья на тему 'Применение графовых СУБД в задачаханализа данных'

Применение графовых СУБД в задачаханализа данных Текст научной статьи по специальности «Математика»

CC BY
583
77
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ГРАФОВАЯ СУБД / RDF / ГРАФ СВОЙСТВ / ГРАФОВЫЕ АЛГОРИТМЫ / GRAPH DBMS / PROPERTY GRAPH / GRAPH ALGORITHMS

Аннотация научной статьи по математике, автор научной работы — Ломов Павел Андреевич

Данная статья посвящена вопросу применения графовых систем управления базами данных (СУБД) при решении задач анализа данных. Рассматриваются структуры распространенных графовых моделей данных модель "субъект-предикат-объект" и модель графа свойств, а также графовые алгоритмы и их применение для анализа данных. Приводится описание качественных отличий между графовыми и реляционными СУБД, которые целесообразно учитывать при их выборе в качестве средства для хранения и анализа данных с различной структурой.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

APPLICATION OF GRAPH DATA BASES FOR DATA ANALYSIS

This article is devoted to the use of graph databases for solving data analytical problems. The structures of common graph data models the “subject-predicate-object” model and the property graph model, as as well as their main differences are considered. Along with this, common graph algorithms and their application for solving some types of analytical problems are presented. The article describes the qualitative differences between graph and relational DBMSs, which should be taken into account when choosing a tool for storing and analyzing data with a different structure.

Текст научной работы на тему «Применение графовых СУБД в задачаханализа данных»

DOI: 10.25702/KSC.2307-5252.2019.9.137-145 УДК 004.832

П. А. Ломов

Институт информатики и математического моделирования ФИЦ КНЦ РАН ПРИМЕНЕНИЕ ГРАФОВЫХ СУБД В ЗАДАЧАХ АНАЛИЗА ДАННЫХ* Аннотация

Данная статья посвящена вопросу применения графовых систем управления базами данных (СУДБ) при решении задач анализа данных. Рассматриваются структуры распространенных графовых моделей данных - модель "субъект-предикат-объект" и модель графа свойств, а также графовые алгоритмы и их применение для анализа данных. Приводится описание качественных отличий между графовыми и реляционными СУБД, которые целесообразно учитывать при их выборе в качестве средства для хранения и анализа данных с различной структурой. Ключевые слова:

графовая СУБД, RDF, граф свойств, графовые алгоритмы

P. A. Lomov

APPLICATION OF GRAPH DATA BASES FOR DATA ANALYSIS Abstract

This article is devoted to the use of graph databases for solving data analytical problems. The structures of common graph data models - the "subject-predicate-object" model and the property graph model, as as well as their main differences are considered. Along with this, common graph algorithms and their application for solving some types of analytical problems are presented. The article describes the qualitative differences between graph and relational DBMSs, which should be taken into account when choosing a tool for storing and analyzing data with a different structure.

Keywords:

graph DBMS, RDF, property graph, graph algorithms. Введение

Современная информационноя система как правило характеризуется большим объемом данных, обладающих большим количеством и сложной струтурой связей. В зависимости от выбранной модели данных представление таких связей может осуществляться по разному. Например, в реляционной модели они могут быть представлены в виде «соединений» реляционных таблиц по внешнему ключу. Это позволяет в процессе выполнения запроса объединять отдельные элементы данных (кортежи таблиц) и получать в результате более сложный фрагмент данных, содержащий ответ на заданный запрос.

Наличие сложной струтуры связей в данных позволяет в ходе их анализа находить несколько альтернатив для решения некоторой прикладной задачи, учитывать некоторые дополнительные факторы, а также выявлять решения похожих задачи, имевшие место в прошлом.

Связи элементов данных могут быть представлены явно путем применения для этого средств, предоставляемых моделью данных, или могут формироваться «на лету» при использовании хранилища данных. В последнем

* Работа выполнена при финансовой поддержке РФФИ (проект № 17-47-510298 р_а).

случае пользователь должен сформулировать условия их установления в запросе, а программный компонент, отвечающий за его выполнение, вычислить такие связи между элементами данных.

Эффективность работы хранилища с данными, обладающими большим количеством внутренних связей является на сегодняшний день очень важным фактором его выбора для непосредственного использования в решении задач анализа данных, требующих получения сложных фрагментов данных с различной структурой. В этой связи большое распространение на сегодняшний день получили графовые СУБД. Они относятся к типу так называемых нереляционных (NoSQL, Not only SQL) хранилищ и ориентированы на явное отражение всего множества связей между элементами данных. Среди известных реализаций графовых СУБД можно выделить Neo4J, AnzoGraph, Titan, JanusGraph, OpenLink Virtuoso, Oracle Spatial and Graph (дополнение к Oracle Database), OrientDB, а также облачные сервисы Amazon Neptune, Azure Cosmos DB. В качестве языков запросов к ним выступают Gremlin, SPARQL, Cypher, GraphQL.

В данной статье рассматривается вопрос применения графовых СУБД для решения задач анализа данных, а также некоторые их особенности.

1. Модели данных графовых баз данных

В основе графовых моделей данных лежит понятие графа, как совокупности множеств вершин и ребер:

где V - множество вершин, а EcVxV - множество ребер. Заметим, что в моделях данных конкретных графовых СУБД могут присутствовать те или иные дополнения данного определения, например, возможность определения взвешенных и/или направленных ребер. Наибольшее распространение на сегодняшний день получила модель графа свойств или атрибутивного графа (Property graph model) (рис.1).

G = (V, E),

Name: "John* Food: 140

Name: "Fred" Food: 200 Meat 50 Vegetables: 150 Cereals: 0

Name: "Paul"

Meat: 40 Vegetables: 20 Cereals: 40

Рис. 1. Пример графа свойств

Она подразумевает наличие наименований у вершин (node labels) и ребер (relationship types). Ребра при этом могут иметь направление. С вершинами и ребрами также могут быть ассоциированы наборы свойств в виде пар— (ключ, значение). Возможные типы значений могут варьироваться в зависимости от конкретной реализации модели от простых (например, строкового, целочисленного и т.д.) до более сложных (например, списки, словари).

Другой распространенной графовой моделью является моделью триплетов или RDF-моделью (Resource Description Framework, RDF). Она состоит из триплетов или троек «субъект-предикат-объект», которые также можно интерпретировать в виде пары вершин (субъект и объект) и инцидентного им ребра (предикат). Однако если сравнивать модель графа свойств с RDF-моделью, то основным отличием будет являться наличие у элементов модели графа свойств внутренней структуры (т.е. некоторого набора свойств). В свою очередь в RDF-модели элементы триплета определяются просто в виде строк символов, являющихся URI-идентификаторами (Universal Resource Identificator, URI) или литеральными значениями. Иными атрибутами RDF-модель их не наделяет.

Другим отличием будет возможность определения экземпляров ребер, то есть задание несколько ребер одинакового типа между вершинами. Модель графа свойств обеспечивает данную возможность. Каждое ребро в этом случае будет иметь уникальный идентификатор, тогда как в RDF-модели триплет «субъект-предикат-объект», определяющий якобы еще один экземпляр ребра меджу, будет считаться дубликатом, виду того что URI предиката будет тем же самым, что и в исходном триплете. Следствием этого является также то, что RDF-модель не обладает имманентной возможностью характеризовать ребра, то есть определять их свойства, например, вес ребра. Хотя это ограничение модели обходиться с помощью приема реификации [1], то есть трансформации ребра в промежуточную вершину, смежную с исходными. Однако смысл, стоящий за такой модификацией, необходимо будет поддерживать уже на уровне приложения, осуществляющего манипуляции с графом.

Еще одним отличием RDF-модели является возможность задавать «четверки» (quads), то есть определять принадлежность триплета некоторому графу и тем самым разделять граф на компонетны. Модель графа свойств явно такой данной возможности не предосталвяет. Однако такого сегментирования можно добиться заданием дополнительных меток вершин и типов ребер, указывающих на принадлежность к некоторому подгару, или заданием нескольких графов, несвязанных между собой и имеющих в качестве идентификаторов некоторые «центральные» вершины. Однако, как и случае реификации, учет таких приемов метамоделирования должен быть реализован в бизнес-логике приложения или приниматься во внимание пользователем при формулировке и интепретации результатов запросов.

2. Основные графовые алгоритмы для анализа данных с помощью графовых СУБД

Рассмотрим применение графовых баз данных для решения задач анализа данных. Заметим, что в данном случае подразумеваются те возможности, которые обычно предоставляются самой графовой СУБД и ориентируются именно на оперирование графовой моделью. В основе этих возможностей лежат алгоритмы,

применяемые для решения известных задач теории графов. Их можно разделить на следующие на 3 группы:

• алгоритмы решения задачи поиска кратчайшего пути на графе и ее вариации;

• алгоритмы определения центральности вершины (Degree centrality);

• алгоритмы кластеризации вершин графа.

В первую группу входят алгоритмы поиска в длину (Bread-first search, BFS) и ширину (Depth-first search, DFS), нахождение кратчайшего пути между каждой парой вершин из двух наборов (All pairs shortest path, APSP) нахождение пути от заданной вершины до всех вершин некоторого набора (Single-Source Shortest Paths, SSSP), поиск минимального связующего дерева (Minimum Spanning Tree, MST), т.е. набора дуг с минимальной суммарной стоимостью, соединяющих все вершины графа без учета циклов.

Вторую группу составляют алгоритмы определения центральности вершины (Degree centrality). К ним относится вычисление центральности на основе близости вершин - центральность по близости (Closeness centrality), то есть определение вершин с кратчайшим расстоянием до всех остальных узлов. При решении практических задач это позволяет найти вершину, из которой наиболее быстро можно распространить некоторый сигнал по всей сети. Однако в реальных ситуациях графы часто являются несвязными. В этом случае длина пути между вершинами двух компонентов считается равной бесконечности, что в свою очередь приводит к неверным результатам оценки центральности (бесконечной центральности) для несвязанных узлов. В таких случаях применяют оценку центральности в рамках отдельных компонент графа с помощью алгоритма Вассермана-Фауста (Wasserman Faust) [2].

Иной способ подсчета центральность по близости для несвязных графов состоит в игнорирование бесконечных путей. Он реализован в алгоритме подсчета гармонической центральности (Harmonic/Valued Centrality) [3] и заключается в том, что бесконечный путь между несвязанными вершинами дает нулевой вклад в результирующую оценку центральности.

Другой подход к определению центральности базируется на идее, что важные вершины располагаются на наиболее востребованных путях в графе. Это так называемая промежуточная центральность. Ее расчет можно применять для решения задач поиска «узких» мест или критических участков различных сетей. Для подсчета в этом случае применяется алгоритм, определяющий центральность вершины в зависимости от того, какая доля всех кратчайших путей между каждой парой вершин проходит через нее. Однако в больших графах перебор всех пар вершин может потребовать неприемлемое количество времени, поэтому используют более быстрый Randomized-Approximate (RA-brandes) алгоритм, дающий приблизительные результаты. Его отличие состоит в том, что рассматриваются не все пары узлов, а лишь их подмножество, которое определяется случайным образом или с учетом степени вершины, то есть вершины со сравнительно низкой степенью имеют низкую вероятность быть включенными в рассмотрение.

Еще один вид центральности и одновременного способ ее подсчета это центральность по степени (degree centrality). Она определяется как отношение количества инцидентных вершине дуг к общему количеству вершин. Выделяют

входящую (indegree) и исходящую (outdegree) степенную центральность, в зависимости от того какие инцидентные дуги рассматривают при подсчете. На практике это позволяет выявить важных инициаторов сигналов или основных коллекторов, получающих сигнал от многих узлов сети.

Важным является так называемая центральность по собственному вектору (Eigenvector centrality), которую можно рассматривать как разновидность степенной. Она отражает своего рода «полезную» степенную центальность вершины, то есть меру связи вершины с теми, которые в свою очередь имеют большое число инцидентных ребер. Один из распространенных алгоритмом для ее определения является - PageRank. Он работает итеративно, осуществляя последовательные переходы с некоторой вероятностью от произвольной начальной вершины к другим и уточняя начальную оценку центральности вершин, до того как сойдется или закончится заданное число итераций. Его вариацией является персонализированный PageRank (Personalised Page Rank), который ограничивает множество вершин для возможных переходов и тем самым позволяет оценить центральность выбранной вершины, исходя из дуг, инцидентных вершинам этого ограниченного набора.

Еще одним видом графовых алгоритмов являются алгоритмы кластеризации вершин. Их также называют алгоритмами определения сообществ (Community Detection Algorithms) по распространенной прикладной задаче, решаемой ими. Эти алгоритмы направлены на выявления множеств вершин, связанных инцидентными им ребрами преимущественно между собой, чем с другими вершинами графа. При практическом применении эти алгоритмы используются в задачах определения групповых предпочтений, установления устойчивости социальных групп, визуализации графов. К алгоритмам этом группы в первую очередь относится алгоритмы определения числа треугольников (Triangle count) и локального коэффициента кластеризации (The local clustering coefficient). Треугольником называется клика из 3 вершин, то есть множество из трех вершин графа, в котором каждая соединена с двумя другими. Определение локального коэффициента кластеризации для вершины и ее прямых соседей — смежных с ней вершин, вычисляется как отношение удвоенного числа треугольников, включающих данную вершину, к количеству всех возможных связей между рассматриваемыми вершинами [4]. Тем самым, данные алгоритмы позволяют установит меру связности вершины и ее соседей между собой. Глобальный коэффициент кластеризации можно определить как средневзвешенную сумму локальных коэффициентов для всех вершин.

Алгоритм определения компонент сильной связности (Strongly Connected Components, SCC) позволяет выявить такие наборы связанных вершин в ориентированном графе, где каждая вершина доступна в обоих направлениях от любой другой в этом же наборе. Для неориентированного графа применяется также похожий алгоритм для поиска связанных компонент (Connected Components), который отличается требованием только наличия пути между двумя вершинами. [5]. Оба алгоритма ввиду их сравнительно невысокой вычислительной сложности применяются для грубого выявления групп, предварительного анализа графа, поиске циклов, а также для общего понимания структуры графа.

Следующим алгоритмом поиска сообществ является алгоритм распределения меток (Label Propagation algorithm, LPA). Идея, лежащая в основе

алгоритма, состоит в итеративном присвоении метки некоторой вершины расширяющемуся кругу ее соседей по некоторым правилам. По завершении процесса распространения, исходя из присвоенных вершинам меток можно сделать вывод относительно структуры сообществ, представленных рассматриваемым графом. Вопрос присвоения или не присвоения метки некоторой вершине на каждой итерации определяется, исходя из количества соседних ей вершин, имеющих данную метку, а также веса инцидентных ребер. [6] Критериями для остановки распространения может является требование того, чтобы каждая вершина имела ту же метку, что и большинство ее соседей. В начале работы алгоритма уникальные метки присваиваются всем вершинам. Однако в этом случае, результаты его работы могут быть различными для разных попыток. Поэтому можно также присвоить так называемые "посевные" метки (Seed label) некоторым вершинам. Этом случае весьма вероятно, что их соседи будут наследовать именно их, что позволить стабилизировать вариационность полученных результатов.

Следующий алгоритм для кластеризации является Лувенский алгоритм (Louvain Method) [7]. Считается одним из самых быстрых алгоритмов для графов большого размера (более 10 миллионов вершин). Наряду с обнаружением сообществ он также отражает их иерархию. Это позволяет выявить структуру сети на разных уровнях детализации - от больших групп до малых. Ключевым понятием данного алгоритма является модулярность. Она является мерой качества текущего распределения вершин графа по кластерам. Таким образом, в процессе работы для разбиения подсчитывается показатель модулярности, которая оптимизируется на последующих итерациях путем перераспределения вершин. Перераспределение, увеличивающее модулярность, заключается в формировании групп таким образом, чтобы внутри них вершины имели больше связей между собой, чем с вершинами других групп.

Работа алгоритма состоит из двух повторяющихся шагов. На первом шаге для выбранных вершин с целью максимизации модулярности определяются группы из их прямых и непрямых соседей. На втором шаге на основе групп с первого шага происходит формирование более крупных групп. Это происходит на основе общего числа связей между вершинами отдельных групп, то есть две группы объединяются в одну большую, если общее число связей между их вершинами больше, чем с вершинами других групп.

Среди графовых алгоритмов можно также выделить алгоритмы генерации графов Girvan-Newman (GN) [8] и Lancichi-netti-Fortunato-Radicchi (LFR) [9]. В основном они применяются для проверки алгоритмов определения сообществ. Для этого они позволяют сгенерировать граф с известным числом сообществ и характеристиками, похожими на характеристики реального графа, и провести тестирование выбранного алгоритма.

3. Особенности применения графовых баз данных

Рассмотрим некоторые особенности графовых баз данных, которые необходимо учитывать при их использовании для решения задач анализа данных. В первую очередь, следует отметить, что следует избегать применения графовой модели для анализа транзакционных данных. Особенно если их объем (т.е. количество элементов) предполагается очень большим. Например, к этому можно

отнести временные ряды. В этом случае гораздо эффективнее применять реляционную модель, в которой можно хранить элементы данных транзакций некоторого вида в рамках одной таблицы (реляционного отношения). В таком случае выполнение сложных аналитических запросов, благодаря различным механизмам индексации, будет выполняться наиболее эффективно. В этом случае анализ данных более ориентирован (как и сама реляционная модель) на учет связей между элементами данных одного вида (далее будем называть эти связи «вертикальными»). Например, в некоторой таблице «Закупка компонентов» каждый кортеж будет отражать данные одной транзакции - дата, количество, поставщик, цена, название компонента. Соответственно любой аналитический запрос будет подразумевать изначальное получение идентификаторов некоторых кортежей как ссылки на некоторые целостные сложные элементы данных (например, закупочные транзакции), а уже потом обработку значений их полей.

Таким образом, реляционная модель подходит в большей степени для анализа элементов данных с неизменной структурой, которые можно представить в рамках одной таблицы. При этом она эффективно формирует «вертикальные» связи в процессе выполнения запроса. Например, сортирует ежемесячные закупке по цене. Связи между элементами данных разных видов (далее будем называть их «горизонтальными») установлены на этапе загрузки данных в таблицу в соответствии типами ее полей. Например, названия поставщиков будут распределены по таблице «Закупка компонентов» с учетом того в какое время, какое количество, какого компонета, по какой цене было у них закуплено.

Поэтому применение реляционной модели в отношении анализа транзакционных данных, каждый вид которых имеет неизменную структуру, дающую возможность заранее сформировать «вертикальные» связи, более предпочтителен. Однако, если необходимо анализировать данные, представленные в разных таблицах, то этом случае «вертикальные» связи нужно формировать на этапе выполнения запроса с помощью операции соединения таблиц. Увеличение числа объединяемых таблиц с большим количеством числом кортежей могут сделать время выполнения запроса неприемлемым.

Поэтому в случае, если число учитываемых при аналитических операциях связей велико и их перечень в разных запросах трудно предсказать, то в этом случае можно рассматривать возможность применения графовой модели, в которой и «вертикальные» и «горизонтальные» связи задаются явно в виде дуг графа, что сводит операции соединения таблиц к поиску путей между вершинами. К таким данным можно отнести нормативно-справочные данные (Reference Data Management, RDM), и мастер-данные (Master Data Management, MDM).

Отдельно отметим, что графовую модель и соответствующую ей СУБД рекомендуется использовать при решении задач анализа данных, в которых объект анализа в реальности представляет собой сетевую структуру. Например, социальная сеть, коммутационная сеть, логистическая сеть и т.д. В этом случае моделирование упрощается ввиду сходства элементом модели данных и частей объекта моделирования и представляется возможность «в лоб» применить графовые алгоритмы. Противоположной ситуацией является та, в которой объект моделирования необходимо сводить к графовой модели (например, набор текстовых документов). В этом случае при таком сведении для успешного проведения аналитических процедур следует изначально ориентироваться на применение и последующую интерпретацию результатов применения выбранных

графовых алгоритмов и, исходя из этого, выбирать какими элементами графовой модели будут представлены части объекта моделирования.

Заметим также, что использование графовых баз данных дополнительно открывает возможности для применения визуального анализа данных в виду того, что результатом запросов в большинстве случаев будет являться графовая структура, которая подразумевает явную и привычную визуальную метафору — множество вершин, соединенных ребрами, чего нельзя сказать в отношении реляционных баз данных, представляющих в виде ответа некоторую таблицу. Поэтому для облегчения интерпретации результатов аналитических операций имеет смысл дополнитльно использовать средства визуального анализа (например, Gephi [10]), позволяющие визуально отразить свойства элементов полученного графа.

Заключение

На сегодняшний день графовые СУБД вполне можно рассматривать как альтернативу традиционным реляционным СУБД в отношении хранения и анализа данных, обладающих сложной иерархической структурой, различные элементы которой по разному могут обрабатываться в рамках аналитических операций. В первую очередь это относится к нормативно-справочные данным (Reference Data Management, RDM), и мастер-данным (Master Data Management, MDM). Наряду с этим графовые СУБД хорошо подходят для моделирования объектов предметной области, обладающих явной сетевой структурой.

Распространенными графовыми моделями данных на данный момент являются RDF-модель, представляющая данные в виде троек (субъект, свойство, значение), и модель графа свойств или атрибутированного графа (Property graph), позволяющая задавать внутреннюю структу у вершин и дуг, в виде наборов пар (ключ, значение).

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

Использование в качестве математической основы графовых СУБД теории графов делает весьма востребованным выполнение визуализации результатов запросов для ускорения и облегчения их интерпретации аналитиком. Формирование такой визуализации как правило заключается в основном к выбору взаиморасположения вершин и узлов графа, их размера, окраски. Но уже это потенциально обладает большей вариативностью, чем отображение результата в виде таблицы при использовании реляционных СУБД. Таким образом, можно сказать, что хоть графовая модель и предполагает использование конкретной визуальной метафоры, но обеспечение ее эффективности с точки зрения скорости и правильности дальнейшей интерпретации представляет собой сложную проблему, которую следует решать с учетом условий исходной задачи и стереотипов пользовательского восприятия.

Таким образом, применение графовых СУБД становиться на сегодняшний день довольно привлекательным для хранения и анализа данных, представляющих собой сложные иерархические структуры. Однако принятие

решения об их использовании должно быть обосновано необходимостью учета большого количества связей между фрагментами данных и высокой вариативностью аналитических запросов.

Литература

1. Nguyen V., Bodenreider O., Sheth A. (2014) Don't Like RDF Reification?: Making Statements about Statements Using Singleton Property. // Proceedings of the 23rd international conference on World wide web. April 07-11, 2014, Seoul, Korea DOI: 10.1145/2566486.2567973.

2. Wasserman S., & Faust K. (1994). Social Network Analysis: Methods and Applications. Vol. 8. Cambridge: Cambridge University Press.

3. Marchiori M.; Latora V. (2000) Harmony in the small-world // Physica A: Statistical Mechanics and its Applications. 285 (3-4). pp. 539-546.

4. Stanley W., Faust K. (1994) Social Network Analysis: Methods and Applications. Cambridge: Cambridge University Press p. 243.

5. Galler B. A., Fischer M. J. (1964) An Improved Equivalence Algorithm.

6. Raghavan U. N., Albert R., Kumara S. (2007) Near Linear Time Algorithm to Detect Community Structures in Large-Scale Networks // Physical Review E -Statistical, Nonlinear and Soft Matter Physics. APS. Vol. 76, Issue 3, pt. 2, pp. 036106.

7. Blondel V. D.; Guillaume J.-L.; Lambiotte R.; Lefebvre E. (2008) Fast Unfolding of Communities in Large Networks // Journal of Statistical Mechanics: Theory and Experiment. 2008 (10). 10008 p.

8. Girvan M., Newman M.E.J. (2002) Community Structure in Social and Biological Networks. P. Natl. Acad. Sci. USA 99(12), pp. 7821-7826.

9. Lancichinetti S., Radicchi F. (2008) Benchmark Graphs for Testing Community Detection Algorithms. Physical Review E, 78.

10. Пакет программного обеспечения для сетевого анализа и визуализации. Режим доступа: https://gephi.org/.

Сведения об авторах

Ломов Павел Андреевич к.т.н., старший научный сотрудник e-mail: lomov@iimm.ru Pavel A. Lomov

PhD (Tech. Sci.), senior researcher

i Надоели баннеры? Вы всегда можете отключить рекламу.