Comment vaut-il mieux traiter les requêtes longues / gourmandes en ressources CPU?

Supposons que nous ayons par exemple une instance de SQL Server (ce n'est pas le cas). Et nous avons une application Java qui utilise la stack Spring .

Il y a des requêtes qui sont déjà optimisées mais elles sont encore lentes à cause de la complexité de l'agrégation de ces données.

J'ai plusieurs approches en tête (celles-ci sont à court terme pour le moment):

  1. Procéder à l'optimization (comme créer des vues) et implémenter des travaux pour recalculer ces données directement dans le SQL server par exemple toutes les 5 minutes et les stocker dans une table séparée. (Oui ce n'est pas une bonne solution mais quand même).
  2. Mettre en place une sorte de mécanisme pour countr / agréger ces données en arrière-plan. Implémenter probablement une partie de l' architecture Lambda . J'ai déjà regardé Apache Spark et d'autres.

Sous optimisé, cela signifie que ces requêtes utilisent les bons index et que tout est "réglé".

Je sais que ce n'est pas genre de question que plus de propositions / discussions. Mais encore je suis interrogé.

Quelle est la meilleure façon de gérer une situation comme celle-ci en fonction de ce qui précède?


MISE À JOUR # 1

En fonction de ce que vous pouvez et ne pouvez pas faire avec les vues indexées pour MS SQL Server, la vue indexée n'est pas adaptée car elle ne gère pas COUNT, MIN, MAX, TOP, les jointures externes ou quelques autres mots-keys ou éléments. Vous ne pouvez pas modifier les tables et les colonnes sous-jacentes. La vue est créée avec l'option WITH SCHEMABINDING.

MISE À JOUR # 2

Après avoir passé du time là-dessus. J'ai arrêté avec des vues matérialisées pour l'instant dans l'amour de la simplicité.

Ainsi, différents moteurs de database ont le concept d'une vue matérialisée . Le server SQL a l'équivalent avec ses vues indexées . Ceux-ci sont conçus pour votre cas d'utilisation exact. Je voudrais fortement considérer ces methods avant de «rouler votre propre» vue matérialisée.