問題タブ [data-consistency]
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.
concurrency - マイクロサービスの規模に合わせてデータストアの同時実行を管理する
私はまだマイクロサービスを回避する方法を見つけようとしています。基本的な質問があります。
エンタープライズ シナリオでは、マイクロ サービスはおそらく、永続的なデータ ストア (RDBMS であれ、何らかの NoSQL であれ) に書き込む必要があります。ほとんどの場合、永続的なデータ ストアはエンタープライズ グレードですが、単一のエンティティです (もちろん複製およびバックアップされます)。
ここで、プライベート/パブリック クラウド環境にデプロイされた単一のマイクロ サービスが、独自の永続的なデータ ストア (エンタープライズ グレードの RDBMS など) を持つ場合を考えてみましょう。マイクロ サービスをスケーリングすると、マイクロ サービスの複数のインスタンスが同じデータ ストアから読み書きしようとします。従来のデータ ストアは、おそらく最大 50 ~ 200 の同時接続を処理するように調整できます。マイクロサービスをそれ以上にスケーリングする必要がある場合、どのように対処すればよいですか?
このようなシナリオでのベスト プラクティスは何ですか? 使えるパターンは?
sql-server - C# で SQL Server のマルチ ユーザー環境でデータベース スナップショットを処理する
データベースを利用し、その値を更新および変更するいくつかのテストを C# で作成しました。各テスト後にデータベースが以前の状態に戻っていることを確認するために、次のことを行います。
テスト スイートの冒頭で使用したすべてのデータベースのスナップショットを作成します。各テストの後、データベースをスナップショットに戻して、実行しようとしている新しいテスト ケースのデータベースに変更が加えられていないことを確認します。テスト スイートの最後に、作成したスナップショットを削除します。
テストクラスの初期化およびクリーンアップメソッドは次のとおりです
これは、テスト スイート内の各テストの後に実行されるメソッドです。
私の問題: マルチユーザー環境では、データベース スナップショットを作成するタスクをどのように処理すればよいですか? テスト スイートの実行中に誤ったスナップショットが作成され、テストが失敗したり、テスト スイートの終了時にデータベースが正しくない状態に戻ったりする可能性があります。CreateDatabaseSnapshots(); andを呼び出す前に、どのような必要なチェックを行う必要がありDeleteDatabaseSnapshots();ますか?
テスト中にデータベースが影響を受けないようにしたいだけです。代替データベース、トランザクション スコープ、およびその他の代替手段も使用してみましたが、私のシナリオでは使用できないため、スナップショットを使用することが唯一の実行可能なオプションです。
java - JTable 内の配列データ
次のコードは、JTable の行と列をセットアップするために使用されます。
ここで、null は空白を表します。電卓は - 驚き、驚き - すべての数学関数を実行する私の電卓クラスです。以前に GUI を介して渡された数値で動作します。
このテーブルは出力ダイアログの一部です。今私が遭遇した問題は、同じセッション中に最初の画面とは異なる入力でダイアログをもう一度開いた後、データが更新されないことです。古い入力で行われた計算がまだ表示されます。
このオブジェクトに依存するcalculator他のコンポーネント (インスタンス) は常に最新であるため、オブジェクトを渡すことは問題になりません。Plotter
問題はどこだ?
そして、データをテーブルに入れる別のより良い方法はありますか?
編集
私は、XML ファイルを使用してコンポーネント Bean の状態をマークする IntelliJ の GUI ビルダーを使用しています。したがって、一部のコンポーネント (上記を参照) は手動で作成され、その他は指定された XML ファイルで作成されます。
amazon-web-services - AWS S3 がアイテムを保存してロードするのにどのくらいの時間がかかりますか?
S3 FAQ は、「すべてのリージョンの Amazon S3 バケットは、新しいオブジェクトの PUTS の書き込み後の一貫性と、上書きの PUTS および DELETES の最終的な一貫性を提供する」と述べています。ただし、結果整合性が得られるまでにかかる時間はわかりません。これを検索しようとしましたが、S3 ドキュメントで答えが見つかりませんでした。
状況:
7つのステップで構成されたウェブサイトがあります。ユーザーが各ステップで [保存] をクリックすると、JSON ドキュメント (7 つのステップすべての情報を含む) が Amazon S3 に保存されます。現在、次のことを計画しています。
- すべての json ドキュメントを保存する単一の S3 バケットを作成します。
- ユーザーがステップ 1 を保存すると、S3 に新しいアイテムが作成されます。
- ユーザーがステップ 2-7 を保存すると、既存のアイテムが上書きされます。
- ユーザーがステップを保存してページを更新すると、保存したばかりの情報が表示されるはずです。つまり、常に書き込み後に読み取るようにしたいのです。
完全な json ドキュメント (7 つのステップすべてが完了したもの) は約 20 KB です。ユーザーが保存ボタンをクリックした後、しばらくの間ページを凍結することができ、保存が完了するまで他の変更を加えることができません。
質問:
- AWS S3 がアイテムを保存してロードするのにどのくらいの時間がかかりますか? (ドキュメントが S3 に保存されているときに、Web サイトをフリーズできます)
- アイテムのサイズに基づいてセーブ/ロード時間を計算する機能はありますか?
- 別の S3 リージョンを選択すると、保存/読み込み時間は異なりますか? もしそうなら、シアトルに最適な地域はどこですか?
c++ - 高速なバイナリ データベースの代替手段
バイナリ データのみを処理する必要がある、高速な代替データベースを実装したいと考えています。具体的には、C++ でメモリから直接アクセスしながら、実行中に強制終了 (タスク マネージャー) が発生した場合でも安全に格納されるデータベースに近いものが必要です。ハードディスクにミラーリングされた構造体のベクトルのようなものです。毎秒数十万回の読み取りアクセスと少なくとも 1000 回の書き込みアクセスを処理できる必要があります。強制終了の場合、最大で最後のコマンドが失われる可能性があります。マルチスレッドをサポートする必要はなく、データベース ファイルはプログラムの 1 つのインスタンスによってのみアクセスされます。Windows でのみ実行する必要があります。これまでに考えた解決策は次のとおりです。
SQL データベース
- 利点
- 多くのライブラリが利用可能であるため、実装が容易
- 短所
- サーバーは別のプロセス上にあるため、プロセス間通信が遅くなる可能性があります
- SQL クエリの解析の必要性
- マルチスレッド環境向けに構築されているため、多くの不要な同期
- ポインターを使用して行に直接アクセスすることはできませんが、変更ごとに少なくとも 2 回コピーする必要があります
- テーブル全体を検索し、WHERE ケースをチェックする必要があるため、UPDATE クエリで不要な遅延が発生します。
- これらは私の頭の上からのほんの一部であり、もっとたくさんあるかもしれません
- 利点
メモリ マップト ファイル
- 利点
- ダイレクト メモリ マッピングにより、ダイレクト ポインタ アクセスが可能
- データベースに比べて非常に高速
- 短所
- 強制終了により、ページ全体が書き込まれなくなる可能性があります
- たくさんのコード (実際には気にしません)
- 強制同期不可
- ファイルサイズを大きくすると時間がかかる場合があります
- 利点
- C++ ベクトル*
- 利点
- 直接ポインタ アクセスは可能ですが、変更を手動で通知する必要があります
- データベースに比べて非常に高速
- 完全なプログラミングの自由
- 短所
- WriteFile の呼び出しが多いため、おそらく遅い
- たくさんのコード (実際には気にしません)
- 利点
- 数秒ごとに完全な書き込みを行う C++ ベクトル
- 利点
- 直接ポインタアクセス可能
- データベースに比べて非常に高速
- 完全なプログラミングの自由
- 短所
- 多くの変更されていないデータがファイルに書き直され、代わりに不要な書き込みを防ぐために大量の RAM が浪費される
- コピーで浪費される大量の RAM の書き込み中にアクセスできない
- 数秒分のデータが失われる可能性があります
- 複数のスレッドとそのための同期が必要
- 利点
*基本的に、ベクトルの行ごとの読み取り/書き込み機能のみを公開するラッパー クラスまたはメモリへの直接書き込みを許可するが、変更の通知は呼び出し元に依存し、すべての読み取りはメモリ内のコピーから行われ、すべての書き込みはコマンドごとにメモリ内のコピーとファイル自体
また、フラッシュせずにファイルのさまざまな部分に書き込み、すべての変更を一度にフラッシュして、書き込み中に強制終了した場合でもファイルが完全に書き込まれるか、まったく書き込まれないことを保証することは可能ですか? 私が考えることができるのは、次のワークフローだけです。
起動時にターゲット ファイルを複製し、次にすべてのデータ セットに対して: すべての変更を複製に書き込みます -> オリジナルを複製に置き換えてフラッシュします
ただし、これは大きなファイルの場合、ハード ディスク領域の恐ろしい浪費になると思います。
ご意見をお寄せいただきありがとうございます。
amazon-web-services - データの一貫性を保つ方法は? (Amazon S3 およびエラスティックサーチ)
Amazon S3 へのファイルのアップロードが成功すると、ファイル (およびメタデータ) の場所が ElasticSearch のレコード内に保存されると想像してください。OK、それは大丈夫です。
しかし、リクエストの 1 つが失敗した場合、どのようにデータの整合性 (ACID?) を確保しますか? たとえば、ElasticSearch サービスが利用できない場合
- S3上のファイルを削除する必要があります
- しかし、S3 での削除が失敗した場合はどうなるでしょうか
これにより、一貫性のない状態が発生します。
問題は、これらのインスタンスの同期をどのように維持するかです。
アイデアは次のとおりです。
- 不整合な状態があり、ユーザーが ElasticSearch レコードを要求しても何も見つからない場合、S3 のレコードは削除されます。(ミー)
- バッチ ジョブを使用して DB で矛盾を検索し、それらを削除します。
- データベース内のトランザクションで両方のリクエストを実行し、一方が失敗した場合 -> ロールバックして後で再試行 (キュー、ジョブ = オーバーキル?)
php - データベースとファイル システムのコラボレーションでデータの整合性を保証するにはどうすればよいですか?
バイナリ データをファイル システムに格納し、その参照をデータベースに格納する際に、データに一貫性を持たせるにはどうすればよいですか?
データの保存に使用されるデータベースとファイル システムのコラボレーション アーキテクチャを使用して、データに一貫性を持たせるのに役立つデータベース設計手法/パターンまたは PHP ライブラリはありますか?
つまり、データベースはファイルシステム内のデータへの変更を認識している必要があるため、データベースを認識せずに変更を拒否する方法は?
注:私は Apache2 で PHP と MySQL を使用しています。