残りのapiを使用して、cassandraでクエリを実行しています。カウントをフェッチすると、問題が発生しています。cassandraから矛盾したカウントを受け取る
私たちはcassandraクラスタを構築しました。最近、バックアップと復元を行い、すべてのデータを新しいクラスタにコピーしました。 テーブルに対してnodetoolを更新し、nodetoolの修復も行いました。
ただし、API呼び出しの一部が失敗し、矛盾した結果が返されています。
1)カウントクエリにはパーティションキーが含まれています。読んだタイムアウトやAPI呼び出しからのエラーは見られませんでした。
2)セッションを作成するコードがどのようになっているかを示します。
val poolingOptions = new PoolingOptions
poolingOptions
.setCoreConnectionsPerHost(HostDistance.LOCAL, 4)
.setMaxConnectionsPerHost(HostDistance.LOCAL, 10)
.setCoreConnectionsPerHost(HostDistance.REMOTE, 4)
.setMaxConnectionsPerHost(HostDistance.REMOTE, 10)
val builtCluster = clusterBuilder.withCredentials(username, password)
.withPoolingOptions(poolingOptions)
.build()
val cassandraSession = builtCluster.get.connect()
val preparedStatement = cassandraSession.prepare(statement).setConsistencyLevel(ConsistencyLevel.QUORUM)
cassandraSession.execute(preparedStatement.bind(args :_*))
クラスタ構成:
6台のマシン:3種
はカサンドラは、我々はApacheのカサンドラにcassandra-を使用して3.9バージョン
を使用している任意のマシン
を下になることはありません3.1.1バージョンのドライバコアアーティファクト
3)nodetoop tpstatsはエラーを表示しません。
4)cassandraのsystem.logに他の問題はありません。我々は、以下のような警告をほとんど見ない。
Maximum memory usage reached (512.000MiB), cannot allocate chunk of 1.000MiB
WARN [ScheduledTasks:1] 2017-03-14 14:58:37,141 QueryProcessor.java:103 - 88 prepared statements discarded in the last minute because cache limit reached (32 MB)
最初のapi呼び出しは0を返し、後でapi呼び出しが正しい値を返します。
他の詳細が必要な場合はお知らせください。
あなたのテーブル構造とあなたは何のクエリを実行しているが何ですか? –
私たちは4つの列を持つテーブルを持っています。そのうちの1つはパーティションキーであり、いくつかの列(日付列+テキスト列)がクラスタリングキーとして選択されています。クエリは次のようになります。 SELECT count(*)FROM table_name WHERE parition_column =? AND text_column_of_clustering_key =? AND date_column_of_clustering_key <=? AND date_column_of_clustering_key> =? – Srini
あなたの複製戦略/要因は何ですか?そのテーブルへの書き込みにはどのような一貫性レベルが入りますか? –