Je travaille sur une application qui implique une exécution très élevée des requêtes de mise à jour / sélection dans la base de données.
J'ai une table de base (A) qui aura environ 500 enregistrements pour une entité pendant une journée. Et pour chaque utilisateur du système, une variation de cette entité est créée en fonction de certaines des préférences de l'utilisateur et elles sont stockées dans une autre table (B). Cela se fait par un travail cron qui s'exécute à minuit tous les jours.
Donc, s'il y a 10 000 utilisateurs et 500 enregistrements dans le tableau A, il y aura 5 millions d'enregistrements dans le tableau B pour ce jour. Je garde toujours les données pendant une journée dans ces tableaux et à minuit j'archive les données historiques sur HBase. Cette configuration fonctionne bien et je n'ai aucun problème de performances jusqu'à présent.
Il y a eu un certain changement dans les exigences de l'entreprise ces derniers temps et maintenant certains attributs dans la table de base A (pour 15-20 enregistrements) changeront toutes les 20 secondes et sur cette base, je dois recalculer certaines valeurs pour tous ces enregistrements de variation dans la table B pour tous les utilisateurs. Même si seulement 20 enregistrements principaux changent, je dois recalculer et mettre à jour 200 000 enregistrements utilisateur, ce qui prend plus de 20 secondes et d'ici là, la prochaine mise à jour se produit, ce qui entraîne la mise en file d'attente de toutes les requêtes Select. Je reçois environ 3 requêtes get / 5 secondes des utilisateurs en ligne, ce qui entraîne 6-9 requêtes Select. Pour répondre à une demande d'api, j'utilise toujours les champs du tableau B.
Je peux acheter plus de puissance de traitement et résoudre cette situation, mais je suis intéressé par un système correctement mis à l'échelle pouvant gérer même un million d'utilisateurs.
Quelqu'un ici peut-il suggérer une meilleure alternative? La base de données relationnelle nosql + m'aide-t-elle ici? Existe-t-il des plates-formes / banques de données qui me permettront de mettre à jour les données fréquemment sans verrouillage et en même temps me donneront la flexibilité d'exécuter des requêtes sélectionnées sur divers champs d'une entité?