案例 1:
我有一个每秒插入 1 次的表 A。
从我的管理员那里,我需要对该表进行大量阅读和删除以执行一些统计和维护。
将传入数据插入 2 个不同的表 A 和 B 并使用表 B 进行管理是否有意义。目标是不使表 A 重载。
案例 2:
另一个完全理解逻辑的例子,我有一个专门用于填充搜索结果的表(tmpA)。每次有一个搜索,结果被插入到这个表中并帮助分页。晚上,旧的结果被删除。
实际上,我每秒对该表有 5 个请求,因此大约每秒 500 行 * 5 = 2500 行。
创建更多表(tmpA、tmpB、tmpC 等)以分派(dispatch)插入并避免过载是否有意义?
对于情况 1,如果复制有意义,
在 2 个(或更多)差异中插入“手动”传入数据有什么区别
表之间使用 mysql 复制 ?
谢谢你, 杰西
最佳答案
这有点难以回答,因为这取决于您的硬件设置。 每秒插入一次并没有那么多。正确设置的服务器应该能够处理它。
对表的读取是非阻塞的。因此,收集信息以进行统计(假设您不对数据库中的统计信息进行计算)不应影响数据库的性能。
另一方面,删除是阻塞的,并且会加起来加载到具有大量插入的表上。
对于案例 1,我不明白您希望如何将负载分配到不同的表上。一般来说,存在数据库服务器负载,而不是特定的表负载(除非我们将阻塞进程定义为表负载)。
我从评论中了解到案例 1 是用户注册/注册。从维护的角度来看,将用户信息拆分到两个表上是很糟糕的,加上不可避免地需要发生的两个表的耦合只会增加开销 -load-,而不是减少它。如果数据分为两个表,删除数据(用户?)也是一个主要问题。 如果将数据分为两个表,您能解释一下如何管理您的数据吗?我可能遗漏了什么。
综上所述,我不建议在表之间拆分此数据。 我推荐的是:
- 使用 InnoDB 作为表类型。它具有比 MyISAM 更小的锁定(哪个表锁定?)
- 优化 MySQL 的 RAM/内存使用情况。适当的内存设置可实现非常快速的读写。
- 优化您的索引。
EXPLAIN
语句可以显示每个查询使用了哪些
案例 2 我不完全理解用例,但将这些数据吐到几个表中可能是有意义的。根据您要将数据推送到这些临时表中的原因,可能会按用户、关键字或其他重要功能进行拆分。
根据用例,尝试通过 LIMIT BY
语句限制搜索结果(从而利用分页)。您不需要以这种方式存储分页结果,或者根本不需要存储结果。您能解释一下为什么要存储这些结果吗? 2500 行/秒很多。
复制完全是另一个话题,复杂得多,不是通过复制表来实现的,而是通过复制服务器来实现的。我帮不了你,从来没有做过,因为我从来不需要它。 (我最大的 MySQL 服务器大约有 80Gb,3.5 亿行,插入峰值为每秒 224 行)
您能否粘贴您当前使用的表的架构和一些示例数据?这可能会使案件更加清楚。
关于mysql - 有利于复制 mysql 表以分派(dispatch)过载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584142/