2011-04-20 3 views
1

내 클라이언트 서버 응용 프로그램에서 로깅 및 필터링 메커니즘이 필요합니다. 클라이언트는 특정 매개 변수를 기반으로 로그 데이터를 요청할 수 있습니다.로깅을위한 적절한 STL 컨테이너 선택 데이터

로그에는 MACID, 날짜 및 시간, 명령 유형 및 방향이 필드로 있습니다.

서버는 이러한 매개 변수를 기반으로 로그 데이터를 필터링 할 수도 있습니다. 로그의 크기는 10MB이고 나중에 로그가 처음부터 메시지를 덮어 씁니다.

내 접근 방식은 내가 "메모리"로 STL 컨테이너뿐만 아니라 파일에 데이터를 기록 할 것이다 그래서 클라이언트 요청 데이터 서버는 기준

에 따라 로그 데이터를 필터링 할 때 그래서 프로세스는 서버가 먼저 벡터 <에 대한 특정 기준에 따라 정렬을 수행 한 다음 이진 검색을 사용하여 필터링합니다.

메모리 로깅 데이터에 STL 컨테이너로 벡터를 사용할 계획입니다.

벡터가이 상황에 적합한 지 여부는 조금 혼란 스럽습니다.

데이터 크기가 벡터에서 최대 10MB까지 가능하기 때문에. 내 경우에는 벡터 여부를이 사건에 대한 충분한 요금입니까?

+0

아직 파일에 로깅하고있는 경우'vector'에도 로그인해야하는 이유는 무엇입니까? 당신의 코드는'vector'도 읽어야합니까? – iammilind

+0

사용자가 위에서 언급 한 매개 변수를 기반으로 로그 데이터를 요청하면 로그 정보를 벡터에 저장해야합니다. 서버가 데이터를 기록하고 클라이언트가 요청한 클라이언트 서버 프로그램. –

답변

1

이중 큐를 사용하여 deque를 처리 할 수 ​​있습니다. 벡터와 같지만 양 끝에서 요소를 추가/제거 할 수 있습니다.

+0

이 경우 처음에 요소를 추가/제거하려는 이유가 무엇입니까? – Gorpik

+0

요소는 10MB 크기에 도달하면 제거해야합니다. 한계에 도달하면 마지막으로 추가 된 메시지가 제거됩니다. –

+0

이벤트는 한쪽 끝에 추가되고 다른 쪽에서 제거됩니다. 이전 이벤트를 덮어 쓸 위치를 알려주는 포인터와 벡터를 사용하여 동일한 작업을 수행 할 수 있지만 양 큐는 사용자를 대신합니다. – Adam

1

나는 로깅 라이브러리를 많이 사용하기 때문에 먼저 라이브러리를 사용하겠다고 말하면서 더 나은 작업을 수행 할 것이라고 확신한다 (예 : log4cxx). 이 일을 스스로 고집하는 경우 벡터는 적절한 메커니즘이지만 사용자 요청에 따라 데이터를 수동으로 정렬해야합니다. 또 다른 아이디어는 sqllite를 사용하여 데이터 정렬 및 필터링 저장을 관리하게하는 것입니다.

+0

log4cxx를 의미합니까? log4cpp 라이브러리는 2007 년에 개발이 중단 된 것 같습니다. – vividos

+0

예. 나는 실제 이름을 기억할 수 없지만 log4cxx는 아파치 프로젝트입니다. – rerun

+0

log4cxx를 사용하지만 file.does log4cxx 지원 필터링의 정보를 기록하는 데만 사용됩니다. –

0

실제 응답은 사용 패턴과 인터페이스에 따라 크게 달라집니다. 그래픽 UI를 사용하는 경우 해당 기능을 구현하는 위젯 (이미 다른 열을 기준으로 정렬하고 필터링 할 수있는 기능)이 이미 있습니다. UI 외부에서이를 실제로 구현하려는 경우 사용 패턴에 따라 달라지며 사용자가 다른보기보다 특정보기를 원할 것인가? 그녀는 필터링이나 정렬 만 필요합니까?

이 대부분의 경우에 사용되는 데이터를 하나의보기, 당신은 내가 요소의 std::vector 또는 std::deque을 유지하는 것, 다른 순서를 몇 번 보여줄 필요하고, remove_copy_if 때와 필터링하는 경우 필요합니다. 다른 정렬이 필요한 경우, 을 복사하고 정렬하여 로그에 요소를 계속 추가하려면 시간 기반으로 다시 정렬하지 않아도됩니다. 응용 프로그램이 사본을 업데이트해야하는 데이터를 계속 밀어 넣는 지 확인하십시오 (또는 고정 된보기를 제공하고 주기적으로 작업을 다시 실행하십시오).

나머지보다 훨씬 자주 발생하는 특별한보기가 없다면 위의 구현의 고통을 겪고 싶지 않은 경우에 대비하여 여러 개의 인덱스 컨테이너를 살펴보십시오. 그들은 다른 기준으로 동일한 데이터의 동기화 된보기를 유지합니다. 아마도이 마지막 사례에서 가장 효율적일 것입니다. 지배적 인 견해의 일반적인 경우에는 효율성이 떨어지더라도 일이 더 간단해질 수 있으므로 가치가있을 수 있습니다.

관련 문제