为产品实施喜欢,评论和观看计数器

Aje*_*esh 8 mysql counter deadlock e-commerce

我创建了一个电子商务后端,我的每个产品都有以下计数器属性

- product views
- product likes
- product comments count
Run Code Online (Sandbox Code Playgroud)

我对产品数据库表的当前数据库列是

 - id
 - likes_count
 - views_count
 - comments_count
 - category_id
 - category_parent_id
 - category_sub_parent_id
 - handling_charge
 - shipping_charge
 - meetup_address
 - is_additional_fields
 - status
 - is_deleted
 - created_at
 - updated_at
Run Code Online (Sandbox Code Playgroud)

如下面的博客Wanelo工程博客所示, 实现一个经常在单行上更新的计数器会导致innodb上的行锁定,如果频繁更新会导致应用程序死锁情况.但对此的解决方案在博客中得到了很好的解释,我对此有所了解.但是,如果有多个计数器与单个产品相关联,可以在应用程序增长时同时更新.我该如何设计计数器的数据库表.我是否应该维护单独的表格

likes counter table

 - id     - product_id      - count

views counter table

 - id     - product_id     - count

comments counter table

 - id     - product_id     - count
Run Code Online (Sandbox Code Playgroud)

通过维护单独的表,即使产品同时更新(如+注释+视图),它也将单独更新,并减少行死锁情况的可能性.如果它在一个表中并且如果所有它的更新同时出现,则可能导致问题.

问题:有没有更好的方法可以为柜台设计表格?有什么建议吗?

Chr*_*eau 2

产品表中的视图计数器就可以了。

一个单独的点赞表,其中包含 (product_id, user_id) 等列,因此每个用户只能点赞一次产品。否则他们就能像一个简单的柜台一样捣碎。

一个单独的评论表,其中包含(product_id、comment_text、date.. 等)等列

你问的是这个吗?