2011-10-03 4 views
1

Dans les bases de données intégrées, les requêtes et les réponses sont-elles effectuées via des sockets comme lors de l'utilisation d'une base de données avec un pilote? Quel est le meilleur en termes de performance?Performances de communication de base de données et d'application pour l'analyse comparative et les bases de données intégrées

Quelle est la meilleure manière en général d'accéder à une base de données en termes de performances pour un benchmarking?

Répondre

0

Cela dépend du produit réel sur la façon dont la communication entre l'application et la base de données est gérée. Je suis très familier avec un produit particulier qui est commercialisé dans l'espace «intégré» parce que je suis un développeur sur ce produit de base de données. Il n'est certainement pas seul dans cet espace, donc cette information s'applique également à d'autres bases de données intégrées. Ce produit particulier comprend à la fois une version client/serveur ainsi qu'une version en cours de processus. La version client/serveur utilise des sockets pour les communications lorsque les processus client et serveur sont sur des machines distinctes et utilise IPC via la mémoire partagée lors de l'exécution sur la même machine physique. La version in-process s'exécute, comme vous pouvez le deviner, dans l'espace de traitement de l'application cliente sous la forme d'une DLL (Windows) ou d'un objet partagé (Linux). Donc, ce n'est qu'un exemple, et ce n'est pas unique. Donc, fondamentalement, vous auriez besoin de lire la documentation du produit que vous utilisez pour déterminer la réponse spécifique à votre cas. En ce qui concerne ce qui est mieux en termes de performance, ce n'est pas une question simple à répondre. Cela dépend de pas mal de facteurs. Une requête unique du client au serveur de base de données sera généralement plus rapide en termes d'appel lui-même pour une base de données en cours de traitement. Mais certains mécanismes IPC sont presque aussi rapides. Et à moins que des milliards de demandes "petites/rapides" soient faites, cela peut difficilement être un facteur dans la performance globale. Et il y a d'autres problèmes à considérer. Si la base de données s'exécute en tant que processus séparé, elle peut être globalement plus rapide car elle peut effectuer une mise en cache plus agressive, tirer parti de plusieurs cœurs, être capable de s'exécuter en tant que service, s'exécuter en 64 bits -bit, etc. Plus il y a de stabilité à considérer. Si la base de données est un processus distinct, elle peut, par exemple, éviter les problèmes de corruption si l'application cliente se bloque alors qu'une version in-process peut être plus affectée par la stabilité du client. Pour l'analyse comparative, la meilleure chose à faire est de tester avec le type d'environnement et les requêtes que l'application utilisera. Une base de données peut avoir les nombres incroyables dans un ensemble de tests TPC, mais si l'application cible est pour un seul utilisateur et effectue des requêtes et des mises à jour très simples, alors peu importe quels sont ses numéros TPC. Donc, si possible, effectuez des tests qui imiteront votre environnement réel aussi étroitement que possible. Ceci est, bien sûr, plus facile à dire qu'à faire dans beaucoup de cas, mais c'est un bon moyen de commencer à y penser.

+0

Pour clarifier quelque chose lorsque la base de données est intégrée, il fonctionne dans le même processus avec le serveur? – user847988

+0

@ user847988: Pas nécessairement. Le terme «incorporé» est quelque peu générique mais, dans une certaine mesure, signifie que, du point de vue de l'utilisateur final, l'application et la base de données sont une application unique. Une meilleure description pourrait être trouvée ici: http://en.wikipedia.org/wiki/Embedded_database –

Questions connexes