所以我想知道如果一个表处于编辑模式(例如在SQL中),那么其他用户就无法访问或更改它。但是,我们如何在Tableau中看到实时可视化?我们为什么会看到图表,但它们会在后端实时更新。从技术上讲,它无法更改或访问。 我想了解数据是如何实时更新的,同时我们使用这些表来查看动态图表。
我尝试在网上搜索这个,最接近我来到HSQL,但我无法理解。
答案 0 :(得分:2)
SQL Server提供事务隔离级别以提供读取一致性。这些可以使用锁定或行版本控制,具体取决于会话事务隔离级别和数据库配置。
使用锁定实现的默认事务隔离级别为READ_COMMITTED
。在这种情况下,只有用于Tableau可视化的只读查询才会愉快地选择数据,除非当前正在更新请求的行。然后查询将等待事务提交,然后继续返回最新数据。根据工作负载,这样的阻塞持续时间可能很小,以至于对应用程序透明。但是在大批量更新的情况下,阻塞持续时间可能很长。请注意,SQL Server将尽可能使用粒度锁,而不是锁定整个表。
DBA可以通过打开数据库READ_COMMITTED_SNAPSHOT
数据库选项来更改此行为。这会导致READ_COMMITTED
隔离级别使用行版本控制而不是锁定来提供读取一致性。启用此选项后,Tableau查询将接收更新数据的前映像,而不是被正在进行的事务阻止。行版本控制还有一些额外的开销,因此DBA不会随意打开READ_COMMITTED_SNAPSHOT
数据库选项。打开该选项可以提高并发性,但代价是资源使用。
答案 1 :(得分:1)
我想知道你是否在质疑你的要求:)
数据库将数据视为唯一的休战,他们将对这些数据执行命令。 当您在屏幕上看到数据时,数据未锁定。 当您在应用程序或管理工作室(对于SQL服务器)中显示数据时,他们会在特定时间查询数据库并向您显示,当您更改某些内容时,他们会向服务器发送更新命令。数据未锁定。
DB对表有一个锁定过程,当你有一个耗时的命令时你通常会工作,并且你不希望任何过程读取数据而其中一些处于无效状态。让我们假设您正在进行更新,将col1增加1.现在在更新过程中如果有人查询数据和SQL返回数据,其中一些将是更新的值,而其他一些不会通常不是您想要的。
但是,SQL中有一种模式称为"单用户模式"它会禁用所有其他用户的所有连接,并且不允许它们连接,让DBA负责DB(通常在您更改数据库时)。