我有一个网站,我需要创建一个临时数据库表,每5小时重新创建一次。完成动作大约需要0.5秒。
网站分析显示大约5次点击/秒。这个数字可能会逐渐增加。
cron作业清空db并重新创建它。这是否意味着,当某人正在访问一个页面,该页面基于临时数据库填充数据而在cron作业下处于活动状态时,他可能没有找到数据或数据不完整? 要么 由于锁定,这个场景由Mysql负责?
答案 0 :(得分:1)
根据我的测试,如果一个MySQWL客户端尝试删除数据库,而另一个客户端的某个表被锁定,则客户端将等待直到解锁该数据库。
但是,客户端丢弃数据库本身也无法锁定任何数据库的表。因此,根据您正在做的事情,您可能需要使用其他方法来序列化请求等。例如,如果作业需要删除并重新创建数据库,则创建表并在其他客户端使用它们之前填充它们,表锁定将是一个问题,因为不会总是有一个表要锁定。 / p>
考虑使用get_lock()
使用显式锁定来协调“临时”数据库上的操作。
还要考虑重新考虑您的策略。定期删除和重新创建整个数据库并不常见。
答案 1 :(得分:0)
据我所知,当你锁定表时,除非你解锁它,否则其他人无法访问该表,但是其他连接只会等到0.5秒后,所以你的用户可能需要等待额外的0.5秒。重新创建表格。
不要担心没有数据,只有一段时间延迟。
答案 2 :(得分:0)
您可以先在临时名称下创建,然后在重命名新名称时填充然后删除旧名称,而不是删除和重新创建。
此外,如果找不到表格以便应对表格不在的小时间窗口,或者在视图上操作而不是重命名表格,则应该使Web应用程序适合重试。