Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python으로 로그 저장 시스템 설계

<시간/>

각 로그에 고유한 ID와 타임스탬프가 포함된 일부 로그가 있다고 가정합니다. Timestamp는 Year:Month:Day:Hour:Minute:Second 형식의 문자열입니다(예:2019:01:01:23:59:59). 모든 도메인은 0으로 채워진 십진수입니다.

우리는 다음 기능을 구현하기 위해 로그 저장 시스템을 설계해야 합니다 -

  • void Put(int id, string timestamp):로그의 고유 ID와 타임스탬프를 가져와 스토리지 시스템에 저장합니다.

  • int[] Retrieve(String start, String end, String granularity):타임스탬프가 시작에서 끝 매개변수 범위 내에 있는 로그의 ID를 반환합니다. 세분성 매개변수는 고려할 시간 수준을 나타냅니다. 예를 들어, start ="2019:01:01:23:59:59", end ="2019:01:02:23:59:59", granularity ="Day"는 다음을 찾아야 함을 의미합니다. 2019년 1월 1일부터 2019년 1월 2일 사이의 로그입니다.

따라서 입력이 다음과 같으면

  • 넣어(1, "2019:01:01:23:59:59");

  • 넣어(2, "2019:01:01:22:59:59");

  • 넣어(3, "2018:01:01:00:00:00");

  • 검색("2018:01:01:01:01:01","2019:01:01:23:00:00","연도");

  • 검색("2018:01:01:01:01:01","2019:01:01:23:00:00","시");

2018:01:01:01부터 2019까지의 모든 로그를 반환해야 하기 때문에 2018년과 2019년 범위 내의 모든 로그와 [1,2] 범위 내의 모든 로그를 반환해야 하므로 출력은 [1,2,3]이 됩니다. 01:01:23, 여기서 로그 3은 범위를 벗어납니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 이니셜라이저를 정의합니다.

  • 로그 :=새 목록

  • 함수 put()을 정의합니다. ID, 타임스탬프가 필요합니다.

  • 로그 끝에 ID, 타임스탬프 삽입

  • retrieve() 함수를 정의합니다. s, e, gra

    가 소요됩니다.
  • index :={'Year':5, 'Month' :8, 'Day' :11, 'Hour' :14, 'Minute' :17, 'Second' :20}[gra]

    와 같은 지도
  • 시작 :=s[인덱스 0에서 인덱스까지]

  • end :=e[인덱스 0에서 인덱스까지]

  • 반환(각 tid에 대한 tid, start <=timestamp[인덱스 0에서 인덱스까지] <=end)인 경우 로그의 타임스탬프

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class LogSystem(object):
   def __init__(self):
      self.logs = []
   def put(self, id, timestamp):
      self.logs.append((id, timestamp))
   def retrieve(self, s, e, gra):
      index = {'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}[gra]
      start = s[:index]
      end = e[:index]
      return (tid for tid, timestamp in self.logs if start <= timestamp[:index] <= end)
ob = LogSystem()
ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")))
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")))

입력

ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")

출력

[1, 2, 3]
[1, 2]