Nous essayons de trouver la meilleure solution pour travailler avec une base de données lente sur un site Web en direct.Stratégies pour travailler avec des bases de données lentes avec des applications Web
L'architecture des systèmes de base est la suivante:
- lent (certains lectures et la plupart des écritures sont rapides, d'autres prennent plusieurs secondes) DB Postgres. Nous n'avons aucun contrôle sur cela.
- Un système hors ligne monolithique qui accède à la base de données Postgres. Nous n'avons aucun contrôle sur cela.
- Serveur (s) interne (s) rapide (s) pouvant accéder à la base de données Postgres. Nous pouvons développer et installer des logiciels pour ce serveur.
- Serveur (s) Web rapide exécutant une pile LAMP qui ne peut pas accéder à la base de données Postgres, mais qui peut accéder au serveur interne. Nous pouvons développer des logiciels pour ce serveur.
- Base (s) de données MySQL rapide (s) accessible (s) par tout. Nous avons un contrôle total sur cela.
Nous développons une nouvelle application Web pour fonctionner sur les serveurs Web en utilisant Symfony 2.
Notre plan initial était de créer une API RESTful pour s'asseoir sur le serveur interne, qui est consommé par l'application Web . Le problème majeur auquel nous sommes confrontés est que la vitesse de l'application Web est limitée par la vitesse de la base de données Postgres, ce qui est inacceptable pour les utilisateurs.
Est-ce que quelqu'un connaît des stratégies pour contourner ce problème de vitesse? La mise en cache est la solution évidente et nous pouvons certainement avoir des discussions sur la façon dont les données doivent être à jour, mais dans certaines circonstances, elles doivent être absolument à la minute près. Par exemple, si un utilisateur enregistre des modifications, celles-ci doivent apparaître immédiatement. Nous avons envisagé de doter l'API de son propre magasin de données rapide qu'elle met à jour de manière asynchrone depuis Postgres. Nous pourrions alors effectuer toutes les lectures sur ce stockage rapide, en validant les écritures à la fois et Postgres. L'inquiétude est bien sûr la cohérence des données et une complexité accrue du système. Nous explorons l'utilisation de JSON-LD pour représenter les données car elles correspondent bien à ce que nous travaillons. L'utilisation d'une norme, même si elle est relativement récente, devrait faciliter les changements architecturaux majeurs à venir. bien arriver. Comme il pourrait être placé directement dans un magasin de documents, cela pourrait simplifier le processus.
Nos objectifs clés sont:
- offrir une bonne expérience pour les utilisateurs.
- Créez un système facile à gérer et facile à comprendre.
Toutes les recommandations ou suggestions seraient les bienvenues!
Merci Markus. Avoir des choses à la minute ou pas est exactement le problème. Nous pensons avoir trouvé une stratégie qui fonctionnera pour notre cas d'utilisation, à peu près comme vous le décrivez. mettre à jour la base de données MySQL de façon asynchrone pour obtenir des changements de Postgres souvent, mais pas nécessairement à la minute près. Nous aurons ensuite l'API écrire à la fois MySQL DB et Postgres afin que ces changements seront à la minute. Je pourrais être en mesure de vous en dire plus sur notre utilisation de JSON-LD :-) –