[이 블로그는 https://nitschinger.at/ 에서 신디케이트되었습니다.]
모든 Java SDK 사용자를 위해 몇 가지 멋진 추가 기능을 준비했습니다. 이 게시물에서는 이를 자세히 다루고 생산성을 높일 수 있는 방법을 보여드립니다.
이 블로그 게시물은 1.2.0과 1.2.1 사이에 리스너 지원 및 메트릭 수집 등에 영향을 주는 약간의 변경 사항이 있었으므로 1.2.1 릴리스를 실행하고 있다고 가정합니다.
Maven 중앙 배포
1.2.0 릴리스부터 Java SDK는 Maven Central에서 직접 배포됩니다. 즉, 더 이상 Couchbase 리포지토리를 포함할 필요가 없습니다. 다음 Maven 코드만으로도 충분히 시작할 수 있습니다(그룹아이디가 변경되었음에 유의하세요):
<종속성>
<groupId>com.couchbase.client>
<artifactId>카우치베이스-클라이언트>
<버전>1.2.1>
>
>
이렇게 하면 최신 spymemcached 종속성도 자동으로 로드됩니다(1.2.0의 경우 2.10.0). 변경된 내용을 자세히 살펴보기 전에 여기 는 빠른 참조를 위한 릴리스 노트입니다.
리스너 지원
OperationFuture<부울> setFuture = 클라이언트.set("key", "value");
// 현재 스레드 차단
부울 결과 = setFuture.get();
에 대한 (int i = 0; i < 100; i++) {
선물.추가(클라이언트.set("key-" + i, "value"));
}
동안 (!선물.isEmpty()) {
이터레이터<OperationFuture<부울>> iter = 선물.이터레이터();
동안 (iter.hasNext()) {
OperationFuture<부울> 미래 = iter.다음();
만약 (미래.isDone()) {
iter.제거();
}
}
}
.get() 메서드를 호출하면 결과가 이미 계산되었으므로 더 이상 차단되지 않습니다. 콜백 메서드에 무엇을 입력하든 스레드 풀에서 비동기적으로 실행됩니다. 이 접근 방식이 얼마나 유연한지 알아보기 위해 100개의 퓨처가 완료될 때까지 기다리는 위의 예제를 다시 작성해 보겠습니다.에 대한 (int i = 0; i < 100; i++) {
OperationFuture<부울> 미래 = 클라이언트.set("key-" + i, "value");
미래.추가 리스너(new OperationCompletionListener() {
오버라이드
public void onComplete(OperationFuture<?> 미래) 던지기 예외 {
래치.카운트다운();
}
});
}
래치.기다림();
실행자 서비스 구현을 사용자 정의 구현으로 대체할 수 있습니다. 기본 동작(기본적으로 상한이 설정된 cachedThreadPool)이 사용자의 요구에 맞지 않는 경우 이 방법이 필요할 수 있습니다. 또한 여러 개의 카우치베이스클라이언트 인스턴스를 생성하여 모든 인스턴스에서 동일한 서비스를 공유할 수 있습니다.카우치베이스커넥션팩토리빌더 빌더 = new 카우치베이스커넥션팩토리빌더();
// 고정 스레드 5개로 스레드 풀 만들기
실행자 서비스 서비스 = 실행자.새로운 고정 스레드 풀(5);
// 빌더에서 설정
빌더.설정 리스너 실행자 서비스(서비스);
// 인스턴스 생성
카우치베이스클라이언트 클라이언트 = new 카우치베이스클라이언트(빌더.빌드 카우치베이스 연결(…));
향상된 프로파일링 기능
<groupId>com.codahale.metrics>
<artifactId>metrics-core>
<버전>3.0.1>
>
// 메트릭 수집 활성화
빌더.setEnableMetrics(MetricType.성능);
MetricType 열거형에서 선택할 수 있는 값은 세 가지입니다: OFF(메트릭 수집을 해제), PERFORMANCE(성능 관련 메트릭만 수집), DEBUG(성능 메트릭을 포함한 모든 종류의 메트릭을 수집) 중에서 선택할 수 있습니다. 메트릭 라이브러리는 매우 효율적이지만 메트릭 수집은 애플리케이션에서 일부 리소스를 빼앗아간다는 점을 염두에 두세요.- 히스토그램 ----------------------
[MEM] 읽기당 OS에서 읽은 평균 바이트 수
count = 893
최소 = 24
최대 = 24
평균 = 24.00
stddev = 0.00
중앙값 = 24.00
75% <= 24.00
95% <= 24.00
98% <= 24.00
99% <= 24.00
99.9% <= 24.00
[MEM] 쓰기당 OS에 기록되는 평균 바이트 수
count = 893
최소 = 38
최대 = 38
평균 = 38.00
stddev = 0.00
중앙값 = 38.00
75% <= 38.00
95% <= 38.00
98% <= 38.00
99% <= 38.00
99.9% <= 38.00
[MEM] 평균 와이어 작동 시간(µs)
count = 893
최소 = 179
최대 = 1730
평균 = 263.80
stddev = 75.43
중앙값 = 251.00
75% <= 280.00
95% <= 351.90
98% <= 425.36
99% <= 559.70
99.9% <= 1730.00
- 미터 ------------------------
[MEM] 요청 비율: 모두
count = 893
평균 속도 = 9.92 이벤트/초
1분 속도 = 9.85 이벤트/초
5분 속도 = 9.68 이벤트/초
15분 속도 = 9.63 이벤트/초
[MEM] 응답률: 모두(실패 + 성공 + 재시도)
count = 893
평균 속도 = 9.92 이벤트/초
1분 속도 = 9.85 이벤트/초
5분 속도 = 9.68 이벤트/초
15분 속도 = 9.63 이벤트/초
net.spy.metrics.reporter.type=jmx. 기타 가능한 설정은 다음과 같습니다. csv 및 slf4j. 지정된 간격으로 정보를 인쇄하는 로거를 선택한 경우 다음을 설정하여 변경할 수 있습니다. net.spy.metrics.reporter.interval 를 30으로 설정합니다. 위에 표시된 코드 앞에 (예를 들어) jConsole을 열고 애플리케이션의 MBeans 탭으로 전환할 수 있습니다. 그러면 메트릭 하위 섹션이 노출되어 로그에 표시되는 것과 동일한 메트릭이 포함되어 있습니다.유효기간이 있는 CAS
업데이트와 동시에 새 만료일을 설정할 수 있습니다. 잠시 후 터치 연산은 효율적이지도, 원자적이지도 않았습니다. 이제 API는 새로운 cas() 메서드를 사용하여 만료 시간을 동시에 전달할 수 있습니다. 사용하기 쉽습니다:속성을 통한 초기화
객체를 호출합니다. 다음은 예시입니다:에서 com.couchbase.client.CouchbaseConnectionFactory.(CouchbaseConnectionFactory.java:160)
에서 com.couchbase.client.CouchbaseConnectionFactoryBuilder$2.(CouchbaseConnectionFactoryBuilder.java:318)
에서 com.couchbase.client.CouchbaseConnectionFactoryBuilder.buildCouchbaseConnection(CouchbaseConnectionFactoryBuilder.java:318)
에서 Main.main(Main.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(네이티브 메서드)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
에서 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
기타 변경 사항
그리고 PersistTo 로 낮아졌습니다. 10ms 를 사용하여 Couchbase Sever 2.2 릴리스에 적용된 성능 변경 사항을 고려합니다. 또한 클라이언트는 이제 CRAM-MD5` 인증 메커니즘을 서버가 지원하는 경우 자동으로 사용합니다(2.2 버전부터).
[...] 금주의 블로그 게시물: Couchbase Java SDK 1.2의 새로운 기능 [...]