4 votos

Añadir datos de una base de datos SQL Server Spatial a una aplicación ArcMap o ArcEngine con ArcObjects para mejorar el rendimiento

Tengo una geodatabase ArcSDE almacenada en MS SQL Server 2008 R2. Los conjuntos de datos de esta geodatabase van de 10 a 7 millones de registros y hay una mezcla de tablas y conjuntos de datos espaciales (SQL Geometry). Todos los conjuntos de datos están actualmente relacionados mediante clases de relación.

Es casi imposible trabajar con estos datos en ArcMap o mediante ArcObjects porque los conjuntos de datos son muy grandes. ArcMap se cuelga al consultar u obtener registros relacionados. Probé con capas de consulta en ArcGIS 10 que consultan directamente las tablas SQL, pero como éstas vuelven a consultar la base de datos con cada rediseño del mapa o cambio de tabla de identificación o atributos, el rendimiento seguía siendo extremadamente lento.

¿Hay alguna manera de consultar directamente las tablas SQL una vez y cargar los datos en ArcMap como una capa?

4voto

Sork Puntos 26

7 millones no es un número tan grande de discos. Las clases de relación son probablemente lo que te está matando. Yo sugeriría dos cosas. 1) Para la edición, utilice réplicas de hijos de área pequeña. Esto reducirá en gran medida el número de registros necesarios, mientras que todavía le da las capacidades que necesita de sus clases de relación. 2) Para la visualización, comience con una réplica de sólo lectura no versionada para la visualización solamente. Si el rendimiento sigue siendo demasiado bajo, cambie a una vista desnormalizada. Si se trata de una base de datos que se edita con regularidad, la vista desnormalizada será un poco más difícil de mantener, pero el rendimiento mejorará notablemente a costa del espacio. Incluso podría hacer réplicas de vistas limitadas espacialmente como recomendé para la edición, dependiendo del patrón de uso de su base de datos. (Además, asegúrate de que tus clientes de sólo vista están utilizando el caché de funciones).

3voto

FlySwat Puntos 61945

Lo más probable es que tus índices espaciales estén estropeados. Suelta y vuelve a crearlos y comprueba si notas alguna diferencia.

La segunda cosa que yo probaría es utilizar la conexión directa en lugar de un enfoque de tres niveles para arcsde. ¿Por qué? Porque el enfoque de tres niveles moverá los datos alrededor de tres procesos en lugar de dos.

La tercera cosa que probaría es quitar las clases de relación y ver si eso hace una gran diferencia (lo más probable es que realmente lo haga). Si ese es el caso, considere la posibilidad de eliminar varios de ellos primero por desnormalización. Otra opción es poner índices en los campos que ArcMap está consultando (seguramente las claves foráneas que debería haber hecho ArcCatalog, pero yo volvería a comprobarlo).

Por último, recuerde que siempre puede utilizar las herramientas estándar de SQL Server para ver qué consultas están tardando más, analizar el coste de la consulta y eliminar los índices de esos campos.

Sí, extraer un trozo de datos más pequeño, trabajar con él y luego resincronizarlo funcionaría, pero con esos números tan pequeños no es necesario hacerlo todavía.

Y para responder a tu pregunta sobre la consulta de los datos una vez, bueno, un mapcache (también conocido como editcache) es efectivamente eso (consulta de los datos y almacenamiento en caché local).Sin embargo, yo no lo usaría con 9 millones de características porque la extracción y la sincronización sería un enfoque mucho mejor que eso por varias otras razones fuera del alcance de esta pregunta :)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X