国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

mysql - php如何設計或實現(xiàn)數(shù)據(jù)統(tǒng)計
過去多啦不再A夢
過去多啦不再A夢 2017-05-16 12:02:55
0
7
746

想實現(xiàn)數(shù)據(jù)的一些統(tǒng)計,比如用戶多種積分,發(fā)帖數(shù),評論數(shù)等等,版塊的總帖數(shù),總評論;數(shù)諸如類似。

舉例: 用戶發(fā)帖增長積分,更新發(fā)帖數(shù)統(tǒng)計,同樣版塊帖子統(tǒng)計變化,又或者還會有其他的統(tǒng)計變化。

針對這種情況是直接在需要的地方通過數(shù)據(jù)表count()統(tǒng)計還是在表中新增各個的統(tǒng)計字段,觸發(fā)時候通過事務來完成呢?

我個人偏向于后面這種,但又覺得統(tǒng)計數(shù)據(jù)用事務來保證數(shù)據(jù)統(tǒng)計一致性又有點不合理??
但是話又說回來,不采用事務,有些地方又會因為統(tǒng)計錯誤造成一些錯誤,類似分頁錯誤?

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

過去多啦不再A夢
過去多啦不再A夢

全部回復(7)
伊謝爾倫

最好別用count,數(shù)據(jù)量大了之后數(shù)據(jù)庫吃不消這種查詢,尤其是這種對用戶的查詢。

過去多啦不再A夢

定時count然后放在緩存里面

大家講道理

不是大神,我做的話會把這類的數(shù)據(jù)放redis里面。

為情所困

【背景】
1 這個問題是由于數(shù)據(jù)庫性能不能夠滿足現(xiàn)有業(yè)務場景產(chǎn)生的
2 按照你提供的業(yè)務場景,數(shù)據(jù)是允許有一定的誤差的

【程序結構】

現(xiàn)有程序結構是從直接調用數(shù)據(jù)庫進行操作的,但是數(shù)據(jù)庫的性能無法滿足要求,這時候我們不能單一依賴于數(shù)據(jù)庫,因此我們需要在數(shù)據(jù)庫之間添加一層【計數(shù)器】的東西

之前
[程序] -> [數(shù)據(jù)庫]
之后
[程序] -> [數(shù)據(jù)庫]
      -> [計數(shù)器]
      

在程序調整前后,我們需要在數(shù)據(jù)庫的【增】【刪】【改】的三個環(huán)節(jié)添加【切面】即為afterSave事件,也可以理解為鉤子,
對于【計數(shù)器】通常使用redis,因為可以持久化

【需要注意】
1 由于可能會出現(xiàn)db操作正常,但是redis操作失敗,因此可能會出現(xiàn)數(shù)據(jù)的誤差
2 由于可能有誤差的情況,就需要一個糾錯的機制,這個機制可以再服務器壓力小的情況下,使用mysql的count或者sum進行更新
3 或者使用另外的【事物機制】來保證DB和Redis的操作原子性。

劉奇

InnoDB的count需要實時掃描所有數(shù)據(jù)行,慢
Myisam的話應該不怎么用的
建議數(shù)據(jù)表添加統(tǒng)計字段

黃舟

統(tǒng)計用后端服務去處理.比如后端連一臺slave.對你業(yè)務不影響

阿神

第一個人不太建議使用count()形式作為數(shù)據(jù)累計,應該偏向累加的形式。
因為在每次新增數(shù)據(jù)時候,又要使用count()去統(tǒng)計,這樣很讓數(shù)據(jù)庫吃不消。
所以建議這樣做:
1.使用nosql保留所以統(tǒng)計數(shù)據(jù)
2.在新增時候,觸發(fā)某個模塊,將相應數(shù)據(jù)累加,并覆蓋原有數(shù)據(jù)。
3.為了保障nosql出現(xiàn)down幾位問題,建議在數(shù)據(jù)庫保存相應統(tǒng)計數(shù)據(jù),并編寫一個邏輯模塊,讓nosql數(shù)據(jù)定時保存到數(shù)據(jù)庫中。
4.當然你可以定時使用count(這個可以留到服務器閑時時候做),重新審核統(tǒng)計數(shù)據(jù)是否正確

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板