Qu'est-ce qui est plus rapide en termes de performances? Créer une API REST et faire en sorte que votre application Web utilise l'API REST pour effectuer toutes les interactions avec votre base de données OU interroger directement votre base de données (c'est-à-dire utiliser n'importe quel objet typique utilisé par votre langage pour interroger une base de données telle que JDBC pour Java)?
La façon dont je le vois avec REST:
- Vous créez un objet dans votre code pour appeler la méthode REST
- Appelez la méthode http
- Le code dans votre API REST interroge la base de données
- La base de données renvoie des données
- Le code API REST emballe les données dans Json et les envoie à votre client
- Le client reçoit une réponse Json / XML
- Mappez la réponse à un objet dans votre code
D'un autre côté, interroger directement une base de données:
- Vous créez un objet avec une chaîne de requête pour interroger la base de données
- La base de données renvoie des données
- Mappez la réponse à un objet dans votre code
Cela ne signifierait-il donc pas que l'utilisation d'une API REST serait plus lente? Peut-être que cela dépend du type de base de données (SQL vs NoSQL)?
Réponses:
Lorsque vous ajoutez de la complexité, le code s'exécutera plus lentement. L'introduction d'un service REST s'il n'est pas requis ralentira l'exécution à mesure que le système en fera plus.
Résumé de la base de données est une bonne pratique. Si vous êtes préoccupé par la vitesse, vous pouvez envisager de mettre en cache les données en mémoire afin que la base de données n'ait pas besoin d'être touchée pour gérer la demande.
Avant d'optimiser les performances, bien que j'examine le problème que vous essayez de résoudre et l'architecture que vous utilisez, j'ai du mal à penser à une situation où les options de base de données seraient un accès direct vs REST.
la source
extra work
. Mais en fait, cela pourrait être plus rapide en mettant en cache des requêtes répétées.Si vous êtes préoccupé par la vitesse, alors oui, un service de repos sera plus lent pour les raisons indiquées ci-dessus. Cependant, la vitesse du type que vous décrivez est rarement la principale préoccupation et, si elle l'est, peut être abordée d'autres manières. L'optimisation prématurée est la racine de tout mal .
Considérez si votre principale préoccupation est l'interopérabilité (mobile, web, B2B), REST est désormais très attractif car il est indépendant de la technologie.
Supposons que vous codiez pour une base de données. Que feriez-vous si vous choisissez de modifier votre magasin de données sous-jacent. À quel point serait-il difficile de le faire si vous étiez étroitement couplé au magasin sous-jacent?
La vraie réponse est que cela dépend , mais j'espère que je vous ai donné quelques pistes de réflexion!
la source
Si vous avez du mal à répondre à cette question.
La bonne réponse générale devrait être: cela dépend.
Il y a une erreur dans votre pensée.
Et cette erreur vient du fait que vous ne comprenez pas bien REST et ses principes. REST n'a pas été inventé, car certains nerds ont trouvé cool (bien sûr que c'est le cas) d'envoyer des objets Javascript via HTTP sur le fil. Le principal avantage de l'utilisation de HTTP est la possibilité d'utiliser la mise en cache . Si vous rendez vos résultats mis en cache , il y a moins de demandes à faire à la BD. Et pas de triage n'est impliqué. La réponse pourrait être livrée directement.
Dans la mesure où la réponse de @Klees n'est pas tout à fait correcte :
Lorsque vous traitez des résultats en mémoire cache, il n'y a aucun impact sur votre application: la livraison de réponses connues à des questions connues peut se faire via des proxy inverses.
la source
L'introduction d'un niveau de service supplémentaire a toujours un coût en complexité et en surcoût de performance. Il existe certains types d'architecture spécifiques où l'introduction d'un niveau de service partagé (comme une API REST) peut améliorer la force en raison de la mise en cache partagée - mais il semble que ce ne soit pas le type d'architecture que vous avez.
Considérez une architecture dans laquelle vous avez plusieurs applications Web ou plusieurs applications de bureau se connectant directement à la même base de données. S'ils effectuent souvent les mêmes requêtes, cela peut améliorer les performances de mise en cache des résultats de requête dans un service partagé. Surtout si vous avez dit que des centaines d'applications de bureau accédant directement à la même base de données (pas via une application Web!) Et effectuant les mêmes requêtes, il pourrait y avoir une amélioration majeure. Cependant, même dans cette architecture, la principale raison de l'introduction d'un service partagé serait probablement la sécurité et l'abstraction des données plutôt que les performances.
Mais il semble que vous ayez une seule application Web qui se connecte directement à la base de données. Dans ce cas, il n'y a aucun avantage à introduire une couche de service supplémentaire. La mise en cache, l'abstraction de la base de données, etc. peuvent être gérées au niveau de la couche d'accès aux données dans la même application.
la source
Ça dépend.
Évidemment, plus il y a de couches dans votre code, plus il ralentit. Mais ... il arrive un moment où les performances directes de bout en bout n'ont pas autant d'importance que l'évolutivité. Si vous avez 1 utilisateur accédant à votre base de données sur un PC local, cela peut aller vite. Si un millier d'utilisateurs accèdent à la même base de données sur le même PC, il est probable que vous les verrez tous frustrés. La solution consiste à déplacer la base de données vers une autre boîte, à ajouter une couche au milieu et bien que pour 1 utilisateur, elle fonctionnera plus lentement, lorsque des milliers y accèderont, elle ira plus vite. (c'est une réponse simpliste mais vraie en principe).
Il existe d'autres raisons de masquer votre base de données derrière une couche de niveau intermédiaire, comme la sécurité.
la source
Je ne sais pas où vous vous perdez, mais il est assez clair que lorsque vous utilisez l'API REST, vous effectuez une étape supplémentaire, et l'étape supplémentaire "toujours" signifie plus lentement lors de la programmation.
Il y a des avantages et des inconvénients, mais si vous pouvez accéder à la base de données directement à partir de votre application, il vaut toujours mieux l'appeler directement au lieu d'utiliser l'API Web, bien sûr, si vous utilisez l'API Web, vous pouvez facilement porter votre application sur une plate-forme différente.
la source
DU REPOS :
DB locale:
C'EST UNE ÉNORME DIFFÉRENCE, LES PERSONNES OUBLIENT SOUVENT CES POINTS
la source