Đếm view của 1 bài viết



  • Mình hiện tại đang code chức năng đếm lươt xem của 1 bài post và lưu vào db. vấn đề mình gặp đó là mỗi khi có request thì mình lấy trường views ra ,cộng thêm 1 sau đó update vào db. Nhưng nghĩ lại nếu có 2 request đến cùng lúc có thể xảy ra trường hợp lack mất view do khi get cùng 1 lúc. Ai có idea j k ạ. Gợi ý cho e phát



  • sẽ có 1 câu update làm đc cả 2 việc đó k cần lấy ra rồi mới lưu vào tùy vào database là j nhưng m- quên r. bạn search gg lại hoặc đợi bạn khác vào comment



  • Muốn bảo toàn cái count view thì bạn tạo 2 field: view, tempView của post.
    Tạo 1 bảng View dành để lưu riêng view khi có request, lưu xong cộng vào field tempView của post, dùng tempView đó để show ra cho user xem. Cuối ngày bạn chạy cronjob đếm tất cả record view của post đó xong cộng vào view của post đó, set tempView bằng view. Lưu xong xoá hết record ở bảng View của post đó đi là done.
    Còn không muốn lằng nhằng thì lưu như bình thường, db lưu rất nhanh nên trường hợp bạn nói chỉ xảy ra ở cluster, và server phục vụ lượng lớn user mới bị.



  • Mình nghĩ bạn có thể giải quyết bằng việc KHÔNG "mỗi khi có request thì mình lấy trường views ra ,cộng thêm 1 sau đó update vào db".
    Thay vào đó bạn hãy gửi 1 Query: tăng giá trị của views lên 1
    Vd mongo: article.update({ $inc: { view: 1 } })
    Mình nghĩ keyword của bạn có thể tìm hiểu là race condition



  • thank các bạn mình hiểu r <3


Log in to reply