We’ve updated our privacy policy so that we are compliant with changing global privacy regulations and to provide you with insight into the limited ways in which we use your data. Show
You can read the details below. By accepting, you agree to the updated privacy policy. Thank you! View updated privacy policy We've encountered a problem, please try again. 본 발명과 사상이 일치하는 방법 및 장치는 검색들에 기반한 시계열 데이터를 조직화(organize), 인덱싱(indexing), 검색(search), 및 표시(presentation)하는 능력을 제공한다. 시계열 데이터는 활동의 어떤 형태를 나타내는, 하나 이상의 통상 연속적인 스트림(stream)들에서 일어나는 시간 스탬프된 기록(time stamped record)들의 시퀀스(sequence)들이다. 일 실시예에서, 시계열 데이터는 표준화(normalize)된 시간 스탬프를 가진
불연속적인 이벤트(event)들로 조직화되고, 상기 이벤트들은 시간 및 키워드에 의해 인덱싱된다. 검색은 수신되고 연관 이벤트 정보(relevant event information)는 전체적으로 혹은 부분적으로 시간 인덱싱 메커니즘, 키워드 인덱싱 메커니즘 또는 상기 검색 시간에 계산되는 통계적 인덱스들에 기반하여 회수(retrieve)된다. 시계열 데이터, 스탬프 Description시계열 검색 엔진{TIME SERIES SEARCH ENGINE} 본 발명은 정보 조직화, 검색(search), 및 회수(retrieve)에 관한 것으로, 보다 자세하게는 시계열 데이터 조직화, 검색, 및 회수에 관한 것이다. 시계열 데이터는 불연속적인 이벤트(event)들로 이루어진 활동의 어떤 형태를 나타내는, 하나 이상의 통상 연속적인 스트림(stream)들에서 일어나는 시간 스탬프된 기록(time stamped record)들의 시퀀스(sequence)들이다. 예로는 정보 처리 로그(log), 시장 거래(market transaction) 및, 실시간 모니터[공급망 관리(supply chain), 군사 작전망(military operation network), 또는 보안 시스템]로부터의 센서 데이터가 있다. 연관된 검색 결과를 인덱싱, 검색, 및 표시하는 능력은 방대한 양의 시계열 데이터를 내보내는 시스템들을 이해하고 그 시스템들과 함께 작업하는데 있어서 중요하다. 현존하는 방대한 규모의 검색 엔진[예컨대, 구글(Google) 및 야후(Yahoo) 웹 검색]들은 시간에 덜 민감한 형태의 데이터의 요구를 처리하도록 설계된다. 또한, 데이터의 단 하나의 상태만이 인덱스 저장소(index repository)(예컨대, 웹 검색 인덱스내의 URL, 소비자 데이터베이스내의 기록, 또는 파일 시스템의 일부분으로서 의 문서)에 저장될 필요가 있다는 가정하에 구축된다. 몇 일 전에 인덱싱된 웹사이트로부터의 URL 모음, 어제 영업 종료부터의 소비자 기록, 또는 문서의 특정 버전과 같은 정보 검색은 일반적으로 키워드 검색어에 기반한 정보의 단일 카피에 의해 회수된다. 대조적으로, 도 1에 도시한 바와 같이, 전형적인 정보 처리 환경으로부터의 시계열 데이터의 예를 살펴본다. 방화벽, 라우터(router), 웹 서버, 어플리케이션 서버 및 데이터베이스는 초당 수백 또는 수천 횟수로 일어나는 이벤트들의 형태인 데이터 스트림을 지속적으로 생성한다. 이력 데이터 값(historical data value) 및 시간에 따른 데이터 작용 패턴은 대체로 현재 데이터 값만큼이나 중요하다. 현존하는 검색 방법들은 대체로 시간 기반(time-based) 인덱싱, 검색 또는 결과의 표시의 연관성에 대한 인식이 거의 없고, 시계열 데이터의 요구에 부합하지 않는다. 가장 높은 연관 점수(relevance score)를 가진 문서를 회수하는 것이 가장 효율적이도록 그들의 인덱스들을 조직화하는 전문(full-text) 검색 엔진과 비교할 때, 시계열 데이터를 검색하는 엔진은 바람직하게는 비교적 덜 최근의 시간 범위를 포함한 다양한 시간 범위에의 접근이 효율적이도록 인덱스를 조직화한다. 예를 들어, 많은 현대 검색 엔진과 달리, 시계열 검색 엔진은 특정 키워드에 대한 상위 1000개의 결과를 캐시(cache)하는데 있어서, 효과가 상당히 떨어진다. 반면에, 시계열 데이터의 반복 특성을 고려하면, 인덱스 구조의 효율성 및 검색 최적화를 위한 기회가 있다. 하지만, 시계열 데이터의 인덱싱은, 데이터가 다양하고 상이한 출처로부터 비동시적으로, 비순차적으로 수집될 수 있으므로 보다 복잡하다. 하나의 출처로부터의 데이터 스트림은 수초가 지난 것일 수 있고, 다른 출처로부터의 데이터는 또 다른 출처들에 삽입될 수 있거나, 또 다른 출처보다 수일, 수주, 또는 수개월 더 지난 것일 수 있다. 게다가, 데이터 출처 시간은 서로 동조하지 않을 것이므로, 인덱싱 후에 시간 오프셋의 조정이 필요하다. 또한, 시간 스탬프(time stamp)는 거의 무한한 형식(format)을 가질 수 있고, 이는 확인(identification) 및 해석(interpretation)을 어렵게 한다. 데이터 내의 시간 스탬프는 위치, 형식, 시간 단위(temporal granularity)[예컨대, 일, 시, 분, 초, 서브세컨드(subsecond)]에 대한 기준 없이는 위치를 찾기 어려울 수 있다. 시계열 데이터의 검색은 일반적으로 검색 결과를 지정된 시간 윈도우 및 빈도수, 도착 간격 시간(inter-arrival time)의 분포, 및 결과의 발생 총수 또는 클래스와 같은 다른 시간 기반 메타데이터(metadata)로 효율적으로 제한하는 능력을 포함한다. 키워드 기반(keyword-based) 검색은 대체로 중요도에 있어서는 떨어지나, 시간 기반 검색 메커니즘과 결합될 경우 강력할 수 있다. 시계열 데이터의 검색은 검색을 표시하는데 전적으로 새로운 방식을 필요로 한다. 현재 검색 엔진은 사용자들에게 가장 빈번히 발생하는 데이터 내의 검색어 또는 키워드에 의해 검색을 행하도록 하고, 대체로 시간 기반 검색에 대한 인식이 거의 없다. 시계열 데이터의 방대한 양과 반복 특성을 고려하면, 사용자들은 대개 시간 기반 검색 메커니즘을 이용하여 잠재적인 검색 결과의 세트(set)를 제한하면서 시작한 다음, 상기 결과의 검토를 통해, 그들의 검색 파라미터(parameter)들과 합칠 하나 이상의 키워드를 선택할 필요가 있다. 시간 프레임(TimeFrame)들 및 빈도수, 분포, 및 발생 가 능성과 같은 시간 기반 메타데이터는 시계열 데이터를 검색할 때 특히 중요하지만, 현재의 검색 엔진 접근법으로는 획득하기 어렵다. 예를 들면, 뉴스 사이트의 웹 기반의 검색 엔진을 통해 2005년 5월 10일 오전 10시 및 오전 11시 사이의 시간에 "우주 왕복선(Space Shuttle)"에 관련된 모든 기사 또는 같은 날 시간당 "우주 왕복선" 기사들의 평균 숫자를 찾아보자. 데이터가 언제 생겼는지에 초점을 맞추면, 시간 기반 검색 메커니즘 및 질문(query)은 시계열 데이터를 검색하는데 유용할 수 있다. 시간 기반 검색의 몇몇 현존하는 제한된 어플리케이션들이 특정 작은 규모의 도메인(domain) 내에 존재한다. 예를 들면, 요즘 이메일(e-mail) 검색은 많은 주류 이메일 프로그램 및 웹 기반 이메일 서비스 내에서 가능하다. 하지만, 검색은 전, 후, 또는 시간 범위와 같은 간단한 시간 함수로 제한될 수 있다. 데이터 세트는 일반적으로 작은 규모이고 단일 도메인으로부터 매우 조직화 되어 있다. 그리고, 보통 새로운 데이터를 끼워 넣기 위하여 전체 인덱스를 새로 구축할 필요가 있기 때문에, 실시간 인덱싱 메커니즘이 추가된다. 또한, 시계열 데이터의 순환적인 특성은 유용한 결과를 표시하는데 있어서 도전 과제이다. 종래 검색 엔진들은 대체로 대중성(popularity) 및 공통성(commonality)에 의하여 순위를 매겨 결과를 표시하였다. 이와 대조적으로, 시계열 데이터에 있어서, 데이터 패턴 및 드문 발생, 또는 드문 결과에 초점을 맞추는 능력은 중요할 것이다. 유용하게 하기 위해서, 시계열 검색 결과는 바람직하게는 시간 기반 패턴 및 작용에 의해 조직화되고 표시되는 능력을 가지고 있어야 한다. 사용자들은 다양한 수준의 단위(granularity)(예컨대, 초, 분, 시, 일)와 분포(예컨대, 예기치 못한 발생 또는 가장 드문 발생)를 가진 결과를 보는 능력, 및 결과 세트에 걸쳐서 패턴과 작용을 반영하는 요약 정보를 보는 능력이 필요하다. 반면에, 현존하는 검색 엔진들은 대체로 가장 대중적인 결과를 제일 먼저 표시하기 위하여 키워드 밀도, 사용 통계, 또는 문서 및 웹 페이지와 연결된 링크(link)들을 통해서 텍스트 결과를 반환한다. 시계열 검색 엔진의 한 종류에서, 엔진이 실시간으로 인덱싱하고 데이터를 검색하도록 하는 것이 바람직하다. 데이터가 수집되는 시간 및 검색된 것을 입수할 수 있는 시간 사이의 어떠한 지연도 최소화 되어야 한다. 크고 자주 변경되는 데이터 세트들에 대한 실시간 동작을 하도록 하는 것은, 빠른 데이터 입수 가능성에 대한 작은 검색 응답 시간을 갖도록 최적화된 종래의 방대한 규모의 검색 엔진들로는 어려울 수 있다. 예를 들면, 웹 및 문서 검색 엔진들은 대체로 근원(seed)으로부터 시작하여, 일정 시간이 경과하거나 수집 크기(collection size)에 도달할 때까지 데이터를 수집해 나간다. 수집의 스냅샷(snapshot)은 저장되며, 인덱스는 구축되고, 최적화되며, 저장된다. 그리고 나서, 자주 접속된 인덱스들은 검색 응답 시간을 최적화하기 위하여 캐싱 메커니즘(cache mechanism) 내로 로드된다. 이러한 과정은 데이터 세트의 크기 및 인덱스의 밀도에 의존하여 완료되는데 수 시간 또는 심지어 수 일이 걸릴 수 있다. 이를 데이터가 수집되는 시점 및 검색된 것을 입수할 수 있는 시점 사이의 시간을 최소화하도록 설계된 실시간 시계열 인덱싱 메커니즘과 대조하자. 데이터를 수집하는 중에, 인덱스 구조를 재구축하지 않고 인덱스들 을 삽입하고 삭제하고 재조직화하는 능력은, 이러한 종류의 시계열 검색 엔진에 있어서, 시계열 데이터를 인덱싱하고 실시간 검색 결과를 제공하는데 필수적이다. 시계열에 초점을 맞춘 다른 소프트웨어[예컨대, 소밀(Sawmill) 또는 구글의 소잴(Sawzall)과 같은 로그 이벤트 분석기]는 실시간 분석 능력을 제공할 수 있으나, 그 자체는 검색 엔진이 아니다. 왜냐하면, 그들은 애드혹(ad hoc) 검색을 제공하지 않기 때문이다. 어떠한 분석 전이라도 리포트는 정의되고 구축되어야 한다. 게다가, 일반적인 키워드 기반 또는 시간 기반 검색 메커니즘을 이용할 수 없다. 다른 스트리밍 데이터(streaming data) 연구 프로젝트들[스탠포드 스트림즈 프로젝트(Stanford Streams project) 및 스트림베이스 시스템즈(StreamBase Systems)와 같은 회사의 제품들을 포함한다]은 또한 스트리밍 데이터의 분석 및 감시를 제공하지만, 데이터의 지속성, 인덱스, 시간 기반 또는 키워드 기반의 검색을 제공하지 않는다. 따라서, 시계열 데이터로부터 인덱싱하고, 검색하며, 검색 결과를 표시하기 위한 다른 기술이 개발될 필요가 있다. 본 발명과 사상이 일치하는 방법 및 장치는 시계열 검색 엔진(time series search engine, TSSE)을 이용하여 시계열 데이터를 인덱싱, 검색, 및 회수(retrieve)하도록 함으로써, 이러한 필요들 또는 다른 필요들을 다룬다. 일 실시예에 있어서, TSSE의 일 측면은 인덱싱, 검색 및/또는 검색 결과를 표시하기 위한 주된 메커니즘으로서의 시간의 활용이다. 시간 기반 검색 메커니즘에 특화된 시계열 검색 언어(time series search language, TSSL)는 인간이 읽을 수 있는 형태로 검색을 표현하는데 사용되고, 결과는 시계열 데이터에 특화된 적절한 알고리즘을 사용하여 표시된다. 검색 표현 및 결과 표시는, 복수의 상이한 출처로부터의 시간 윈도우, 빈도수, 분포, 발생 패턴, 및 연관(related) 시계열 데이터 포인트를 포함하지만 그것에 제한되지는 않는 시계열 데이터를 검색하는데 중요한 주요 개념에 기반한다. 본 발명의 일 측면에 있어서, 시계열 데이터의 복수의 출처는 검색을 위하여 조직화되고 인덱싱되고, 그 결과를 검색한 사용자 또는 기기 상에 표시된다. 다른 측면에 있어서, 시계열 검색 엔진(TSSE)은 (1) 시간 스탬프 프로세스; (2) 인덱싱 프로세스; (3) 검색 프로세스; (4) 결과 표시 프로세스의 네 부분을 포함한다. 본 발명의 일 측면에 있어서, 컴퓨터로 구현된 데이터의 시간 검색 방법은 하기의 단계를 포함한다. 시계열 데이터 스트림(time series data stream)들이 수신된다. 시계열 데이터 스트림들의 한 예는 서버 로그(log)들 및 다른 형태들의 기기 데이터(즉, 기기에 의해 발생되는 데이터)를 포함한다. 시계열 데이터 스트림들은 시간 스탬프된 이벤트들을 생성하기 위하여 시간 스탬프된다. 시간 스탬프된 이벤트들은 검색 요구를 수행하는데 사용되는, 시간 버킷된(time bucketed) 인덱스들을 생성하기 위하여 시간 인덱싱된다. 시간 버킷된 인덱스들을 검색함으로써, 적어도 부분적으로, 시계열 검색 요구들이 수행된다. 특정 구현예에 있어서, 시계열 데이터 스트림들을 시간 스탬프하는 단계는 시계열 데이터 스트림들을 이벤트들 내로 모으는 단계 및 이벤트들을 시간 스탬프하는 단계를 포함한다. 예를 들면, 이벤트는 도메인에 의해 분류된 다음, 그들의 도메인에 따라 시간 스탬프될 수 있다. 일 접근법에서, 알려진 시간 스탬프 형식의 도메인으로 분류된 이벤트에 있어서, 시간 스탬프가 이벤트로부터 추출된다. 하지만, 알려진 시간 스탬프 형식의 도메인으로 분류되지 않은 이벤트에 있어서, 시간 스탬프가 삽입된다. 본 발명의 다른 측면에 있어서, 시간 버킷된 인덱스들은, 시간 스탬프된 이벤트들을 그것들의 시간 스탬프에 따라 시간 버킷들에 할당함으로써 생성된다. 상이한 버킷 방법들이 사용될 수 있다. 예를 들면, 시간 버킷들은 모두 동일한 지속 시간(time duration)을 가질 수도 있고, 상이한 지속 시간을 가질 수도 있다. 게다가 시간 버킷들은 지연 할당 방법을 사용함으로써 예시(instantiate)될 수도 있다. 시간 스탬프된 이벤트들은 세그먼트(segment)될 수 있고, 세그먼트들은 시간 버킷 인덱스들을 결정하는데 사용된다. 핫(hot) 인덱싱, 웜(warm) 인덱싱 및 이론적(speculative) 인덱싱을 포함한, 다양한 형태의 인덱싱이 사용될 수도 있다. 시간 버킷 인덱스들의 생성은 시계열 검색의 수행을 용이하게 한다. 일 접근법에서, 시계열 검색 요구는 영향을 받은(affected) 시간 버킷들을 위해 상이한 서브-검색(sub-search)들로 나누어 지고, 각 서브-검색은 대응하는 시간 버킷 인덱스에 걸쳐서 수행된다. 본 발명의 다른 측면들은 상기 기술한 방법들 및 전술한 모든 응용들에 따른 소프트웨어, 컴퓨터 시스템들 및 다른 장치들을 포함한다. 본 발명의 다른 이점 및 특징들은, 첨부한 도면을 참조하여, 하기와 같은 본 발명의 상세한 설명 및 첨부된 청구항에 의해 보다 명확해질 것이다. 도 1은 종래 기술에 따른 시계열 데이터 환경을 도시한 도면이다. 도 2는 본 발명에 따른 시계열 검색 엔진을 도시한 도면이다. 도 3은 도 2의 시계열 검색 엔진에 사용되기 적합한 시간 스탬프 프로세스를 도시한 도면이다. 도 4는 도 3의 시간 스탬프 과정에 사용되기 적합한 이벤트 집합 프로세스를 도시한 도면이다. 도 5는 도 2의 시계열 검색 엔진에 사용되기 적합한 인덱싱 프로세스를 도시한 도면이다. 도 6은 도 2의 시계열 검색 엔진에 사용되기 적합한 검색 프로세스를 도시한 도면이다. 도 7은 도 2의 시계열 검색 엔진에 사용되기 적합한 결과 표시 프로세스를 도시한 도면이다. 도면들은 본 발명의 실시예들을 단지 예시적으로 묘사한다. 본 명세서에 기술된 본 발명의 원리로부터 벗어나지 않으면서, 본 명세서에서 설명된 구조 및 방법의 다른 실시예가 채용될 수 있다는 것은 다음의 설명으로부터 당업자에게 용이하게 이해될 것이다. 도 1은 복수의 도메인들에 걸친 잠재적으로 많은 수의 데이터 출처(source) 및 시계열 데이터(time series data) 스트림(stream)들을 가진 시계열 데이터 환경의 여러 가지 예들을 설명한다. 이 도면에서, 첫 번째 그림은 웹 서버, 어플리케이션 서버 및 서버 로그 형태의 데이터베이스로부터의 시계열 데이터에 대한 정보 처리 환경을 나타낸다. 두 번째 그림은 복수의 구매자들 및 판매자들간의 거래 및 둘 이상의 시장들 간의 거래에 대한 전형적인 시장-거래(market-trading) 환경이다. 시계열 데이터는 예로서, 목적 또는 거래 또는 거래의 마지막 결제를 나타내는 거래 기록의 형태로 발생된다. 세 번째 그림에서, 기록된 측정의 형태인 시계열 데이터를 제공하는 복수의 센서들을 포함하는 실시간 모니터링 환경이 묘사된다. 이러한 세가지 환경 모두는 시계열 검색 엔진(time series search engine, TSSE)의 가능한 적용예이다. 본 발명의 측면들은 도 1의 첫 번째 그림의 정보 처리 환경에 관하여 기술할 것이다. 하지만 본 발명은 도 1에 도시된 다른 환경들을 포함하는 다른 시계열 데이터 환경 및 응용에도 사용될 수 있다. 도 2는 TSSE를 설계하기 위한 일 접근법(200)을 설명한다. 시계열 데이터 스트림들(205)은 동시에 또는 비동시에 복수의 출처로부터 도달하고, 복수의 검색들(255)은 사용자들 및/또는 다른 시스템들에 의해 표현되며, 결과 세트들(275)은 다양한 메커니즘들, 예를 들면, 어플리케이션 프로그래밍 인터페이스 및 웹 기반의 사용자 인터페이스 등을 통해 표시된다. 시계열 데이터 스트림들(205)의 TSSE(200)에의 도착은 TSSE가 그것들을 직접 모으도록 하거나, 사용자-공급된(user-supplied) 스크립트(script)가 그것들을 수집하고, 전(前)처리(preprocess)하며, 디폴트 TSSE 수집 포인트(default TSSE collection point)로 전하도록 함으로써, 이루어질 수 있다. 이러한 설계는 바람직하게는 데이터가 늦게, 그리고 일시적으로 비순차적으로 도착하는 것을 수용한다. 현재, 시계열 데이터의 대부분의 출처는 데이터의 정교한 처리를 위해 설계되지 않았다. 그러므로, TSSE는 대체로 원형에 가까운 원형(raw) 시계열 데이터들을 수집하거나 공급될 것이다. TSSE는 그것이 시계열 데이터에 접속하는 한 다양한 위치에 자리잡을 수 있다. 예를 들면, TSSE의 한 사본(copy)은 단일 중앙 컴퓨터 상에서 구동되거나, 복수의 사본들은 각 사본이 동일 시계열 데이터 스트림들 또는 상이한 시계열 데이터 스트림들 상에서 구동되는 피어-투-피어 네트워크(peer-to-peer) 구조 내에서 구성될 수 있다. 도 2는 시간 스탬프 프로세스(210), 인덱싱 프로세스(220), 검색 프로세스(230) 및 표시 프로세스(240)의 네 가지 주요 프로세스를 포함하는 TSSE(200)의 예시를 묘사한다. 시간 스탬프 프로세스(210)는 원형 시계열 데이터(205)를 시간 스탬프된 사건들(215)로 변환시키고, 인덱싱 프로세스(220)로 공급한다. 우리의 정보 처리 예를 따르면, 복수의 웹 서버, 어플리케이션 서버 및 데이터베이스로부터의 원형 로그들(205)은 다양한 로그 형식들 내에서 개별적인 이벤트들(215)을 확인하고 시간 및 다른 이벤트 데이터를 적절히 추출하기 위하여, 시간 스탬프 프로세 스(210)에 의해 처리될 수 있다. 이벤트 데이터(215)는 이벤트들의 시간 버킷된 인덱스들(225)을 구축하기 위해 인덱싱 프로세스(220)에서 사용된다. 이러한 인덱스들(225)은, 사용자들 또는 시스템들로부터 검색들(255)을 수행하고, 검색들을 분석하며 이 후, 인덱스들의 세트에 걸쳐 검색을 수행하는 검색 프로세스(230)에 의해 이용된다. 예를 들면, 사용자는 특정 웹 서버 및 특정 어플리케이션 서버로부터 최근 한 시간 내에 발생하고 특정 IP 주소를 가진 모든 이벤트들을 찾길 원할 수 있다. 게다가, 검색 프로세스(230)는 반복적, 일시적 데이터를 통한 검색에 유용한 시간 기반 및 통계적 요약(statistical summary) 인덱스들을 다루기 위해, 검색 시간에 메타 이벤트들(237)의 발생을 초기화하도록 선택할 수 있다. 예를 들면, 메타 이벤트들(237)은 표준(average) 값, 평균(mean) 값 또는 실제 이벤트들의 카운트(count) 수를 나타내거나 작용에 기반을 둔 보다 복잡한 패턴을 나타낼 수 있다. 이러한 경우 사용자는 분당 세 번의 빈도수로 일어나는 모든 이벤트들을 찾는 검색을 원할 수 있다. 완료 후, 검색 프로세스(230)는 선택된 인덱스들(235)로부터, 결과 세트들을 병합하고, 결과들에 순위를 매기며, 표시를 위해 API 또는 사용자 인터페이스로 결과들을 공급하는 표시 프로세스(240)로 결과들을 전달한다. TSSE의 예시적 구현예(200)인 도 2에 도시된 프로세스(210)는 시계열 데이터를 스트림한 것을 얻고, 상기 스트림 내에서 개별적인 이벤트들을 확인하며, 시간 스탬프들을 개별적인 이벤트에 할당하는 것이다. 예시적인 시간 스탬프 프로세스(210)의 블록도는 도 3에 도시되고, 이벤트 수집(aggregation) 단계(310), 도메인 확인 단계(320), 시간 추출 단계(330), 및 시간 삽입 단계(340)를 포함하는 복수의 단계를 포함한다. 시계열 데이터 스트림들(205)은 시간 스탬프 프로세스(210)의 입력으로서 수신되고, 그 다음 개별적인 시간 스탬프된 이벤트들(215)로 진행된다. 도 3의 시간 스탬프 프로세스(210)의 단계(310)는 시계열 데이터 스트림들(205)을 개별적인 이벤트들(315)로 모은다. 우리의 정보 처리 예에서, 웹 서버 시계열 데이터 스트림들은 이벤트당 단일 행(line)을 가지고, 확인하기 용이할 수 있다. 하지만, 어플리케이션 서버 시계열 데이터 스트림들은 많은 수의 행들을 가지는 단일 이벤트들을 포함할 수 있고, 이는 스트림 내의 개별적인 이벤트들의 확인을 어렵게 한다. 일 실시예에 있어서, 이벤트 수집(310)은 특징 추출(feature extraction)[예컨대, 주요 구두점(punctuation), 주요 단어들, 여백, 및 단락 문자들(breaking characters)] 및 이벤트들의 경계가 어디인지를 결정하는 기기 학습(machine learning) 알고리즘을 이용한다. 도 4는 도 3의 시간 스탬프 과정을 이용하는데 적합한 이벤트 수집 과정의 도면이다. 우리의 정보 처리 예[데이터가 기기 데이터(205) 또는 MD(205)로 여겨질 것 임]에서의 반복적이나 동적인 시계열 데이터(205)의 특성을 고려하면, 효과적인 수집 프로세스(310)(도 4에서 도시된 바와 같이)는 바람직하게는 데이터 형식 및 구조를 자동으로 학습할 것이다. 일 실시예에서, 학습은 MD(205)의 출처에 기반한 상이한 도메인들로 분리된다. 도메인들은 로그 파일들, 메시지 버스(bus) 트래픽 및 네트워크 운영 데이터와 같은 일반적인 시스템 형태들이거나, 또는 주어진 어플리케이션 또는 기술의 출력 즉, 센드메일 로깅 데이터(Sendmail logging data), 오라클 데이터베이스 회계 데이터(Oracle database audit data) 및 J2EE 메시징(messaging)과 같은 특정 형태들일 수 있다. 이러한 예시적인 이벤트 수집 프로세스(310)에서, MD의 주어진 출처에 대한 도메인은 도메인 특정 조직화 방법(domain specific organization method)이 적용될 수 있도록 확인된다(415). 도메인들은 학습 프로세스를 통해 결정된다. 학습 프로세스는 잘 알려진 도메인들로부터의 MD의 모음을 입력으로서 이용하고, 각 도메인에 대한 출처 서명(source signature)(412)을 생성한다. 일 실시예에서, 출처 서명(412)은 구두점 문자들을 그들의 빈도수에 매핑(mapping)한 해시 테이블(hash table)을 생성함으로써 MD(205)의 대표 샘플들로부터 생성된다. 이러한 특정 실시예에서, 토큰(token)들 및 토큰 값(token value)들은 MD 모음 내에서 변할 수 있고, 구두점의 빈도수에 의해 생성되는 서명(412)은 특정 도메인 내에서 매우 안정적이고, 신뢰성이 높다. 다른 실시예는 한 행 상에서 첫 번째 구두점 문자, 또는 한 행 상에서 첫 번째 대문자로 시작되는(capitalized) 용어의 빈도수와 같은 구두점 및 토큰의 기능을 이용할 수 있다. 출처 서명(412)이 크고 읽기 어려울 수 있다 는 것을 고려하면, 서명들은, 기기로부터 생성되거나 인간으로부터 할당된 숫자 또는 텍스트의 형태인 대응 라벨(corresponding label)을 가질 수 있다. 예를 들면, 아파치(Apache) 웹 서버 로그를 위한 출처 서명(412)은 프로그램적으로 라벨 "205"가 할당되거나, 사용자가 라벨 "아파치 서버 로그(Apache Server Log)"를 할당할 수 있다. 일 실시예에서, 클러스터링(clustering)은 수집된 MD(205)를 그들의 출처 서명(412)에 따라 도메인들로 분류하는데(415) 사용된다. MD(205)의 모음이 마주치게 되면서, 각 모음의 서명은 최근접-이웃(nearest-neighbor) 검색을 수행함으로써, 알려진 출처 서명들(412)의 세트와 매치(match)된다. 최근접 매칭(matching) 서명(412)의 거리가 임계값(threshold) 내인 경우, 최근접 매칭 서명(420)의 도메인은 출처의 도메인으로 추정된다. 최적 매치를 찾을 수 없는 경우, 새로운 출처 서명(412)이 샘플 서명 및 생성된 새로운 출처 도메인으로부터 생성될 수 있다. 또는, 디폴트(default) 출처 도메인이 사용될 수 있다. 일 실시예에서, 두 서명 사이의 거리는 두 서명들의 속성(attribute)들의 연합(union)에 걸쳐 되풀이함으로써, 총 서명 거리는 각 속성에 대한 거리의 평균으로 계산된다. 각 속성 A에 있어서, 서명1 및 서명2 상의 A의 값 즉, V1 및 V2는 비교되고, 거리가 계산된다. 속성 A에 대한 거리는 (V1-V2)*IDF의 제곱이다. 여기서 IDF는 log(N/|A|), N은 서명의 수, |A|는 속성 A를 가진 서명의 수이다. I.A.2 출처 확인 - 텍스트/ 이진으로 분류어떤 MD(205) 출처들은 텍스트가 아니거나 또는 이진(binary)이고, 이진 MD 를 텍스트 형태로 변환하는 알려진 프로세스를 이용하지 않는 한 쉽게 처리 될 수 없다. 출처를 텍스트 또는 이진으로 분류하기 위하여 샘플 MD 모음이 분석된다. 또한, 텍스트 MD는 메모리 덤프(memory dump)와 같은 임베디드(embedded) 이진 MD를 가질 수 있고, 분류는 바람직하게는 그것들만으로 확인할 수 있다. 일 실시예에서, 텍스트/이진 분류는 다음과 같이 진행된다. 샘플은 데이터 행들의 세트이며, 행은 새로운 행들 사이의 데이터(즉, '\n'), 캐리지-리턴(carriage-return)(즉, '\r'), 또는 그들의 조합(즉, '\r\n')으로 정의된다. 각 행에 있어서, 행의 길이가 2k 문자와 같은 어떤 큰 임계값보다 클 경우 또는 행이 영(0)의 ASCII 값을 가진 문자를 포함할 경우, 이진으로 보이는(Binary-looking) 행들의 수가 증가하게 된다. 그렇지 않으면, 행의 길이가 대부분의 텍스트 행들이 그보다 이하에 있을 것으로 기대되는, 예컨대, 256 문자 같은 길이보다 짧은 경우 텍스트로 보이는(Text-looking) 행들의 수가 증가하게 된다. 만약 텍스트로 보이는 행들의 수가 이진으로 보이는 행들의 수의 두 배일 경우(정황에 따라 다른 비율이 사용될 수 있음), 출처는 텍스트로 분류된다. 그렇지 않으면, 출처는 이진으로 분류된다. I.A.3 원형 이벤트 내로 기기 데이터의 수집MD 모음에 대한 출처 서명(420)이 확인되면(415) 대응 수집 법칙은 MD 모음에 적용된다(425). 수집 법칙은, MD 모음 내의 이벤트들의 경계를 확인함으로써 특정 도메인으로부터의 MD(205)가 이벤트 데이터(315) 내로 조직화되는 방법, 예를 들면, 어떻게 불연속적인 이벤트의 시작과 끝을 찾아서 그 위치를 정하는지 등을 기술한다. 일 실시예에서, 수집 방법(425)은 선행 지식 없이, MD(205)의 샘플로부 터 복수의 행들을 함께 그룹을 지음으로써 학습한다. 종종 MD(205)는, 어떻게 해서든지 논리적으로 함께 그룹 지어진 행 길이의 일 내지 수백 행들로부터 어디든지 있는 이벤트(315)들을 포함한다. MD 모음은, 수집을 수행하기에 앞서, 단일-행(single-line) 형태(즉, 당일-행 이벤트를 포함함) 또는 복수-행(multiple-line) 형태(즉, 복수-행 이벤트를 포함할 수 있음)라고 선험적으로 알 수 있거나, 분류될 수 있다. 단일-행 형태로 분류된 MD 모음에 있어서, 수집(425)은 간단하다. 단일-행 형태 MD 모음은 각 행들 상에서 분리된 이벤트로 브레이크(break)된다. 복수-행 형태 MD 모음은 수집을 위하여 처리된다(425). 일 실시예에서, MD 모음은 1) 스페이스(space)로 시작하거나 비어 있는 행들의 비율이 높은 경우이거나(예컨대, 5%를 넘는 행들이 스페이스로 시작하거나 비어있는 경우), 2) 첫번째 N 구두점 문자 내에 너무 많은 다양한 구두점 문자가 있는 경우, 복수-행 형태로 분류된다. 예를 들면, 각 행 상에서 설립된 첫번째 세 개의 구두점 문자의 세트가 각 행이 다섯 패턴 이상(예컨대, ':::', '!:!', ',,,', ':..', '()*')을 갖는 경우, 모음은 복수-행으로 분류된다. 수집 방법(425)의 다른 측면은, MD의 샘플을 분석함으로써, 학습하고, 이벤트 간의 경계인 행간의 브레이크(break)를 구성하는 법칙에 따라 분류하는 능력이다. 예를 들면, 일 실시예에서, 수집 방법(425)은. 두 행들이 함께 소속되었는지, 두 행들이 독립적인지 빠르게 습득하기 위해서, 통계적으로 비슷한 구조(예컨대, 화이트 스페이스(white space)의 사용, 들여쓰기(indentation), 및 시간-스탬프)를 찾으면서 모든 두-행 쌍들을 비교한다. 일 실시예에서 수집(425)은 다음과 같이 진 행된다. 각 행에 있어서, 먼저 행이 시간 스탬프와 함께 시작하는지를 검사한다. 함께 시작한다면, 브레이크한다. 대체로, 시간-스탬프로 시작하는 행들은 새로운 이벤트의 시작이다. 시간-스탬프로 시작하지 않는 행들에 있어서, MD 샘플내의 총 쌍들의 비율로서, 행들의 쌍이 얼마나 자주 발생하는지를 보기 위해 차례로, 현재의 행을 앞의 행과 결합한다. 행 서명들은 행들의 장소(place)에서 사용된다. 여기서, 행 서명은 간단한 수 또는 텍스트 변경에 영향을 받지 않는 행의 보다 안정적인 버전이다. 이 실시예에서, 서명들은 행들을 화이트 스페이스, 행 상의 모든 구두점, 및 행 상의 첫번째 단어의 집결인 스트링(string)으로 변환함으로써 생성될 수 있다. 행 "10:29:03 Host 191.168.0.1 rebooting:normally"는 "::..:Host."로 변환될 수 있다. 이제, 현재의 행 서명은 이전의 행 서명과 연결될 수 있고(즉, 서명1은 서명2와 연결될 수 있고), 브레이크 법칙의 테이블에 결합된 키(combined key)로서 사용될 수 있다. 브레이크 법칙 테이블은 두 행 간에 '브레이크'가 있어야 하는지 여부(즉, 그것들이 상이한 이벤트들의 일부인지 여부)를 결정하는 브레이크 법칙에 대해 결합된 키를 매핑한다. 브레이크 법칙은 신뢰 수준(confidence level)을 가질 수 있고, 보다 신뢰 가는 법칙이 덜 신뢰 가는 법칙보다 우위에 있을 수 있다. 브레이크 법칙은 두 행의 동시 발생(co-occurrence) 데이터와 그것들의 서명들이 인접하여 발생하는 시간이 몇 퍼센트인지를 분석함으로써, 자동으로 생성될 수 있다. 만일 두 행의 서명들이 높은 확률로 동시 발생한다면, 새로운 법칙은 그들 사이에 브레이크를 제시하지 않을 것이다. 또는, 만일 그것들이 낮은 확률로 동시 발생한 다면, 새로운 법칙은 그들 사이에 브레이크를 제시할 것이다. 예를 들면, 행 서명 A에 뒤이어 행 서명 B가 시간 A의 20%이상으로 보여진다면, 브레이크 법칙은 그들 사이에 브레이크를 제시하지 않도록 생성될 것이다. 또한, 법칙들은 다른 행 서명들의 앞서는/뒤따른 행 서명들의 원형 숫자에 기반하여 생성될 수 있을 것이다. 예를 들면, 행 서명에 말하자면, 10개의 상이한 행 서명들이 뒤를 따른다면, 그들 사이에 브레이크를 제시하도록 법칙을 생성할 것이다. 만약 브레이크 법칙 테이블에 브레이크 법칙이 없다면, 디폴트 작용은 브레이크 하는 것 및 두 행들이 상이한 이벤트로부터 온 것으로 가정할 것이다. 처리 과정은 각 두-행 쌍을 처리하는 단계, 행 서명과 동시 발생 통계를 업데이트하는 단계 및 대응하는 브레이크 법칙들을 적용하고 습득하는 단계로 진행된다. 일정한 시간 간격을 두고, 브레이크 법칙 테이블은 하드 디스크 또는 영구적인 저장장치에 쓰여진다. 일단 들어오는 시계열 스트림(205)이 개별적인 이벤트들(315) 내로 모이면, 이벤트들 및 그들의 이벤트 데이터는 시계열 이벤트 데이터가 알려진 시간 스탬프 형식의 모음 중 하나에 대한 매치(match)를 나타내는 토큰을 포함하는지 아닌지를 결정하는 시간 스탬프 확인 단계(320)에 입력 된다. 포함하고 있다면, 이벤트는 알려진 도메인으로부터의 시간 스탬프를 가지고 있다고 여겨지고, 추출(330)이 수행된다. 그렇지 않다면, 삽입(340)이 수행된다. 이벤트에 대해 알려진 도메인이 확인되는 경우, 이벤트(315)는, 시간 스탬프 가 원형 이벤트 데이터로부터 추출되고 이벤트와 함께 인덱싱 프로세스(220)로 넘어가는 시간 스탬프 추출 단계(330)에 대한 입력으로 여겨지게 된다. 예시적인 실시예에서, 이러한 시간 스탬프 추출(330)은, 뛰어넘은(leap) 초들을 포함하지 않는 유닉스 에폭(Unix epoche)(협정세계시 1970년 1월 1일 0시 0분 0초)으로부터 지난 초의 수를 기록한 시간을 추출하기 위하여, 동적으로 정렬된 리스트로부터의 잠재적인 시간 스탬프 형식 패턴을 반복함으로써 일어난다. 게다가, 실시예는 시간대(time zone) 정보를 고려하고, 시간을 공통 오프셋(common offset)으로 표준화하여야 한다. 성능을 향상시키기 위하여, 이러한 리스트의 정렬은 매치가 발견될 때마다 매칭 패턴이 리스트의 처음으로 이동하는 무브-투-프론트(move-to-front) 알고리즘을 사용하여 결정된다. 이러한 실시예에서, 가장 빈번히 발생하는 패턴들은 가장 일찍 그리고, 가장 자주 검사되어 성능을 향상시킬 것이다. 상기 무브-투-프론트 리스트들은, 출처당(per-source) 기준 상에서 모든 시계열 데이터 출처에 있어서나(단일 출처에서 형식은 거의 비슷할 것이라는 사실을 이용하기 위하여), 또는 어떤 다른 정렬에서나 유지될 수 있다. 이벤트가 알려진 도메인으로부터의 시간 스탬프를 포함하지 않는 경우, 시간 스탬프는 정황에 기반한 이벤트에 할당된다. 일 실시예에서, 시간 스탬프는 동일한 시계열 데이터 스트림으로부터의 바로 직전 및 바로 직후의 이벤트(315)의 시간 스탬프로부터 선형적으로 삽입된다(340). 만일 이러한 이벤트들이 알려진 도메인으로부터의 시간 스탬프들을 포함하지 않는다면, 보다 전 및/또는 보다 후의 이벤트들 이 삽입을 위해 사용될 수 있다. 시간 스탬프 추출 모듈(module)(330)은, 시간 스탬프 삽입(340)을 용이하게 하기 위해, 각 시계열 데이터 스트림으로부터 매 백 번째 이벤트(혹은 어떤 다른 설정 가능한 주기)의 시간 스탬프를 자동으로 저장한다. 다른 실시예에서, 시간 스탬프들은 획득 시간, 생성 시간 또는 다른 정황 메타 시간 데이터를 포함하는 모든 시계열 데이터 스트림(205)과 연관된 시간에 기반하여 삽입된다(340). 도 2로 돌아와서, 인덱싱 프로세스(220)에서, 들어오는 이벤트 데이터(215)에 기반하여 인덱스들이 생성된다. 인덱싱 프로세스(220)는, 인덱스들이 여분의 이벤트들로 확장되면서, 온라인 방법으로 인덱스들의 세트를 조직화하고 최적화한다. 예시적인 TSSE 인덱싱 프로세스(220)은 도 5에 도시되었고, 일 실시예로서, 버킷 단계(510), 세그먼트 단계(520), 기록 단계(530), 할당 단계(540), 삽입 단계(550), 제2 기억 장치에 수용하는 단계(560), 제2 저장소에서 버킷들을 병합하는 단계(570) 및 제2 기억 장치에서 버킷들을 소멸시키는 단계(580)를 포함하는 복수의 단계를 포함한다. TSSE에 의해 인덱싱되는 이벤트들은 종종 시간 기반 연산자에 의해 질문(query)되고, 업데이트되며, 소멸된다. 시간에 의해 조직화된 버킷들의 세트에 걸쳐서 인덱스의 구성요소를 해싱(hashing)함으로써, 이러한 연산자의 효율과 수행이 상당히 향상될 수 있다. 물론 버킷 단계의 마지막 효율은 이벤트 도착 순서, 및 그들이 어떻게 질문되는지와 같은 하드웨어의 구성(configuration)에 의존할 것이다. 따라서, 완벽한 단일 버킷 방법은 없다. 일 실시예에서, 균일한 한도를 가진 버킷들이 사용된다. 예를 들면, 각 시간 버킷들은 한 시간 어치의 데이터를 다룰 수 있다. 다른 방법들은 한 시간 주기부터 다른 시간 주기까지 버킷 한도를 변경할 수 있다. 예를 들면, 버킷 방법은, 오늘보다 이른 시간부터의 이벤트들을 위한 버킷들은 세 시간 버킷들이지만, 지난 24시간 동안 일어난 이벤트들을 위한 버킷들은 한 시간에 의해 해시되도록 특정할 수 있다. 정보 처리 예에서, 버킷은 01-15-2005 12:00:00 내지 01-15-2005 14:59:59의 기간을 커버(cover)한다. 능률을 더욱 향상시키기 위해서, 버킷들은 지연 할당 방법(즉, 가능한 한 늦게)을 사용하여 주 메모리[즉, 램(RAM)] 내에서 예시된다. 메모리 내의(In-memory) 버킷들은 최대 용량을 가지고, 그것들의 한계에 도달한 경우, 그것들은 디스크(disk)로 보내질 것이고, 새로운 버킷으로 교체될 것이다. 버킷 저장 크기는 버킷 방법의 다른 요소이고, 시간 한도(temporal extent)의 크기에 따라 다양하다. 마지막으로, 버킷 방법은 대체로 버킷들이 (a) 오버랩(overlap)하지 않고, (b) 모든 가능한 들어오는 시간 스탬프들을 커버하도록 강제한다. 시간에 의해 이벤트를 인덱싱하는 단계 내의 단계(510)는 이벤트의 시간 스탬프와 인덱스의 버킷 방법에 기반한 이벤트에 대한 적절한 버킷을 확인하는 것이다. 들어오는 각 이벤트(215)는, 이벤트로부터의 시간 스탬프가 버킷의 시간 기준(temporal criteria)에 매치되는 시간 버킷에 할당된다(510). 일 실시예에서, 우리는 시작 시간은 포함 경계(inclusive boundary)이고 종료 시간은 배타 경 계(exclusive boundary)인, 시작 시간 및 종료 시간에 의해 정의되는 반개구간(half-open interval)을 사용한다. 우리는 버킷 경계들에서 발생하는 이벤트들이 고유한 하나의 버킷에 할당될 수 있도록 이를 행한다. 정보 처리 환경에서 우리의 예를 따르면, 01-15-2005 12:00:01의 시간 스탬프를 가진 데이터베이스 서버 이벤트는 상기 언급한 버킷에 할당될 것이다. II.B 세그먼트화( segmentation )일단 이벤트에 대한 적절한 버킷이 확인되면(510), 원형 이벤트 데이터는 세그먼트된다(520). 세그먼트(토큰으로도 알려짐)는 들어오는 이벤트 텍스트의 서브스트링(substring)이고, 세그먼트화(520)는, 들어오는 이벤트 데이터 상의 세그먼트화 알고리즘을 포함하는 세그먼트들의 수집이다. 세그먼트 서브스트링은 다른 서브스트링을 오버랩할 수 있으나, 만약 오버랩하는 경우, 그것은 완전히 그 서브스트링에 속하는 것이다. 이러한 특성은 포함하는 서브스트링에 반복하여 적용되어, 세그먼트 계층(hierarchy)이 들어오는 텍스트 상에서 트리(tree)를 형성할 수 있게 한다. 일 실시예에서, 세그먼트화(520)는 마이너 브레이커(minor breaker) 및 메이저 브레이커(major breaker)로 불리는 두 상호 배타적 문자 세트들을 선택함으로써 수행된다. 마이너 또는 메이저의 브레이킹 문자가 원형 데이터의 세그먼트화 동안 마주칠 때마다, 세그먼트들은, 시퀀스(sequence)의 일단에 한 개 이상의 메이저 브레이커를 갖는 바이트(byte)들의 모든 시퀀스에 대응해서 보내진다. 예를 들면, 만약 세그먼트화 동안, 마이너 브레이킹 문자가 발견되면, 마지막 메이저 브레이커와 마주친 다음의 현재 마주친 마이너 브레이커로부터 시작하는 문자의 시퀀스에 대응하는 세그먼트가 기록된다. 만약 메이저 브레이커가 마주치게 되면, 가장 최근에 발생한 마지막 메이저 브레이커 또는 마지막 마이너 브레이커 다음에서 시작하는 문자의 시퀀스는 다음 세그먼트가 기록되도록 결정한다. 세그먼트화(520) 법칙은 이벤트 데이터를 어떻게 세그먼트들(525)(토큰들로도 알려짐)로 나누는지를 기술한다. 일 실시예에서, 세그먼트화 법칙은 이벤트 내의 가능한 분리 기호 또는 구두점, 예를 들면, 쉼표(comma), 스페이스 또는 세미콜론(semicolon) 등을 조사한다. 세그먼트화의 중요한 측면은 개별적인 세그먼트들(525)를 확인하는 뿐만 아니라 오버래핑(overlapping) 세그먼트들을 확인하는 능력이다. 예를 들면, 이메일 주소의 텍스트 ""은 개별적이고 오버래핑하는 세그먼트들로 브레이크될 수 있다. <bob.smith>, <@> 및 <corp.com>이 개별적인 세그먼트들로 확인되고, <<bob.smith><@><corp.com>>은 또한, 오버래핑 세그먼트로 확인될 수 있다. 전술한 바와 같이, 일 실시예에서, 세그먼트화(520)는 메이저 및 마이너 브레이크의 2층(two-tier) 시스템을 사용한다. 메이저 브레이크는 최외각의 세그먼트(525)를 경계짓는 분리 기호 또는 구두점이다. 예시들은 스페이스, 탭(tab), 및 새로운 행을 포함한다. 마이너 브레이크는 큰 세그먼트들을 서브(sub) 세그먼트들로 브레이크하는 분리 기호 또는 구두점 예를 들면, 마침표(period), 쉼표, 등호(equal sign) 등이다. 일 실시예에서, 보다 복잡한 분리 기호 및 구두점 조합들이 복잡한 세그먼트화 작업(520), 예컨대, 어플리케이션 서버 로그 파일 내의 자바 예외(Jave exception)를 다루는데 사용된다. 정보 처리 예의 세그먼트화의 예에서, IP 주소는 메이저 브레이커로서 화이트 스페이스 및 마이너 브레이커로서 마침표를 사용하여 브레이크될 수 있다. 따라서, 원형 텍스트 "192.168.1.1"의 세그먼트들은 다음과 같을 수 있다. "192" "192.168" "192.168.1" "192.168.1.1" 다른 실시예에서, 특정 세그먼트들은 알고리즘적으로 또는 인간에 의해 부가된 의미론(semantics)에 의해 라벨되고 이해될 수 있는 알려진 엔티티(entity)들로 표현될 수 있다. 예를 들면, 상기 표현에서, "192.168.1.1"은 IP 주소로 이해될 수 있다. 이름 지어진 엔티티 추출은 많은 방법으로 알고리즘적으로 수행될 수 있다. 일 실시예에서, 복수의 이벤트들에 걸친 동일한 세그먼트로부터의 세그먼트 값 또는 세그먼트 형식은 알려진 값 또는 알려진 형식의 엔티티 사전(dictionary)과 비교된다. 다른 실시예에서, 엔티티 추출 기술은 데이터 내의 의미론적 엔티티를 확인하는데 사용된다. 일 실시예에서, 검색 트리 또는 통상의 표현은 예를 들어, IP 주소 또는 이메일 주소를 추출하고 확인하는데 적용될 수 있다. 추출의 목표는 세그먼트화 프로세스(520)를 보조하고, 데이터에 의미론적 값을 제공하는 것이다. 본 프로세스의 이 시점에서, 들어오는 이벤트들은 그들과 연관된 시간 스탬 프들(215), 세그먼트들(525) 및 시간 버킷들(515)을 가진다. 후에 검색 프로세스에서 검색(lookup)을 수행하는데 쓰일 지속적인 데이터 구조를 생성하기 위하여, 우리는 이벤트의 원형 데이터를 그들의 세그먼트화와 동시에 저장하고, 이벤트 데이터 기억장치 내에서 세그먼트들과 시간 스탬프들을 오프셋들로 매핑하는 인덱스들을 생성하며, 인덱스들과 관련된 메터데이터를 계산하고 저장한다. 근 실시간에서, TSSE는 새로운 이벤트의 도착 및 새로운 검색을 모두 수용해야 하므로, 시스템은 바람직하게는 디스크에의 접속을 관리하는데 철저하다. 인덱스들에 있어서, 이는 핫(hot) 인덱싱 및 웜(warm) 인덱싱의 두 개의 분리된 양상으로 인덱스 생성을 나눔으로써 달성된다. 핫 인덱스들은 전적으로 램 내에서 관리되고, 가장 적은 가능 삽입 시간에 최적화되며, 검색 가능하지 않고, 지속적이지 않다. 웜 인덱스들은 검색 가능하고, 지속적이지만, 불변이다. 핫 인덱스들이 검색 가능하거나 지속적이도록 만들어질 필요가 있는 경우, 웜 인덱스들로 변경된다. 도 5에 도시된 실시예에서, 핫 인덱스(555)는 세그먼트들의 팩된 어레이(packed array), 이벤트 주소들과 그들의 연관 시간 스탬프들의 팩된 어레이, 및 세그먼트들을 그들의 시간 스탬프된 이벤트 주소들과 연관시키는 게재(posting) 리스트를 포함한다. 성능상의 이유로, 팩된 어레이들은 그들과 연관된, 중복의 빠른 제거를 제공하는 해시 테이블들을 가질 수 있다. 들어오는 이벤트들이 인덱싱되면, 이벤트들의 각 세그먼트는 세그먼트 어레이 및 그것의 연관된 해쉬를 이용하여 중복이 검사된다. 이벤트 주소는 또한 이벤트 주소 어레이 및 그것의 연관된 해쉬에 대비하여 중복이 검사된다. 만약 속성들 중 어느 하나라도 중복인 경우, 이미 팩된 어레이 내로 삽입된 복사 시간이 이용된다. 그렇지 않은 경우에는, 새로운 세그먼트 또는 이벤트 주소가 적절한 테이블(550) 내로 복사되고, 연관된 해쉬 테이블은 업데이트된다. 이벤트들이 핫 인덱스내로 삽입되면서, 팩된 어레이들의 각각과 연관된 스페이스가 사용된다. 핫 슬라이스(hot slice)는 그들의 팩된 어레이들 중 하나가 채워지는 경우, 또는 그들의 해시 테이블 중 하나가 사용 임계값을 초과하는 경우(예컨대, 반 이상의 해시 테이블이 사용중인 경우), "용량이 꽉 찬 것(at capacity)"으로 여겨진다. 일단 핫 인덱스가 용량(capacity)에 다다르면, 인덱싱을 위한 세그먼트를 더 이상 받아들일 수 없다. 그것이 웜 인덱스로 변환되는 대신에, 디스크에 수용되고(560), 새로운 빈 핫 인덱스와 교체된다. 이러한 특정 시스템의 다른 특징은 추론적(speculative) 인덱싱이다. 앞선 인덱싱 프로세스들에 기반하여, 새로운 시간 버킷들이 견본(exemplar)으로서 대표적인 완료된 버킷의 모두 또는 일부를 이용하여 초기화될 수 있다. 바꿔 말하면, 시간 버킷 내에서 발생할 것으로 상당히 기대되는 데이터의 사본들을 유지함으로써, 핫 인덱스의 일부를 추론적으로 초기화하여 우리는 인덱싱 수행을 향상시킬 수 있다. 일 실시예에서, 추론적 인덱싱은 세그먼트들의 앞선 핫 인덱스로부터의 팩된 어레이와 그것과 연관된 해시 테이블을 카피함으로써 수행된다. 그리고 나서, 핫 슬라이스는 세그먼트 어레이가 이미 자리를 잡고 중복 검사를 위해 준비중인 경우를 제외하고는 보통 자리를 잡는다. 기기의 매우 일정한 언어 및 제한된 어휘 때문에, 이러한 추론과 연관된 히트율(hit rate)이 매우 좋을 수 있다. 다음 단락에 기술된 바와 같이 검색 프로세스는 사용자가 세그먼트들, 세그 먼트 접두사들 및 세그먼트 접미사들 상에서 검색할 수 있도록 한다. 일 실시예에서, 이러한 검색 형태를 수용하기 위해, 세그먼트 어레이는 정렬되고 그 다음, 블록화된(blocked) 전방위 암호화된 어휘(front coded lexicon)(이후 "포워드 렉시콘(forward lexicon)"이라 칭함)으로 저장될 수 있다. 이러한 데이터 구조는, 세그먼트 텍스트의 압축의 상당한 양을 얻는 동안, 세그먼트 및 세그먼트 프레픽스 검색을 효율적으로 수행하는 것을 가능하게 한다. 특정 세그먼트 상에서 검색이 수행될 때, 포워드 렉시콘 내의 세그먼트의 오프셋은 다른 연관된 테이블들 내의 질문된(queried-for) 세그먼트와 연관된 메타데이터를 검색하는 효율적인 방법으로서 사용된다. 접미사 검색을 다루기 위해서, 블록된 프론트 코디드 렉시콘이 세그먼트들의 동일한 모음 상에서 그들이 스트링-리버스된(string-reversed) 후에 생성될 수 있다(이후 "리버스 렉시콘(reverse lexicon)"이라 칭함). 또한, 리버스 렉시콘 내의 리버스된 세그먼트의 오프셋을 동등한 포워드 렉시콘 내의 리버스되지 않은 세그먼트의 오프셋으로 변환하는 맵(이하 "리버스 포워드 맵(reverse-forward map)"이라 칭함)이 자리잡는다. 접미사 검색을 수행할 때, 리버스 렉시콘 내의 오프셋은 리버스-포워드 맵 내로의 오프셋으로서 사용된다. 맵 내의 그 자리에 저장된 값은, 웜 인덱스 내의 다른 메타데이터 어레이들을 위해 사용되는 적절한 오프셋이다. 웜 인덱스는 바람직하게는 효율적인 방법으로, 인덱싱된 각 세그먼트를 위한 이벤트 오프셋들의 리스트를 제공한다. 일 실시예에서, 이는, 압축된 게재 리스트들의 어레이 및 상기 각 압축된 포스팅 리스트의 시작에 대한 오프셋들의 연관된 어레이를 유지함으로써 이루어 질 수 있다. 상기 게재 리스트들은 세그먼트 오프셋 순서에 따라 유지될 수 있다. 따라서, 검색이 수행되는 경우, 세그먼트 ID는 게재 리스트 오프셋 어레이의 적절한 엔트리를 찾는데 사용될 수 있다. 상기 게재 리스트 내의 값들은 이벤트 주소의 팩된 어레이 내의 이벤트들을 검색하는데 사용되어야 하는 오프셋들이다. 마지막으로, 통계적 메타데이터는 각 인덱싱된 세그먼트(예컨대, 세그먼트 발생의 첫번째 및 마지막 시간, 평균 도착 간격 시간(mean inter-arrival time) 및 도착 간격 시간의 표준 편차)를 위해 제공될 수 있다. 인덱싱 프로세스의 코스 동안, 단일 시간 버킷은 여러 번 채워지고 디스크(560)로 수용되는 것이 가능하다. 이는 단일 시간폭(time span)에 대한 제2 기억 장치 내의 독립적으로 검색 가능한 복수의 인덱스들의 결과를 낳는다. 예시적인 실시예에서, 둘 이상의 웜 인덱스들을 입력으로 받고, 그 타임 버킷에 따라 그것들을 단일 웜 인덱스로 병합하는 병합 단계(570)가 있다. 이는 수행 최적화이고, 검색을 위해 반드시 필요한 것은 아니다. 더불어, 긴 기간의 시간에 걸쳐, 인덱싱 프로세스(220)의 시계열 데이터에의 적용이 많은 양의 지속적인 데이터를 축적하도록 유발하는 것이 가능하다. 따라서, 인덱싱 프로세스는 바람직하게는, 사용자 공급 선호들(user-provided preference)에 기반하여 삭제되는 시간 버킷들의 데이터베이스를 모니터하는 소멸 프로세스(580)를 포함한다. 일 실시예에서, 이러한 선호는 추적(trailing) 시간 윈도 우("3달 이상 지난 이벤트들은 검색 결과에 반환될 필요 없음"), 시간 범위("올해 1월 1일 이전의 이벤트들은 검색 결과에 반환될 필요 없음"), 이벤트들의 최대 숫자(" 1백만을 초과하는 이벤트들은 검색 결과에 반환될 필요 없음"), 또는 인덱스를 위한 최대 총 크기("디스크의 100GB를 초과하지 않도록 소모하는 동안 가능한 한 많은 유용한 검색 결과들을 반환함")를 포함할 수 있다. 프로세스는 주기적으로 일어나고 소멸 기준에 맞는 어떤 슬라이스를 찾기 위해 웜 슬라이스들의 모음을 검사한다. 소멸에 있어서, 웜 인덱스 파일과 그것과 연관된 원형 이벤트 데이터 및 세그먼트는 활성(active) 인덱스에서 제거된다. 인덱스 파일은 반드시 삭제될 필요는 없다. 일 실시예에서, 인덱스 파일은 보다 덜 비싼 오프라인 저장 장치로 스트림될 필요가 있다. 예시적인 TSSE 검색 프로세스는 도 6에 도시 되었고, 검색구(search phrase)의 분석 단계(610), 들어오는 근원(parent) 검색을 만족하기 위한 복수의 서브-검색들을 만들어 내는 단계(625), 프룬(prune) 검색에 서브 검색 결과를 이용하는 단계(635), 서브-검색 결과를 사용자에게 표시하기 위해 검색 결과의 마지막 세트로 병합하는 단계(640)의 복수의 방법들을 포함한다. 검색 프로세스 동안, 들어오는 검색구들(255)은 주석이 달린(annotated) 분석 트리(615)를 생성하기 위해 시계열 검색 언어(time series search language, TSSL)에 따라 분석된다(610). 예시적인 TSSL 언어 체계(syntax)는 name::value 형 식을 취하는 일련의 수식어구(modifier)들 또는 명령들을 포함한다. 어떤 수식어구들은 디폴트 값을 가질 수 있고, 어떤 것은 상이한 값들에 대한 동일한 검색 내에서 복수 번 나타날 수 있는 반면 어떤 것은 단 한 번 사용될 수 있다. 예시들은 다음을 포함한다. average::value - 평가 시간 프레임(value time frame)을 이용하여 이벤트들의 평균 수를 계산한다. page ::value - 값으로 검색 결과를 표시한다. 값은 초, 분, 시, 일, 주 또는 월 또는 다른 메타데이터 요소 예를 들면, 출처 또는 이벤트 타입이 될 수 있다. count :: - 이벤트들의 총 수를 계산한다. daysago ::value - 지난 평가 일(value day)들 내의 이벤트들을 검색한다. index ::value - 검색하기 위한 인덱스 - TSSE에 의해 정의된 메인(main), 디폴트, 히스토리(history), 또는 다른 인덱스. hoursago::value - 지난 평가 시간(value hour)들 내의 이벤트들을 검색한다. eventtype::value - 특정 값에 매치되는 이벤트 타입 또는 태그(tag)를 가지는 이벤트들을 검색한다. host::value - 호스트 네임(hostname)이 특정 값으로 설정되었던 이벤트들을 검색한다. 이는 이벤트가 로그된 호스트이지만, 반드시 이벤트가 생성된 호스트는 아니다. maxresults::value - 반환될 결과들의 최대 숫자. minutesago::value - 지난 평가 분(value minute)들 내의 이벤트들을 검색한다. related::value - 현재 이벤트 내에 하나 이상 매치되는 세그먼트 값(예컨대, 404또는 사용자이름)을 가진 이벤트들을 검색한다. similar::value - 현재 이벤트에 비슷한 이벤트 타입을 가진 이벤트들을 검색한다. sourcetype::value - 값의 주어진 출처 타입을 가진 이벤트들을 검색한다. unexpected::value - 0(기대됨) 내지 9(가장 기대되지 않음)의 특정 값에 의해 인덱스 내에서 관찰된 패턴들 밖에 위치한 이벤트들을 검색한다. 수식어구들은 키워드들, 와일드카드(wildcard) 문자들, 문자로 표현된 스트링(literal string)들, 인용구(quoted phrase)들 및 AND, OR, NOT과 같은 부울(Boolean) 연산자들과 결합될 수 있다. 괄호들은 검색 및 서브-검색구들을 함께 묶는데 이용될 수 있다. 예시적인 검색구는 "sourcetype::mysql* sock* NOT ( started OR ( host::foo OR host::BAR ) ) maxresults::10 ( eventtype::baddb OR eventtype::?8512-3 ) daysago::30"와 같을 수 있다. 일 실시예에서, 상용 분석기(610)는 부울 연산자 "NOT" 및 "OR"을 다루고 "AND"로 디폴트 설정되어 있다. 또한, 이 실시예는 복수의 연산자들이 있을 때 언어를 명확하게 하는 괄호들을 이용하는 것을 다룬다. 반면, 그것은 왼쪽에서 오른쪽으로(left-to-right) 연관된다. 또한, 본 실시예는 경계 요소(demarcation element)가 따라오는 도메인 지정자(specifier)를 이용하는 것을 나타내는 특별한 검색 연산자들을 지원한다. 예를 들면, "source::1234"를 검색하는 것은 검색하는 자(사람 또는 시스템)가 특정 출처 ID로부터 받은 이벤트들로 결과들을 제한하기를 원한다는 것을 지시할 것이다. 또, 들어오는 검색구들은 특별한 키워드들의 맵(map)에 기반한 애드혹(ad hoc) 연산(612)을 일으킬 것이다. 예를 들면, 특별한 검색 스트링은, 검색이 저장되고 주기적으로 다시 나온다는 것 또는 출처들의 리스트를 요청한다는 것을 지시하는데 사용될 것이다. 이 경우, 검색 스트링은, 검색이 다시 나오는 스케쥴을 특정하는 스케쥴을 포함하는 디스크의 테이블에 저장될 것이다. 검색이 수행된 결과에 의존하여, 부가적인 작용들이 일어날 수 있다. 예를 들면, 이메일 경고가 보내지거나, RSS 피드(feed)가 업데이트 되거나, 또는 사용자 공급된 스크립트가 수행될 수 있다. 애드혹 연산(612)을 일으키는 검색의 다른 예는 나중 사용을 위해 저장되지만, 주기적으로 다시 나오지 않음을 지시하는 것이다. 검색 분석기(610)가 주석이 달린 체계 트리(615)가 검색 스트링을 위해 반드시 생성되도록 결정했다고 가정하면, 다음 구성 요소, 검색 수행 엔진(620)은, 서브-검색들(625)이 시간 버킷된 인덱스들(565)로 나오도록 하기 위해 주석이 달린 신택스 트리(615)를 이용할 것이다. 각 서브-검색(625)은 개별 시간 버킷(5645)을 목표로 한다. 시간 버킷들은 결과에 대해 주어진 정렬 순서로 프룬(prune)하는데 가장 효과적인 순서로 질문된다. 예를 들어, 검색 결과들이 역연대순(reverse chronological order)으로 정렬된 경우, 가장 최근의 시간 버킷에 대한 서브-검색이 먼저 나올 것이다. 이는 검색 수행 엔진(620)이 부가적인(고가의) 서브-검색들(625)을 통해 진행하기 전에 서브-검색의 결과들(635)을 조사하도록 한다. 예를 들면, 특정 서브-검색이 충분한 결과들(635)을 반환하면, 부가적인 서브-검색들(625)을 통해 진행될 필요가 없다. 일단 충분한 결과 세트들(637)이 근원 검색을 만족하도록 축적되면, 다른 모듈은 결과들을 받을 것이고, 그것들을 검색을 만족하는 단일 결과 세트(235, 237)로 병합(640)할 것이다. 일 실시예에서, 이러한 병합 프로세스는, 각 버킷으로부터의 결과들에 대해, 표시 프로세스를 위해 필요한 순서대로 그것들을 정리하기 위해 병합 정렬(merge sort)을 수행한다. 우리의 예시적인 TSSE의 예시적인 실시예의 마지막 프로세스는, 도 7에 도시한 바와 같이 표시(240)를 위해 검색 결과들을 준비하는 것이다. 키워드 관련성 순위에 의해 정렬된 비대화형(non-interactive) 결과들을 표시하는 현존하는 방대한 규모의 검색 엔진들과 달리, 이 예시적인 TSSE는 시간, 이벤트 관련성, 및 키워드 관련성 순위에 의해 조직화된 결과들을 표시할 수 있다. 시계열 데이터를 인덱싱하고 검색하는 도전 과제의 특이점은 주요 차원(primary dimension)으로 시간을 사용하여 결과를 표시하는 것이다. 현존하는 방대한 규모의 검색 엔진들은 정보를 시간에 의해 조직화하지 않기 때문에, 시간 기반 결과들의 표시는 고려 사항이 아니다. 하지만, TSSE의 주요 장점은 시계열 데이터를 연대순으로 인덱싱, 검색 및 표시하는 능력이다. 결과들은, 불연속적인 시간 범위들에 기반하여 또는 통계적 계산에 기반하여 검색 결과들을 수집 및 요약함으로써, 표시될 수 있다. 예를 들면, 예시적인 TSSL은 오직 특정 시간 프레임에 대한 결과를 보고 또는/또한 초, 분, 시, 일, 주 또는 월 단위로 표시된 결과들을 보도록 특정할 수 있다. 이러한 방법에서 검색 윈도우는 시간 프레임에 제한될 수 있고, 결과들은 검색으로부터 반환된 기대되는 결과 세트의 밀도에 기반한 최적의 보기(viewing)를 위해 구성될 수 있다. 검색 "192.168.169.100 hoursago::24 page::seconds"는 지난 24시간 이내에 발생한 키워드 "192.168.169.100"을 포함하는 시계열 이벤트들을 반환할 것이고, 초 단위로 표시 결과들을 요약할 것이다. TSSE의 예시적인 실시예에서, 요약은, 수집된 표시 행들이 요약 윈도우를 위한 이벤트들을 요약하는 것 및/또는 요약 윈도우에 의해 결과들을 페이징(paging)하는 것을 모두 포함할 수 있다. 상기 예에서, 검색 결과 표시의 각 페이지는 1초를 포함할 수 있다. 예들은 다음과 같은 것을 포함하지만 그것에 제한되지는 않는다. ● 데이터를 통해 (n)개의 결과를 카운트에 의해 한번에 스크롤/페이지하는 능력. ● 전/후 초, 분, 시, 일, 년의 시간에 의해 데이터를 통해 스크롤/페이지 하는 능력. ● 시간 프레임당 최대 카운트를 특정하는 능력 ● 페이지된 시간 프레임 내에서 다음 (n)개의 결과들을 얻는 능력 (1초 내에) 다음 100개를 얻음 시간 기반 표시(710)에 더하여, 예시적인 TSSE는 바람직하게는 데이터 출처, 데이터 출처 타입, 이벤트 타입 또는 본래의 호스트 기기와 같은 메타데 이터 특성들(720)에 의해 결과들의 부가적인 수집 및 요약을 표시하는 것이 가능하다. 이러한 방법으로, 결과들은 단지 시간에 의해서만 조직화되지 않고, 메타데이터 수집 및 요약에 의해서도 세밀화(refine)된다. 검색 "192.168.169.100 page::source"는 "192.168.169.100"를 포함하는 모든 결과를 표시할 것이고, 결과들을 포함한 각 데이터 출처를 개별적인 페이지상에 나타낼 것이다. 예들은 다음과 같은 것을 포함하지만 그것에 제한되지는 않는다. ● 데이터 출처의 본래의 물리적 위치. ● 데이터를 생성하는 본래의 물리적 기기, 센서 등. ● 인덱싱 프로세스에 의해 동적으로 할당된 데이터 출처의 타입. ● 인덱싱 프로세스에 의해 동적으로 할당된 이벤트의 타입. 시간 및 특정 메타데이터 파라미터들(예컨대, 기기 IP 주소들)은 연속적일 수 있기 때문에, 예시적인 TSSE 사용자 상호작용 모델(user interaction model)은 줌 제어(730)를 이용하여 시간(초 또는 분) 또는 메타데이터 파라미터들(IP 주소들의 상이한 클래스들)의 작은 증가량으로부터 이동하는 능력을 포함할 수 있다. 이러한 줌 제어는 많은 양의 데이터를 통해 급격한 이동을 가능하게 하기 위해 다른 메타데이터 검색 파라미터들과 결합될 수 있다. 예들은 다음과 같은 것을 포함하지만 그것에 제한되지는 않는다. ● 주어진 시간 근처에서 어떤 초에서부터라도 분, 시, 등으로 줌 인 및 줌 아웃 하는 능력. ● 특정 데이터 출처 타입 및 물리적 기기 위치를 위해, 2005년 6월 3일 오전 12시 15분 근처에서 초 해상도(second resolution)로 줌 인하는 능력. 사용자(인간 또는 시스템)의 상이한 타입들 및 시계열 데이터와 이벤트들(예컨대, 몇 바이트 크기인 단일 행 이벤트들에서 수 메가바이트 크기인 복수 행 이벤트들)의 다양한 타입들을 고려하면, 결과들의 밀도를 특정 가능하도록 하는 것이 유용하다. 일 실시예에서, 표시 밀도는, 간단한 ASCII 텍스트 형식으로 어떤 메타데이터도 없이 원형 데이터만 반환 및/또는 표시하도록 제어될 수 있다(740). 또는 동일한 결과들은 풍부한(rich) XML로서 모든 메타데이터들과 함께 반환 및/또는 표시될 수 있다. TSSE는 많은 다양한 방법으로 구현될 수 있다. 일 접근법에서, 다양한 도면들 내에 보여진 각 박스(box)들은 개별적인 프로세스로서 소프트웨어로 구현되었다. 모든 프로세스들은 단일 기기 상에서 실행될 수 있거나 또는 그들은 분리된 논리적 또는 물리적 기기 상에서 실행되기 위해 나누어질 수 있다. 다른 실시예에서, 본 발명은 컴퓨터 하드웨어, 펌웨어, 소프트웨어 및/또는 그들의 결합으로 구현되었다. 본 발명의 장치는, 프로그래머블 프로세서(programmable processor)에 의해 실행되기 위한 기기-판독가능한(machine-readable) 기억 장치로 구체적으로 구현된 컴퓨터 프로그램 제품으로 구현될 수 있다. 그리고, 본 발명의 방법 단계들은, 입력 데이터 상에서 작동하고 출력을 생성함으로써 본 발명의 기능들을 수행하 는 명령들의 프로그램을 실행하는 프로그래머블 프로세서에 의해 수행될 수 있다. 본 발명은, 데이터 저장 시스템과 데이터 및 명령들을 송수신하도록 연결된 하나 이상의 프로그래머블 프로세서, 하나 이상의 입력 장치 및 하나 이상의 출력 장치를 포함하는 프로그래머블 시스템 상에서 실행 가능한 하나 또는 그 이상의 컴퓨터 프로그램 내에서 효과적으로 구현될 수 있다. 각 컴퓨터 프로그램은 높은 수준의 절차적 또는 객체 지향적 프로그래밍 언어로, 또는 필요할 경우, 어셈블리(assembly)나 기기 언어로 구현될 수 있다. 그리고 어떤 경우에도, 상기 언어는 컴파일(compile)된 또는 해석(interpret)된 언어가 될 수 있다. 예를 들어, 적절한 프로세서들은 일반적 및 특별한 목적의 마이크로 프로세서들을 포함한다. 일반적으로, 프로세서는 읽기 전용의(read-only) 메모리(memory) 및/또는 랜덤 액세스 메모리(random access memory)로부터 명령과 데이터를 수신할 것이다. 일반적으로, 컴퓨터는 데이터 파일들을 저장하기 위한 하나 이상의 대용량 기억 장치를 포함할 것이다. 이러한 장치들은 내장 하드 디스크 및 분리성(removable) 디스크와 같은 자기(magnetic) 디스크, 광자기(magneto-optical) 디스크 및 광(optical) 디스크를 포함한다. 컴퓨터 프로그램 명령 및 데이터를 구체적으로 구현하는데 적합한 기억장치들은 비휘발성(non-volatile) 메모리의 모든 형태를 포함한다. 예를 들자면, EPROM, EEPROM, 및 플래쉬 메모리 장치와 같은 반도체 메모리 장치, 내장 하드 디스크 및 분리성 디스크와 같은 자기 디스크, 광자기 디스크 및 CD-ROM 디스크를 포함한다. 앞의 것들 중 어느 것이든지 ASICs[특정 용도 집적회로(application-specific integrated circuits)] 및 다른 형태의 하드웨어가 보충되거나 병합될 수 있다. 따라서, 상기 상세한 설명이 많은 세부 사항을 포함하고 있지만, 본 발명의 범위를 제한하는 것으로 받아들여져선 안되고, 단지 본 발명의 다양한 예 및 측면을 설명한 것으로 받아들여져야 한다. 본 발명의 범위는 상기 세부적으로 언급되지 않은 다른 실시예를 포함한다는 것이 인식되어야 한다. 첨부된 청구항에 정의된 본 발명의 사상 및 범위를 벗어나지 않으면서, 당업자에게 자명한 다양한 변경, 변형 및 변화가 본 명세서에 개시된 본 발명의 방법 및 장치의 배치, 동작 및 세부 사항에 이루어 질 수 있다. 따라서, 본 발명의 범위는 첨부된 청구항 및 그 법적 균등물에 의해 결정되어야 할 것이다. Claims (33)
Priority Applications (2)
Related Child Applications (1)
Publications (2)
FamilyID=39269257Family Applications (2)
Family Applications Before (1)
Country Status (6)
Cited By (1)* Cited by examiner, † Cited by third party
Families Citing this family (448)* Cited by examiner, † Cited by third party
Citations (1)* Cited by examiner, † Cited by third party
Family Cites Families (375)* Cited by examiner, † Cited by third party
Patent Citations (1)* Cited by examiner, † Cited by third party
Cited By (2)* Cited by examiner, † Cited by third party
Also Published As
Similar Documents
Legal Events
|