問題タブ [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 はオブジェクトを見つけ、値を返し、次の値を保存します
メイン サービスは値を取得し、ビジネス オブジェクトに設定して保存します (この時点で、シーケンス値は内部の新しいトランザクションによって既にコミットされています)。
- 出口
カスタム シーケンスを管理するサービスのスニペット:
私たちの問題は、シリアライズ可能な属性が完全に無視されるため、2 つの同時スレッドが getSequence メソッドにアクセスして同じ値を取得することです。
TransactionSynchronizationManager で分離を確認すると、シリアライズ可能 (値 = 8) の値は正しいようです。
私たちの春のxmlファイルはこれです:
これらのコマンドを使用してMS SQL Management Studioでデータベースのシリアル化可能な機能を確認し、アプリコードを実行しましたが、機能しました(スタジオがコミットするまでコードをブロックしました):
何が起こっているかの手がかりはありますか? 私はインターネットで多くの情報を読みましたが、役に立ちませんでした
よろしくお願いします!
c# - 依存性注入を使用せずに Microsoft Fakes を使用して Web サービスを分離する方法
Web サービス クライアントをテストしており、Web サービスへの呼び出しを分離する必要があります。
依存性注入は使用できないと既に言われています。Web サービスを分離して、そのサービスを呼び出すビジネス ロジックをテストするにはどうすればよいですか。Web サービスを制御できないため、サービスが返す値を確認する必要があります。
Microsoft Fakes を使用するとこれができると言われましたが、偽物を定義する方法がわかりません。
私がテストしているコードの簡略化されたバージョンは次のとおりです。
その後に発生するビジネス ロジックをテストできるように、promoFromMaps に格納されている値を制御したいと考えています。
御時間ありがとうございます。
sql - .NET SQLDatareader 分離読み取り
クレジット付きのアカウント (約 200.000 レコード) を格納する SQL Server データベースと、トランザクション (約 20.000.000) を格納する別のテーブルがあります。
トランザクションがデータベースに追加されるたびに、クレジットが更新されます。
私がする必要があるのは、(Web サービスを使用して) クライアント プログラムを更新してクレジットをローカルに保存することです。新しいトランザクションがサーバーに追加されるたびに、クライアントにも送信されます (デルタのタイムスタンプを使用します)。私の主な問題は、クライアントの最初のデータ セットを作成することです。すべてのアカウントのリストとトランザクション テーブルの最後のタイムスタンプを提供する必要があります。
これは、このリストとスナップショット内の最後のタイムスタンプを作成する必要があることを意味します。これは、このリストの作成中に更新を行うと、クレジットの合計と最後のトランザクションのタイムスタンプが一致しないことを意味するためです。
設定を調査ALLOW_SNAPSHOT_ISOLATION
し、トランザクションでスナップショット分離を使用しSqlCommand
ましたが、これを読んだところ、パフォーマンスが大幅に低下します。これは本当ですか、この問題は他の手段で解決できますか?
oracle - Oracle ドキュメントの Read Committed Transactions の例で「失われた更新」になっているのはなぜですか?
『Oracle Database Concepts』という本の中で、オラクルは例を挙げて説明していますRead Committed Isolation Level
。
この例では、トランザクション 1 が行 1 を更新し、トランザクション 1 がコミットされる前に、トランザクション 2 が同じ行を更新します。したがって、トランザクション 2 は、トランザクション 1 がコミットされるまで待機します。次に、トランザクション 1 がコミットされます。その後、トランザクション 2 がコミットされます。もちろん、トランザクション 2 がコミットされた後、トランザクション 1 による行 1 の更新は、トランザクション 2 によってオーバーライドされます。
この状況を と見なしlost update
ます。しかし、私の見解では、トランザクション 1 がコミットされているため、「失われた更新」であってはなりません。失われた更新は、1 つのトランザクションで考慮されます。スケジュールは、読み取り操作に関係なく、シリアル化可能なスケジュールと同じです。
オラクルの用語集では、失われた更新は -
データの 1 つのライターが、同じデータを変更する別のライターの変更を上書きするデータ整合性の問題。
それで、あなたはこれについてどう思いますか?それは「失われた更新」ですか?もしそうなら、この種の失われた更新は、データベースの同時実行制御によって回避できますか?
コメントやヘルプをいただければ幸いです。
javascript - JavaScript サンドボックス化: 特定のスコープからグローバル変数を非表示にします
特定の刑務所オブジェクトのコンテキストで実行される任意の JavaScript コードをユーザーが入力して実行できる HTML+JS 環境を作成したいと考えています。私がこれまでに持っているものを説明するために遊び場を設定しました。
これはややまともな仕事をします:
- 基本的な評価作業:
- 入力:
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
ますdocument
。
- 入力:
window
- 現在の出力:
[object Window]
- 望ましい出力:
ReferenceError: window is not defined
私がこれまでに思いついた最善の解決策は、更新されたバージョンに示されているように、私が考えることができるすべてのグローバル変数をJail オブジェクト宣言で、undefined
またはその宣言で埋めることです。このようにして、それらは刑務所の範囲内で永遠に失われたように見え、ユーザーはそれらにアクセスできなくなります。私の質問:null
- 私は正しいですか?これで十分安全ですか?
- つまり、特定のスコープでグローバルなものをいくつかのプレースホルダー値で書き換えるのではなく、実際に未定義にする方法はありますか?
php - PHP アプリケーションの分離?
私は現在、単純な CMS を構築しており、可能な限り分離したいと考えています。アプリケーション自体に php のログイン機能がありますが、Apache のビルトイン セキュリティを利用して、もう 1 層セキュリティを追加することを考えていました。
統合されたApacheパスワードチェックを使用してサーバー上のPHPディレクトリを分離することはどのくらい安全ですか? 一般的な論理は、Apache のセキュリティはクラックするのがかなり難しいはずだということです。
ありがとう!
sql - select ステートメントの排他ロックと共有ロック - SQL Server
select が排他的トランザクションの一部であるときにどのように動作するかを理解できません。次のシナリオを検討してください –</p>
シナリオ 1 ステップ 1.1
ステップ 1.2 – セッション 1
ステップ 1.3 – セッション 2
最初のセッションが終了していなくても、セッション 2 で tmp テーブルを読み取ることができます。Tmp には排他ロックがあり、セッション 2 でクエリを選択するために共有ロックを発行するべきではないと思っていましたが、それは起こっていません。デフォルトの分離レベルが READ COMMITED であることを確認しました。
この動作を理解するのを手伝ってくれてありがとう。
編集:排他ロックで選択する必要があるのはなぜですか?
実際に連続した値を生成する SP があります。だから流れは -
- テーブルから最大値を読み取り、値を変数に格納する
- 更新テーブル セット値=値+1
この SP は、数千のインスタンスによって並行して実行されます。2 つのインスタンスが同時に SP を実行すると、同じ値が読み取られ、値 +1 が更新されます。私は実行ごとに連続した値を持ちたいと思っていますが。選択が排他ロックの一部でもある場合にのみ可能だと思います。