Je travaille sur une API pour interroger un serveur de base de données (Oracle dans mon cas) pour récupérer une quantité massive de données. (C'est en fait une couche au-dessus de JDBC.)Durée de vie de la connexion SQL
L'API que j'ai créée essaye de limiter autant que possible le chargement de chaque information demandée en mémoire. Je veux dire que je préfère parcourir le jeu de résultats et traiter la ligne retournée un par un au lieu de charger toutes les lignes en mémoire et les traiter plus tard.
Mais je me demande si cela est la meilleure pratique car il a des problèmes:
- Le jeu de résultats est maintenu pendant le traitement entier, si le traitement est aussi longue que la récupération des données, cela signifie que Mon jeu de résultats sera ouvert deux fois plus longtemps
- Faire une autre requête à l'intérieur de ma boucle de traitement signifie ouvrir un autre jeu de résultats alors que j'en utilise déjà un, ce n'est pas une bonne idée de commencer à ouvrir trop de jeux de résultats simultanément.
De l'autre côté, il a quelques avantages:
- Je n'ai jamais plus d'une ligne de données en mémoire pour un jeu de résultats, étant donné que mes requêtes ont tendance à revenir autour de 100k lignes, il peut en vaut la peine.
- Comme mon framework est fortement basé sur des concepts de programmation fonctionnelle, je ne compte jamais sur plusieurs lignes en mémoire en même temps.
- Le démarrage du traitement sur les premières lignes renvoyées alors que le moteur de base de données renvoie encore d'autres lignes améliore considérablement les performances.
En réponse à Gandalf, ajouter quelques informations supplémentaires:
- je devrai toujours traiter l'ensemble des résultats mis
- Je ne suis pas en train de faire une agrégation de lignes
Je m'intègre à une application de gestion de données de base et récupère des données afin de les valider ou de les exporter en utilisant différents formats (à l'ERP, à la plateforme web, etc.)
Qu'entendez-vous par "SQL Server (Oracle)"? – Andomar
Essayé de clarifier, désolé pour la confusion –
Pour peser les avantages, nous avons vraiment besoin d'en savoir plus sur la façon dont vous utilisez les résultats de la requête. Voulez-vous toujours traiter l'ensemble des résultats? Ajoutez-vous des valeurs de chaque résultat ensemble, ou tout autre travail d'agrégation qui pourrait être fait sur les bases de données? – Gandalf