想实现数据的一些统计,比如用户多种积分,发帖数,评论数等等,版块的总帖数,总评论;数诸如类似。
举例: 用户发帖增长积分,更新发帖数统计,同样版块帖子统计变化,又或者还会有其他的统计变化。
针对这种情况是直接在需要的地方通过数据表count()统计还是在表中新增各个的统计字段,触发时候通过事务来完成呢?
我个人偏向于后面这种,但又觉得统计数据用事务来保证数据统计一致性又有点不合理??
但是话又说回来,不采用事务,有些地方又会因为统计错误造成一些错误,类似分页错误?
各位大神有什么好的思路或者建议呢?求指点!
Sebaik-baiknya jangan gunakan kiraan Apabila jumlah data adalah besar, pangkalan data tidak dapat mengendalikan pertanyaan seperti ini, terutamanya pertanyaan seperti ini kepada pengguna.
Bilangan tetap dan kemudian masukkan ke dalam cache
Saya bukan master, tetapi jika saya melakukannya, saya akan meletakkan data seperti ini dalam redis.
[Latar Belakang]
1 Masalah ini disebabkan oleh prestasi pangkalan data tidak dapat memenuhi senario perniagaan sedia ada
2 Mengikut senario perniagaan yang anda berikan, data dibenarkan mempunyai ralat tertentu
【Struktur Program】
Struktur program sedia ada beroperasi dengan memanggil pangkalan data secara terus, tetapi prestasi pangkalan data tidak dapat memenuhi keperluan Pada masa ini, kami tidak boleh bergantung semata-mata pada pangkalan data, jadi kami perlu menambah lapisan [counter] antara pangkalan data
.Sebelum dan selepas pelarasan program, kita perlu menambah [aspek] dalam tiga pautan [tambah], [padam] dan [ubah suai] pangkalan data, yang merupakan acara afterSave, yang juga boleh difahami sebagai cangkuk
Redis biasanya digunakan untuk [counter], kerana ia boleh Persistence
【Nota diperlukan】
1 Kerana operasi db mungkin biasa, tetapi operasi redis gagal, mungkin terdapat ralat data
2 Memandangkan mungkin terdapat ralat, mekanisme pembetulan ralat diperlukan. Mekanisme ini boleh mengurangkan tekanan pada pelayan . Dalam kes kecil, gunakan kiraan atau jumlah mysql untuk mengemas kini
3 atau gunakan [mekanisme transaksi] lain untuk memastikan keatoman operasi DB dan Redis.
Pengiraan InnoDB perlu mengimbas semua baris data dalam masa nyata, yang perlahan
Myisam tidak boleh digunakan sangat
Cadangan
数据表添加统计字段
Statistik diproses menggunakan perkhidmatan bahagian belakang Sebagai contoh, bahagian belakang disambungkan kepada hamba
Orang pertama tidak mengesyorkan menggunakan borang count() untuk pengumpulan data, dan harus memilih bentuk kumulatif.
Oleh kerana setiap kali data baharu ditambah, count() mesti digunakan untuk mengira, yang sangat menggembirakan untuk pangkalan data.
Jadi adalah disyorkan untuk melakukan ini:
1. Gunakan nosql untuk mengekalkan semua data statistik
2 Apabila menambah data baharu, cetuskan modul untuk mengumpul data yang sepadan dan tulis ganti data asal.
3 Untuk memastikan masalah nosql down berlaku, adalah disyorkan untuk menyimpan data statistik yang sepadan dalam pangkalan data dan menulis modul logik untuk menyimpan data nosql ke pangkalan data dengan kerap.
4 Sudah tentu, anda boleh menggunakan kiraan dengan kerap (ini boleh dilakukan apabila pelayan melahu) dan semak semula sama ada statistik itu betul