2013-06-27 4 views
1

5 분마다 일부 프로세스의 스냅 샷을 캡처하는 로그 파일을 구분했습니다. 데이터의 일부를 그룹화하고 차트로 만드는 등의 통계 분석을하고 싶습니다. 그 중 일부는 프로세스가 열려있는 시간을 계산하는 것입니다 (즉 총 시간 = 스냅 샷이 x 5로 표시되는 방식). 나는 Python, R, 또는 내가 선택한 언어를 사용할 수있다.스냅 샷 데이터의 데이터 구조 권장

도전은 필드의 없음이 고유한지 전체 라인에 모든 요소가 인 경우에만 일치하므로, (한 일대 다 및 다 대다 관계가있다) 같은.

예를 들어 도움이 될 것입니다.

R123,M,5,... <-- line A 
R190,Z,4,... 
R663,M,8,... 

그런 다음 오분 후, 다음 스냅 샷이 표시됩니다 : 그럼 첫 번째 스냅 샷 로그는 다음과 같습니다 가정 해 봅시다

R123,M,5,... <-- line A 
R123,P,3,... <-- line B 
R955,Z,3,... 

분명히 공정 라인에서 지금은 5 분 이상 동안 주변되었습니다 지금. 그러나 B 행의 첫 번째 필드가 같더라도 다른 필드는 일치하지 않으므로 동일한 프로세스가 아닙니다.

나는이 데이터를 쉽게 사용할 수있는 좋은 데이터 모델을 찾기 위해 노력하고 있습니다.

하나의 옵션은 간단한 빈도 카운트가 될 것입니다 : 모든 전체 라인을 파이썬 dict 또는 펄 해시로 라인을 키로 읽으십시오. 그러면 다음 스냅 샷에 중복 라인이 나타날 때 카운트에 추가됩니다. 예를 들어 Perl : $count{$_}++ foreach @lines;

그러나 전체 데이터 행은 사전 키로 유효할까요? A 연속적으로 3 개의 스냅 샷이 나타나고 나중에 또 다른 날이 다시 나타나는 것처럼 연속되지 않는 인스턴스의 경우 - 시간 기반 쿼리가 여전히 유효하도록 별도의 인스턴스 여야합니다.

처리 방법에 대한 의견이 있으면 &이 데이터를 저장 하시겠습니까?

+2

복제 된 줄을 꺼내지 않는 이유는 무엇입니까? 데이터 프레임 방법을 가진'duplicated' 함수가 있습니다. –

+0

@DWin : 중복 된 선을 계량화해야하기 때문에 프로세스가 지속 된 시간에 대한 주요 데이터는 첫 번째 모습에서 마지막 모습까지 몇 번이나 얼마나 오랫동안보아야 만 알 수 있습니다. – ewall

답변

1

첫 번째 질문은 확실합니다. 적어도 Perl에서는 해시 키로 모든 문자열을 사용할 수 있습니다. 제한 없음.

다음 : 순차적으로 스냅 샷을 평가하십시오. 스냅 샷 1에서 모든 것을 메모리로 읽어 들이고 각 항목에 카운터 0을 할당하십시오. 스냅 샷 2로 진행합니다. 스냅 샷 N에서 다음과 같이 진행합니다. 새로운 내용은 메모리에 저장되고 카운트가 0이 할당됩니다. 이미 메모리에 있던 항목은 증가 된 카운터로 메모리에 보관됩니다. 메모리에 있지만 더 이상 현재 스냅 샷에없는 것은 출력 파일에 저장됩니다.

로그 파일의 크기가 걱정되면 Perl의 해시 대신 SQL 데이터베이스 (예 : DBI를 통한 SQLite)를 사용하십시오.

+0

흠 ... 순차적으로 읽는 것은 각 프로세스에 대한 고유 한 ID를 만들어 연속되지 않은 인스턴스로 문제를 해결하고 관계형 DB에 적합하게 만들 수 있습니다. 확실히 좋은 가능성. – ewall