¿Las características de disolución mejoran la eficiencia del geoprocesamiento?

9

Tengo un gran conjunto de datos de línea (> 140,000 características). ¿Existe alguna ventaja de procesamiento, ya sea en el tiempo requerido o (más importante) en la memoria utilizada:

  • ejecutar Dissolve en los datos antes de ejecutar Buffer ?
  • ejecutar Dissolve en las entradas de dos operaciones de identidad ?

En general, simplemente esperaría hasta que todo el geoprocesamiento haya terminado y luego haga una Disolución al final. Sin embargo, estoy depurando el guión muy antiguo de otra persona, y no tengo claro si estaba disolviendo todo repetidamente por alguna razón (en Arc 9.3), o simplemente no pensaba en las alternativas. (El mismo script proyecta datos repetidamente entre herramientas de geoprocesamiento, por lo que la lógica ya es cuestionable).

Erica
fuente
No tengo datos concretos para respaldar esto, pero desde mi experiencia personal: siempre es posible almacenar antes de disolver, si es posible, porque almacenar una característica de línea tan compleja lleva una eternidad.
nmpeterson

Respuestas:

9

Si el uso de la memoria es su principal preocupación, entonces muchas características pequeñas (bajo conteo de vértices) probablemente serán más de su agrado que algunas características muy grandes (alto conteo de vértices). Pero es posible que "demasiadas funciones" eventualmente abrumen incluso "demasiados vértices" para la velocidad de procesamiento.

Si piensa en cómo deben estructurarse los algoritmos para procesar todas las entidades contra todas las entidades entre dos clases de entidad, está trabajando con bucles anidados múltiples (para entidades en FC1 y FC2, y para los vértices en Feature1 y Feature2). En operaciones como el dibujo, el número de solicitudes de dibujo suele ser más preocupante que los vértices en cada solicitud, pero con las operaciones tema por tema, es probable que los algoritmos clave se basen en los recuentos de vértices en cada par F1 / F2 , con una " notación O grande " de "O (N * M)" (el tiempo para completar la operación está relacionado con el factor de la cantidad de vértices involucrados), que, para grandes características en ambos conjuntos de datos, está lo suficientemente cerca de O (N ^ 2) para que te preocupes por el trabajo que se completa.

He tenido éxito al superponer características masivas (como Rusia, Canadá, EE. UU., Australia, Brasil, Noruega) con una cuadrícula de 5 grados (red de pesca) para reducir la complejidad de las características para el procesamiento intermedio. He visto operaciones de punto en el polígono en una capa COUNTRIES de 1: 15m restringida por vértices que se ejecutan 100-1000 veces más rápido que la tabla original (con solo un aumento de 20x en el recuento de características). Sin embargo, debe tener cuidado en su lógica de procesamiento para manejar correctamente las relaciones uno a muchos y muchos a muchos, especialmente en los casos en que existe un límite falso.

También hay un aspecto de "rendimientos decrecientes" en los ahorros de trabajar con características más pequeñas: me instalé en una cuadrícula de 5 grados al probar el rendimiento de la intersección con 90, 45, 30, 20, 15, 10, 5, 3, 2 y Cuadrículas de 1 grado, que mostraron un aumento alarmante en el tiempo de procesamiento a medida que aumentaba el número de características totales.

No son tiempos en los que un menor número de características con más vértices son más eficientes, por lo que es probable que vale la pena el esfuerzo para hacer algunas pruebas en el orden de la operación con datos reales (no simplificado subconjuntos de prueba) antes de comprometerse con un enfoque sobre el otro (la utilización de RAM equilibrio con tiempo de ejecución).

NOTA: volví a ejecutar el ejercicio de cuadrícula con hardware moderno y obtuve un rendimiento óptimo con una superposición de 30 grados, de modo que aumenta el riesgo de características demasiado pequeñas y aumenta la importancia de la evaluación con datos de producción.

Vince
fuente
10

Una operación de disolución generalmente reducirá el número de entidades, arcos y nodos dentro de una capa, particularmente para capas con longitudes significativas de límites compartidos. Dado que el tiempo empleado durante una operación de almacenamiento en búfer depende en gran medida del número de nodos, el procesamiento previo con Disolución puede reducir significativamente el tiempo de ejecución (y los requisitos de memoria). Si vale la pena o no en su caso dependerá de la medida en que podrá reducir el número de nodos (dependiendo de su capa de datos) y la eficiencia de la operación Disolver en comparación con el almacenamiento en búfer . En mi experiencia, usando Java Topology Suite, una operación de disolución puede ser bastante rápida en comparación conAlmacenamiento en búfer , aunque el rendimiento de Dissolve varía significativamente según la biblioteca. La otra consideración es que Disolver está fuertemente afectado por errores topológicos. Si la capa contiene errores, deberá realizar una limpieza vectorial antes de la operación Disolver, lo que aumentará el tiempo de ejecución del flujo de trabajo.

WhiteboxDev
fuente
2
No estoy tan seguro sobre la parte de "requisitos de memoria". Las características más grandes requieren más almacenamiento. El almacenamiento en búfer de características muy complejas es más difícil (e intensivo en RAM) que el almacenamiento en búfer de funciones simples. Es más probable que haya un "punto óptimo" entre "demasiadas características" y "demasiados vértices por característica" que hacer una afirmación general de que disolver primero siempre mejorará el rendimiento del búfer.
Vince
@ Vince, estaré de acuerdo en que el efecto de Disolver es mucho más efectivo para reducir el tiempo de ejecución en lugar de la memoria, pero en última instancia, si un grupo de funciones tiene menos funciones con menos nodos totales, requerirá menos memoria para representar.
WhiteboxDev
Reducirá la memoria total, pero no la memoria por función. Realizar operaciones de geoprocesamiento en características masivas y complejas lleva más tiempo que en características más simples, y no solo de manera lineal, en mi experiencia.
nmpeterson
@Vince, también Disolver, dependiendo de la capa, dará como resultado menos características más grandes. El tamaño geográfico real de una característica no tiene nada que ver con sus requisitos de memoria. Todo depende de su complejidad, que es una función del número de nodos utilizados para representarlo. Sin embargo, estaré de acuerdo con usted sobre el equilibrio del punto óptimo.
WhiteboxDev
@nmpeterson, sí, es cierto que esto es por capa y no por función. Pero generalmente amortiguamos las capas y no las características individuales. Sin embargo, ¡tiene razón sobre la no linealidad del rendimiento en el procesamiento geoespacial! ¡Parece que ese es siempre el caso para nosotros!
WhiteboxDev