【问题标题】:How can Mysql INSERT operations be optimized for possible duplicate entries?Mysql INSERT 操作如何针对可能的重复条目进行优化?
【发布时间】:2016-10-28 12:08:38
【问题描述】:

在我的 NodeJs 应用程序中,我使用线程(由我自己定义)来打开计算机中的端口。有一个限制,每个端口只能绑定一个线程。

我在 Mysql 中维护一个表(PORTS),其中包含有关打开端口和绑定线程的数据。目前我正在使用以下方法来避免两个线程绑定到同一个端口。

=> 向 PORTS 表中插入一个条目,并将端口号作为 PRIMARY KEY。这将引发以下错误

error inserting semaphore port:10014 error Error: ER_DUP_ENTRY: Duplicate entry 'port:10014' for key 'NAME'

我捕获了这个错误,然后尝试另一个端口,直到没有抛出错误。

这是一个好习惯吗?或者我应该首先使用 SELECT 查询检查该值是否存在,如果不存在则插入条目? 注意-AFAIK 在第二种方法中,SELECT 和 INSERT 可以通过使用 SQL 事务作为原子操作运行。

【问题讨论】:

  • 目前的方法对我来说似乎很好。

标签: mysql node.js multithreading performance query-optimization


【解决方案1】:

假设您有多个“客户”试图同时获取“端口”,那么您的第二种方法很糟糕。这是因为不同的客户端可能会潜入SELECTINSERT 之间并抢占端口。

您的第一种方法更好,因为它是“原子的”。而且它是一个单一的动作,因此速度更快(不是那个速度很重要)。

【讨论】:

  • 我忘了说。通过第二种方法,我使用 SQL 事务以原子方式执行这两个操作。在这种情况下,我只关心性能。我说的对吗?
  • 没错,这与性能有关。由于有很多可能的端口,因此错误(以及从中恢复)应该很少见。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2013-10-25
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多