是否可以对MyISAM表进行非阻塞读取?

时间:2012-12-05 15:03:04

标签: mysql concurrency nonblocking myisam

我有一个带有大量写操作的日志表:这就是为它选择MyISAM的原因。

现在我需要执行一个复杂的SELECT查询,这需要花费很多时间并阻塞表:然后没有人可以写入它。

  • 该表具有较高的“写入”负载
  • 我不在乎我是否收到最新的记录
  • 数据永不删除

在不阻止表的情况下读取数据有哪些选项?

  • 在查询完成后应用LIMIT,因此不是选项
  • 修改所有INSERT语句以使其成为DELAYED不是一个选项
  • InnoDB也不是一个选项
  • HANDLER查询不是一个选项:我需要复杂的WHERE条件

1 个答案:

答案 0 :(得分:2)

一些建议,也许一个或另一个适合你

  1. 选项:奴隶

    配置用于SELECT查询的从属设备。这不会阻止插入。 但是,这需要第二台服务器,一些配置和存储空间,因此这不是一个好的解决方案,只是为了获取您的数据。

  2. 选项:使用低优先级更新:http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

    这可以在服务器级别或连接级别完成,因此您不必修改每个插入语句。

  3. 工作流程

    • 像往常一样制作插页。<​​/ li>
    • 创建一个工作进程,将“移动”您的日志条目(对于表A中的每一行,在表B中进行插入,在表A中删除行)到另一个表。
    • 现在您可以查询表B