标签:mysql mysql-5-5 mysql5 mysql-5-1
我有一个约会网站.在这个网站上,我曾经每天向用户发送10张照片匹配,并将其存储在结构中
SENDER RECEIVER
11 1
12 1
13 1
14 1
我保持两个月的日志.
用户也可以登录我的网站查看.
这意味着存在并行插入和选择,这肯定不是问题.
问题是当用户变为非活动状态或删除其ID时,我需要从日志中删除sender =’inactive-id’的所有条目.
日志大小约为6000万.
因此,每当这个巨大的表中出现删除查询时,所有选择都会被锁定,而我的网站也会被关闭.
注意我的表是合并myisam
因为我需要存储2-3个月的记录,并且每月1日我更改定义
解决方法:
通常,Table是DELETE语句锁定的最细粒度的对象.因此,通过使用MERGE表,当DELETE命中其任何表时,您可以将几个可以独立锁定的对象组合成一个将被锁定的大对象.
MERGE是一种很少或永远不变的表的解决方案:MERGE Table Advantages and Disadvantages.
你有2个选择:
最大限度地减少锁的影响:
>小批量删除
>在低负载时间运行删除作业
>如果没有为您节省太多空间,请考虑不要删除
>而不是删除行将其标记为“已删除”或已过时并从SELECT查询中排除
锁定较小的对象(而不是一次锁定所有表):
>从每个基础表中删除几个Delete语句
>删除MERGE定义,从每个基础表中删除数据创建MERGE.但是,我认为你可以在不删除MERGE定义的情况下完成它.
>使用分区.
从MySQL手册引用:
An alternative to a MERGE table is a partitioned table, which stores
partitions of a single table in separate files. Partitioning enables
some operations to be performed more efficiently and is not limited to
the MyISAM storage engine. For more information, see 07001.
我强烈主张分区,因为:
– 您可以完全自动化日志记录/数据保留过程:脚本可以创建新的和删除空分区,将过时的数据移动到不同的表,然后截断该表.
– 强制执行关键唯一性
– 仅锁定包含要删除的数据的分区.在其他分区上选择正常运行.
– 搜索同时在所有分区上运行(与MERGE一样),但您可以使用HASH SubPartitioning进一步加快搜索速度.
但是,如果您认为开发成本会超过分区的好处,那么您可能根本不应该删除该数据吗?
标签:mysql,mysql-5-5,mysql5,mysql-5-1 来源: https://codeday.me/bug/20190831/1779213.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。