1

我有一个网站,我需要在其中创建一个临时数据库表,该表每 5 小时重新创建一次。完成该动作大约需要 0.5 秒。

网站分析显示大约 5 次点击/秒。这个数字可能会逐渐增加。

问题

cron 作业清空数据库并重新创建它。这是否意味着,当有人访问一个基于临时数据库填充数据的页面时,该页面在 cron 作业下处于活动状态时,他可能找不到数据或数据不完整?或者由于锁定,这种情况由Mysql处理?

4

3 回答 3

1

根据我的测试,如果一个 MySQWL 客户端尝试删除数据库,而另一个客户端锁定了其中一个表,则客户端将等待直到表被解锁。

但是,删除数据库的客户端本身也不能锁定任何数据库表。因此,根据您在做什么,您可能需要使用其他一些方法来序列化请求等。例如,如果作业需要删除并重新创建数据库、创建表并在其他客户端使用它们之前填充它们,那么表锁定将是一个问题,因为不会总是有一个表需要锁定。

考虑使用显式锁定get_lock()来协调“临时”数据库上的操作。

还要考虑重新考虑你的策略。定期删除和重新创建整个数据库并不是一种常见的做法。

于 2012-05-14T05:22:18.457 回答
0

Instead of dropping and recreating, you might to create first under a temporary name, populate and then drop the old one while renaming the new one.

Additionally, you should either make your web app fit for retrying if the table was not found in order to cope with the small time window where the table is not here, or operate on a view instead of renaming tables.

于 2012-05-14T07:40:53.327 回答
0

据我所知,当您锁定表时,除非您将其解锁,否则其他人无法访问该表,但其他连接只会等到 0.5 秒后,因此您的用户在重新创建表时可能需要额外等待 0.5 秒.

不用担心没有数据,只是有时间延迟。

于 2012-05-14T04:54:15.353 回答