Обработка больших наборов данных по листам

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

Логика адаптивной обработкой подразделов применяется динамически, в зависимости от доступной виртуальной памяти и сложности данных. Запуск одной и той же операции наложения на одном и том же компьютере может привести к различному делению данных на листы, если объем виртуальной памяти по каким-либо причинам изменился.

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

Преимущества разделения данных

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

При переходе на 64-разрядные приложения, появилось впечатление, что вся работа стала выполняться быстрее. Однако это не всегда так. Использование 64-разрядной обработки позволяет выполнить больше операций на тот же промежуток времени и создает впечатление повышения производительности. Некоторые операции замедляются при каждом следующем повторении. Также, имеется заблуждение, что перенос всех данных для обработки в память ускоряет ее. Это справедливо для простых данных, но не работает в случае больших и сложных пространственных операций. Для работы инструментов наложения, помещение всех данных в памяти и одновременный их анализ соответствует обработки одного листа высшего уровня, как упоминалось выше. Это существенно медленнее, чем разбиение данных на листы. Для повышения производительности, разбиение на листы можно сократить, но не отключать. Использование 64-разрядной обработки также позволяет выполнять параллельную обработку листов. Это позволяет повысить производительность во многих случаях.

Процесс разбиения на листы

Каждая обработка начинается с одного листа, который охватывает весь экстент данных. Если данные в одном листе слишком велики для обработки в доступном объеме виртуальной памяти, они делятся на четыре равных листа. Начинается обработка одного из подлистов, который в свою очередь разделяется, если данные второго уровня также слишком велики. Это продолжается до тех пор, пока данные каждого листа не смогут быть обработаны в доступном объеме виртуальной памяти. См. пример ниже:

Экстент входных наборов данных

Начало работы с контурами всех входных объектов.

Геообработка листов уровня 1

Обработка начинается с листа, охватывающего весь экстент всех входных данных. Для обработки это называется 1 уровень листа.

Геообработка листов уровня 2

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

Адаптивная геообработка листов

В зависимости от объема данных на каждом листе, некоторые листы разделяются снова, некоторые - нет.

Инструменты, использующие разбиение

Следующие инструменты из набора Инструменты анализа используют логику разбиения при обработке больших данных:

  • Буфер - при использовании опции Слияние.
  • Вырезание - не во всех сценариях. Во многих ситуациях сейчас используется внутренний пакетный процесс.
  • Стирание
  • Идентичность
  • Пересечение
  • Разбиение
  • Симметричная разность
  • Объединение
  • Обновление

Следующие инструменты из набора Управление данными также используют логику разбиения при обработке больших наборов данных:

  • Слияние
  • Объект в линию
  • Объект в полигон
  • Полигон в линию

Индикатор выполнения во время адаптивного разбиения

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

Процесс останавливается с ошибкой переполнения памяти или происходит снижение производительности

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

Для работы со слишком большими объектами есть несколько методов. Один из рекомендуемых способов - использовать инструмент Нарезать для разделения перед обработкой больших пространственных объектов на объекты меньшего размера.

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

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

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

Входной слой 1

Входной слой 1 содержит 10 перекрывающихся полигональных объектов, надписанных значением OID.

Входной слой 2

Входной слой 2 – один полигон, надписанный значением OID.

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

Выходные данные инструмента Пересечение
В выходных данных инструмента Пересечение показано 167 выходных объектов, помеченных OID.

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

Примечание:
Использование инструментов попарного наложения может потребовать изменений в рабочем процессе из-за различий в функциях и выходных данных. Дополнительные сведения см. в документации к каждому инструменту

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

Форматы данных для больших данных

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