問題タブ [integrity]
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.
database-design - 複数のデータベースで参照整合性を回復する方法
私は、全国の複数の生産拠点 (すべての情報が 1 つの拠点にある) にフィードするために使用されるシステムを設計している最中であり、さらに追加する可能性があります。最初は、データベースを 1 つだけ使用すれば済むと思っていました。私は現在、元の設計を再考し、よりスケーラブルなソリューションに傾倒しています。各データベース/テーブルのサイズを抑えることも重要です。
サイトの概念にまたがる情報を持つ「マスター」データベースと、サイト固有の情報を含む各サイトの個別のデータベースがあります。
私の苦労は、データをどこで分離するかです。データはすべてかなり関連しています。どこで行っても、参照整合性が失われます。私が読んだものはすべて、非常に正当な理由だと思うので、これを絶対に避けるように言っていますが、それを回避する方法はわかりません.
トリガーを調べましたが、データベースが別のサーバーにある場合は機能しないと思います(ただし、Oracleがこれを行っていると思います)。私はオープン ソース ソリューションに限定されているため、それが役立つ場合は MySQL または postgre になります。
この問題を軽減するための提案や、別の設計上の提案はありますか?
ftp - Sybase ダンプ ファイルをロードせずに整合性を確認するにはどうすればよいですか?
シナリオは次のとおりです。クライアントが Sybase ダンプ ファイルをローカル FTP サーバーに (gzip で圧縮して) アップロードします。これらをピックアップして、データベースサーバーが存在するネットワーク内の別のサーバーに移動する自動化されたプロセスがあります。残念ながら、この転送は WAN 経由であり、大きなファイルの場合は時間がかかります。また、クライアントがバイナリ モードで FTP を使用することを忘れている場合があり、その結果、ダンプ ファイルをロードできないため、WAN 経由で 10 GB の転送が無駄になります。もう一方の端に。私がやりたいことは、WAN 経由で送信する前に、ローカル サーバー上のダンプ ファイルの整合性を確認することですが、Sybase がないため、ダンプ ファイルを単に "ロード" することはできません。インストールされています(インストールできません)。これを行うために使用できるツールやコードはありますか?
java - Terracotta を永続化ソリューションとして使用する場合
Terracotta を持続性ソリューション (データベースの代わり) として使用するのは良い考えでしょうか? 特に、データの整合性の問題とトランザクション システムのサポートについて疑問に思っています。
java - ファイルの書き込みに失敗したときにファイルの整合性を確保するにはどうすればよいですか?
フォローアップ:多くのリーダーと1人のライターがいるファイルを安全に更新するにはどうすればよいですか?
以前の質問で、FileChannelのロックを使用して、読み取りと書き込みの順序を確認できることがわかりました。
しかし、ライターが書き込みの途中で失敗した場合(たとえば、JVMがクラッシュした場合)、どのように対処しますか?この基本的なアルゴリズムは次のようになります。
中にJVMがクラッシュした場合はwrite file
、ロックが解除されることを確認してください。ただし、ファイルが不完全になっています。完全なものを常に読みやすくしたい。古いコンテンツと新しいコンテンツのどちらかであり、その間には何もありません。
私の最初の戦略は、一時ファイルに書き込んでから、内容を「ライブ」ファイルにコピーすることでした(適切なロックを確保しながら)。このためのアルゴリズムは、
良い点の1つは、delete temp
別のライターによって既にロックされている場合、一時を削除しないことです。
ただし、の間にJVMがクラッシュした場合、そのアルゴリズムは処理しませんcopy temp to file
。それで私はcopying
旗を追加しました、
copying
ファイルはファイルロックによって保護されているため、ファイルにアクセスすることは2つありません。
さて、これはそれを行う方法ですか?非常に単純なものを確保することは非常に複雑に思えます。これを処理するJavaライブラリはありますか?
編集
さて、私は3回目の試みで間違いを犯すことができました。リーダーは、温度を上げるときにロックを保持しませんcopy temp to file
。また、一時ファイルをロックするだけの簡単な修正ではありません。これにより、ライターとリーダーが異なる順序でロックを取得し、デッドロックが発生する可能性があります。これは常に複雑になっています。これが私の4回目の試みです。
今回は一時ファイルがメインロックで保護されているため、独自のロックも必要ありません。
編集2
私がJVMクラッシュと言うとき、私は実際に電源が切れて、UPSを持っていなかったと言うことを意味します。
編集3
私はまだ別の間違いをすることができました。書き込みまたは読み取りを行っているファイルをロックしないでください。入出力ストリームを実装していないJavaでRandomAccessFileを使用しない限り、読み取りロックと書き込みロックの両方を取得できないため、これにより問題が発生します。
代わりに実行したいのは、読み取りまたは書き込み中のファイルを保護するロックファイルをロックすることです。更新されたアルゴリズムは次のとおりです。
ロックと解放は、ファイル、一時ファイル、およびコピーフラグを保護します。唯一の問題は、リーダーロックを共有できないことですが、実際には共有できません。読者は常にファイルを変更する機会があったので、そもそも共有可能なロックを作成するのは間違っていたでしょう。
c# - Perl でメッセージを暗号化して C# で復号化するにはどうすればよいですか?
Perl を使用して暗号化し、.Net (C#) で復号化する必要があります。つまり、Perl がファイルを暗号化し、私の .Net コードがファイルを復号化します (さらに、完全性を検証することさえあります)。
問題は、私が Perl の暗号化機能に慣れていないことです。これにアプローチする最善の方法とその可能性について、誰かがガイダンスを提供できますか?
前もって感謝します!
DC
database - データベース スキーマに対してクライアント データベースを検証する方法を教えてください。
当社のクライアントは SQLServer/Oracle データベースを使用しています。何年にもわたって、手動で実行する必要のある多くの更新スクリプトを送信してきました。ほとんどの場合、すべてがスムーズに進みましたが、スクリプトが最後まで完全に実行されなかったり、エラーが発生したりすることがあります (アップグレード時には検出されませんでした)。また、何らかの理由で、「賢いユーザー」でさえ、それらのデータベース自体にインデックス/テーブルを追加することもありました。後で、これらの不規則性が問題につながります。
今、私はクライアントのデータベースを独自のデータベース スキーマ (テーブル、データ型、インデックス、ビューなど) に対して検証/検証する方法を見つけることを任されています。出力は、データベースに何が欠けているか、または何があってはならないかを示す何らかの種類の差分ファイルである必要があります。アプリケーション内からコード (C++) でこれを行うことも、この 1 つの目的のためだけに外部ツールを作成することもできます。
コーディングを開始する前に、必要な結果を生成するツール、または少なくともマスター データベース (Oracle および SQLServer) から適切な xml ファイルを生成するのに役立つツールが既に存在するかどうかを尋ねたいと思いました。または、独自のツールを作成するのに役立つライブラリはありますか?
sql-server - ストアドプロシージャの整合性をチェックする方法
多くのストアド プロシージャを含む大規模なデータベースがあります。現在、データベースを更新していますが、一部のストアド プロシージャはまだ古い構造を使用しています。それらのほとんどは 'sp_depends' を使用して見つかりましたが、一部の sp はすり抜けてしまいました。
すべてのストアド プロシージャをチェックする方法がないかどうか疑問に思っていました。もう存在しない列を呼び出すと、エラーが発生します。
どうも
java - RandomAccessFile.close() は内部的に FileChannel.force() を呼び出しますか?
RandomAccessFile を使用して、トランザクションの一部としてファイルへの書き込みを実行しています。トランザクションをコミットする前に、データがディスクに書き込まれていることを完全に確認したいと考えています。force(boolean)
RAFを呼び出すとFileChannel
この保証が得られるように見えますが、ファイルを閉じるときに暗黙的に呼び出されるのでしょうか、それとも手動で呼び出す必要がありますか?
force()
また、実際に何をしているのか、そしてそれがどこまで信頼できるのかについての洞察を誰かが持っていますか? OS がデータがディスクに書き込まれたことを報告する可能性はありますか?実際にはまだどこかのキャッシュに残っていますか? OS/HDD/ファイルシステムにどの程度依存していますか?
security - クライアント側アプリケーション用のオンラインチェックサムチェッカー
私のクライアント側アプリケーションは、オンラインの場合にのみ機能します。
サーバー側でwinformsクライアントアプリケーションの整合性を確認できますか?
アプリケーションがパックされるときに、アプリケーションを役に立たなくしたいと思います。
つまり、これらの人はhttp://www.webutils.pl/SFV_Calculatorに似たようなものを持っています。
もちろん、私の場合、ファイルをアップロードしたくありませんが、アプリケーションの整合性に関する簡単なチェックを実行します。