Рекомендации по использованию геообработки для данных ArcSDE

Файлы подключения к базе данных (.sde)

Инструмент геообработки требует файл подключения к базе данных (.sde) при доступе к данным корпоративных баз данных ArcSDE или базы данных.

Динамическое создание файлов подключения ArcSDE

Файлы подключения ArcSDE можно создать с помощью инструмента Создать файл подключения ArcSDE (Create ArcSDE Connection File). Этот инструмент позволяет автоматизировать процесс создания файлов подключения ArcSDE по мере необходимости, вместо предварительной подготовки файлов для инструментов, которым требуется доступ к данным ArcSDE. Можно получить параметры подключения из любого источника, такого как текстовой файл, кодированный XML поток или защищенная база данных, и передать их в инструмент Создать файл подключения ArcSDE для создания файла подключения ArcSDE. Когда вы закончите работу с файлом подключения, его можно сразу удалить, используя инструмент Удалить (Delete) или соответствующую команду операционной системы.

ВниманиеВнимание:

В результатах и истории геообработки хранятся все параметры, переданные инструментам. Поскольку информация о подключении введена в инструмент Создать файл подключения ArcSDE, она будет храниться, пока вы не очистите журнал истории. При каждом использовании инструмента, будь это системный инструмент, модель или скрипт, соответствующая запись появляется в файле журнала истории. Информация в файле журнала представляет собой почти полную копию информации окна Результаты (Results). Чтобы информация о подключении (пароль и другие данные) не сохранялась в журнале истории или в окне Результат при запуске инструмента Создать файл подключения ArcSDE, отключите протоколирование истории. Подробнее, см. раздел Файлы журналов истории.

Производительность инструментов геообработки при работе с данными ArcSDE

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

Инструменты геообработки в основном выполняют операции создания/загрузки данных

Большинство инструментов геообработки создают новые данные. Поэтому, по большей части, получение выходных данных геообработки должно рассматриваться как операция по загрузке данных, которая начинается в момент передачи выходных данных в ArcSDE. Важно запланировать все операции по загрузке данных так, чтобы они не сказывались на общей производительности базы данных. Большинство администраторов баз данных (и пользователей) вряд ли будут довольны, когда запущенный вами инструмент Объединить начнет загружать 50 миллионов записей в базу данных ArcSDE во время утреннего "часа пик" в сети. Операции загрузки большого объема данных будут чувствительны для всех пользователей базы данных (которых, иногда, может быть несколько сотен или тысяч), а также, будут влиять на всех пользователей сети, по которой передаются данные. Если объем входных данных для операции геообработки очень велик или данные комбинируются (как при использовании инструментов наложения) для создания большого выходного класса объектов), следует задать выполнение этой операции по расписанию, во время минимальной загрузки сервера и сети.

ПримечаниеПримечание:

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

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

Когда не следует хранить данные в ArcSDE

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

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

Операции обновления имеющихся классов объектов ArcSDE также могут требовать большого количества ресурсов, если число обновлений слишком велико. Следующие инструменты:

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

Рекомендации по использованию пространственного индекса для редактирования данных с помощью инструментов геообработки

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

Инструменты геообработки и пространственные индексы

Только несколько инструментов геообработки могут редактировать имеющиеся данные:

При работе с инструментами геообработки, редактирующими данные, становится доступной настройка параметров среды MaintainSpatialIndex, которая позволяет управлять обработкой пространственного индекса в ArcSDE при операциях вставки, удаления или обновления (редактирования). Имеются две опции, которые могут повышать производительность редактирования существующих данных. Можно задать параметру MaintainSpatialIndex значение true, чтобы оставить пространственный индекс на месте и позволить ArcSDE автоматически обновлять его при редактировании. Или, можно задать значение false, при этом инструменты геообработки будут удалять пространственный индекс ArcSDE перед началом редактирования. Необходимо считать пространственный индекс после завершения редактирования.

Пространственные индексы при использовании курсоров обновления и вставки

Update и insert cursors также работают с имеющимися данными. При использовании курсоров обновления и вставки для редактирования данных, можно воспользоваться инструментом Удалить пространственный индекс, чтобы удалить пространственный индекс ArcSDE перед началом операций редактирования над большим числом записей. После завершения редактирования, можно использовать инструмент Добавить пространственный индекс для повторного построения индекса. Это может повысить скорость редактирования, если обрабатывается большое количество строк. См. Обзор пространственных индексов в базе геоданных, где описывается работа с пространственными индексами.

Рекомендации по использованию данных ArcSDE при написании скриптов

Реляционные системы управления базами данных (РСУБД), такие как Oracle, SQL Server, IBM DB2 и PostgreSQL, требуют, чтобы имена объектов указывались полностью, особенно, если данные находятся вне схемы. Использование полных имен позволяет однозначно задавать имя использующегося объекта (класса объектов, реляционной таблицы, таблицы и т.д.). Каждая база данных имеет собственные стандарты полного описания имени объекта. Более подробную информацию можно найти в документации по СУБД.

Использование полного имени таблицы или класса объектов

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

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

import arcpy
# Create an ArcSDE connection file that connects as the toolbox database user
arcpy.CreateArcSDEConnectionFile_management(r'C:\temp',r'toolboxuser.sde','gpserver','5151','',"DATABASE_AUTH",'toolbox','toolbox')

# Perform a union operation using data owned by the connected user, toolbox,
# and another feature class owned by the map database user.
arcpy.Union_analysis(r'C:\temp\toolboxuser.sde\toolbox.states;C:\temp\toolboxuser.sde\map.counties',r'C:\temp\toolboxuser.sde\statesCountiesUnion')

Полное описание имени объекта в каждой базе данных немного отличается. Более подробную информацию см. в документации по SQL СУБД.

Использование полных имен полей

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

Геообработка с версионными данными

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

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

Если вы добавляете данные в ArcMap, данные отображаются как слой объектов или представление таблицы. Когда инструмент геообработки определяет, что входными данными является слой объектов или представление таблицы, он не обращается к файлу подключения ArcSDE, чтобы заново открыть класс, используя свойства подключения. Вместо этого, он получает доступ к классу объектов, используя рабочее пространство уже открытого слоя. Если в рабочей области происходят какие-либо изменения, например, меняется версия, инструмент отслуживает их. Если в ArcMap использован инструмент Изменить версию над данными ArcSDE, которые находятся в таблице содержания ArcMap, инструмент геообработки будет работать с той версией данных, к которой подключена рабочая область после выполнения инструмента Изменить версию.

Использование версионных классов пространственных объектов с инструментами геообработки

При доступе к классу объектов непосредственно из инструмента геообработки, с помощью пути, использующего файл подключения ArcSDE (.sde), можно управлять версией, к которой относится класс объектов, следующим образом:

  1. Ссылка на класс пространственных объектов с помощью пути к файлу подключения ArcSDE.
  2. Создайте новую версию, используй инструмент Создать Версию (Create Version). Когда версия создается таким способом, новая версия станет дочерней копией версии, указанной в файле подключения, который используется как аргумент для инструмента.
  3. Создайте новый файл подключения, используя инструмент Создать файл подключения ArcSDE (Create ArcSDE Connection File), и убедитесь, что для параметра Версия (Version) задана новая версия.
  4. Используйте этот новый файл подключения, чтобы получить доступ к классу объектов при подключении новой версии.
  5. Чтобы снова использовать класс объектов при подключении к родительской версии, используйте оригинальный файл подключения.
ПодсказкаПодсказка:

При присваивании имен файлам подключения ArcSDE, может быть полезно, если имя файлу .sde присваивается так, чтобы четко идентифицировать работу, которая выполняется через каждый файл подключения:

  • Использование параметров подключения: gpserver5151toolboxVersion1.sde (имя сервера + порт + имя пользователя + версия)
  • Использование имени аналитика ГИС, который работает с файлом.sde: Ken.sde
  • Присвоение имени файлу .sde в соответствии с именем проекта: waterDeptJune2010Upgrade.sde

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

Скрипт Python, отображающий рабочий процесс использования версионных классов объектов.

# VersionedFeatureClassExample.py 
# Description: Simple example showing how to access versioned feature classes in geoprocessing tools.


# import system modules
import arcpy
import sys, os

# Set variables
sdeConnFilePath = sys.path[0] + os.sep + "sdeconnectionfiles"
analysisVersion = "TOOLBOX.proposedStreets2k9"
defaultVersionConnection = r'gpserver5151toolboxDEFAULT.sde'
proposedStreetsVersion = r'gpserver5151toolboxproposedStreets2k9.sde'

# Perform analysis on the Default version to determine current number of streams within 100 meters of streets.
inputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams'
selectFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street'
outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'StreamsNearStreets'

arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','')
print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management(outputFC))

# Create an ArcSDE connection file for connecting to the proposedStreets2k9 version
folderName = sdeConnFilePath
fileName = proposedStreetsVersion
serverName = "gpserver"
serviceName = "5151"
databaseName = ""
authType = "DATABASE_AUTH"
username = "toolbox"
password = "toolbox"
saveUserInfo = "SAVE_USERNAME"
versionName = analysisVersion
saveVersionInfo = "SAVE_VERSION"

arcpy.CreateArcSDEConnectionFile_management (folderName, fileName, serverName, serviceName, databaseName, authType, username, password, saveUserInfo, versionName, saveVersionInfo)

# Perform the same analysis on the proposedStreets2k9 version to see the effect of the proposed changes.
inputFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams'
selectFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street'
outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'NewStreamsNearStreets'

arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','')
print "Streams projected to be within 100 Meters of streets after proposed street additions:" + str(arcpy.GetCount_management(outputFC))

Доступ к версионным классам объектов с помощью слоев объектов/представлений таблиц из инструментов геообработки

Рабочий процесс, используемый для доступа к версионным классам объектов с помощью слоев объектов или представлений таблиц выглядит так:

  1. Создайте слой, используя инструмент Создать векторный слой (Make Feature Layer) или Создать представление таблицы (Make Table View) для всех входных данных. Убедитесь, что используется файл подключения ArcSDE, в котором имеется указание родительской, или начальной, версии для параметра Версия (Version).
  2. Используйте эти слои во всех инструментах.
  3. Если вы хотите поменять версию, в которой работаете, используйте инструмент Изменить версию (Change Version).
  4. Продолжайте использовать в инструментах слои объектов. Геообработка использует версию, которая задана в открытой рабочей области после выполнения инструмента Изменить версию.
  5. Используйте инструмент Изменить версию, если это необходимо для проекта, чтобы переключаться между различными версиями для выполнения анализа.

Скрипт Python, отображающий рабочий процесс использования версионных слоев объектов.

# VersionedFeatureLayersExample.py 
# Description: Simple example showing how to access versioned feature classes using layers.


# import system modules
import arcpy
from arcpy import env
import sys, os

# Set Environments
env.workspace = sys.path[0] + os.sep + "gpserver5151toolboxDEFAULT.sde"

# Create the layers
arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.street', 'RedlandsStreets')
arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.streams', 'RedlandsStreams')

# Perform analysis on the Default version to determine current number of streams within 100 meters of streets.
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'StreamsNearStreets','','','')
print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management("StreamsNearStreets"))

# Change to the development version
arcpy.ChangeVersion_management('RedlandsStreets','TRANSACTIONAL', 'TOOLBOX.proposedStreets2k9','')

# Perform the same analysis on the development version to see the effect of the proposed changes.
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'NewStreamsNearStreets','','','')
print "Streams projected to be within 100 Meters of streets after proposed street additions: " + str(arcpy.GetCount_management("NewStreamsNearStreets"))
9/11/2013