我正在构建一个程序,该程序从六个不同的来源获取推送数据并将数据插入数据库。每个源都有自己的功能,一旦它们到来就执行插入,但所有源都写入同一个表。
我会有以下问题:
如果一个源当前正在写入该表并且另一个源同时开始写入,那么插入是否有可能相互阻塞?
该表也经常用于通过连接更多表来显示数据的视图来读取数据,这会造成任何问题吗?
目前每个来源都有自己的数据库连接来写入数据,最好是只有一个连接,还是每个都有自己的连接?
答案 0 :(得分:2)
如果一个源当前正在写入该表和另一个源 开始写同时插入是否有机会 相互阻挡?
这取决于索引。如果索引键具有相同或连续的值,您可能会在事务持续时间内看到short = term blocking。
该表也经常用于通过视图读取数据 加入一些表来显示数据,这可以构成任何 问题
这取决于隔离级别。如果出现以下情况,则不会发生阻止:
SELECT
个查询正在READ_COMMITTED
隔离级别运行
READ_COMMITTED_SNAPSHSOT
数据库选项已打开
SELECT
查询未触及未提交的数据
SELECT
查询在READ_UNCOMMITTED
隔离级别中运行
即使阻塞确实发生,如果INSERT
交易很短,也可能是短暂的。
目前,每个源都有自己的DB连接来写入数据 最好只有一个连接,或者各自使用自己的连接?
取决于您要解决的问题。单个连接将确保插入不会相互阻塞/死锁,但无论如何都可能不是问题。
答案 1 :(得分:1)
请找到以下内联答案
如果一个源当前正在写入该表并且另一个源同时开始写入,那么插入是否有可能相互阻塞?
在这种情况下,另一个资源将等待它。(插入将处于下一个的等待状态)
该表也经常用于通过连接更多表来显示数据的视图来读取数据,这会造成任何问题吗?
没问题。
目前每个源都有自己的数据库连接来写入数据,最好是只有一个连接,还是每个都有自己的连接?
最好有一个数据库连接。
答案 2 :(得分:0)
select
太慢时,才会延迟下一次插入。