【发布时间】:2016-02-22 14:00:57
【问题描述】:
我正在创建一个电子商务后端,其中我的每个产品都具有以下计数器属性
- product views
- product likes
- product comments count
我为产品数据库表拥有的当前数据库列是
- 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
见以下博客Wanelo engineering blog 实现一个可以在单行上频繁更新的计数器会导致 innodb 上的行锁定,如果频繁更新可能会导致应用程序中的死锁情况。但是对此的解决方案在我有一个想法的博客中有很多解释。但是,如果有多个与单个产品相关联的计数器可以在应用程序增长时同时更新怎么办。我应该如何为计数器设计数据库表。我是否必须维护单独的表格,即
likes counter table
- id - product_id - count
views counter table
- id - product_id - count
comments counter table
- id - product_id - count
通过维护单独的表,即使产品(如+评论+视图)同时更新,它将单独更新并减少行死锁情况的机会。 如果它在一个表中,并且所有更新同时出现,则可能会导致问题。
问题:有没有更好的方法来设计柜台的桌子?请问有什么建议吗?
【问题讨论】:
-
考虑执行所有插入操作,而不是简单地增加一个值。这样您就可以在发生此类流量时报告(计数)。或者可能按天/月/等对递增值进行分组
标签: mysql e-commerce counter deadlock