并发插入数据库

本文关键字:数据库 插入 并发 | 更新日期: 2023-09-27 18:12:34

我正在构建一个程序,它从六个不同的来源获取推送数据并将数据插入数据库。每个源都有自己的函数来执行插入,但是所有源都写入同一个表。

我有以下问题:

  • 如果一个源当前正在写入表,而另一个源同时开始写入,插入是否有可能相互阻塞?

  • 这个表也经常被用来通过一个视图来读取数据,这个视图连接了更多的表来显示数据,这会造成任何问题吗?

  • 当前每个源都有自己的DB连接来写数据,只有一个连接,还是每个使用自己的连接更好?

并发插入数据库

如果一个源当前正在写表,另一个源正在写同时开始写入是否有可能插入互相阻挡?

这取决于索引。如果索引键具有相同或连续的值,您可能会在事务期间看到short=term阻塞。

表也经常被用来通过视图读取数据加入更多的表格来显示数据,这可以构成任何的问题?

取决于隔离级别。如果:

  • SELECT查询运行在READ_COMMITTED隔离级别和打开READ_COMMITTED_SNAPSHSOT数据库选项

  • SELECT查询不涉及未提交的数据

  • SELECT查询在READ_UNCOMMITTED隔离级别下运行

即使阻塞发生,如果INSERT事务很短,阻塞也可能是短暂的。

当前每个源都有自己的DB连接来写数据最好只有一个连接,还是每个连接都使用自己的连接?

取决于你想要解决的问题。单个连接将确保插入不会相互阻塞/死锁,但无论如何也可能不是问题。

请查找下面的内联答案

如果一个源当前正在写表,而另一个源同时开始写,插入是否有可能相互阻塞?

在这种情况下,另一个资源将等待它。(插入将处于等待下一个插入的状态)

这个表也经常被用来通过一个视图来读取数据,这个视图连接了更多的表来显示数据,这会造成任何问题吗?

没有问题。

当前每个源都有自己的DB连接来写数据,是只有一个连接更好,还是每个源都使用自己的连接?

最好有一个数据库连接。

    阻塞"彼此",即死锁是不可能的。
  1. 没有问题。只有当select太慢时,才能延迟下一次插入。
  2. 不同连接没有问题。