问题标签 [snapshot-isolation]

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 投票
0 回答
138 浏览

reactjs - 使用 react-snapshot 时 npm 运行构建错误

当我尝试使用 react-snapshot 时出现此错误,这是在我运行 npm run build 时发生的。 https://www.npmjs.com/package/react-snapshot

服务 -s 构建

在此处了解有关部署的更多信息:

bit.ly/CRA-部署

开始爬取 http://localhost:53599/

63df66f1.chunk.js:1:641213) 在你 (http://localhost:53599/:1:569) 在 Object.770 (http://localhost:53599/static/js/main.63df66f1.chunk.js :1:641048) at u (http://localhost:53599/:1:569) at r (http://localhost:53599/:1:430) at Array.t [as push] (http:// localhost:53599/:1:293) 在 http://localhost:53599/static/js/main.63df66f1.chunk.js:1:89 在 Script.runInContext (vm.js:143:18) 在 Object.runInContext (vm.js:294:6) 从未调用来自 react-snapshot 的“渲染”。你是否替换了对 ReactDOM.render() 的调用?爬完。错误:无法加载脚本:“http://localhost:53599/static/js/13.91fb9c6a.chunk.js”在/Users/kevin/Desktop/GitHub/einist-front-v1/node_modules/react-snapshot/node_modules /jsdom/lib/jsdom/browser/resource-loader.js:44:23 在对象。8) 在 ClientRequest.emit (events.js:315:20) 在 Socket.socketErrorListener (_http_client.js:469:9) 错误:在 TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1146:16){ errno:-61,代码:'ECONNREFUSED',系统调用:'connect',地址:'127.0.0.1',端口:53599 }(节点:33088)UnhandledPromiseRejectionWarning:ChunkLoadError:加载块 13 失败。(错误:http://localhost:53599/static/js/13.91fb9c6a.chunk.js)(使用 加载块 13 失败。(错误:http://localhost:53599/static/js/13.91fb9c6a.chunk.js)(使用 加载块 13 失败。(错误:http://localhost:53599/static/js/13.91fb9c6a.chunk.js)(使用node --trace-warnings ...显示警告的创建位置)(节点:33088)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志--unhandled-rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝 ID:1)(节点:33088)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。kevin@Kevins-MacBook-Air einist-front-v1 %

0 投票
1 回答
78 浏览

sql-server - 删除行时由于 SQL Server 中的更新冲突而中止快照隔离事务

我现在有一个关于此问题的简单示例,来自:由于 SQL Server 中的更新冲突,快照隔离事务中止

这是创建数据库表的脚本:

必须在数据库中打开快照隔离,并且必须打开已提交读快照。

此脚本应用于填充表:

然后有两个必须同时运行的脚本。这是更新脚本:

这是删除脚本:

10-15 分钟后,删除脚本将因更新错误而失败,即使被删除的行没有被更新(实际上它们甚至不存在)。

谁能看到为什么会引发这个异常?

0 投票
1 回答
46 浏览

sql-server - 由于 FK 检查导致 SQL Server 中的更新冲突导致快照隔离事务中止 - 第 2 部分

这项工作是从由于 FK 检查导致 SQL Server 中的更新冲突而中止的快照隔离事务之后进行的

看完这篇优秀的文章(https://sqlperformance.com/2021/06/sql-performance/foreign-keys-blocking-update-conflicts#comment-167645

我运行此代码来创建数据库:

数据库必须允许快照隔离并启用已提交的读取快照。

填充数据库如下:

然后运行这两个脚本(按照指示):

会话 1 按预期生成更新错误:

消息 3960,级别 16,状态 1,第 10 行
快照隔离事务因更新冲突而中止。您不能使用快照隔离直接或间接访问数据库“Example Changed”中的表“dbo.Child”来更新、删除或插入已被另一个事务修改或删除的行。重试事务或更改更新/删除语句的隔离级别。

根据文章,这应该通过将 PK 更改为非聚集并添加唯一的聚集索引来消除,但会产生相同的错误。这样做应该可以解决 FK 问题,但似乎并没有解决,即使执行计划暗示它应该这样做。

为什么现在是这样?

谢谢伊恩

0 投票
2 回答
32 浏览

sql - 使用高事务隔离级别防止丢失更新:这是一个常见的误解吗?

我注意到我的应用程序经常将值写入依赖于以前的读取操作的数据库。一个常见的例子是用户可以存钱的银行账户:

如果两个线程/客户端/ATM同时调用此方法,我想避免竞争条件,这样帐户所有者会赔钱:

我经常读到Repeatable ReadSerializable可以解决这个问题。甚至德国维基百科关于丢失更新的文章也指出了这一点。翻译成英文:

隔离级别 RR(可重复读取)经常被提及作为丢失更新问题的解决方案。

这个 SO answer建议Serializable在 SELECT 之后使用 INSERT 解决类似问题。

据我了解这个想法 - 在右侧的过程尝试设置帐户余额时,(理论上)读取操作将不再返回相同的余额。因此不允许写操作。是的 - 如果您阅读了这个流行的 SO 答案,它实际上听起来非常合适:

在 REPEATABLE READ 下,第二个 SELECT 保证至少显示从第一个 SELECT 返回的行不变。在那一分钟内,并发事务可能会添加新行,但不能删除或更改现有行。

但后来我想知道“它们不能被删除或改变”实际上是什么意思。如果您尝试删除/更改它会发生什么?你会收到错误吗?还是您的事务会等到第一个事务完成并最终执行其更新?这一切都不同了。在第二种情况下,您仍然会赔钱。

如果您阅读下面的评论,情况会变得更糟,因为还有其他方法可以满足可重复读取条件。例如快照技术:可以在​​左侧事务写入其值之前拍摄快照,如果稍后在右侧事务中发生第二次读取,这允许提供原始值。例如,参见MySQL 手册

同一事务内的一致性读取读取第一次读取建立的快照

我得出的结论是,限制事务隔离级别可能是摆脱竞争条件的错误工具。如果它解决了问题(对于特定的 DBMS),那不是由于可重复读取的定义。而是因为满足可重复读取条件的特定实现。例如锁的使用。

所以,对我来说,它看起来像这样:你真正需要解决这个问题的是一个锁定机制。一些 DBMS 使用锁来实现可重复读取的事实被利用了。

这个假设正确吗?还是我对事务隔离级别的理解有误?


你可能会生气,因为这肯定是关于该主题的第 100 万个问题。问题是:示例银行账户场景是绝对关键的。就在那里,应该绝对清楚发生了什么,在我看来,好像有太多误导和矛盾的信息和误解。