내 목표는 모든 쿼리가 우리의 경우에 성능에 영향을 미치지 않도록 로깅을 사용자 정의 QueryHandler 구현을 작성하여 세션 당 고유 쿼리를 기록하는 것입니다.cassandra QueryHandler에서 각 클라이언트의 세션을 구분할 수있는 방법이 있습니까?
사례를 고려하십시오 : 사용자가 Java 클라이언트로 cassandra 클러스터에 연결하고 "select * from users where id =?" 100 번. 그리고 다른 사용자가 cqlsh에서 연결되어 동일한 쿼리를 50 번 수행했습니다. 그래서이 경우에는 두 개의 쿼리 만 기록하려고합니다. 이를 위해 로그인 당 고유 한 세션 ID가 필요합니다.
카산드라는 모든 요청을 처리하지만 api 중 어느 것도 위의 경우에 설명 된 두 개의 서로 다른 세션을 구분할 수있는 세션 ID를 제공하지 않는 인터페이스를 아래에 제공합니다.
org.apache.cassandra.cql3.QueryHandler
참고 : 나는 remoteaddress/포트를 얻을 수 있어요하지만 난 사용자가 로그인 그는 끊 때 파괴받을 때 생성되는 몇 가지 ID를 원한다.
안녕하세요, Chris, 답장을 보내 주셔서 감사합니다. 난 getRemoteAddress() 다른 호스트가 동일한 기계에서 cassandra에 연결하는 다른 클라이언트가 있으며 포트가 모두 동일합니다 구별 못해. 현재 나는 asynch appender를 사용하지 않았지만 나는 그것을 시도 할 것이다. asynch appender는 또한 메모리와 CPU 활용 측면에서 약간의 단점을 가지고 있습니다. 그래서 나는 그러한 점들을 마음에두고 유지할 필요가 있습니다. 처음에는 동기화 appender 만 사용하여 성능을 테스트 할 계획이었습니다. – Laxmikant
포트가 같지 않을 것이며 대상 포트는 9042가되지만 각 TCP 연결은 고유 한 소스 포트를 가지므로 커널이 어느 연결을 구별 할 수 있습니다. 그러나 세션은 연결 풀을 나타내며 여러 연결을 확장 할 수 있지만 시작일 수 있습니다. 나는 비동기를 권하고 싶다. 메모리 문제는 그것을 droppable 큐로 만들 수있다. (이것은 C *가 executor를 추적하는 것과 같다). –
https://issues.apache.org/jira/browse/CASSANDRA-13983 (https://github.com/apache/cassandra/pull/169)이 관심있어 할 수도 있습니다 –