【问题标题】:Can I INSERT into table while UPDATING multiple different rows with MariaDB or MySQL?我可以在使用 MariaDB 或 MySQL 更新多个不同的行时插入表吗?
【发布时间】:2019-09-03 07:38:09
【问题描述】:

我正在创建一个自定义分析系统,目前正在数据库设计过程中。我打算将 MariaDB 与 InnoDB 引擎一起使用,以便能够处理大负载。

我预计的数据可能是每天大约 50 万次点击。我需要将这些行插入到数据库中,这意味着我平均每秒大约有 5.8 次插入。但是,与此同时,我想记录是否有人访问了与该点击关联的页面。 (基本上是为了记录漏斗)

所以我打算做的是创建额外的列并搜索特定行的 ID,然后使用访问的确切时间更新该列。

我的第一个问题:这通常是推荐的设计数据库的方法吗?如果不是,那么设计数据库还有什么价值?

我唯一担心的是,在更新行时,表格会被锁定,并且无法进行插入,因此会降低用户体验。

我的第二个问题:这是我应该担心的事情吗,表在更新时会被锁定,从而减慢插入速度?会影响性能吗?

【问题讨论】:

  • My only concern is that while updating rows the Table will be locked, and can't do inserts - 你从哪里得到这个? InnoDB 锁定,所以当你更新一行时——插入会被执行,不会有奇怪的挂起或糟糕的用户体验。您的性能在很大程度上取决于硬件。使用今天的硬件,如果您每秒进行 300 次插入/更新 - 您可能感觉不到。
  • @Mjh 从这里:oreilly.com/library/view/mysql-reference-manual/0596002653/… - 不是 100% 确定,但这是我的担心 - 也许这不是真的,这就是我问的原因。
  • @Mjh 太好了,所以基本上我应该走这条路就好了。
  • 那个 O'Reilly 链接正在混合苹果和橙子。 InnoDB 是一个符合 MVCC 的引擎,因此在执行会阻碍插入的更新时没有全局表锁定。你的想法很好。
  • 请记住,在大量插入或更新下的表/数据库可能会陷入死锁。这是 MySQL 避免竞争条件的机制。如果遇到死锁,请将其解释为警告并重复查询。

标签: mysql mariadb innodb


【解决方案1】:

只有 5.6/秒,不会有太大问题。

不过,我确实建议对“赞”、“赞”、“点击”和类似内容进行垂直分区。这些往往有很多随机单行的UPDATEs,并且可能会干扰其他活动。

也就是说,有一个单独的表(可能)只有 2 列:

  • 被点赞/点击/等项目的 ID。
  • 一个计数器。

当您想显示包括计数器在内的信息时,通过idJOIN 足够简单(并且足够快)。

正如已经指出的,row 被锁定,而不是 table

【讨论】:

    【解决方案2】:

    如果您正在执行更新,InnoDB 不会锁定表以进行插入。您的用户不会遇到任何奇怪的挂起。

    这是一个MVCC compliant engine,旨在处理对底层表的并发访问。

    您可以通过选择 appropriate isolation level 来控制引擎的行为,但默认值 (REPEATABLE READ) 非常出色,并且做得更好。

    如果一个表被多个用户修改(不是连接到您网站的用户,而是通过脚本语言或其他服务建立到 MySQL 的连接)并且有很多插入/更新/删除 - MySQL 可能会抛出错误,说发生死锁。

    死锁是一个警告,而不是错误,超过 1 个线程试图访问一个被占用的资源(例如两个线程试图同时更新同一行,但只有 1 个线程被允许这样做) .这表明您应该重复查询。

    在处理 I/O 较重的 MySQL 时,我建议您注意使用所选语言的所有可能情况。

    ~6 次插入一秒钟并不多,请确保您允许 MySQL 访问足够的系统资源。对于 InnoDB,检查 innodb_buffer_pool_size 的值或谷歌一下,看看它是什么以及如何使用它来让你的数据库运行得更快。

    祝你好运!

    【讨论】:

    • 太棒了!解答了我想知道的一切,非常感谢! :-)
    • 没问题,祝你的系统好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多