問題タブ [acid]
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.
c# - C#、Java などの OOP 言語で原子性を実現する方法はありますか?
データベース トランザクションの ACID プロパティの A からのアトミック性は、データベースで実行される各トランザクションが 0 または 1 の 2 進数システムのようなものであり、すべてまたは何もないことを示しています。
Java や C# などのプログラミング言語、またはその他の汎用言語で同じことを達成することは可能ですか? 例えば
おそらく、私は悪い例を挙げていますが、アイデアを得るにはこれで十分だと思います。ここで、Application
オブジェクトを作成している行で例外がスローされた場合、アプリケーションの実行が停止し、静的変数の状態counter
が既に変更され、システムの状態が変化したと想像してください。例外がスローされる前に実行されたステートメントによる損害を防ぐ方法はありますか?
mongodb - 非 ACID RethinkDB または MongoDB が等しくないクエリのセカンダリ インデックスを維持する方法
これは、「内部の仕組み」の理解できない質問です。
* A *CIDをサポートしていない noSQL データベース(つまり、1 回のトランザクションで複数のオブジェクトのデータを更新/挿入してからロールバックすることはできません) - セカンダリ インデックスを更新するにはどうすればよいですか?
私の理解では、セカンダリ インデックスの同期を維持するには (そうしないと、読み取りのために古くなります)、これは同じトランザクションで発生する必要があります。
さらに、インデックスがデータとは異なるホストに存在する可能性がある場合、そのような更新がアトミックに機能するには、分散ロックが存在するか、2 フェーズ コミットが必要です。
しかし、これらのデータベースがマルチオブジェクト トランザクションをサポートしていない場合 (複数のホストにまたがるデータに対して 2 フェーズ コミットを実行しないことを意味します)、B ツリー構造に存在するセカンダリ インデックスがトランザクションから分離されることを保証するためにどのような方法を使用しますか?データは古くありませんか?
mysql - テーブルを同時に更新する複数のリクエストを処理する方法
私はサーカスのチケット予約システムを設計しています.1席が残っていて、4人のユーザーが同時にチケットの予約を要求しているとします.mysqlまたはwebserverでそのようなタイプのケースを処理する方法.
mysql - ACID プロパティが明確に定義されている場合、なぜ異なるトランザクション レベルを使用/受け入れるのでしょうか?
トランザクションの ACID プロパティについて混乱しています。
私の理解によると、
トランザクションはACID に準拠している必要があります。一連のステートメントが実際にトランザクションであることを保証するのは ACID です。これまでのところ大丈夫です。
現在、さまざまな分離レベルがあります (完全に非トランザクション モードであるため、READ-UNCOMMITED は除外しています): READ-COMMITED、READ-REPEATABLE、および SERIALIZABLE
。
したがって、私が理解できないのは次のとおりです。
さまざまな分離レベルが前提条件のACIDプロパティの異なるレベルを提供する場合、それらはどのようにして有効/許容可能な分離レベルになることができますか?
それとも、トランザクションとは何かという SQL の定義は、これらの違いが発生するほど緩和/非形式的/非厳密なのでしょうか? 読んで実際の定義が何であるかを確認するためのSQL標準ドキュメントが見つかりませんでした
sql - 複数の SQL/NoSQL データベース アーキテクチャにおける一貫性/原子性 (または ACID) のプロパティ
私はどちらかというと、1 つのデータベース (PostgreSQL や ElasticSearch など) を単独で使用することに慣れています。しかし、現在、私はプロトタイプアプリでミックス (PG と ES) を使用しており、ミックスに他の種類のデータベースをスローする可能性があります (例: redis)。
一部のデータを異なる方法で各データベースに永続化する必要があるとします。 コンポーネント/データベースの 1 つで障害が発生した場合、システムの一貫性をどのように維持しますか?
私が直面しているシナリオの例: PostgreSQL でのデータ更新、ElasticSearch は利用できません。この時点で、両方のデータベースを更新する必要があったため、システムに一貫性がありません。私は SQL データベースを使用しているので、トランザクションを中止するだけで、システムを以前の一貫した状態に戻すことができます。
しかし、システムの一貫性を保つ最善の方法は何でしょうか?
- 値がすべてのデータベースで保持されていることを毎回確認しますか?
- 故障時は元の状態に戻す?しかし、一部の NoSQL データベースにはトランザクション/ACID メカニズムがないため、以前の状態に簡単に戻すことはできません。
さらに、複数のデータベースを同期しておく必要がある場合、データベースを同期に戻すことができるように、ある種の「バージョン」メタデータ (タイムスタンプまたは自家製のインクリメント バージョン番号) を追加するなどの良い方法はありますか? (組み込みのCouchDBについては話していません!)
さらに、データベースはすべてアトミックに更新されるわけではないため、一部の部分が短期間矛盾します。アプリのビジネスにもよると思いますが、私が発生した問題やその修正方法について何か考えている人はいますか?それは難しいにちがいないし、多くの構成に依存していると思います (おそらく、実際の利点はほとんどありません)。
これは一般的なアーキテクチャの問題であると思いますが、この件に関する情報を見つけるのに苦労しています。
database - ACID では、C は DBMS 実装の責任ですか?
ACID の概念そのものについて混乱しています。
すべての参考文献/教科書は、ACID を、データの整合性を維持するためにデータベース システムが維持することが期待/要求される一連のプロパティとして説明しています。
しかし、ACID の C 部分、つまり一貫性は、実際にはデータベースの責任ではないようです。
一部の参考文献 (Silberschatz など) では、トランザクションのコード自体 (分離して実行された場合) がデータベースを一貫した状態のままにする、つまりトランザクション コードが正しいという意味で、これは DBMS ではなくアプリケーションのプログラマーの視点です。
また、他の参考文献では、「データベースを一貫した状態のままにする」のように説明が曖昧
です。では、どちらが正しいですか?
transactions - RIAK データベースと ACID
次の質問について教えてください。
- RIAK の書き込み操作はアトミックですか?
- 書き込み操作は耐久性がありますか?
- 同時書き込みはどのように処理されますか?
- RIAK はトランザクションをサポートしていますか?
ありがとうございました
mysql - 挿入は選択をブロックしますか? そうでないときは?
次のクエリを検討してください。
と
これらのクエリは、異なるトランザクションによって実行されると仮定します。これらは矛盾していますか?一方が他方をブロックする必要がありますか? 選択が行われる前または後に挿入が行われるかどうかに応じて、選択は異なる結果をもたらしません。ただし、どちらの場合も同じ列が考慮されます。では、一方が他方をブロックする必要がありますか?