私の目的は、カスタムQueryHandler実装を記述することでセッションごとにユニークなクエリを記録することです。cassandra QueryHandlerで各クライアントのセッションを区別する方法はありますか?
ケースを検討する:ユーザがJavaクライアントでcassandraクラスタに接続し、「select * from users where id =?」を実行すると、 100回。 他のユーザーがcqlshから接続し、同じクエリを50回実行しました。だから私はこの場合2つのクエリだけを記録したい。そのためには、ログインごとに固有のセッションIDが必要です。
Cassandraは、すべてのリクエストが上がるが、そのapiのいずれも上記の2つの異なるセッションを区別するためのsessionIdを提供しないインターフェースを提供する。
org.apache.cassandra.cql3.QueryHandler
注:私は[リモート/ポートを取得することができるが、私は、ユーザーがログインしたときに作成され、彼は切断時に破壊され得るいくつかのidをしたいです。
こんにちはクリス、返信いただきありがとうございます。私はgetRemoteAddress()はホストと同じマシンからのcassandraに接続している別のクライアントがあり、ポートがすべて同じである場合に区別しません。現在、私はアインシュンアペンダーを使用していませんでしたが、私もそれを試みます。 asynch appenderにはメモリとCPU使用率に関していくつかの欠点もあります。その点を念頭に置いて設定する必要があります。最初は、同期アペンダーだけでパフォーマンスをテストする予定でした。 – Laxmikant
ポートは同じではなく、宛先ポートは9042ですが、各tcp接続には固有の送信元ポートがあり、カーネルはどの接続に接続するかを区別できます。しかし、セッションは接続のプールを表しているので、複数のセッションにまたがることができますが、セッションは開始になります。私は非同期をお勧めします。メモリーの問題は、そのバッファ可能なキュー(これはC *はエグゼキュータをトレースするためのものです)にすることでカバーできます。 –
https://issues.apache.org/jira/browse/CASSANDRA-13983(https://github.com/apache/cassandra/pull/169)はあなたにとって興味深いかもしれません –