问题标签 [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.
spring - 使用 Spring 4.0 和 Hibernate 4.2.8 更改隔离级别
我们正在使用 Spring 4.0.0、Hibernate 4.2.8 和 Ms SQL Server 8 开发一个应用程序,它使用由 DB 表支持并与 Hibernate VO (CustomSequence) 映射的自定义序列
在服务调用中访问此序列:
- 主服务启动自己的事务
- 执行代码,做一些事情,查询......
为序列值调用序列服务 (SequenceService)
SequenceService 启动自己的事务(REQUIRES_NEW)
SequenceService 找到对象,返回值并保存下一个值
主服务获取值,设置业务对象并保存(此时序列值已由内部新事务提交)
- 出口
管理自定义序列的服务片段:
我们的问题是 serializable 属性被完全忽略,所以 2 个并发线程访问 getSequence 方法并获得相同的值。
如果我们使用 TransactionSynchronizationManager 检查隔离,则该值对于可序列化(值 = 8)似乎是正确的:
我们的 spring xml 文件是这个:
我已经使用这些命令检查了 MS SQL Management Studio 的数据库可序列化功能,然后执行了应用程序代码,并且它工作了(在工作室提交之前阻止代码):
¿关于发生了什么的任何线索?我在互联网上阅读了很多信息,但无济于事
非常感谢提前!
c# - 如何在不使用依赖注入的情况下使用 Microsoft Fakes 来隔离 Web 服务
我正在测试一个 Web 服务客户端,需要隔离对 Web 服务的调用。
我已经被告知我们不能使用依赖注入。如何隔离 Web 服务,以便测试调用该服务的业务逻辑。由于我无法控制网络服务,我需要确定服务将返回的值。
有人告诉我,使用 Microsoft Fakes 我可以做到这一点,但不知道如何定义假货。
我正在测试的代码的简化版本是:
我想控制存储在 promoFromMaps 中的值,以便能够测试之后发生的业务逻辑。
谢谢你的时间。
sql-server - SQL Server 删除锁问题
我有一个 SQL Server 数据库,我A,B,C
通过在 SQL 作业中安排的 SQL 脚本在某些条件下批量删除三个表中的行。该作业运行 2 小时,因为表中有大量数据。在作业运行时,我的前端应用程序无法访问(给出超时错误),因为应用程序在这些相同的表中插入和更新数据A,B,C
。
前端应用程序是否可以在 SQL 脚本运行时并行运行而不会出现任何问题?我检查了表上的锁并且 SQL Server 正在获取页锁。可以Read Committed Snapshot
或Snapshot
隔离级别或将页锁转换为行锁在这里有所帮助。需要建议。
sql - .NET SQLDatareader 隔离读取
我有一个 SQL Server 数据库,它存储具有信用的帐户(大约 200.000 条记录),以及一个存储交易的单独表(大约 20.000.000)。
每当将交易添加到数据库时,都会更新信用。
我需要做的是更新客户端程序(使用 Web 服务)以在本地存储积分,并且每当将新事务添加到服务器时,它们也会发送到客户端(使用 delta 的时间戳)。我的主要问题是为客户创建第一个数据集。我需要提供所有帐户的列表和交易表上的最后一个时间戳。
这意味着我必须在快照中创建此列表和最后一个时间戳,因为创建此列表期间的任何更新都意味着信用总数和最后一个事务时间戳不匹配。
我已经研究了ALLOW_SNAPSHOT_ISOLATION
设置并在事务上使用快照隔离SqlCommand
,但从我读到的内容来看,这将导致显着的性能损失。这是真的吗,这个问题可以用其他方法解决吗?
postgresql - 选择使用已提交阅读,请澄清
http://www.postgresql.org/docs/9.1/static/transaction-iso.html 关于读取提交隔离级别的文档说
Read Committed 是 PostgreSQL 中的默认隔离级别。当事务使用此隔离级别时,SELECT 查询(没有 FOR UPDATE/SHARE 子句)只能看到查询开始之前提交的数据;它永远不会看到未提交的数据或并发事务在查询执行期间提交的更改。实际上,SELECT 查询会在查询开始运行时看到数据库的快照。但是,SELECT 确实会看到在其自己的事务中执行的先前更新的影响,即使它们尚未提交。另请注意,如果其他事务在第一个 SELECT 执行期间提交更改,则两个连续的 SELECT 命令可以看到不同的数据,即使它们在单个事务中也是如此。
最后一句话让我很困惑,这是什么意思?如果我在事务中没有 2 个选择,而是 3 个选择以及一些计算而不在它们之间使用 DML,该怎么办?每个选择都会在每个查询开始的那一刻看到它自己的快照?
oracle - 为什么它在 Oracle 文档的 Read Committed Transactions 示例中是“丢失更新”?
在《Oracle 数据库概念》一书中,Oracle 给出了一个例子来解释Read Committed Isolation Level
。
在示例中,事务 1 更新第 1 行,然后事务 2 在事务 1 提交之前更新同一行。因此,事务 2 一直等到事务 1 提交。然后事务 1 提交。之后事务 2 提交。当然,事务 2 提交后,事务 1 对行 1 的更新会被事务 2 覆盖。
它将这种情况视为lost update
. 但在我看来,它不应该是“丢失的更新”,因为事务 1 已经提交。在单个事务中考虑丢失的更新。无论读取操作如何,该计划甚至等于可序列化计划。
在 Oracle 的词汇表中,丢失的更新是 -
一种数据完整性问题,其中一个数据写入者覆盖了修改相同数据的不同写入者的更改。
那么,您对此有何看法?它是“丢失更新”吗?如果是,是否可以通过数据库的并发控制来避免这种丢失的更新?
任何意见和帮助将不胜感激。
javascript - JavaScript沙盒:在给定范围内隐藏全局变量
我想创建一个 HTML+JS 环境,用户可以在其中输入和运行任意 JavaScript 代码,这些代码将在给定的 jail 对象的上下文中执行。我已经建立了一个游乐场来说明我到目前为止所拥有的。
这个做得不错:
- 基本评价工作:
- 输入:
2 + 2
- 输出:
4
- 输入:
this
返回监狱对象- 输入:
this
- 输出:
[object Object]
- 输入:
this.hello()
运行预期的方法- 输入:
this.hello()
- 输出:
hello world!
- 输入:
- 用户可以设置自己的功能并在以后执行它们:
- 输入:
this.foo = function() { return 42; }
- 输出:
function () { return 42; }
- 输入:
this.foo()
- 输出:
42
- 输入:
- 尝试访问一些我想从监狱上下文中“隐藏”的对象失败:
- 输入:
hidden
- 输出:
ReferenceError: hidden is not defined
- 输入:
但是,它完全无法隐藏全局可访问的属性,例如window
or document
for user:
- 输入:
window
- 电流输出:
[object Window]
- 期望的输出:
ReferenceError: window is not defined
到目前为止,我想出的最佳解决方案是在 Jail 对象声明中填充我能想到的所有全局变量,如undefined
更新版本所示。这样他们似乎永远在监狱范围内丢失,用户将无法访问它们。我的问题:null
- 我对吗?这足够安全吗?
- 有没有更好的方法,即在特定范围内真正取消定义全局内容,而不是用一些占位符值重写它们?
php - PHP应用程序隔离?
我目前正在构建一个简单的 CMS,我想尽可能地隔离它。该应用程序本身将具有 php 登录功能,但是我正在考虑利用 Apache 内置安全性添加一层安全性。
使用集成的 apache 密码检查来隔离服务器上的 PHP 目录有多安全?一般的逻辑是 Apache 的安全性应该很难破解。
谢谢!
vagrant - Vagrant 与 Docker 中的隔离
当 Vagrant 运行一个新的操作系统并隔离其中的所有内容时,为什么 Vagrant 不被视为隔离,而 Docker 是?当有人说:“如果您正在寻找隔离,请使用 Docker”时,隔离是什么意思?
sql - 选择语句的排他锁和共享锁 - SQL Server
我无法理解 select 在排他事务中的行为方式。请考虑以下场景——</p>
方案 1 步骤 1.1
步骤 1.2 - 会话 1
步骤 1.3 - 会话 2
即使第一个会话还没有完成,会话 2 将能够读取 tmp 表。我认为 Tmp 将具有排他锁,并且不应发出共享锁来选择会话 2 中的查询。而且它没有发生。我已确保默认隔离级别为 READ COMMITED。
提前感谢您帮助我理解这种行为。
编辑:为什么我需要在排他锁中选择?
我有一个实际生成顺序值的 SP。所以流量是 -
- 从表中读取最大值并将值存储在变量中
- 更新表设置值=值+1
该 SP 由数千个实例并行执行。如果两个实例同时执行 SP,那么它们将读取相同的值并更新 value+1。虽然我希望每次执行都有顺序值。我认为只有当 select 也是独占锁的一部分时才有可能。