我创建了一个电子商务后端,我的每个产品都有以下计数器属性
- 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)
通过维护单独的表,即使产品同时更新(如+注释+视图),它也将单独更新,并减少行死锁情况的可能性.如果它在一个表中并且如果所有它的更新同时出现,则可能导致问题.
问题:有没有更好的方法可以为柜台设计表格?有什么建议吗?
[通过 APXS 通过 DSO 检查 Apache 2.0 处理程序模块支持...
抱歉,我无法运行 apxs。可能的原因如下:
/usr/local/apache/bin/apxs 的输出如下: ./configure: line 6199: /usr/local/apache/bin/apxs: No such file or directory configure: error: Aborting]
这是错误建议我解决这个问题。
我知道名为mysqlindexcheck的 MySQL 实用程序。但是我可以通过SQL查询找到重复的索引吗?我尝试过这个,但正在寻找更好的想法或改进
SELECT DISTINCT
TABLE_NAME,
COLUMN_NAME,
GROUP_CONCAT(DISTINCT INDEX_NAME)
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'db_name'
AND INDEX_NAME NOT IN ('PRIMARY')
GROUP BY COLUMN_NAME
HAVING count(DISTINCT INDEX_NAME)>1
ORDER BY TABLE_NAME ;
Run Code Online (Sandbox Code Playgroud) 我的数组看起来像这样
Array
(
[0] => A
[1] => B
[2] => C
)
Run Code Online (Sandbox Code Playgroud)
期望的阵列
Array
(
[0] => Array
(
[0] => A
)
[1] => Array
(
[0] => B
)
[2] => Array
(
[0] => C
)
)
Run Code Online (Sandbox Code Playgroud)
我已经通过这些链接,但无法找出解决方案是一个新手.