问题标签 [dirtyread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
336 浏览

cassandra - Cassandra 中的批量加载、脏读问题及其在集群中的影响

我们的用例是将批量数据加载到我们的实时生产 Cassandra 集群中。我们必须每天在 Cassandra 中加载批量数据。我们遇到了 sstableloader。我们几乎没有相同的疑问:

1:当我们使用 sstableloader 将批量数据加载到我们的实时生产集群中时,我们是否有可能发生脏读?(基本上 sstableloader 是一次加载所有数据还是在获取数据时继续更新?)脏读在我们的生产环境中是不可接受的。

2:当我们将批量数据加载到我们的直播生产集群时,是否会影响集群可用性?(基本上我们正在将大量数据加载到直播生产集群中,是否会影响其性能?我们需要增加集群节点吗?在批量加载期间使其高度可用?)

3:如果使用 sstableloader 在实时生产集群中存在脏读的可能性,请建议可以避免此问题的替代工具。我们希望所有批量数据立即出现,而不是增量数据。

谢谢!

0 投票
1 回答
632 浏览

sql - 从数据库中选择时避免脏读/幻读

我有两张桌子A和B。

我的交易是这样的:

  • 读取 -> 从表 A 中读取
  • 写入 -> 写入表 B,写入表 A

我想避免脏/幻读,因为我有多个节点向同一个数据库发出请求。

这是一个例子:

  1. 事务 1 - 表 B 上发生更新
  2. 事务 2 - 表 A 上发生读取
  3. 事务 1 - 表 A 上发生更新
  4. 交易 2 - 已完成
  5. 事务 1 - 回滚

现在事务 2 客户端有脏数据。我应该如何避免这种情况?

0 投票
1 回答
56 浏览

mysql - MySQL 脏读与 SQL 标准中定义的脏读

来自 MySQL 手册:

阅读未提交

SELECT 语句以非锁定方式执行,但可能会使用行的早期版本。因此,使用这个隔离级别,这样的读取是不一致的。这也称为脏读。否则,此隔离级别的工作方式类似于 READ COMMITTED。

粗体部分让我感到困惑。“可能会使用早期版本的行”?用在什么地方?这怎么能被称为“脏读”?

SQL 标准说脏读包含从未存在的数据:

P1(“脏读”):SQL 事务 T1 修改一行。SQL 事务 T2 然后在 T1 执行 COMMIT 之前读取该行。如果 T1 然后执行 ROLLBACK,则 T2 将读取从未提交的行,因此可能被认为从未存在过。

MySQL手册在这里是错的还是什么?

0 投票
1 回答
31 浏览

database - 脏读问题-事务执行脏读提交后数据库中的更新

假设我们有 2 个事务作为 T1,T2,T2 对 T1 修改的数据进行脏读并在 T1 之前提交。现在假设 T1 失败并回滚。我的问题是 - 由于 T2 已提交,T2 所做的更改是否会从共享缓冲区转移到原始数据库(因为我已经读过事务所做的更改一旦事务提交就会永久保存到原始数据库)?如果它们被转移到原始数据库,那么 T1 将如何回滚并获取数据项的先前值(被 T2 读脏)?通过它的缓冲区或原始数据库?

0 投票
1 回答
637 浏览

c# - 使用 C# 的实体框架中的脏读概念

我正在使用实体框架和 C# 开发 Web API。我需要脏读的解决方案。

我试过下面的方法和事务方法,我需要脏读的解决方案。

脏读或幻读是用户没有更新最新数据的现象。

假设用户 A 打开了推销员网页

用户B也打开了同一个推销员网页

A 已加载推销员 ID 1001,B 也加载 1001 A 将推销员名称更改为 X 并保存。

但是 B 看到的是旧数据,如果 B 将推销员姓名更改为 Y,A 的更改将被覆盖。所以我们应该阻止 B 将更改写入 DB。

所以我需要基于上述概念的解决方案。

以下是我尝试过的代码

0 投票
0 回答
456 浏览

java - 使用隔离级别的脏读示例

出于教学目的,我想提供一个脏读示例。使用 READ_UNCOMMITED 隔离级别。但是我无法让这个例子工作。我尝试了很多不同的东西,但它仍然不起作用。所以我希望你能帮助我。

设想:

  • 启动事务“main”</li>
  • 在新交易中插入人(“主要”交易被暂停)
  • 更新主交易中的人名
  • 刷新更新
  • 在新事务中读取人员(隔离级别为 READ_UNCOMMITTED)
    • 应该读取更新人的数据 --> 这不起作用!
  • 通过抛出 RuntimeException 恢复主事务
    • 断言该人的原始姓名在数据库中->这有效

有关更多信息,请参见下面的代码。

我还针对 Postgres 数据库进行了测试,但这并没有什么不同。还尝试使用 JDBC 模板而不是 ORM 映射器来做所有事情,但这也没有什么区别。

提前致谢。

最好的问候, 马里努斯

IsolationLevelTest (src/test/java/test)

SpringBootTestApplication (src/main/java/test)

测试服务

个人资料库

实用服务

PersonJPAEntity (src/main/java/test)

}

application.properties (src/main/resources)

0 投票
0 回答
92 浏览

sql-server - 如何处理并发问题?

如何处理并发问题?

我从前端 UI 发送两个文件。1 个文件从后端发送 1 个文件。

假设文件 A 的内容是

假设文件 B 的内容是

当我同时发送文件时,这两个文件将合并为一个,如下所示:

是否有任何解决方案来处理此并发问题?我用过交易。

我有以下脚本:

SP PROC_FILE_IDENTIFIER 给出文件名。此 SP 包含表:File_number_mst_t,其中包含每次更新的 file_number。

当文件同时出现时,我如何处理并发问题。(发生冲突)。任何建议或想法将不胜感激。

0 投票
0 回答
17 浏览

transactions - Read Committed 是否可以防止具有多个更新查询的事务中的脏读?

据我了解,更新 SQL 语句中的 Read Committed 一次在一行上放置一个读锁,然后再移动到下一行并删除前一个读锁。这意味着另一个事务将能够在整个事务完成之前读取先前的数据。假设我们有 2 个交易,t1 和 t2。t1 在单个事务中执行多个更新 SQL 语句,在完成之前,t2 从之前更新的行中选择数据。如果 t1 要回滚,根据我的理解,这意味着每个更新 SQL 语句都将被回滚。在这种情况下,t2 会看到回滚的数据并提交脏读吗?