Je construis quelque chose qui s'apparente à Google Analytics et actuellement je fais des mises à jour de base de données en temps réel. Voici le flux de travail pour mon application:Comment puis-je reporter des mises à jour de base de données dans Rails?
- utilisateur fait une requête API RESTful
- je trouve un enregistrement dans une base de données, le retour comme JSON
- -je enregistrer le compteur de demande de l'utilisateur dans la base de données (c.-à- si l'utilisateur fait 2 appels API , j'incrémente le compteur de requêtes pour l'utilisateur par '2').
1 et 2 sont très rapides en SQL - ce sont des SELECT. # 3 est vraiment lent, parce que c'est une mise à jour. Dans le monde réel, ma base de données (MySQL) n'est PAS mise à l'échelle. Selon New Relic, # 3 prend la plupart du temps - jusqu'à 70%! Je pense que je dois arrêter de faire des opérations DB synchrones. À court terme, j'essaye de réduire les écritures de DB, donc je pense à un hachage global (disons déclaré dans environment.rb) qui est accessible à partir de mes contrôleurs et modèles auxquels je peux écrire au lieu d'écrire au DB. Chaque fois que je peux avoir une tâche écrire les mises à jour qui doivent être écrites dans la base de données.
Questions:
- Est-ce son raisonnable? Des pièges?
- Est-ce que je rencontrerai des problèmes de concurrence?
- Comment cela se compare-t-il avec l'écriture de journaux dans le système de fichiers et l'importation ultérieure?
- Devrais-je utiliser un système de mise en file d'attente des messages à la place, comme Starling? Des recommandations?
PS: Voici la requête incriminée - toutes les colonnes d'intérêt sont indexés:
MISE À JOUR statistics_api
SET count_request
= COALESCE (count_request
,?) +? OERE (id
=?)
Merci de mettre à jour le lien, ecoologic! –