【问题标题】:How to handle multiple inserts into a table which generates auto increment primary id?如何处理对生成自动递增主 ID 的表的多次插入?
【发布时间】:2019-04-24 18:07:47
【问题描述】:

我在注册期间使用 mySql 数据库将用户详细信息存储在表 User 中。

用户表具有列 ID自动增量主键

我知道如果两个用户同时注册,两个请求会在数据库中排队。插入时在桌子上加锁。

15000个用户同时注册如何处理?所有这些请求都在数据库中排队吗?如果是,它会降低网页性能,对吗?如何扩展它?

【问题讨论】:

  • 是的,他们都会轮流参加。但这真的很有可能吗?很难让 2 人在规定的时间到达会议室
  • 别担心,它是数据库工作。您的页面/软件可能会挂起几秒钟/几分钟,仅此而已。反正这种情况不会像里格斯说的那样经常发生
  • MySQL 非常有能力处理涉及自动增量值的近同时插入;如果您想知道如何获取生成的值,last_insert_id 是特定于连接的。

标签: mysql database batch-processing auto-increment database-locking


【解决方案1】:

关键是要理解“同时”是什么意思。

即使有 15,000 人在同一分钟内使用他们的浏览器进行注册,其中超过几个人同时在 MySQL 中执行 INSERT 的可能性非常低。

我在公司管理着一些相当大且繁忙的 MySQL 实例。我查看了进程列表,但我很少看到有更多的 20 个线程同时执行。即使是在每小时处理数百万笔交易的生产数据库上。

大多数时候,MySQL 中的线程处于空闲状态,等待连接到数据库的应用程序在 SQL 查询之间运行代码。通常会在进程列表中看到数百行显示“Sleep”,而实际上有 6-12 个线程正在执行 SQL 查询。

鉴于此,MySQL 不难管理按照请求分配自增值的速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多