KR20150042874A - 소팅 - Google Patents

소팅 Download PDF

Info

Publication number
KR20150042874A
KR20150042874A KR20157008254A KR20157008254A KR20150042874A KR 20150042874 A KR20150042874 A KR 20150042874A KR 20157008254 A KR20157008254 A KR 20157008254A KR 20157008254 A KR20157008254 A KR 20157008254A KR 20150042874 A KR20150042874 A KR 20150042874A
Authority
KR
South Korea
Prior art keywords
data
buffer
elements
data elements
stream
Prior art date
Application number
KR20157008254A
Other languages
English (en)
Inventor
크레이그 더블유. 스탠필
칼 리차드 파인만
Original Assignee
아브 이니티오 테크놀로지 엘엘시
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아브 이니티오 테크놀로지 엘엘시 filed Critical 아브 이니티오 테크놀로지 엘엘시
Publication of KR20150042874A publication Critical patent/KR20150042874A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/22Indexing scheme relating to groups G06F7/22 - G06F7/36
    • G06F2207/226Priority queue, i.e. 1 word in, 1 word out sorter; Output word, i.e. min or max of words in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)
  • Information Transfer Systems (AREA)

Abstract

시스템 및 기술이 일 양상에서 데이터 요소의 수신된 스트림을 버퍼 내에 저장하고, 상기 데이터 요소의 스트림의 각각의 개별의 데이터 요소를 수신한(404) 후에, 상기 버퍼에 저장된 데이터 요소에 경계 조건을 적용하고(406), 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서, 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는(408), 컴퓨터 구현 방법을 포함하도록 개시된다.

Description

소팅{SORTING}
본원은 발명의 명칭이 "소팅(sorting)"이고, 2011년 2월 18일에 출원된 미국특허출원 제13/031,056호에 대한 우선권을 주장하는 바이며, 이 출원에 개시된 내용은 참조로 본원에 포함된다.
본원은 소팅에 관한 것이다.
다양한 데이터 처리 기술과 유사하게, 많은 응용에서 소팅 기술이 중요한 역할을 한다.
예를 들어, 데이터 추세 및 차이점이 소팅된 데이터 리스트를 제시하면(하나 이상의 소팅 파라미터에 기초하여) 뷰어(viewer)에 의해 재빨리 식별될 수 있다. 리스트를 예를 들어, 오름차순 또는 내림차순으로 소팅함으로써, 데이터 경계, 범위 및 그외 양이 시각적으로 인식될 수 있다. 소트 알고리즘의 효율이 다수의 방법론, 예컨대 실행되는 데이터 요소 비교의 개수의 기능 및 소팅된 리스트를 제공하기 위해 필요한 데이터 요소 움직임에 의해 평가될 수 있다.
일 양상에서, 일반적으로, 컴퓨터 구현 방법은 데이터 요소의 수신된 스트림을 버퍼에 저장하는 단계, 데이터 요소의 스트림의 각 개별의 데이터 요소를 수신한 후에, 버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 단계, 및 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계를 포함한다.
이하의 하나 이상의 양상이 포함될 수 있다.
버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계는 버퍼로부터 적어도 최소의 데이터 요소를 생성하는 단계를 포함할 수 있다. 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계는 버퍼로부터 적어도 최대의 데이터 요소를 생성하는 단계를 포함할 수 있다. 각 수신된 데이터가 데이터 레코드 생성 시간을 나타낼 수 있다. 데이터 요소의 출력 스트림이 역시간순에 따라 소팅될 수 있다. 데이터 요소의 수신된 스트림의 데이터 요소는 부분적으로 소팅될 수 있다. 데이터 요소의 수신된 스트림의 데이터 요소는 실질적으로 비동기로 버퍼에 도달할 수 있다. 버퍼에서 데이터 요소의 수신된 스트림을 저장하는 단계는 버퍼 내의 데이터 요소의 수신된 스트림의 각각의 개별의 요소를 버퍼의 소팅 순서에 의해 결정된 위치에 삽입하는 단계를 포함할 수 있다.
버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 단계는, 버퍼에 저장된 데이터 요소로부터 최소의 데이터 요소를 식별하는 단계, 및 상기 최소의 데이터 요소와 수신된 개별의 데이터 요소 간의 차가 임계값을 초과하는지 여부를 판단하는 단계를 포함할 수 있다. 경계 조건을 기초로 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계는 하나 이상의 데이터 요소가 임계값을 초과하는 경우에 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계를 포함할 수 있다. 버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 단계는 버퍼의 최대 크기가 초과되는지 여부를 판단하는 단계를 포함할 수 있다. 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계는 상기 버퍼의 최대 크기가 초과되는 경우에 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계를 포함할 수 있다.
버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 단계는 새로 수신된 데이터 요소가 한계값(cutoff value)을 초과하는지 여부를 판단하는 단계를 포함할 수 있다. 이 방법은 요소가 한계값을 초과하지 않는 경우에 새로 수신된 데이터 요소를 버퍼링하는 단계를 더 포함할 수 있다. 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 단계는 새로 수신된 데이터 요소가 임계값을 초과하지 않은 경우에 버퍼로부터 생성된 하나 이상의 데이터 요소로서 새로 수신된 데이터 요소를 생성하는 단계를 포함할 수 있다. 버퍼는 스킵 리스트 데이터 구조(skip list data structure)에 의해 구현될 수 있다. 버퍼는 트립 데이터 구조(treap data structure)에 의해 구현될 수 있다. 데이터 요소의 수신된 스트림에서 하나 이상의 개별의 데이터 요소가 그래프 기반 연산 시스템(graph-based computational system)에서 컴포넌트에 입력되는 데이터 레코드로부터 도출될 수 있다.
또다른 양상에서, 일반적으로, 컴퓨터 구현 방법은, 데이터 요소의 스트림의 각각의 개별의 데이터 요소를 수신한 후에 수신된 데이터 요소에 경계 조건을 적용하는 단계, 경계 조건의 제1 결과에 기초하여 데이터 요소의 스트림의 하나 이상의 데이터 요소를 저장하는 단계, 및 경계 조건의 제2 결과에 기초하여 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 하나 이상의 데이터 요소를 생성하는 단계를 포함할 수 있다.
또다른 양상에서, 일반적으로, 데이터 요소를 소팅하기 위한 컴퓨터 프로그램을 저장하는 컴퓨터 판독가능 저장 매체가 컴퓨팅 시스템으로 하여금 버퍼에 데이터 요소의 수신된 스트림을 저장하도록 하고, 데이터 요소의 수신된 스트림을 처리하도록 하는 명령들을 포함할 수 있다. 데이터 요소의 수신된 스트림을 처리하는 것은 데이터 요소의 스트림의 각각의 개별의 데이터 요소를 수신한 후에 버퍼에 저장된 데이터 요소에 경계 조건을 적용하고, 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 경계 조건을 기초로 하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 것을 포함할 수 있다.
또다른 양상에서, 일반적으로, 데이터 요소를 소팅하기 위한 컴퓨팅 시스템은 버퍼에 데이터 요소의 수신된 스트림을 저장하는 데이터 저장 시스템; 및 데이터 요소의 수신된 스트림을 처리하도록 구성된 하나 이상의 프로세서를 포함할 수 있다. 처리하는 것은 데이터 요소의 스트림의 각각의 개별의 데이터 요소를 수신한 후에 버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 것과 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 것을 포함할 수 있다.
또다른 양상에서, 일반적으로, 데이터 요소를 소팅하기 위한 컴퓨팅 시스템은 데이터 요소의 수신된 스트림을 저장하는 수단, 및 데이터 요소의 수신된 스트림을 처리하는 수단을 포함할 수 있다. 처리하는 것은 데이터 요소의 스트림의 각각의 개별의 데이터 요소를 수신한 후에 버퍼에 저장된 데이터 요소에 경계 조건을 적용하는 것과 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생성하는 것을 포함할 수 있다.
양상에 따르면, 다음의 하나 이상의 장점을 가질 수 있다.
데이터 요소의 주로 소팅되고 수신된 스트림을 수반하는 몇몇의 구현예에서, 요소는, 대다수의 요소와 적절한 순서로 있지 않은 몇몇을 제외하고 소팅된 순서로 있는 대개의 부분을 위한 것이다. 종래 기술은 요소를 소팅하기 위해 상당한 컴퓨팅 자원 및 처리 시간을 소모한다. 몇몇 실시예에서, 본 명세서에 기재된 기술은 대다수의 데이터 요소가 적절하게 순서화되어 도달한다는 사실을 이용할 수 있으므로, 연산 자원 및 처리 시간을 아낄 수 있다. 스트림의 각각의 개별의 데이터 요소를 수신한 후에 버퍼에 저장된 데이터 요소에 경계 조건을 적용함으로써, 데이터 요소의 출력 스트림이 미리결정된 순서에 따라 소팅되도록 생성될 수 있다.
본원의 다른 특징 및 장점이 다음의 상세한 설명 및 특허청구범위로부터 명백해질 것이다.
도 1은 윈도우 소팅 시스템의 블록도이다.
도 2는 일련의 윈도우 소팅 동작을 통한 소트 버퍼를 도시하고 있다.
도 3은 그래프 기반 연산을 관리하는 컴퓨팅 시스템의 블록도이다.
도 4는 윈도우 소팅 처리의 흐름도이다.
도 1을 참조하면, 예시적인 소팅 시스템(100)이, 소트 모듈(108)(또다른 컴퓨터 시스템(108)에 의해 이 배열에서 실행됨)로 데이터 요소 또는 아이템(106a-106n)(일반적으로 106)의 스트림을 제공하는 컴퓨터 시스템(104)(예컨대, 하나 이상의 클라이언트 시스템을 서비스하는 웹 서버와 같은 서버) 상에서 실행되는 데이터 소스 어플리케이션(102)을 포함한다. 요소(106)가 특정 기간의 시간(예컨대 24시간 기간)에 걸쳐 소스 어플리케이션(102)에 의해 생성될 수 있고, 저장소(예컨대 저장 디바이스)로부터 생성되거나 검색되는 것처럼 전송될 수도 있다. 요소(106)는 다양한 정보의 유형, 예를 들어, 소스 어플리케이션(102)에 의해 생성되는 데이터 레코드(도시되지 않음)의 하나 이상의 속성(attribute)에 할당되는 값을 나타낼 수 있다. 몇몇 구현예에서, 요소(106)가 소스 어플리케이션(102)에 의해 생성된 하나 이상의 데이터 레코드로부터 계산된 값을 나타낼 수 있다. 요소(106)에 의해 나타날 수 있는 다른 정보는 타임스탬프, 예컨대 데이터 레코드가 소스 어플리케이션(102)에 의해 생성되었을 경우의 각각의 시간을 포함할 수 있다. 예를 들어, 소스 어플리케이션(102)이 특정 시간 기간 동안 이루어지는 전화 호에 대한 정보를 기록하는 전화 데이터 레코드를 생성할 수 있다. 그러한 시나리오에서, 각각의 타임스탬프된 데이터 요소가 대응하는 전화 호가 종료된 정확한 시간을 나타낼 수 있다.
또다른 구현예에서, 각각의 타임스탬프된 요소가 대응하는 전화 호가 시작된 정확한 시간을 나타낼 수 있다. 호가 시작된 시간이 호가 끝난 시간으로부터 호의 길이를 감산함으로써 계산될 수 있다. 이러한 계산을 용이하게 하기 위하여, 호의 길이에 대한 정보가 소스 어플리케이션에 의해 생성된 전화 레코드에 저장될 수 있다.
몇몇 방식에서, 스트림(106) 내의 데이터 요소의 개별적 위치가 다양한 형태일 수 있다. 예를 들어, 데이터 요소의 순서가 완전히 랜덤일수 있거나 어느 정도는 결정되어 있을 수 있다(예컨대, 부분적으로 소팅되거나, 대부분 또는 거의 소팅되는 경우 등). 요소가 대부분 소팅되는 시나리오에서, 비교적 작은 퍼센트의 요소만 소팅되지 않거나 순서를 이루고 있지 않다. 예를 들어, 비교적 상당한 수의 데이터 요소(예컨대, 몇 백만)를 갖는 스트림에서, 요소의 대략 0.1 내지 10%가 순서를 이루고 있지 않다. 한 예로서, 소스 어플리케이션(102)이 전화기 호의 종료 시간을 나타내는 타임스탬프된 데이터 요소를 생성하는 경우의 시나리오에서, 요소가 실질적으로 비동기로 소트 모듈(108)에 도달할 수 있고, 가끔은 순서를 이루지 않고 도달할 수 있다. 예를 들어, 제1 시간 기간동안 소스 어플리케이션(102)에 의해 생성된 데이터가, 또다른 시간 기간동안(제1 시간 기간보다 나중임) 데이터가 생성된 후에 소트 모듈(108)에 도달할 수 있다.
대부분 소팅된 스트림에서, 요소는, 대다수의 요소와 적절한 순서로 있지 않은 몇몇을 제외하고 소팅된 순서로 있는 대개의 부분을 위한 것이다. 이러한 아웃라이어 요소를 스트림 내의 적당한 위치로 삽입하기 위하여, 종래 소팅 기술은 전형적으로 수신된 스트림의 모든 데이터 요소를 처리한다. 이로써, 이 기술은 요소를 소팅하기 위해 상당한 컴퓨팅 자원 및 처리 시간을 소모할 수 있고, 데이터 요소의 개수와 비례하여 커질 수 있는 연산 드레인을 생성할 수도 있다. 그러나, 데이터 요소의 대다수가 적절한 순서로 도달한다는 사실을 이용함으로써, 소팅 기술이 컴퓨터 자원 및 처리 시간을 보존하도록 개선될 수 있다.
예시적인 소팅 기술에서, 소트 모듈(108)이 소트 버퍼에 유입 요소를 임시로 저장하고, 적당한 시간에 버퍼로부터 요소(108a-108c)(일반적으로, 118)를 방출함으로써 거의 소팅된 유입 스트림을 소팅한다. 요소 방출이 방출 우선 순서(예컨대, 오름차순, 내림차순 등)에 따라 일어날 수 있다. 또한, 요소에 부과된 조건(예컨대, 버퍼에 저장된 임의의 두 요소 사이의 최대 허용 차)이 위반된 경우에 방출이 일어난다. 방출되면, 방출된 요소(118)가 요소의 소팅된 출력 스트림을 형성하도록 사용될 수 있다.
몇몇 실시예에서, 소트 버퍼에 순서없이 요소를 일시적으로 저장하고, 그 요소들을 적당한 시간에 출력 스트림으로 방출하는 동안, 소팅된 출력 스트림은 이미 출력 스트림에 직접 이미 소팅된 순서로 유입 요소를 전달함으로써 생성될 수 있다.
소트 모듈(108)은, 예를 들어, 컴퓨터 시스템(110) 상에서 실행되는 소프트웨어 어플리케이션으로서 구현될 수 있고, 저장 디바이스(114)(예컨대, 하드 드라이브 메모리, 랜덤 액세스 메모리 등)에 저장될 수 있는 소트 버퍼(112)(또는 다수의 소트 버퍼)를 제어하기 위한 명령어를 제공할 수 있다. 저장 디바이스는 컴퓨터 시스템(110)의 일부분 또는 별도로 분리된 메모리 디바이스 로서 구현될 수 있다.
일실시예에서, 소트 버퍼(112)에 저장된 요소(116)가 우선 순서, 예컨대 요소가 버퍼로부터 방출되는 순서에 따라 소팅되어 있다. 우선 순서는 요소의 미리결정된 특성(예컨대, 요소의 수치)에 기초할 수 있다. 예를 들어, 요소가 수치의 오름차순에 따라 소팅된다면, 작은 요소일수록 먼저 방출될 수 있고, 반면에 큰 요소일수록 늦게 방출될 수 있다. 요소가 내림차순에 따라 소팅된다면, 큰 요소일수록 먼저 방출될 수 있고, 반면에 작은 요소일수록 늦게 방출될 수 있다. 요소가 소트 버퍼에 수신되는 경우, 요소는 우선 순서에 따라 소팅될 수 있다. 타임스탬프된 데이터 요소를 수반하는 시나리오에서, 요소는 시간순 또는 역시간순에 따라 소팅될 수 있다. 예를 들어, 전화 호의 종료 시간을 나타내는 요소는 역시간순으로 배열될 수 있다.
방출된 데이터 요소(118)가 소트 버퍼에 저장된 요소의 최소값(또는, 우선되는 출력에 따라 최대값) 요소가 될 수 있다. 타임스탬프된 요소에서, 방출된 요소가 소트 버퍼에 저장된 요소의 가장 최근값(또는, 우선되는 출력에 따라 가장 오래된 값) 요소가 될 수 있다. 방출된 요소가 또다른 컴퓨팅 디바이스(예컨대, 컴퓨터 시스템(122)) 상에서 실행되는, 하나 이상의 모듈, 어플리케이션(예컨대, 수신 어플리케이션(120)) 등에 제공될 수 있다. 수신 어플리케이션(120)은 실질적으로 소팅된 출력 스트림을 수신하고 처리하기 위한 임의의 소프트웨어 어플리케이션일 수 있다.
일 실시예에서, 소트 버퍼의 일 단부에 새로 도달하는 요소를 수신하도록 구성될 수 있다. 소트 버퍼를 통해 (이 특정 단부로부터) 전파하는 동안, 수신된 데이터 요소는 (다른 요소와 함께) 소트 모듈(108)에 의해 처리될 수 있어서, (궁극적으로 버퍼로부터 방출되는) 요소가 버퍼의 대향하는 단부에 가까워지는 만큼 적당한 데이터 요소 사이에 위치된다.
유입 요소가 대부분 또는 거의 순서를 이루고 있기 때문에, 소트 버퍼(112)로의 삽입이 종종 버퍼의 단부에서 일어난다. 이러한 삽입 동작이 0(1) 시간의 기간이 걸린다고 고려될 수 있다. 요소가 소팅된 순서로 수신되는 한, 요소가 소트 버퍼의 성공적인 메모리 위치에 계속해서 추가된다. 그러나, 요소가 순서 없이 도달한다면, 요소를 삽입하는 적당한 메모리 위치를 찾는데 필요한 시간을 수용하는데 필요한 삽입 시간이 더 길어질 수가 있다. 예를 들어, 순서를 따르지 않는 요소를 수신하는 위치가 소트 버퍼의 단부로부터 거리 "k"에 있다면, 적당한 위치를 식별하는 것은 O(log(k)) 시간의 기간이 필요할 수 있다. 식별되면, 요소를 삽입하는데 필요한 시간이 일정하다고 고려될 수 있다. 소트 버퍼에 이미 저장된 "n" 데이터 요소가 있다면, 삽입 위치가 소트 버퍼의 단부로부터 단지 "n" 위치로서 간주될 수 있다. 따라서, 최악의 경우 삽입 시간이 O(log(n)) 시간이 될 수 있다.
소트 버퍼(112)가 소팅된 순서로 데이터 요소를 수신하고 저장하도록 구성되는 데이터 구조(예컨대, 우선순위 큐(priority queue) 데이터 구조)에 의해 구현될 수 있다. 신규 데이터 요소가 도달하는 경우, (우선순위 큐로서 구현되는) 소트 버퍼에 행해지는 소팅 순서에 의해 결정되는 것으로서 소트 모듈(108)이 적절한 위치에 요소를 삽입할 수 있다. 또한, 소트 모듈(108)이 방출 우선 순서에 기초하여 방출되는 요소 또는 데이터 요소(예컨대, 버퍼에서 최소의 또는 최대의 데이터 요소)를 식별할 수 있다. 식별되면, 소트 모듈이 소트 버퍼로부터 식별된 요소의 방출을 개시할 수 있다.
몇몇 구현예에서, 소트 버퍼(112)가 균형(balanced) 이진 트리 데이터 구조(예컨대, 힙(heap) 이진 트리 데이터 구조)일 수 있다. 힙 이진 트리 데이터 구조(종종 힙이라고 언급하기도 함)는 일반적으로 두 가지 조건을 만족시키는 것으로 고려된다. 제1 조건은 자식 노드의 우선권이 적어도 부모 노드의 우선권만큼 크다는 것이다. 따라서, 트리의 상부에서 노드(즉, 루트(root) 노드)가 최소 우선순위를 가진다고 여겨질 수 있다. 제2 조건은 루트 노드로부터 리프(leaf) 노드로의 상이한 경로들이 적어도 노드의 하나의 레벨에 의해 높이가 상이하다는 것이다.
일 구현예에서, 소트 버퍼가 스킵 리스트 데이터 구조에 의해 구현될 수 있다. 스킵 리스트 데이터 구조 및 그것의 연관된 알고리즘이 링크된 선형의 리스트의 변수이며, 키드(keyed) 데이터 요소의 빈번한 삽입을 필요로 하는 상황에서 소팅 수행을 개선할 수 있다. 스킵 리스트 데이터 구조가 데이터 요소(또는 노드)의 순서화되고, 링크된 선형의 리스트를 포함하며, 데이터 요소의 몇몇 요소는 중간 데이터 요소를 생략하는(skip) 추가의 포인터를 가짐으로써, 데이터 요소의 검색의 속도 및 효율을 증가시킬 수 있다.
스킵 리스트 데이터 구조로서 소트 버퍼를 구현함으로써, 예를 들어, 버퍼로부터 최소의 데이터 요소를 검색하는데 필요한 시간이 최소의 데이터 요소를 검색하기 위한 O(1) 시간일 수 있다. 삽입 시간이 데이터 요소를 적절히 삽입하기 위한 O(1) 시간일 수 있다(예컨대, 요소가 가장 최근에 삽입된 요소에 인접하여 삽입됨). 삽입 위치가 가장 최근의 요소에 인접하지 않다면 삽입 시간이 O(log N) 시간일 수 있다. 방출 시간이 "k" 요소(예컨대, 최대값을 가진 요소)를 판독하기 위한 O(k) 시간일 수 있다. 스킵 리스트 데이터 구조는 문헌[Willian Pugh, "Skip lists: A probabilistic alternative to Balanced trees" Communications of the ACM. June 1990, pp. 668-676]에 자세히 기술되어 있으며, 이 내용은 본원에 참조로 포함된다.
몇몇 실시예에서, 소트 버퍼(112)가 "트립(treap)" 데이터 구조에 의해 구현될 수 있다. 트립 데이터 구조는, 각 노드가 랜덤으로 할당된 우선 속성뿐만 아니라 키를 가지는, 이진 검색 트리이다. 즉, 키에 대하여, 노드의 왼편 서브트리가 노드의 키 미만인 키를 가진 노드만 포함하며, 반면에 노드의 오른편 서브트리는 노드의 키와 동일하거나 그 이상인 키를 가진 노드만 포함한다. 게다가, 노드는 그 우선 속성에 대하여 "힙 순서"로 있어서, 각각의 자식 노드가 적어도 부모 노드의 우선 속성만큼 큰 우선 속성을 가진다. 트립 데이터 구조는 문헌[Aragon, Cecilia R., and Seidel, Raimund, "Randomized Search Trees", Proc. 30th Symp. Foundations of Computer Science (FOCS 1989)]에 자세히 기술되어 있으며, 이 내용은 본원에 참조로 포함된다.
일 구현예에서, 소트 모듈(108)이, 소트 버퍼로부터의 요소가 방출되는지 여부 및 방출되는 시간을 결정하도록 사용되는, 소트 버퍼(112)에 적용되는 경계 조건을 야기한다. 경계 조건은 소트 버퍼에 허락된 값의 "윈도우"를 규정할 수 있다. 예를 들어, 윈도우가 소트 버퍼 내의 임의의 두개의 저장된 데이터 요소 사이의 최대 허용차를 나타낼 수 있다. 이로써, 윈도우의 "폭"은 소트 버퍼에 허락된 값의 범위를 나타낸다. 예를 들어, 윈도우 폭이 소트 버퍼에서 최소의 요소 및 최대의 요소 사이의 차일 수 있다.
경계 조건이 적어도 두 결과를 가질 수 있다. 예를 들어, 제1 결과는 경계 조건이 만족된다는 것을 의미할 수 있고, 상이한 제2 결과는 경계 조건이 위반되었다(즉, 만족되지 않는다)는 것을 의미할 수 있다. 일 시나리오에서, 제공되는 유입 요소가 초과되는 윈도우 폭을 초래하지 않는 한은 경계 조건이 만족되는 것으로 간주될 수 있다. 반대로, 유입 요소가 초과되는 윈도우 폭을 초래한다면 경계 조건은 위반되는 것으로 여겨질 수 있다. 경계 조건이 위반되면, 버퍼의 하나 이상의 요소가 방출 우선 순서에 따라 방출된다.
일 실시예로서, 소트 버퍼가 (오름차순으로) 소팅된 요소로서 수치를 가진다는 시나리오를 가정해 보자. 소트 버퍼에 대한 15의 값의 윈도우 폭이 버퍼에서 최소의 저장된 요소 및 최대의 저장된 요소 사이의 차가 15를 초과하지 않는다는 것을 나타낸다. 예를 들어, 버퍼에서 현재의 최소의 요소가 3이고, 신규의 유입 요소가 19라면, 최소의 요소와 최대의 요소 사이의 차가 현재 16인 것이며, 이는 윈도우 폭을 초과하고, 경계 조건이 위반되는 것으로 간주된다. 이러한 위반으로 인해, 소트 버퍼 내의 하나 이상의 요소(예컨대, 최소의 데이터 요소 또는 최대의 데이터 요소)가 방출된다.
몇몇 실시예에서, 소트 모듈(108)이 윈도우 폭에 의해 결정되는 것으로서 소트 버퍼(112) 내의 최소의 요소 및 최대의 요소의 진로를 파악하고 있다. 유입 요소가 최대의 요소를 초과하는 경우, 경계 조건이 위반되는 것으로 간주되며, 소트 모듈이 소트 버퍼로 하여금 예를 들어, 최소의 데이터 요소를 방출할 것을 야기한다.
윈도우 폭이 사용자에 의해 명시되는 것과 같은 다양한 소스로부터 제공될 수 있다. 일 구현예에서, 소팅을 위한 특정 어플리케이션의 일반 상식에 기초하는 윈도우 폭이 필요하다. 몇몇 경우에서는, 윈도우 폭이 "순서를 따르지 않음(out-of-orderness)"의 측정, 예컨대 요소들이 얼마나 순서를 따르지 않는지의 측정에 대응한다. 예를 들어, 타임스탬프된 데이터 요소를 수반하는 경우를 고려해 보자. 윈도우 폭이, 버퍼에서 현재 타임스탬프된 요소(최소의 타임스탬프된 요소 또는 최대의 타임스탬프된 요소)에 대하여 얼마나 늦은 타임스탬프된 요소가 소트 버퍼에 제공되는지를 나타낸다. 예를 들어, 윈도우 폭(시간의 유닛에서)이 4시간이라면, 소트 버퍼(112)가 소트 버퍼 내의 최소의 타임스탬프된 요소에 대하여 4시간 윈도우 내에 모든 타임스탬프된 요소를 버퍼링(즉, 저장)할 것이다. 4시간 이후에 도달하는 타임스탬프된 요소들은 폐기되거나 별도로 처리될 것이다.
도시된 실시예에서 단일의 버퍼가 사용되는 반면, 다수의 버퍼 아키텍처도 역시 이용될 수 있다. 예를 들어, 제2 버퍼(도시되지 않음)가 시간의 특정 기간(예컨대, 24시간 기간) 동안 도달하는 타임스탬프된 요소를 버퍼링하도록 사용될 수 있다. 24시간 기간이 초과하면, 타임스탬프된 요소가 거부되거나, 폐기되거나 또는 별도로 처리될 수 있다. 일 구현예에서, 상기 24 시간 기간 이내에 속하는 타임스탬프된 요소가 상기 24 시간 기간 이후에 도달하는 것이 가능하다. 주의하여 한계 타임스탬프 값을 선택함으로써, 정당한 요소의 상당 수가 방출될 확률이 낮아질 수 있다. 몇몇 시나리오에서, 윈도우 소팅 기술이 연산 자원의 효율적인 사용 및 낮은 처리 시간을 제공하는 어플리케이션에서 소수의 정당한 요소의 손실이 양호한 편이다.
도 2는 윈도우 소팅 처리의 동작 동안 소트 버퍼(예컨대, 소트 버퍼(112))의 상태(202-218)를 나타내는 도표이다. 소트 버퍼의 각각의 컨텐츠에 대한 정보, 윈도우 폭(라벨 W로 지칭됨), 최소의 요소(라벨 S로 지칭됨), 및 현재의 출력 데이터 요소가 각 상태(202-218)에 제공된다. 이 실시예에서, 데이터 요소가 오름차순으로 저장되고, 유입 스트림이 오름차순으로 거의 소팅된다. 윈도우 소팅 처리의 결론에서, 실질적으로 오름차순으로 소팅되는 출력 스트림이 제공된다. 도 2가 단지 8개 요소의 스트림에서 작동하는 윈도우 소팅 처리의 일실시예를 도시하고 있으며, 상기 처리는 실질적으로 더 많은 요소를 포함하는 유입 스트림 상에서 계속적으로 실행될 수 있다.
상태 202에서, 윈도우 폭이 15의 값(즉, 버퍼에서 요소의 최소의 값 및 최대의 값 사이의 차가 15를 넘지 않거나 15와 동일함)을 가지는 것으로 규정된다. 초기 설정에서, 소트 버퍼 내의 현재의 최소의 요소가 0의 값이다(S = 0). 또한, 현재의 출력이 "NIL"로 도시된다. 즉, 출력 데이터 요소가 존재하지 않는다.
상태 204에서, 값이 3인 제1 유입 요소가 소트 버퍼에 삽입된다. 버퍼에서 3의 위치가 소트 버퍼 내의 요소의 현재 순서에 기초하여 결정된다(즉, 오름차순). 도시된 바와 같이, 값이 3인 요소가 0에 인접하여 삽입된다. 소트 버퍼 내의 요소의 최소의 값과 최대의 값 사이의 차가 현재 3이며, 이것은 윈도우 폭인 15 미만이다. 따라서, 경계 조건에 위반되지 않으며, 데이터 요소가 방출되는 것이 요구되지 않는다. 현 시점에서는, 출력 데이터 요소가 존재하지 않는다.
상태 206 및 208에서, 입력 스트림의 값이 5와 7인 요소가 소트 버퍼로 적절한 위치에 삽입된다. 상태 208의 후반에서, 소트 버퍼 내의 최소의 요소와 최대의 요소 사이이 차가 7이며, 이는 여전히 윈도우 폭인 15 미만이다. 즉, 경계조건이 위반되지 않았으며, 데이터 요소가 방출되는 것이 필요하지 않다. 따라서, 여전히 출력 데이터 요소는 존재하지 않는다.
상태 210에서, 값 15의 요소가 소트 버퍼로 삽입되는 경우, 버퍼의 최소의 요소와 최대의 요소 사이의 차가 현재 15이고, 이는 윈도우 폭 15와 동일하다. 조건 경계는 위반된다. 따라서, 소트 버퍼(112)에서 가장 최소의 요소인 값이 0인 요소가 출력 스트림의 제1 요소로서 방출된다. 게다가, 소트 버퍼 내의 가장 최소의 요소, S는 현재 3이 된다.
상태 212에서, 값이 8인 요소가 소트 버퍼 내의 값이 15와 7인 요소 사이에 삽입된다. 버퍼 내의 요소의 최소의 값과 최대의 값의 차가 12이며, 이는 윈도우 폭 15 미만이다. 따라서, 경계 조건이 위반되지 않으며, 데이터 요소가 방출되지 않는다.
상태 214에서, 값이 21인 요소가 소트 버퍼로 삽입되는 경우, 버퍼 내의 요소의 최소의 값과 최대의 값의 차가 21 - 3인 18이며, 이는 윈도우 폭인 15를 초과한다. 윈도우 폭을 벗어나는 값을 가지는 모든 데이터 요소가 방출된다. 즉, 도시된 바와 같이, 값이 3, 5 및 7인 요소가 방출된다. 소트 버퍼 내에서 신규의 최소의 데이터 요소인 S는 현재 값이 8인 요소가 된다.
상태 216에서, 값이 11인 요소가 소트 버퍼 내로 삽입되는 경우, 버퍼 내의 요소의 최소의 값과 최대의 값 사이의 차는 21 - 8인 13이며, 이는 윈도우 폭인 15 미만이다. 따라서, 경계 조건이 위반되지 않으며, 데이터 요소가 방출되지 않는다.
상태 218에서, 값이 7인 요소가 소트 버퍼로 삽입되는 경우, 소트 버퍼(112) 내의 최소의 요소의 값은 7이다. 이로써, 버퍼 내의 요소의 최소의 값과 최대의 값 사이의 차가 21 - 7인 14이며, 이는 윈도우 폭인 15 미만이다. 따라서, 경계 조건이 또 다시 위반되지 않으며, 데이터 요소가 방출되지 않는다.
윈도우 소팅 처리의 구현이 연산 그래프(computational graph)에 사용될 수 있다. 도 3을 참조하면, 연산 그래프(302)를 관리하기 위한 시스템(300)의 부품들 간의 연관성이 도시되어 있다. 그래픽 개선 환경(graphic development environment, GDE)(304)이 실행 가능한 연산 그래프(302)를 특정하고, 연산 그래프(302) 내의 윈도우 소팅 컴포넌트(308)를 포함하는 하나 이상의 그래프 컴포넌트(306a-306c)를 위한 파라미터를 정의하기 위해 사용자 인터페이스를 제공한다. 상기 GDE(304)는 예를 들어, 미국특허 제7,164,422호인 "조건부 컴포넌트로 파라미터화된 그래프(PARAMETERIZED GRAPHS WITH CONDITIONAL COMPONENTS)"에 기술되어 있으며, 이 특허의 내용은 본원에 참조로 포함된다.
연산 그래프(302)는 복잡한 계산을 표현하는데 사용될 수 있다. 그러한 그래프 기반 계산을 구현하는 시스템이 미국특허 제5,966,072호인 "그래프로 나타낸 연산 실행(EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS)"에 기술되어 있으며, 이 특허의 내용은 본원에 참조로 포함된다. 몇몇 구현예에서, 연산 그래프가 정점들 간의 유도된 링크(워크 요소의 흐름을 나타냄)에 의해 연결되는 정점들(컴포넌트 또는 데이터세트를 나타냄)을 포함한다. 몇몇 경우에, 연산 그래프(302)가 입력 데이터 레코드의 흐름을 수신하고, 계산이 종료될 때까지 무기한으로 컴포넌트(306)으로부터의 결과를 제공하기 위해 데이터 레코드를 처리하도록 구성된다. 몇몇 경우에, 연산 그래프(302)가 입력 데이터 레코드의 배치(batch)를 수신하고, 상기 배치에 대한 결과를 제공하기 위해 데이터 레코드의 배치를 처리하고, 그리고 나서, 상기 배치가 처리된 이후에 종료하거나 또는 아이들 상태로 돌아가도록 구성된다.
컴포넌트(306a-306c 및 308)가 컴포넌트(306a-306c 및 308) 간의 데이터 흐름을 나타내는 유도되는 원호 또는 선에 의해 함께 링크된다. 컴포넌트(306a-306c 및 308)가 하나 이상의 소스 컴포넌트(예컨대, 컴포넌트 306a), 데이터 처리 컴포넌트(예컨대, 컴포넌트 306b), 및 데이터 싱크(sink) 컴포넌트(예컨대, 컴포넌트 306d)를 포함할 수 있다. 데이터 소스 컴포넌트(306a)가 데이터 레코드의 형태로 데이터를 생성하는 하나 이상의 컴퓨터 시스템(예컨대, 도 1의 소스 어플리케이션(102)) 상에서 구현되는 소스 어플리케이션을 대신할 수 있다. 데이터 처리 컴포넌트(306b)가 데이터 소스 컴포넌트(306a)에 의해 생성되는 데이터 레코드를 처리한다. 데이터 싱크 컴포넌트(306d)가 데이터 처리 컴포넌트(306b)의 결과를 사용한다. 데이터 처리 컴포넌트(306b)로부터의 결과가 대부분 소팅된 데이터 요소의 스트림의 형태일 수 있다. 이로써, 윈도우 소트 컴포넌트(308)가 데이터 처리 컴포넌트(306b)로부터 결과 스트림을 소팅하도록 도입되고, 싱크 컴포넌트(306c)로 실질적으로 소팅된 데이터 스트림을 제공할 수 있다.
일례의 시나리오에서, 데이터 소스 컴포넌트(306a)가 두 개의 동일한 소팅된 데이터 스트림(310a 및 310b)을 생성하고, 하나의 스트림(예컨대, 스트림(310b))을 컴포넌트(306b)로 전송할 수 있다. 컴포넌트(306b)는 데이터 레코드가 저장되는 메모리 위치의 어드레스로 어드레스 스트림(310c)을 생성하기 위해 스트림(310b)을 처리한다. 메모리 위치는 인접하고 연속하여 배열되는 것, 즉 a0,a0+1, a0+2...a0+n(여기서, a0은 초기 메모리 위치의 어드레스임)으로 알려져 있다. 이로써, 주소 스트림의 개별의 주소가 또한 연속하여 순서화되도록 예상된다. 그러나, 때때로 컴포넌트(306b)에서의 처리 딜레이가 하나 이상의 주소로 하여금 어드레스 스트림에 늦게 출력되도록 하는 것을 야기할 수 있다. 결과적으로, 개별의 주소는 소팅된 스트림(310a)에 있는 데이터 레코드에 더이상 적절히 대응하지 않는다. 이러한 상황을 해결하기 위해, 소트 컴포넌트(308)가 원래 순서로 돌아가서 어드레스(새로운 어드레스 스트림(310d)으로서 생성됨)를 소팅하도록 사용될 수 있다.
전형적인 어플리케이션에서, 어드레스 스트림에서의 개별의 어드레스의 위치가 원래의 위치로부터 너무 멀지는 않다. 어드레스가 원래의 위치로 돌아가서 복구되기 위해 이러한 특성이 소트 컴포넌트에 의해 활용될 수 있다. 어드레스 스트림이, 각각의 유입 어드레스 및/또는 각각의 출력 어드레스의 방출 이후에 변경되는 동적으로 재조정된 한계(cutoff) 어드레스의 형태로 경계 조건을 가지는 소트 버퍼 내에 수신된다. 본래, 한계 어드레스가 어드레스 스트림에서 가장 빠른 어드레스로 초기화된다. 후속하여, 유입 어드레스가 하나에 의해 한계 어드레스보다 큰 경우, 한계 어드레스는 유입 어드레스로 변경된다. 어드레스가 소트 컴포넌트에 도달하기 때문에, 한계 어드레스보다 작거나 동일하다고 분석되는 어드레스가 소팅 방법으로 바로 출력된다. 반면에, 한계 어드레스 값보다 큰다고 분석되는 어드레스는 소트 버퍼 내에 저장된다.
도 4를 참조하면, 데이터 요소의 대부분 또는 거의 소팅된 스트림을 소팅하기 위한 일례의 윈도우 소팅 처리(400)가 도시되어 있다. 일 구현예에서, 이하 서술된 단계가 컴퓨터 시스템 상에서 실행되는 소프트웨어 어플리케이션에 의해 수행될 수 있다. 예를 들어, 프로세스(400)가 소팅 시스템(100)(도 1에 도시되어 있음)에 의해 실현될 수 있다. 유입 데이터 요소를 버퍼링하기 위한 소트 버퍼가 초기화된다(단계 402). 초기화는 유입 요소를 저장하기 위해, 메모리 영역, 즉 복수의 인접 메모리 어드레스를 특정하는 것을 포함할 수 있다. 초기화의 일부로서, 경계 조건이 소트 버퍼 상에 특정될 수 있다. 예를 들어, 변수가 소트 버퍼에 대한 윈도우 폭에 대응하는 값을 유지하도록 규정될 수 있다. 윈도우 폭이 소트 버퍼 내에 임의의 두 개의 저장된 요소 값 사이의 최대 허용차를 나타낼 수 있다. 몇몇 실시예에서, 경계 조건이 동적으로 조정된 한계값으로 표현될 수 있다.
소트 버퍼 상의 경계 조건이 규정된 이후에, 소트 버퍼가 데이터 요소의 유입 스트림을 수신하도록 준비된다(단계 404). 하나 이상의 기술 및 방법론이 유입 데이터 요소를 수신하도록 이용될 수 있다. 일 구현예에서, 유입 요소가 수신되어 소트 버퍼로 삽입된다. 처음에, 소트 버퍼가 비어있는 경우, 제1 요소가 미리 정의된 특성으로의 디폴트로서 선택될 수 있다(예컨대, 제1 요소가 가장 높은 방출 우선권을 가지는 것으로서 선택될 수 있음). 예를 들어, 제1 요소가 소트 버퍼 내의 가장 최소의 요소로 간주될 수 있다. 후속의 더 큰 요소가 수신되는 경우, 제거 또는 방출 우선에 기초하여 적당한 위치로 삽입될 수 있다(예컨대, 오름차순으로 제1 요소에 인접하여). 일 구현예에서, 요소가 버퍼로 삽입될 때마다, 가장 높은 우선의 요소(또는 가장 최소의 요소)가 재계산된다.
요소가 경계 조건을 위반하는지를 판단하도록 경계 조건이 적용된다(단계 406). 하나 이상의 기술이 경계 조건 어플리케이션을 위해 구현될 수 있다. 예를 들어, 소트 버퍼의 윈도우 폭이 초과하는지의 판단이 이루어진다. 경계 조건이 위반되지 않으면(즉, 소트 버퍼의 윈도우 폭이 초과되지 않은 경우), 유입 스트림에서 다음의 데이터 요소가 처리되기 위해 수신된다.
경계 조건이 위반되면(즉, 윈도우 폭이 초과되는 경우), 하나 이상의 요소가 방출 우선 순위에 따라 방출된다(단계 408). 예를 들어, 방출된 요소가, 소트 버퍼의 윈도우 폭이 초과되는 것을 초래하는 하나 이상의 다른 요소 및 적어도 가장 최소의 요소를 포함한다. 게다가, 초과되는 윈도우 폭을 초래하지 않는 신규의 최소의 요소가 식별된다. 이로써, 하나 이상의 기술이 미리결정된 순서에 따라 소팅된 데이터 요소의 출력 스트림으로서 경계 조건에 기초하여 버퍼로부터 하나 이상의 데이터 요소를 생산하기 위해 구현될 수 있다.
유입 요소가 존재하는 한 각각의 유입 요소에 대해 프로세스(400)가 반복된다.
일 구현예에서, 소트 버퍼가 최대 용량에 도달할 수 있는데, 예컨대 물리적인 메모리 크기가 초과될 수 있기 때문이다. 그러한 상황에서, 스필오버 메커니즘(spill-over mechanism)이 구현될 수 있다. 스필오버 매커니즘은 소트 버퍼로부터 이차 메모리 저장 영역(도시되지 않음)으로 하나 이상의 데이터 요소를 전송하는 것을 포함한다. 이차 메모리 저장 영역 내의 데이터 요소를 표시하기 위해 소트 버퍼 내에 "키(key)" 요소 또는 아이템이 삽입될 수 있다. 스필오버 메커니즘은 미국특허출원 제13/031,034호에 더 자세히 기술되어 있으며, 이 특허의 내용은 본원에 참조로 포함된다.
몇몇 구현예에서, 경계 조건이 소트 버퍼의 미리결정된 최대 허용 크기(예컨대, 버퍼 내에 허락되는 요소의 최대 수)에 의해 표현될 수 있다. 또한, 일 구현예에서, 경계 조건이 윈도우 폭 한계뿐만 아니라 최대 크기 한계의 둘 다에 의해 표현될 수 있다. 이 구현예에서, 소트 모듈이, 초과되는 버퍼의 윈도우 폭 또는 최대 크기를 유발하는 요소를 수신하는 것에 응답하여 요소의 방출을 야기할 수 있다.
몇몇 실시예에서, 처리 기간의 후반에 소트 버퍼에 남아있는 데이터 요소가 처리의 후반에 소팅되는 방법으로 출력될 수 있다. 몇몇 실시예에서, 남아있는 요소가 데이터 요소의 나머지로부터 별도로 다르게 처리될 수 있다. 몇몇 구현예에서, 어플리케이션이 어플리케이션의 연산 논리의 오류나 불량, 예컨대 소트 버퍼가 미리결정된 요소의 개수 이상의 수를 저장하거나 임의의 모든 요소를 저장하는 경우에 대해 사용자에게 경고할 수 있다.
일 실시예에서, 소트 버퍼 상의 경계 조건이 위반되는 데이터 요소가 존재하는 경우에 대해 사용자에게 경고할 수 있다. 예를 들어, 사용자가 역시간순인 데이터 레코드의 리스트에 있는 구현예에서, 사용자는 하나 이상의 순서에 따르지 않는 데이터 레코드의 존재에 대해 경고를 받을 수 있다. 순서에 따르지 않는 데이터 레코드가, 레코드에 대응하는 데이터 요소가 경계 조건을 만족하는지, 즉 데이터 요소가 사용자에 의해 특정된 윈도우 폭 내에 있는지의 판단에 기초하여 식별된다. 예를 들어, 하나 이상의 순서를 따르지 않는 데이터 레코드가 사용자의 주의를 끌도록 강조될 수 있다. 몇몇 실시예에서, 하나 이상의 순서에 따르지 않는 데이터 레코드가 별도의 처리를 위한 데이터 요소의 스트림으로부터 추출될 수 있다.
본원에 기재된 기술이 컴퓨터 상의 실행을 위한 소프트웨어를 사용하여 구현될 수 있다. 예를 들어, 소프트웨어는 하나 이상의 프로그램된 또는 프로그램이 가능한 컴퓨터 시스템(분산(distributed), 클라이언트/서버 또는 그리드(grid)와 같은 다양한 아키텍처일 수 있음) 상에서 실행되는 하나 이상의 컴퓨터 프로그램 내의 절차를 형성하며, 이때 각 컴퓨터 시스템은 하나 이상의 프로세서, 하나 이상의 데이터 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소), 하나 이상의 입력 디바이스 또는 포트, 및 하나 이상의 출력 디바이스 또는 포트를 포함한다. 소프트웨어가 더 큰 프로그램, 예컨대 연산 그래프의 디자인 및 구성에 관련있는 다른 서비스를 제공하는 프로그램의 하나 이상의 모듈을 형성할 수 있다. 그래프의 노드 및 요소가 컴퓨터 판독가능 매체 또는 데이터 저장소 내에 저장된 데이터 모델에 따르는 다른 조직화된 데이터 내에 저장되는 데이터 구조로서 구현될 수 있다.
소프트웨어가, 일반 또는 특정 목적 프로그램 가능 컴퓨터에 의해 판독가능하거나, 실행되는 경우에 네트워크의 통신 매체를 통해 컴퓨터에 전달되는(전파 신호로 부호화되는) CD-ROM와 같은 저장 매체 상에 제공될 수 있다. 모든 기능이 특정 목적 컴퓨터 상에서 또는 코프로세서(coprocessor)와 같은 특정 목적 하드웨어를 사용하여 수행될 수 있다. 소프트웨어가, 소프트웨어에 의해 특정되는 계산의 서로 다른 부분들이 서로 다른 컴퓨터들에 의해 수행되는 식의 분산 방식으로 구현될 수 있다. 바람직하게, 그러한 각각의 컴퓨터 프로그램이, 저장 매체 또는 일반 또는 특정 목적 프로그램 가능 컴퓨터에 의해 판독가능한 디바이스(예컨대, 고체 상태 메모리 또는 매체, 또는 자성 또는 광학 매체)에 저장되거나 다운로드되어, 저장 매체 또는 디바이스가 본원에 기재된 절차를 수행하기 위한 컴퓨터 시스템에 의해 저장되는 경우에 컴퓨터를 작동하고 구성할 수 있다. 고안된 시스템은 또한 구성된 저장 매체가 컴퓨터 시스템으로 하여금 본원에 기술된 기능을 수행하기 위해 특정의 미리결정된 방식으로 작동하도록 하는 컴퓨터 프로그램으로 구성된 컴퓨터 판독가능 저장 매체로서 구현된다고 고려될 수 있다.
다수의 구현예가 본원에 기재되었다. 그럼에도 불구하고, 본 발명의 개념 및 범위를 벗어남이 없이 다양한 변형이 가능하다는 것을 이해할 것이다. 예를 들어, 상기 설명한 단계들 중 몇몇은 반드시 그 순서대로 수행되지 않아도 되며, 설명된 것과 다른 순서대로 수행되어도 된다.
이상의 설명은 후속되는 청구범위에 의해 정해지는 본 발명의 범위를 제한하기 위한 것이 아니라 예시일 뿐이다. 예를 들어, 앞서 설명한 많은 기능적 단계들은 전체적인 과정에 실질적인 영향을 미치지 않으면서, 다른 순서로 수행되어도 된다. 다른 실시예는 이하의 청구범위에 포함된다.

Claims (1)

  1. 발명의 상세한 설명에 기재된, 또는 도면에 도시된 바와 같은 장치.
KR20157008254A 2011-02-18 2012-02-16 소팅 KR20150042874A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/031,056 2011-02-18
US13/031,056 US9003084B2 (en) 2011-02-18 2011-02-18 Sorting
PCT/US2012/025375 WO2012112744A2 (en) 2011-02-18 2012-02-16 Sorting

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137020101A Division KR101857510B1 (ko) 2011-02-18 2012-02-16 소팅

Publications (1)

Publication Number Publication Date
KR20150042874A true KR20150042874A (ko) 2015-04-21

Family

ID=45755583

Family Applications (2)

Application Number Title Priority Date Filing Date
KR20157008254A KR20150042874A (ko) 2011-02-18 2012-02-16 소팅
KR1020137020101A KR101857510B1 (ko) 2011-02-18 2012-02-16 소팅

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020137020101A KR101857510B1 (ko) 2011-02-18 2012-02-16 소팅

Country Status (9)

Country Link
US (2) US9003084B2 (ko)
EP (1) EP2676189B1 (ko)
JP (1) JP6060094B2 (ko)
KR (2) KR20150042874A (ko)
CN (1) CN103392169B (ko)
AU (1) AU2012217617B2 (ko)
CA (1) CA2826280C (ko)
HK (1) HK1187428A1 (ko)
WO (1) WO2012112744A2 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting
CN103780692B (zh) * 2014-01-13 2017-01-11 中国科学院计算技术研究所 一种键值存储的数据访问方法及其系统
CH709742A1 (de) * 2014-06-05 2015-12-15 Swisstradingbox Ag Börsenhandelssystem.
US10523596B1 (en) * 2015-02-06 2019-12-31 Xilinx, Inc. Circuits for and methods of merging streams of data to generate sorted output data
US10073877B2 (en) 2015-06-11 2018-09-11 International Business Machines Corporation Data processing flow optimization
US20190050199A1 (en) * 2018-03-30 2019-02-14 Richard Allen Localized grid sort
CN109949378B (zh) * 2019-03-26 2021-06-08 中国科学院软件研究所 图像灰度值排序方法、装置、电子设备及计算机可读介质
EP4049421B1 (en) * 2019-10-29 2023-11-29 Huawei Technologies Co., Ltd. Systems and methods for sorting data elements with approximation to o(1)
US11899579B2 (en) * 2020-06-22 2024-02-13 StockX LLC Systems and methods for normalizing data from multiple sources

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6446830A (en) * 1987-08-17 1989-02-21 Nippon Telegraph & Telephone Data selection system
US5218670A (en) 1990-08-31 1993-06-08 Texas Instruments Incorporated Apparatus and methods for the handling of banded frame buffer overflows
US6236655B1 (en) 1995-07-19 2001-05-22 Fujitsu Network Communications, Inc. Port and link identification
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US5996031A (en) * 1997-03-31 1999-11-30 Ericsson Inc. System and method for the real time switching of an isochronous data stream
US6088716A (en) 1997-04-28 2000-07-11 Ab Initio Software Corporation Method for preventing buffer deadlock in dataflow computations
JP3544127B2 (ja) 1997-10-24 2004-07-21 キヤノン株式会社 画像形成装置および画像形成装置の制御方法
JPH11175281A (ja) 1997-12-15 1999-07-02 Hitachi Information Technology Co Ltd 印刷データバッファ制御方式
US6161155A (en) * 1998-07-20 2000-12-12 Hewlett-Packard Company Apparatus and method for storing retrievable boundary information into a buffer memory of a receiving device
AU9240598A (en) 1998-11-16 2000-05-18 Ericsson Australia Pty Ltd Method and system for scheduling packets in a telecommunications network
US6401147B1 (en) 1999-05-24 2002-06-04 Advanced Micro Devices, Inc. Split-queue architecture with a first queue area and a second queue area and queue overflow area having a trickle mode and an overflow mode based on prescribed threshold values
US7301954B1 (en) * 1999-09-24 2007-11-27 United States Of America As Represented By The Secretary Of The Navy Multiple-buffer queueing of data packets with high throughput rate
US7164422B1 (en) 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US7213087B1 (en) 2000-08-31 2007-05-01 Hewlett-Packard Development Company, L.P. Mechanism to control the allocation of an N-source shared buffer
US6842800B2 (en) * 2001-08-30 2005-01-11 Marconi Intellectual Property (Ringfence) Inc. System and method for managing configurable buffer sizes
US7162546B2 (en) 2001-12-27 2007-01-09 Intel Corporation Reordering unrelated transactions from an ordered interface
US6925539B2 (en) 2002-02-06 2005-08-02 Seagate Technology Llc Data transfer performance through resource allocation
US6877048B2 (en) * 2002-03-12 2005-04-05 International Business Machines Corporation Dynamic memory allocation between inbound and outbound buffers in a protocol handler
CN100399338C (zh) * 2002-06-26 2008-07-02 联想(北京)有限公司 一种数据记录处理方法
TWI313412B (en) * 2002-11-25 2009-08-11 Ibm Method and apparatus for intermediate buffer segmentation and reassembly
US7003597B2 (en) * 2003-07-09 2006-02-21 International Business Machines Corporation Dynamic reallocation of data stored in buffers based on packet size
US20050165985A1 (en) * 2003-12-29 2005-07-28 Vangal Sriram R. Network protocol processor
WO2005089158A2 (en) * 2004-03-16 2005-09-29 Snowshore Networks, Inc. Jitter buffer management
US7958292B2 (en) 2004-06-23 2011-06-07 Marvell World Trade Ltd. Disk drive system on chip with integrated buffer memory and support for host memory access
JP4561240B2 (ja) * 2004-08-26 2010-10-13 ソニー株式会社 データ処理装置およびデータ処理方法並びにデータ送受信システム
US7877350B2 (en) * 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
JP4687320B2 (ja) * 2005-08-11 2011-05-25 ソニー株式会社 画像処理装置および方法、記録媒体、並びに、プログラム
JP2007179183A (ja) * 2005-12-27 2007-07-12 Fujifilm Corp メディアンフィルタおよびメディアンフィルタプログラム
KR20070076726A (ko) * 2006-01-19 2007-07-25 삼성전자주식회사 엔드포인트 제어 장치 및 방법
JP4347322B2 (ja) * 2006-07-14 2009-10-21 ソニー株式会社 受信装置および方法、並びにプログラム
US7496707B2 (en) * 2006-08-22 2009-02-24 International Business Machines Corporation Dynamically scalable queues for performance driven PCI express memory traffic
US7937419B2 (en) * 2008-06-26 2011-05-03 Tatu Ylonen Oy Garbage collection via multiobjects
US8024498B2 (en) * 2008-12-15 2011-09-20 International Business Machines Corporation Transitions between ordered and ad hoc I/O request queueing
JP5534469B2 (ja) * 2009-03-23 2014-07-02 株式会社ソニー・コンピュータエンタテインメント チャットシステム、チャット方法、チャット実行プログラム、チャット実行プログラムが記憶された記憶媒体、情報処理装置、画像表示方法、画像処理プログラム、画像処理プログラムが記憶された記憶媒体
JP5235800B2 (ja) * 2009-06-24 2013-07-10 日本電信電話株式会社 Ipストリーム送受信システム、ipストリーム送受信方法、ipストリーム送受信プログラムおよびそのプログラムを記録した記録媒体
US8447901B2 (en) 2011-02-18 2013-05-21 Ab Initio Technology Llc Managing buffer conditions through sorting

Also Published As

Publication number Publication date
CA2826280C (en) 2018-07-31
US9128686B2 (en) 2015-09-08
CA2826280A1 (en) 2012-08-23
EP2676189B1 (en) 2014-10-29
US9003084B2 (en) 2015-04-07
KR20140014125A (ko) 2014-02-05
JP2014511526A (ja) 2014-05-15
CN103392169A (zh) 2013-11-13
WO2012112744A3 (en) 2013-02-28
EP2676189A2 (en) 2013-12-25
US20150212796A1 (en) 2015-07-30
WO2012112744A2 (en) 2012-08-23
JP6060094B2 (ja) 2017-01-11
HK1187428A1 (en) 2014-04-04
KR101857510B1 (ko) 2018-05-14
CN103392169B (zh) 2016-06-01
AU2012217617B2 (en) 2015-09-03
AU2012217617A1 (en) 2013-05-02
US20120215992A1 (en) 2012-08-23

Similar Documents

Publication Publication Date Title
KR101857510B1 (ko) 소팅
JP5977263B2 (ja) バッファオーバーフロー状態の管理
US9787706B1 (en) Modular architecture for analysis database
JP5785385B2 (ja) イベント処理ネットワークならびに関連する方法および記憶媒体(イベント処理ネットワーク)
US9454375B2 (en) Parallel program analysis and branch prediction
CN110413210B (zh) 用于处理数据的方法、设备和计算机程序产品
US9652310B1 (en) Method and apparatus for using consistent-hashing to ensure proper sequencing of message processing in a scale-out environment
US20080306948A1 (en) String and binary data sorting
CN114912620A (zh) 量子计算机操作系统、量子计算机及可读存储介质
WO2012115007A1 (ja) 故障の木解析システム、故障の木解析方法及びプログラム
WO2013019201A1 (en) Incident handling
CN114491426A (zh) 一种基于下推自动机的信息流路径跟踪方法、装置及系统
KR20220074725A (ko) 불확실성 그래프 분석을 위한 샘플링 방법, 캐싱 방법 및 샘플링 장치
CN114281476A (zh) Kubernetes云原生集群资源删除保护方法、装置、设备及存储介质
Bingham et al. Response property checking via distributed state space exploration
CN112765210A (zh) 数据聚合方法和装置

Legal Events

Date Code Title Description
A107 Divisional application of patent
WITN Withdrawal due to no request for examination