問題タブ [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.
cassandra - クォーラム構成でもCassandraのデータが一貫していない
読み取りと書き込みの両方にクォーラムがある場合、HectorとCassandraを使用して整合性の問題が発生しました。
MultigetSubSliceQueryを使用して、スーパー列の制限サイズ100から行をクエリし、それを読み取ってから削除します。そして、別のことを始めましょう。
前のクエリで削除する必要のある行が、次のクエリからも表示されていることがわかりました。
また、通常の列ファミリーから、1つの列の値をstatus ='FALSE'からstatus='TRUE'に更新しましたが、次にクエリを実行したとき、ステータスはまだ'FALSE'でした。
より詳しく:
- 毎回起こっているわけではありません(1 / 10,000)
- 2つのクエリ間の時間は約500ミリ秒です(ただし、2秒が経過した1組のクエリが見つかりましたが、それでも一貫性の問題を示しています)
- クラスタ時間同期ソリューションとしてntpを使用します。
- 6つのノードがあり、レプリケーション係数は3です。
Cassandraは「結果整合性」があるはずであり、Cassandra内での書き込みの前に読み取りが行われない可能性があることを理解しています。でも2秒?!もしそうなら、クォーラムまたは他の整合性レベルの構成を持つことは無意味ではありませんか?
それで、まず第一に、それはカサンドラの正しい振る舞いですか、そうでない場合、さらなる投資のためにどのデータを分析する必要がありますか?
c++ - 4バイトのフロートサイズを保証するC++
フロートが4バイトになるようにするためのクロスアーキテクチャの方法が必要です(32ビットウィンドウの場合と同様)。たとえば、私が作成している構造体では、4バイト長の整数値を確保する__int32
代わりにを使用しています。int
フロートでこれを行うにはどうすればよいですか?__int32
値を型に置き換えるだけでよいことはわかっています。ただし、64ビットシステムでフロートにキャストする場合、問題は発生しませんか?
java - 生成されたクラスにビルダーパターンなどを適用する
私は次の問題を抱えています:
フレームワークはDBテーブルからクラスを生成し、各テーブル列はクラス変数(フィールド)です。生成されたクラスには30を超えるフィールドがあり、パラメーターのないコンストラクターは1つだけです。
そのクラスのインスタンスを作成するには、いくつかのセッターを30回使用する必要があります。これは、不整合の原因になります。
生成されたクラスを編集できないため、パラメーターまたはBuilderパターンでコンストラクターを直接使用することはできません。これにアプローチするための最良の方法は何ですか-ラッパークラス、スレッドセーフメソッド、古典的なパターン?
couchbase - カウチベースの一貫性
setコマンドに対するcouchbaseサーバーの応答時:
- データが単一 (マスター) ノードに保存されたとき
- すべてのノードにデータが保存されたとき
scala - Scala 標準ライブラリの toString() と hashCode() の使用法
次のことを想定しても安全ですか。
scala.AnyRef は、Java との相互運用性のために、toString() と hashCode()を一対の括弧で定義するためです(Martin の提案: https://groups.google.com/forum/#!topic/scala-language/RlV9O1RDmis)。 )、
scala.AnyRef の子孫である Scala 標準ライブラリのすべてのクラスは、toString() と hashCode()を一対の括弧?で定義します。
つまり、標準ライブラリの開発者が、AnyRef の子孫クラスに対して一貫して toString() と hashCode() を使用していると信頼できますか?
編集 - AnyRef の子孫クラスのみを尋ねるように質問を変更しました
mongodb - CASをサポートするCAKeyValueストレージを探しています
一貫性、可用性、比較と設定をサポートする永続的なKeyValueストレージを探しています。
これは3つのノードにデプロイされ、1つ(いずれか)のノードがダウンしたときに操作可能である必要があります。クラスタ全体がオフラインになり(たとえば、電源の問題が原因で)、その後オンラインに戻った場合でも、データが失われることはありません。また、2つのノードがダウンしていない限り、システムがシステム管理者に迷惑をかけないことを期待しています。当然のことながら、可能な限り高速であることが望ましい。そして、最も重要な機能は一貫性です。何かが保存されたと報告された場合、障害が原因で失われることはありません。
まれな状況では手動による介入が必要であるというMongoDBのドキュメントを調べましたが、これはオプションではありません。
私が調べたもう1つのシステムは、ヴォルデモートでした。次の設定で要件を満たしていると思います。
ただし、レプリケーションと整合性に関する包括的なドキュメントが提供されていないため、仮定を確認できません。
私の要件に合ったストレージの経験はありますか?何かお勧めしてもらえますか?
PS私は大量の情報を保存するつもりはないので、シャーディングは省略できます。
oop - OO: 関連するオブジェクト間の一貫性を維持するための優れた方法
サーバーとアプリケーションの 2 つのクラスがあり、多対多の関係があります。サーバーは複数のアプリケーションを実行でき、アプリケーションは複数のサーバーで実行できます。3 番目のクラスである Host は、単一のサーバー上の単一のアプリケーションを表します。これには、Application および Server オブジェクトへの参照と、サーバー上のアプリケーションによって使用されるディスク容量などの追加データが含まれます。サーバー オブジェクトとアプリケーション オブジェクトの両方に、すべてのホストのリストが含まれます。したがって、アプリケーションはホストを認識し、ホストはアプリケーションを認識し、サーバーはホストを認識し、ホストはサーバーを認識します。
私のプロジェクトの目的は、一連のアプリケーションを新しいサーバーに移行するスケジュールを立てることです。当初、各アプリケーションには移行開始日と移行終了日がありました。一部のアプリケーションには、仮想化の開始日と終了日もあります。仮想化は、アプリケーションの制約内で移行を実行できない場合に発生します (これらが何であるかは気にしないでください)。これは移行の前に行われ、アプリケーションをその制約から解放します。「スケジュール」と呼ばれるオブジェクトは、アプリケーション オブジェクトによって保持されます。これには、これら 4 つの日付、仮想化するかどうかを示すブール値フラグ、および移行に必要な工数を含む「月」のリストが含まれます (または仮想化)各特定の月のアプリケーション。
指定された日に、サーバーを個別に仮想化できるようにしたいと考えています。これらのサーバー上のすべてのアプリケーション (またはアプリケーションの一部、つまりホスト) は、この日に仮想化されます。アプリケーションの残りの部分と一緒に移行されます。最初は、サーバー クラスに独自の Schedule オブジェクトを保持させることにしました。次に、仮想化の日付がサーバーに設定されました。ただし、サーバーとアプリケーションのスケジュールの一貫性を保つことにしました。たとえば、サーバー スケジュールの移行の開始日と終了日を、そのサーバーで実行されているすべてのアプリケーションの最も早い開始日と最も遅い終了日にそれぞれ設定する必要があります。サーバ。つまり、アプリケーションの日付を更新するたびに、すべてのサーバーの日付を (ホスト オブジェクトを介して) 更新することを覚えておく必要がありました。または、アプリケーションを更新したい場合'
次に、各 Host オブジェクト内に 1 つの Schedule オブジェクトを配置することを考えました。これにより、一貫性の問題は解決されますが、かなりの冗長性が生じます。アプリケーションに属するすべてのホスト オブジェクトの移行日は必ず同じになるため (ただし、仮想化の日付は異なる可能性があります)、アプリの移行日を設定すると、すべてのホストに同じ日付を設定します。また、上記のように、サーバーとアプリケーションの最早開始日と最遅終了日を計算する必要がある場合もいくつかあります。これには、次のいずれかが含まれます: アプリケーションとサーバー オブジェクトのそれぞれにこのデータを保持する (事実上、それぞれに独自のスケジュールを与えることで、一貫性を保って問題を元に戻す)、または: 必要になるたびに、ループによってこのデータをオンザフライで計算するすべてのホストのスケジュールを通じて。毎月のアプリケーションに必要な工数についても同じことが言えます。これはアプリケーション レベルで計算され、1 か月あたりの各ホストの時間に分割され、アプリケーション レベルで再度計算する必要があるときに再計算されます。ご想像のとおり、これは少しも効率的ではありません。
これは簡単な質問ではありませんが、この種の状況に対処するための受け入れられた戦略があるかどうか疑問に思っています. 私の投稿の冗長性について事前に申し訳ありません。うまくいけば、私は状況を十分に明確にしました。
nosql - Couchbaseの監視機能で、「persistTo」と「replicateTo」の違いは何ですか?
Couchbase APIには、保存および削除操作があり、戻る前に操作を正常に永続化する必要があるノードの数を指定できます。これは、次の2つのメソッドパラメータで表されます。
私の質問は、persistToパラメーターとreplicateToパラメーターの違いは何ですか。たとえば、PersistTo.MASTER + ReplicateTo.THREEを渡すことは、PersistTo.FOURを渡すこととまったく同じように見えます。これらの2つの異なるスタイルでこれらの観察されたAPIを呼び出すことの間に実際に動作の違いはありますか?
python - ZODB の変数属性を持つオブジェクトの一貫したインデックス作成
私は ZODB のインストールを行っており、数百万個のさまざまな種類のオブジェクトを整理する必要があります。Table
属性またはこれらの属性の組み合わせによってオブジェクトにインデックスを付ける BTree を含む汎用コンテナー クラスがあります。データの一貫性は非常に重要であるため、インデックス作成の対象となる属性に書き込むと、インデックスが自動的に更新されるようにしたいと考えています。したがって、obj.a = x
すべての新しい従属インデックス エントリを計算し、衝突があるかどうかを確認し、最後にインデックスと値を書き込むには、シンプルで十分なはずです。
一般的に、私はそのためにライブラリを喜んで使用するので、repoze.catalogとIndexedCatalogを見ていましたが、それにはあまり満足していませんでした。IndexedCatalog はかなり長い間死んでいるように見え、オブジェクトへの変更に対してある種の一貫性を提供していません。repoze.catalog は、より使用され、アクティブになっているようですが、私が理解している限り、この種の一貫性も提供していません。ここで何かを見逃した場合は、それについて聞きたいですし、再発明するよりも再利用することを好みます.
したがって、問題のライブラリを見つけようとする以外に、記述子を使用してデータオブジェクト属性への書き込みアクセスをインターセプトし、Table
クラスにインデックスを変更する魔法を行わせる必要があります。そのために、記述子インスタンスは、どのTable
インスタンスと対話する必要があるかを知る必要があります。現在の実装は次のようになります。
これらのDatabaseElement
クラスが生成されるとき、データベースとその中のオブジェクトはまだ作成されていません。したがって、この素敵な回答で述べたように、オブジェクトをインスタンス化引数としてTable
渡すことなく、オブジェクトを見つけるために、おそらくシングルトンルックアップメカニズムを作成する必要があります。Property
もっとエレガントな方法はありますか?記述子自体を永続化しますか? 提案やベストプラクティスの例を歓迎します!