問題タブ [database-locking]
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.
performance - Cassandraのセットへの頻繁な追加のパフォーマンスは?
セット (Cassandra コレクション) に頻繁に値を追加しようとしています。次のようなスキーマ設計があります。
frequent_access_data( タイプ テキスト、値セット );
現在、各ストア操作 (より高速で、1 秒あたり 10000 レコードなど) で、次の更新ステートメントを実行しています。
更新頻度の高いアクセス データ セット値 = 値 + :new_value ここで type='TYPE1'"
したがって、そのステートメントでは、値のコレクションに new_value が既に存在する場合と存在しない場合があります。だから私はやみくもに更新を実行しています。どのくらい効率的ですか?
「if」句に違いはありますか?はいの場合、どうすればそれを活用できますか?
Cassandraは更新のために行をロックしません。本当 ?RDBMS はそれをロックし、更新を遅くするためです。
database - データベースのロックが発生すると、どのデータがロックされますか?
私はそれを読みました
「複数のユーザーが同時にデータベースにアクセスする必要がある場合、ロックが発生します。」、( ref )
また
「データベースロックは、2人以上のデータベースユーザーがまったく同じデータをまったく同じ時間に更新するのを防ぐために存在します」 - ( ref ).
それでも、データベースのロックが発生したときにどのデータがロックされるのかわかりません。
最初の例では、2 人のユーザーが sql を実行して、同時に複数の行を選択します。ユーザー 1 が最初に実行されます。
ユーザー 1:select * from products where price > 100;
ユーザー 2:select * from products where price < 100;
ユーザー 1 のクエリは、ユーザー 2 のデータベースをロックしますか?
2 番目の例では、ユーザー 1 が製品テーブルを更新したいと考えています。ユーザー 2 は製品テーブルからデータを選択したいと考えています。ユーザー 1 が最初に実行されます。ユーザー 1 のアクションは、ユーザー 2 のデータベースをロックしますか?
ありがとう!
mysql - Lock-data: REPEATABLE-READ を使用した MySQL5.7.11 の supremum 疑似レコード
MySQL5.7.11、tx_isolation は REPEATABLE-READ です。
このような表:
session1 で、次のように実行します。
次に、session2 で次を実行します。
session2 がブロックされており、GAP ロックのために session2 がブロックされていると思いますが、information_schema.innodb_lock では、最高の疑似レコードと RECORD ロックを示しています。
MySQL_Doc は次のように説明しています。
なぜ Record Lock であり、lock_data が supremum 疑似レコードなのですか?
mysql - UPDATE ... MySQL の WHERE トランザクションは、サブクエリから参照される他のテーブルの行をロックしますか?
次のようなサブクエリを含む (InnoDB と REPEATABLE READ 分離レベルを使用して) MySQL で UPDATE ステートメントを発行する場合:
InnoDB エンジンは、テーブルから影響を受けるすべての行のみをロックしますか?それとも、クエリ全体の間bar
、テーブル内のアクセスされたすべての行を(共有または排他的に) ロックしますか?foo
サブクエリの代わりにJOINに違いはありますか?
hibernate - hibernate は更新時のレコードのロックを防止します
DB 内のすべてのユーザーで実行され、「スコア」フィールドと「ヒット」フィールドを更新する長いプロセスがあります。これが実行されている間、ユーザーが自分の名前/電話などを更新しようとすると、ユーザーの更新が発生することがあります。次のエラーで失敗します:
問題は、ユーザーが自分のスコア/ヒット フィールドを更新できないことを知っているので、行がロックされないようにして、両方の更新を実行できるようにすることはできますか? (クエリは変更されたフィールドのみを更新するため、ロックを防ぐと思ったので、休止状態の@DynamicUpdateを使用していますが、運はありません)
ところで、私はSpring Boot 1.3.3.RELEASEをJava 8で使用しています(Tomcat.
* アップデート *
@Thierry の質問に答えるために、すべてのユーザー スコア/ヒットの更新に対して 1 つの大きなトランザクションを使用しています。すべてのユーザーを一度に更新する必要があります。また、このプロセスの実行中にユーザーがレコードを更新するのを防ぐことはできません。これは、システムの使用に悪影響を与えるためです。
*更新2 *
それで、たくさんの検索の後、私はまさに私が欲しいものを見つけたと思います. この記事によると: http://www.intertech.com/Blog/hibernate-optimistic-lock-without-a-version-or-timestamp/、ロック タイプがダーティで動的な更新で楽観的ロックを設定すると、次のようになります。別の方法では、他の並行プロセスが同じ列を変更しない限り、同じ行を更新できます。」問題は、エンティティを次のように設定したことです。
そして、私はまだロック例外を受け取ります。私はまだ何か間違ったことをしていますか?