Maison > Questions et réponses > le corps du texte
Je souhaite réaliser des statistiques de données, telles que les points utilisateur, le nombre de publications, le nombre de commentaires, etc., le nombre total de publications dans la section, le nombre total de commentaires, etc.
Exemple : les publications des utilisateurs augmentent les points, mettent à jour les statistiques du nombre de publications, modifient les statistiques des publications dans la même section, ou il peut y avoir d'autres changements statistiques.
Dans ce cas, devrions-nous utiliser directement les statistiques count() de la table de données si nécessaire, ou ajouter divers champs statistiques à la table et la compléter via des transactions lorsqu'elles sont déclenchées ?
Personnellement, je préfère cette dernière, mais je pense qu'il est un peu déraisonnable d'utiliser des transactions pour assurer la cohérence des statistiques ? ?
Mais là encore, si les transactions ne sont pas utilisées, certaines erreurs seront causées par des erreurs statistiques à certains endroits, similaires aux erreurs de pagination ?
Avez-vous de bonnes idées ou suggestions ? S'il vous plaît, donnez-moi quelques conseils !
伊谢尔伦2017-05-16 12:04:55
Il est préférable de ne pas utiliser count. Lorsque la quantité de données est importante, la base de données ne peut pas gérer ce type de requête, en particulier ce type de requête adressée aux utilisateurs.
大家讲道理2017-05-16 12:04:55
Je ne suis pas un maître, mais si je le fais, je mettrai ce genre de données dans Redis.
为情所困2017-05-16 12:04:55
[Contexte]
1 Ce problème est dû au fait que les performances de la base de données ne sont pas en mesure de répondre au scénario commercial existant
2 Selon le scénario commercial que vous avez fourni, les données peuvent avoir une certaine erreur
【Structure du programme】
La structure du programme existante fonctionne en appelant directement la base de données, mais les performances de la base de données ne peuvent pas répondre aux exigences pour le moment, nous ne pouvons pas compter uniquement sur la base de données, nous devons donc ajouter une couche de [compteur] entre les bases de données
.之前
[程序] -> [数据库]
之后
[程序] -> [数据库]
-> [计数器]
Avant et après l'ajustement du programme, nous devons ajouter [aspect] dans les trois liens [add], [deletion] et [modify] de la base de données, qui est l'événement afterSave, qui peut aussi être compris comme un hook
. Redis est généralement utilisé pour [counter], car il peut persister
【Remarque requise】
1 Étant donné que le fonctionnement de la base de données peut être normal, mais que l'opération Redis échoue, il peut y avoir des erreurs de données
2 Puisqu'il peut y avoir des erreurs, un mécanisme de correction d'erreurs est nécessaire. Ce mécanisme peut réduire la pression sur le serveur. . Dans de petits cas, utilisez le nombre ou la somme de MySQL pour mettre à jour
3 ou utilisez un autre [mécanisme de transaction] pour garantir l'atomicité des opérations DB et Redis.
怪我咯2017-05-16 12:04:55
Le décompte d'InnoDB doit analyser toutes les lignes de données en temps réel, ce qui est lent
Myisam ne devrait pas être beaucoup utilisé
Recommandation数据表添加统计字段
黄舟2017-05-16 12:04:55
Les statistiques sont traitées à l'aide de services back-end. Par exemple, le back-end est connecté à un esclave. Cela n'affectera pas votre entreprise
.阿神2017-05-16 12:04:55
La première personne ne recommande pas d'utiliser le formulaire count() pour l'accumulation de données et devrait préférer le formulaire cumulatif.
Parce que chaque fois que de nouvelles données sont ajoutées, count() doit être utilisé pour compter, ce qui est très pénible pour la base de données.
Il est donc recommandé de faire ceci :
1. Utilisez nosql pour conserver toutes les données statistiques
2 Lors de l'ajout de nouvelles données, déclenchez un module pour accumuler les données correspondantes et écraser les données d'origine.
3. Afin de garantir que des problèmes de panne de nosql se produisent, il est recommandé de sauvegarder les données statistiques correspondantes dans la base de données et d'écrire un module logique pour enregistrer régulièrement les données nosql dans la base de données.
4. Bien sûr, vous pouvez utiliser count régulièrement (cela peut être fait lorsque le serveur est inactif) et revérifier si les statistiques sont correctes