并发插入数据库
本文关键字:数据库 插入 并发 | 更新日期: 2023-09-27 18:12:34
我正在构建一个程序,它从六个不同的来源获取推送数据并将数据插入数据库。每个源都有自己的函数来执行插入,但是所有源都写入同一个表。
我有以下问题:
-
如果一个源当前正在写入表,而另一个源同时开始写入,插入是否有可能相互阻塞?
-
这个表也经常被用来通过一个视图来读取数据,这个视图连接了更多的表来显示数据,这会造成任何问题吗?
-
当前每个源都有自己的DB连接来写数据,只有一个连接,还是每个使用自己的连接更好?
如果一个源当前正在写表,另一个源正在写同时开始写入是否有可能插入互相阻挡?
这取决于索引。如果索引键具有相同或连续的值,您可能会在事务期间看到short=term阻塞。
表也经常被用来通过视图读取数据加入更多的表格来显示数据,这可以构成任何的问题?
取决于隔离级别。如果:
-
SELECT
查询运行在READ_COMMITTED
隔离级别和打开READ_COMMITTED_SNAPSHSOT
数据库选项 -
SELECT
查询不涉及未提交的数据 -
SELECT
查询在READ_UNCOMMITTED
隔离级别下运行
即使阻塞发生,如果INSERT
事务很短,阻塞也可能是短暂的。
当前每个源都有自己的DB连接来写数据最好只有一个连接,还是每个连接都使用自己的连接?
取决于你想要解决的问题。单个连接将确保插入不会相互阻塞/死锁,但无论如何也可能不是问题。
请查找下面的内联答案
如果一个源当前正在写表,而另一个源同时开始写,插入是否有可能相互阻塞?
在这种情况下,另一个资源将等待它。(插入将处于等待下一个插入的状态)
这个表也经常被用来通过一个视图来读取数据,这个视图连接了更多的表来显示数据,这会造成任何问题吗?
没有问题。
当前每个源都有自己的DB连接来写数据,是只有一个连接更好,还是每个源都使用自己的连接?
最好有一个数据库连接。
- 阻塞"彼此",即死锁是不可能的。
- 没有问题。只有当
select
太慢时,才能延迟下一次插入。 - 不同连接没有问题。