大型数据集的分块处理

为改善要素叠加工具(如联合相交)的性能和可伸缩性,软件采用了称为自适应细分处理的运算逻辑。当可用虚拟内存的数量不足以处理数据时,就会触发系统使用此逻辑。由于保持在可用虚拟内存范围内可以提高性能,因此基于对原始范围的细节上,处理可逐步进行。跨越多个子块(也称为分块)边缘的要素会在分块的边缘处被分割开,并会在处理过程的最后阶段重新组合为一个要素。这些分块边缘处所引入的折点仍会保留在输出要素中。如果正在处理的要素过大,以至于细分处理无法使用可用虚拟内存将此要素恢复成原始状态,则分块边界也可能保留在输出要素类中。

自适应细分处理逻辑是动态的,取决于可用虚拟内存和数据的复杂性。如果可用内存发生任何变化,则在同一台计算机上运行相同叠加操作可能会导致数据划分为图块的方式有所不同。

自适应细分处理的优化是增加了分块并行处理。启用并行处理后,由不同内核处理的每个分块将共享系统上可用虚拟内存的总量。这意味着要一次处理多个分块,每个分块必须小于顺序处理时的大小。自适应细分处理会追踪每个分块的大小,以确保在并行处理期间同时处理的分块不超过可用虚拟内存的总量。并行处理可能并不会在所有情况下都可提高速度。数据大小和复杂性必须超过用于管理并行进程的开销,才能获得性能提升。请参阅各个工具的文档,以了解如何为支持并行处理的工具启用此功能。

细分数据的优点

当处理在计算机的可用虚拟内存(未被系统或其他应用程序使用的可用内存)范围内进行时,工具可以获得最佳性能。但是,当处理包含大量要素、具有复杂要素交互的极复杂要素或包含数十万或数百万个折点的复杂要素的数据集(或这三种情况的组合)时,情况就不乐观了。如果不使用分块方法,可用内存将很快被耗尽,然后操作系统将开始分页(使用二级存储,将其视为主内存)。分页导致性能降低,并且在某个时刻,系统容易耗尽资源,操作将会失败。分块有助于避免分页。在极端情况下,处理内存管理将会被移交给系统,该系统尝试通过允许操作系统自行使用所有可用资源来完成处理,进而完成整个过程。

当 64 位应用程序开始成为主流后,普遍印象是一切都会变得更快。但是,通常情况并非如此。使用 64 位处理使您可以同时执行更多操作,这给您的印象可能是性能提高了。但由于工作量增加远不止如此,所以某些操作的速度会变慢。另一个普遍信念是,能够将所有数据推送到内存中进行处理应该可以加快处理速度。虽然对于简单数据而言可能会是这样,但对于大型和复杂空间操作而言,情况并非如此。对于叠加工具处理,将所有数据都存储在内存中并同时进行分析等同于处理上文提到的单个上限级别分块。这比将数据分成更大量的块速度更慢。为提高性能。分块可以减少但不能消除。使用 64 位处理还可以并行处理分块。在许多情况下,这可以提高性能。

正在处理分块

每次处理都是从覆盖整个数据范围的单个分块开始。如果单个分块中的数据过大而无法在可用虚拟内存中进行处理,则会将其细分成四个等大的分块。然后,再对子分块进行处理。如果第二级分块中的数据仍然过大,则会进一步细分。此过程将持续执行,直到可以在可用虚拟内存中处理每个分块的数据为止。请参见以下示例:

输入数据集的范围

从所有输入要素的轮廓线开始。

地理处理分块 1 级

将从覆盖整个数据集范围的分块开始进行处理。为方便叙述,我们将此分块称为 1 级分块。

地理处理分块 2 级

如果数据过大而无法在内存中进行处理,则 1 级分块将被细分成四个等大的分块。这四个子分块被称为 2 级分块。

地理处理分块自适应

根据各分块中数据的大小,某些分块会被进一步细分,而另一些则不会。

使用细分的工具

“分析工具”工具箱中的以下工具在处理大型数据时会使用细分逻辑:

  • 缓冲区 - 使用融合选项时。
  • 裁剪 - 并非在所有情况下都使用此逻辑。现在,许多情况可使用内部批处理。
  • 擦除
  • 标识
  • 相交
  • 分割
  • 交集取反
  • 联合
  • 更新

“数据管理”工具箱中的下列工具在处理大型数据集时也会采用细分逻辑:

  • 融合
  • 要素转线
  • 要素转面
  • 面转线

自适应细分过程中的进度指示

自适应细分是动态的,因为它取决于运行进程的计算机上的可用资源量。无法设定完成分析所需步骤数。在分块处理期间,分块可能无法在可用内存中进行处理。然后,系统将分割该分块,并处理新的(分割后的)分块。这些新分块中可能会有一块或全部无法在可用内存范围内进行处理。由于无法在运行时之前有效地确定所需分块数,因此无法提供标准倒数进度消息。所以,针对使用细分逻辑工具显示的消息和进度条仅指示正在处理的单个分块的进度。

处理过程因内存不足或性能下降而失败

当处理超大型要素(包含数百万个折点的要素)时,细分可能也无能为力。沿分块边界多次分割和重新组合超大型要素的内存开销相当巨大。如果要素过大,则会导致出现内存不足的错误或性能下降。多大时属于太大? 这取决于运行此进程的计算机上的可用虚拟内存(未被系统或其他应用程序使用的可用内存)的大小。可用内存越少,则被认为过大而导致出现问题的要素大小会越小。一些较大的要素在一台计算机配置上会产生性能下降或内存不足的错误,而在另一台计算机配置上却不会出现错误。在同一台计算机上,性能下降或内存不足的错误也可能会时而发生时而不发生,这取决于其他应用程序所占用的资源。举例来说,整个城市的道路轮廓或表示复杂河口的多边形,就属于具有大量折点的超大要素。

以下方法可用于处理要素过大的问题。建议在处理之前使用切分工具将较大的要素分割成较小的要素。

另一种方法是针对大型要素使用多部分转单部分工具。在运行工具之前,请确保要素类具有唯一的标识符字段,以便在运行多部分转单部分工具之后,每个部分都将具有其所属原始要素的标识符。如果大型要素有许多部分(例如单个要素具有成百上千个部分),则将其转换为单个部分可以使您分别处理各个部分。如果需要,在数据的单部分版本上运行所选择的叠加工具后,您可以通过融合唯一标识符字段来重新创建多部分要素。

当处理极度重叠的区域时,也可能发生内存不足或性能下降错误。极度重叠的其中一个示例是针对非常密集的点集上运行的缓冲操作的结果运行联合相交工具。缓冲区输出将包含许多重叠的缓冲区要素。在密集的缓冲区要素区域中选择任意一个点都可能会返回数以千计、成千上万甚至数十万个重叠缓冲区。针对此缓冲区输出运行相交联合工具会创建许多表示每个唯一重叠关系的新要素。

例如,以下所示的两个要素图层。一个包括 10 个要素 - 点周围的缓冲区,另一个包括一个要素 - 一个方形。

输入 1

输入 1 包括 10 个叠加面要素,以 OID 标注。

输入 2

输入 2 - 1 面,以 OID 标注。

下图显示以上两个要素图层相交的结果。注意:无论属于哪个输入要素图层,要素间的所有叠加(相交)均计算在内。这会产生远超出原输入要素数量的要素。输出中的面(167 个要素)比合并输入中的面(输入总数为 11 个要素)多很多。这会增加相交工具中新要素的数量,根据输入中叠加的复杂程度,输出可能增长迅速。

相交输出
“相交”工具输出显示 167 个以 OID 标记的输出要素。

为避免因处理大型复杂数据集而导致内存不足或性能下降错误,您可能需要通过降低一些重叠复杂度并迭代运行重叠过程的方式来处理数据。您还可以查看成对叠加工具,以了解是否提供与您要完成的功能类似的功能。

注:
由于所提供功能的差异以及各功能输出的差异,使用成对工具可能需要更改工作流程。有关详细信息,请参阅单个工具文档。

如果某个工具正在进行处理时又运行了另一个应用程序或进程,也会出现内存不足的错误。第二个进程会占用一部分细分进程需要使用的可用内存,从而导致细分进程所使用的内存大于实际可用的内存。因此,建议您在处理大型数据集时不要在计算机上执行任何其他操作。

大型数据的数据格式

企业级和文件地理数据库支持非常大型的数据集。在处理非常大型或复杂的数据集时,建议将其用作输出工作空间。有关企业级地理数据库的数据加载策略的详细信息,请联系数据库管理员。请勿执行未经计划或未获批准的大型数据加载操作。