Apache cassandra の使用に問題があります。私は数週間この問題を解決しようとしています。
これが私のセットアップです。Apache cassandra を実行している 2 台のコンピューター (コンピューター C1 とコンピューター C2 と呼びましょう) があり、レプリケーション ファクター 2 でキースペースを作成します。これは、各コンピューターがデータのローカル コピーを持つようにするためです。
約 500MB のかなり大量のデータを読み取るプログラムがあります。
シナリオ 1) コンピューター C1 のみで cassandra が実行されているとします。コンピューター C1 で読み取りプログラムを実行すると、この読み取りは 30 分から 1 分で発生します。
シナリオ 2) コンピューター C2 で cassandra インスタンスを開始し、コンピューター C1 で読み取りプログラムを再度実行します。完了までに 20 分程度の非常に長い時間がかかります。
なぜこれが起こっているのかわかりません。読み取り整合性は「1」に設定されています
期待される性能
理想的には、コンピューター C1 と C2 の両方の読み取りプログラムが高速に完了する必要があります。これは、両方のコンピューターにデータのローカル コピーがあるため可能です。
誰でも私を正しい方向に向けることができますか? 助けてくれて本当にありがとう、ありがとう
更新: ネットワークの使用状況
これはあまり意味がないかもしれませんが、nethogs を使用してインターネット接続を監視し、両方の cassandra ノードが稼働していて、データベースを読み取ると、帯域幅が cassandra によって他のノードと通信するために使用されます。おそらく、これはバックグラウンドで発生する読み取り修復です。私は読み取り整合性レベル「1」を使用しました。私の場合、必要なデータを持つ最も近いノードはローカル コンピューターの cassandra インスタンスです (すべてのノードにすべてのデータがあります)。したがって、データのソースはローカル コンピューターからのものである必要があります。 .
更新: SQLTransentExceptions: TimedOutException()
ただし、両方のノードが起動している場合、データベースを読み取るプログラムには、いくつかの SQLTransentExceptions: TimedOutException() があります。デフォルトのタイムアウトの 10 秒を使用します。しかし、すべてのデータ取得はローカル インスタンスから行う必要があるのに、なぜ SQL ステートメントがタイムアウトになるのかという疑問が生じます。また、1 つのノードのみが稼働している場合、同じ SQL コードが正常に実行されます。