Est-il une façon intelligente permet de définir la taille fetch sur JdbcTemplate?
J'ai requêtes qui retournent des rapports par plage de date. Si la date de la gamme est large, 50k lignes peuvent être retournés. Si la date de plage est très petite, 10 enregistrements pourraient être retournés. J'ai trouvé que le réglage de la taille de l'extraction à 1000, quand 50k lignes sont retournées accélère considérablement le temps d'exécution. Mais la mise à 1000 alors que 10 lignes sont retournées ralentit et utilise trop de mémoire. C'est juste un exemple, j'ai beaucoup de requêtes qui retournent quelques ou plusieurs des lignes en fonction de diverses conditions (type de travail en cours d'exécution, etc).
Idéalement, ce serait bien si cela pouvait être de l'auto-défini après l'exécution de la requête (mais avant que les lignes sont retournées).
Est-il une meilleure façon de le faire?
Je suis en utilisant org.springframework.jdbc.de base.de soutien.JdbcDaoSupport.SimpleJdbcDaoSupport
getJdbcTemplate().setFetchSize(1000);
OriginalL'auteur stilltrackin | 2013-08-22
Vous devez vous connecter pour publier un commentaire.
C'est la valeur par défaut taille de l'extraction. Il n'existe pas de valeur bien évidemment puisque comme vous l'avez décrit, c'est un compromis entre la mémoire utilisée et la base de données de l'aller-retour (une valeur par défaut de 100 semble fonctionner assez bien pour moi).
De toute façon, vous pouvez définir la taille de l'extraction individuellement pour chaque ensemble de résultats avec
jeu de résultats.setFetchSize()
.OriginalL'auteur Vincent Malgrat
D'abord, les docs dit que SimpleJdbcDaoSupport est obsolète depuis le Printemps 3.1 - mieux utiliser JdbcDaoSupport ou NamedParameterJdbcDaoSupport
Deuxième, en org.springframework.jdbc.de base.soutien
Classe JdbcDaoSupport il y a une méthode: applyStatementSettings(Statement stmt) que vous pouvez utiliser pour l'application de la déclaration des paramètres tels que taille de l'extraction, max de lignes, et le délai d'expiration de requête.
Une autre option est de LIMITER le nombre de lignes retournées dans le jeu de résultats de la requête (dans MySQL utilisation: LIMITE, pour les PL\SQL utiliser "et rownum < 50" - par exemple)
OriginalL'auteur alfasin
J'ai trouvé une solution. J'ai trouvé que la taille de l'extraction peut être modifié à tout moment (même lors de la récupération des lignes). Ma première mise en œuvre par défaut la taille de l'extraction à 1. Quand j'ai vu une deuxième ligne, je l'ai changé pour 10. Quand j'ai vu un 11e de ligne, je l'ai changé pour 100, etc. J'ai couru plusieurs tests de performances en utilisant des locaux et des bases de données distantes et a atterri sur le suivant. (Spring JDBC utilise ligne mappeurs. C'est de cette façon que j'ai implémenté org.springframework.jdbc.RowMapper).
OriginalL'auteur stilltrackin