Suite

La connexion à ArcSDE avec arcpy est lente (ArcSDESQLExecute)


Je crée une API qui permettra d'effectuer des requêtes sur ma GeoDatabase. J'utilise ArcSDESQLExecute pour me connecter à ArcSDE (soutenu avec une base de données Oracle). La création de l'objet de connexion est très lente (~1,5 s) :

sde_conn = arcpy.ArcSDESQLExecute(r"donnéesConnexion à GPSERVER3.sde")

Donc, faire cela avant tout en gérant une requête API rend les temps de réponse très lents.

Cependant, si je créesde_connune fois, pour la durée de vie de l'API, et la réutiliser indéfiniment, les requêtes sont beaucoup plus rapides (~20ms dans certains cas), car elles ne se recréent passde_connchaque fois.

Est-ce une mauvaise pratique de gardersde_connvivant? Je soupçonne que la création de l'objet crée une connexion persistante. Est-ce que quelqu'un sait ce qu'il fait sous le capot ? (est-ce qu'il ouvre et ferme la connexion lors de chaque appel àexécuter?


Certaines opérations ArcSDE sont assez lourdes et cela est mentionné dans la documentation. ESRI l'améliore. Découvrez les curseurs par exemple (classique vs arcpy.da).

Un gros inconvénient auquel je peux penser dès le départ est la façon dont vous gérez l'exclusion mutuelle et l'équilibrage de charge sur votre ou vos connexions.

En outre, vous pouvez rencontrer des problèmes transactionnels, des verrous, etc.

Notez que SQLExecute n'est là que pour offrir flexibilité et compatibilité et vous devez travailler autant que possible avec d'autres éléments arcpy (à savoir les curseurs, le module d'édition, etc.). Il est très tentant car l'API d'arcpy laisse beaucoup à désirer en termes de fonctionnalités par rapport aux SGBD sous-jacents.


Voir la vidéo: GIS Tools: ArcMapArcGIS Tool for connecting points (Octobre 2021).