Mutliple requête SQL demande - est mieux avec une connexion unique ou multiple?

voix
0

J'ai créé une application, qui traite de la table de base de données multiples à un même temps. À l'heure actuelle, j'ai créé une connexion unique pour le processus et essayer d'exécuter la requête comme requête de sélection pour parallèle plusieurs tables. Chaque table peut avoir des centaines de milliers ou des millions d'enregistrements.

J'ai une connexion et plusieurs déclarations qui exécutent parallèles dans les discussions. Je veux savoir est-il une meilleure solution ou approche?

Je pense que si j'utiliser le pool de connexion par exemple 10 connexions et exécuter plusieurs filets (moins de 10) pour exécuter la requête de sélection. Est-ce que cette augmentation de la performance de mon application?

Ma première approche d'accord?

Est-ce pas une bonne approche pour exécuter en même temps plusieurs déclaration (parallèle) sur la base de données?

Dans ce forum lien mentionné que seule connexion est meilleure.

Créé 25/02/2016 à 08:05
utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Les bases de données sont conçus pour exécuter plusieurs requêtes parallèles. L' utilisation d' une piscine améliorera certainement votre débit si vous rencontrez des temps de latence ne provoquée par la base de données.

Si le temps d'attente est causée par la base de données alors paralléliser ne peut pas aider - et peut même empirer les choses. Il est évident que cela dépend du type de requête que vous utilisez.

Créé 25/02/2016 à 08:15
source utilisateur

voix
0

Je comprends votre question que vous utilisez un seul objet de connexion et de le partager entre les threads. Chacun de ces fils exécute alors sa propre déclaration. Je vais essayer de répondre à vos questions dans l'ordre inverse.

Est-il pas une bonne approche pour exécuter en même temps plusieurs déclaration (parallèle) sur la base de données?

Ce n'est pas vraiment un point pertinent pour cette question. Presque toutes les bases de données devraient être en mesure d'exécuter des requêtes en parallèle. Et si elle ne peut alors soit de vos approches serait presque identique pour un point de vue des avantages de la concurrence.

Ma première approche D'accord?

Si vous êtes en train de faire SELECTs il ne peut pas causer des problèmes, mais vous devez très prudent sur le partage d'un objet de connexion. Un certain nombre d'attributs transactionnels tels que autoCommit et l'isolement sont fixés sur l'objet de connexion - cela signifierait tous ceux seraient partagés par toutes vos déclarations. Vous devez comprendre comment cela fonctionne dans votre cas.

Voir les liens suivants pour plus d'informations

MySQL est fil connecteur / JDBC sécurité?

https://db.apache.org/derby/docs/10.2/devguide/cdevconcepts89498.html

Bottomline est si vous pouvez utiliser un pool de connexion, s'il vous plaît le faire.

Est-ce que cette augmentation de la performance de mon application?

La meilleure façon de le vérifier est de l'essayer. Analyse théorique de la performance dans un environnement multithread et avec des fonctions de base de données vous obtient rarement des résultats précis. Mais là encore, considérant le point 2 il semble que vous devriez juste aller avec piscine de connexion.

MODIFIER

Je viens de réaliser ce que je pense que la préoccupation ici et ce que votre préoccupation est en fait peut-être différent. Je pensais simplement de partager le point de vue de l'objet de connexion pour éviter de créer des objets supplémentaires de connexion [soit mis en commun ou nouvelles].

Pour des performances d'obtenir toutes les données de la base de données ou l'autre manière (en supposant que le 1er chemin ne pose pas de problème) devrait être presque identique. En fait, même si vous créez un nouvel objet de connexion dans chaque fil de la surcharge qui devrait généralement être négligeable par rapport à l'interrogation des millions d'enregistrements.

Créé 25/02/2016 à 08:43
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more