mysql - php如何设计或实现数据统计
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 12:02:55
0
7
621

想实现数据的一些统计,比如用户多种积分,发帖数,评论数等等,版块的总帖数,总评论;数诸如类似。

举例: 用户发帖增长积分,更新发帖数统计,同样版块帖子统计变化,又或者还会有其他的统计变化。

针对这种情况是直接在需要的地方通过数据表count()统计还是在表中新增各个的统计字段,触发时候通过事务来完成呢?

我个人偏向于后面这种,但又觉得统计数据用事务来保证数据统计一致性又有点不合理??
但是话又说回来,不采用事务,有些地方又会因为统计错误造成一些错误,类似分页错误?

各位大神有什么好的思路或者建议呢?求指点!

过去多啦不再A梦
过去多啦不再A梦

répondre à tous(7)
伊谢尔伦

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.

过去多啦不再A梦

Comptez régulièrement puis mettez-le dans le cache

大家讲道理

Je ne suis pas un maître, mais si je le fais, je mettrai ce genre de données dans Redis.

为情所困

[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.

刘奇

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数据表添加统计字段

黄舟

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

.
阿神

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal