問題タブ [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.

0 投票する
2 に答える
16618 参照

json - RESTful GET応答はリソースのIDを返す必要がありますか?

ここにいる多くの開発者は、 RESTful APIからのGETリクエストがリクエストされたリソースのIDを返す必要があるかどうかについて、友好的な(宗教的と言う人もいます)議論をしています。次のGETリクエストを想定します。

http://my.api.com/rest/users/23

これは現在次を返します:

結果セットに「id」がないことに注意してください。

この問題と戦っているキャンプは基本的に4つあります。

キャンプ#1:発信者がGETリクエストを行うとき、彼らはすでにIDを知っています。したがって、結果セットにはIDを含めないでください。呼び出し元がUI編集を有効にするためにこのデータを必要とする場合、呼び出し元はID 23をパススルーする必要があります。おそらく、メンバー{"id":23}をJSONに手動で追加します。
キャンプ#1の人々はまた、結果セットにIDが存在することは、この値が変更可能であることを示していると主張していますが、もちろん変更できません。

キャンプ#2: IDがないと、JSON結果セットをUIフォームの編集/更新操作にネイティブに使用できません。代わりに、AJAXコールバックメカニズムがIDフィールドを渡し、手動で結果セットに追加する必要があります。これは扱いにくく、エラーが発生しやすいようです。UI担当者は、結果セットが存在するはずのデータ、つまりIDが欠落しているように「感じる」と主張しています。

キャンプ#3:これらの人々は一貫性を心配しています。APIによって返されるユーザーオブジェクトのコレクションがある場合、これらのオブジェクトにはIDが含まれている必要があります。したがって、一貫性を保つために、シングルトンバージョンのGETにはIDも含める必要があります。

キャンプ#4:これらの人々は、ユーザーのGETリクエストが、IDを含むハイパーメディアまたはSelfLinksの形式でメタデータを返す可能性があることを示唆しています。

これは難解な「Who'sRight?」ではありません。どちらか。私たちが採用するアプローチは、APIの形状を決定し、新しい数週間にわたる複数の開発者の作業負荷に影響を与えます。

0 投票する
1 に答える
227 参照

memcached - バックキャッシュ値をデータベースに同期するソリューションは?

以下はシナリオです。これは、Blogger の overviewstats 関数と同様のアクセス統計システムです。統計データはデータベース (MySQL など) に永続的に保存されますが、キー値キャッシュ (現在は memcache) を使用してアクセス数をキャッシュし、各アクセスはキャッシュ内の値のみを更新します。

問題は、最新のカウント値をデータベースに同期する方法です。通常の解決策は、一定の間隔を置いて書き戻すことですが、十分なスペースがない場合、memcache は項目を破棄するため、一部の更新が失われる可能性があります。したがって、アイテムを破棄するときにmemcacheがメッセージ(JMSなど)を送信でき、そのアイテムをデータベースに同期できる場合、より良い解決策だと思います。memcache はこの機能を提供していないようですが、これを行うことができる他のキー値キャッシュはありますか? または、より良い解決策はありますか?

0 投票する
4 に答える
4187 参照

mysql - MySQL:テーブルをロックしてトランザクションを開始する方法は?

TL;DR - MySQL では、テーブルのロックとトランザクションの使用を同時に行うことはできません。これを回避する方法はありますか?

(遅い) 外部システムからのデータをキャッシュするために使用している MySQL テーブルがあります。データは Web ページ (PHP で記述) を表示するために使用されます。キャッシュされたデータが古すぎると判断された場合、Web 接続の 1 つがキャッシュされたデータの更新をトリガーする必要があります。

私が対処しなければならない3つの問題があります:

  • 他のクライアントは、更新中にキャッシュ データを読み取ろうとします。
  • 複数のクライアントがキャッシュ データが古すぎると判断し、同時に更新を試みる場合があります。
  • 作業を行っている PHP インスタンスはいつでも予期せず終了する可能性があり、データが破損することはありません。

トランザクションを使用して最初と最後の問題を解決できるので、クライアントはトランザクションがコミットされるまで古いデータを読み取ることができ、すぐに新しいデータが表示されます。問題が発生すると、トランザクションがロールバックされるだけです。

2 番目の問題は、テーブルをロックすることで解決できます。これにより、1 つのプロセスだけが更新を実行できるようになります。他のプロセスがロックを取得するまでに、彼らは打ち負かされ、何も更新する必要がないことに気付くでしょう。

これは、テーブルをロックしてトランザクションを開始する必要があることを意味します。MySQL のマニュアルによると、これは不可能です。トランザクションを開始するとロックが解放され、テーブルをロックするとアクティブなトランザクションがコミットされます。

これを回避する方法はありますか、それとも私の目標を完全に達成する別の方法はありますか?

0 投票する
1 に答える
320 参照

git - Git と Dropbox - ローカル リポジトリ

Dropbox と Git の機能を組み合わせる方法については、数多くのスレッドを読み、多くのビデオを見てきました。そのようなスレッドの 1 つがこれです: Git と Dropbox を効果的に一緒に使用しますか?

これが私がやりたいことです:

  • 私は現在、大規模な個人プロジェクトに取り組んでいます (私だけ、暗号化は必要ありません)。
  • 作業は 2 台のデスクトップ コンピューター (Win 7、Ubuntu) と 1 台のラップトップ (OSx) で行われます。
  • どこからでもバージョン管理 (git) の下でファイルにアクセスできるようにしたい
  • すべてのファイルへの Web アクセス (Dropbox.com 経由) があると便利です。たとえば、Git をインストールする必要はありません。パソコンを借ります。

ほとんどのガイドは、Dropbox を使用してリモートリポジトリを格納しています。これは問題ありませんが、ファイルにアクセスするにはすべてのコンピューターに git をインストールする必要があり、Web 経由で直接ファイルにアクセスすることはできません。

現在、ファイルとローカル リポジトリは Dropbox にあり (サイズの問題は認識しています)、リモート リポジトリは学校の ssh サーバーにあります。アイデアは、任意のコンピューターで作業することを選択でき (コミットしなくても)、コンピューター #2 または #3 を使用して作業を続行し、そこからコミットできるということです。全体のバックアップは ssh サーバー上にあります。

この設定に関するご意見は大歓迎です。誰かがより良いアイデアを持っている場合は、私に知らせてください:)

0 投票する
1 に答える
870 参照

mysql - MySQL-SQLサーバー:整合性チェック

2つのデータベース間のデータロードの結果を確認しようとしています。残念ながら、私は1つのデータベース(MySQL)に直接アクセスすることしかできません。MSSQLを管理している会社は、APIを介してデータベースを公開できます。

私がやりたいのは、行セット全体で特定の列の整合性をチェックすることです。もともと、列に対してCRCまたはハッシュチェックを実行できることを望んでいましたが、これを実行する互換性のある方法はないようです。

たとえば、MySQLの列に対してCRC32を実行できますが、MSSQLで同じことを実行する信頼できる方法はありません。または、MSSQLにはCHECKSUM_AGGがありますが、MySQLには代替手段がありません。

最終的に、チェックサムが異なる場合は、変更が必要な行を特定するためにバイナリ検索を実行したいと思います。

現在、バルクロードインターフェイスはなく、SSISは使用できません(MSSQLサーバーは私の会社の一部ではありません)。

0 投票する
1 に答える
750 参照

android - アプリケーションオブジェクトのシリアル化

最初はJavaの知識が豊富ですが、Androidから始めたばかりです。

私のAndroidアプリは、カスタムオブジェクトに保存しているかなり複雑なデータ(テキスト、日付、画像)をダウンロードしています。データは時々更新する必要があります。ただし、通常、ダウンロードされたデータは変更されません。

データをメモリに保持するために、アプリケーションオブジェクトを使用しています。残念ながら、アプリが強制終了されると、アプリケーションオブジェクトインスタンスが破棄されるようです。

したがって、onPause()中に、カスタムオブジェクト(アプリケーションオブジェクトに含まれている)をシリアル化して内部ストレージに保存するのが良い方法かどうか疑問に思いました。明らかに、インターネットからリロードする前に、まずonResume()でファイルから読み取ります。アイデアは、オフライン表示を有効にすることでもあります。

長期的には、バックグラウンドサービスで日付をダウンロードするコードを移動する計画です。Androidでアプリケーションの状態を維持するにはさまざまな方法があるようですので、これが正しい方法であることを確認したいと思います。

0 投票する
1 に答える
574 参照

repository-pattern - Repository pattern and data consistency

In my project I'm using repository pattern for business-layer. Reading alot about repository pattern I haven't found any information on how to keep business objects synchronized with data.

Lets say I've loaded some data, through mapping created my business objects and saved them to repository. My repository implementation maintains change tracking so I can easily update underlying data layer.

The application is n-tier application with multiple clients, and (possibly) multiple business layer instances on different independent servers.

The problem:
How to maintain data consistency between business objects in repository and respective data in database?

Is there any patterns or best practices on when and how to update business objects who's data was changed in database while they are cached in repository?

0 投票する
1 に答える
29 参照

sql - 表の行間でデータの数学的一貫性を実装する

PersonsVariables、 の3 つのテーブルがありPerson_Dataます。

Person_Dataテーブルには、さまざまな人物のさまざまな変数に関する数値データがあります。列は次のとおりです: variable_valueperson_id( への外部キーPersons) およびvariable_id( への fk Variables)。

一部の変数は互いに関連しています (例: 収入、家族の規模、一人当たりの収入)。Variable_Relationshipこの種の情報を格納するテーブルを作成し、データの健全性チェックを実行したいと考えています。テーブルの列の 1 つはDependant_Variable_Id(関係の LHS) になります。

  1. 問題は、RHS 変数の数が固定されておらず、数式も固定されていないことです。
  2. これをうまく実装する方法はありますか?

現在、テキスト列と列relationship_definitionを持つ別のテーブルについて考えています。Relationship_IdRHS_VariableId

0 投票する
1 に答える
555 参照

java - POJOからNOTNULLABLE属性を検証する方法と必要な属性のリストを検証する方法は?

私の問題は、データ検証に従って2種類のステータス「VALID」と「INVALID」をデータベースに保持する必要があることです。つまり、データベースではすべての属性がNULL可能ですが、必要なすべての値があれば、別のプロセスがステータス「VALID」になります。が存在し、1つ以上の必須値が欠落している場合は「無効」です。

リレーショナルモデル(oracle 11g)とHibernate3を使用しています。

それで...

誰かが、特定のオブジェクト(POJO)と必要なオブジェクト/属性のリスト(または別のPOJO)の間のデータの一貫性(オブジェクト/属性がNULLではない)を検証するためのフレームワークまたはメカニズムを知っていますか?これらのオブジェクトは、単純な属性を持つことも、他のオブジェクトまたはオブジェクトのリストを含めることもできることに注意してください。

さらに、場合によっては、検証に条件があります。たとえば、別の属性に特定の値がある場合にのみ、特定の属性を検証(NULLかどうかを確認)するだけです。

現在、リフレクションと1つのデータベーステーブルを使用して、必要なすべてのオブジェクト/属性のパラメーター化を格納する1つのアプローチがありますが、別のより良い方法が存在するかどうかを知りたいです。

前もって感謝します

0 投票する
2 に答える
497 参照

distributed-computing - 分散データベースからの読み取りの一貫性

ネットワーク内の複数の場所に分散された一連のデータベースがあります。そのデータベースにデータを保存する必要がある 1 つのクライアント。

データが常に保存されるようにする必要があります。

障害点となる 1 つのマスターに接続することになるため、同期/非同期レプリケーションを使用してレプリカ セットを整理することはできません。そのため、クライアントから既知のすべてのデータベースにデータを送信します。どうやら、1 つのデータベースが保存に失敗する可能性があるため、他のデータベースの書き込みに依存しています。これらのセットは重複していますが、最終的にDBに格納された異なるデータセットを取得します。(例 DB1 -> [1, 2, 3]、DB2 -> [1, 3]、DB3 -> [2,3,4])

これらの DB から読み取るときに一貫したデータを取得するにはどうすればよいですか? データセットを正常にマージできるようにするには、データを書き込むクライアントと読み取るクライアントにどのような手法を適用する必要がありますか?