4
ArcGISScripting和大型空间数据集的性能
我目前正在使用arcgisscripting模块编写python脚本,以处理少量表(总数为8)标准化的相当大的数据集(总计10,000条记录)。该过程包括基于坐标元组(x,y)创建要素,并使用其他7个表中的关系作为指导来创建图形(节点和线)。最终输出是一个个人地理数据库(pgdb / fgdb),其节点和边缘空间数据集直观地表示了关系。 我最初的尝试是使用对新的地理数据库表和SearchCursor记录集的查询来为出现的多对多关系填充链接表(InsertCursor)。除15-20分钟的处理时间外,这非常有效。 使用Python中的cProfiler模块,很明显,在执行搜索查询以使用游标(搜索和插入游标)的请求填充链接表时“破坏”个人地理数据库会导致令人震惊的性能。 经过一些重构,我设法将处理时间缩短到2.5分钟以下。折衷方案是在代码中部分构建地理数据库架构,并在整理所有关系后将对arcgisscripting游标的请求限制为InsertCursors。 我的问题是表现之一。 人们在处理大数据集时使用了哪些技术来维持合理的计算时间? 我在寻求优化过程中错过了ESRI建议的方法吗? 我理解创建弧形游标时会产生的开销,特别是如果它是来自个人地理数据库的,虽然在从本网站和Google长期搜索了与性能相关的答案之后,但我的印象是性能并不是人们努力的最前沿。 作为ESRI产品的用户,有人期望并容忍这些性能落后吗? 更新 使用该产品进行一些工作之后,我积累了一系列优化技术,这些技术已将空间信息从适当格式转换为地理数据库。这是为个人和文件地理数据库开发的。花絮: 读取您的数据并将其合理化在内存中。这将使您的时间减少一半。 在内存中创建要素类和表。使用要素数据集键盘输入'in_memory'将内存用作ram磁盘,在其中执行功能,然后写出到磁盘 要写到磁盘,请使用CopyFeatureclass作为要素类,并使用CopyRow作为表。 这三件事使用了一个脚本,该脚本将100,000+个要素从30分钟转换为30-40秒,这其中包括关系类。不能轻易使用它们,上面的大多数方法都占用大量内存,如果不注意,可能会导致问题。