2017-11-08 4 views
0

메시지를 기록하기 위해 크로니클 큐 (SingleChronicleQueue)를 사용할 준비가되었습니다. 프로토 타입이 지금 작동 중입니다. 그러나 우리에게는 몇 가지 문제가 있습니다.크로니클 큐 - 메시지 수정 프로그램 msg

독자가 메시지를 수정할 수 있습니까? 다시 시작한 후 중복 된 메시지를 제거하기 위해 읽은 색인을 기록하기 위해 크로니클 맵을 사용합니다. 이 방법이 작동하지 않는 경우 독자 측에서 읽은 메시지에 태그를 추가하려고합니다. 사실 우리는 이미 그렇게했습니다. 문제는 지금 때로는 "15c77d8be (62) was 8000003f was 3f"와 같은 오류 메시지가 표시됩니다. 캐시 라인 경계를 넘어선 쓰기가 이제는 더 이상 원자 적이지 않기 때문에 이것이 의심 스럽습니다. 그것을 해결하기위한 권장 방법은 무엇입니까? 현재 우리는 메시지 앞에 1 바이트 태그를 추가하고, 3 바이트 패딩을 추가하여 문제를 해결할 것입니까?

Google의 자체 롤 정책을 사용할 수 있습니까? 매시간 정책을 사용하고 싶습니다. 그러나 시간당 정책은 2 억 6 천 5 백만 개 미만의 항목을 포함하는 파일을 요구합니다. 사용자 정의 롤주기를 사용할 수 있습니까? 거기에 어떤주의 사항이 있습니까?

답변

0

한 가지 일반적인 접근법은 소비자의 읽기 색인을 다른 출력 대기열에 기록하는 것입니다. 다시 시작할 때 출력 큐의 끝에서 뒤로 읽는 것만으로 각 소비자의 읽기 시퀀스를 결정합니다.

코드를 보지 않고 기존 레코드를 수정하려고 할 때의 문제점을 파악하는 것이 약간 어렵습니다. 대기열에 삽입 된 레코드는 변경 불가능한 것으로 간주됩니다. 리더 스레드에서 수정하는 것은 지원되지 않습니다.

https://github.com/OpenHFT/Chronicle-Queue/blob/master/src/main/java/net/openhft/chronicle/queue/RollCycles.java#L27

: 당신의 RollCycle 요구 사항에 관해서

의 LARGE_HOURLY 사이클은 최근 ~ 수, 사이클 당 20 억 개 항목이 추가되었습니다