KR20200021946A - 병렬 프로세싱을 사용한 해시 조인들의 수행 - Google Patents
병렬 프로세싱을 사용한 해시 조인들의 수행 Download PDFInfo
- Publication number
- KR20200021946A KR20200021946A KR1020197038516A KR20197038516A KR20200021946A KR 20200021946 A KR20200021946 A KR 20200021946A KR 1020197038516 A KR1020197038516 A KR 1020197038516A KR 20197038516 A KR20197038516 A KR 20197038516A KR 20200021946 A KR20200021946 A KR 20200021946A
- Authority
- KR
- South Korea
- Prior art keywords
- groupings
- data records
- data
- grouping
- records
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
데이터 레코드들이 컴퓨터를 사용하여 조인된다. 제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들이 해시된다. 제 1 및 제 2 복수의 데이터 레코드들은 해시들에 기초하여 제 1 및 제 2 그루핑들에 각각 할당된다. 제 1 및 제 2 그루핑들로부터의 연관된 그루핑들의 쌍들은 컴퓨터 프로세서 상에서 실행하는 스레드에 제공되고, 상이한 쌍들이 상이한 스레드들에 제공된다. 스레드들은 그루핑들에서의 레코드들을 조인할지 여부를 결정하기 위해 그루핑들의 쌍들에 대해 병렬로 동작한다. 스레드는 데이터 레코드들과 연관된 해시들이 매칭하는 경우 고려 중인 2 개의 데이터 레코드들을 조인한다. 조인된 상기 데이터 레코드들이 출력된다.
Description
본 명세서는 일반적으로 데이터 프로세싱 기법들에 관한 것으로, 보다 구체적으로는 병렬 프로세싱 컴퓨터 시스템들 (예를 들어, 멀티-코어 프로세서들) 에 최적화된 방식으로 해시 조인 (hash join) 들을 수행하는 것에 관한 것이다.
빅 데이터 분석 (Big Data Analytics) 과 같은 데이터 분석 플랫폼들의 성장은, 비즈니스 가치를 갖는 정보를 추출하기 위해 대량의 데이터를 프로세싱하기 위한 툴로 데이터 프로세싱을 확장하였다. 상이한 데이터 소스들로부터의 대규모 데이터 세트들을 액세스, 프로세싱 및 분석하는데 효율적인 데이터 프로세싱 기법들이 필요하다. 예를 들어, 소기업은 외부 데이터 제공자, 내부 데이터 소스 (예를 들어, 로컬 컴퓨터 상의 파일), 빅 데이터 스토어, 및 클라우드 기반 데이터 (예를 들어, 소셜 미디어 정보) 와 같은 다양한 소스로부터 방대한 양의 데이터를 게더링, 프로세싱 및 분석하기 위해 전용 컴퓨팅 및 인적 리소스를 채용하는 제 3 자 데이터 분석 환경을 활용할 수도 있다. 유용한 정량적 및 정성적 정보를 추출하는 방식으로, 데이터 분석에 사용되는 바와 같은, 이러한 대규모 데이터 세트들을 프로세싱하는 것은 통상적으로 강력한 컴퓨터 디바이스들 상에서 구현되는 복잡한 소프트웨어 툴들을 필요로 한다.
조인 알고리즘은 상술한 것들과 같은 다중 데이터 세트들을 프로세싱할 때 채용되는 데이터 프로세싱 기법이다. 기존의 데이터 프로세싱 시스템들은, 각각이 개개의 성능 트레이드오프들을 갖는 다중 조인 알고리즘을 활용하여, 2 개의 데이터 세트들 (예를 들어, 해시 조인, 네스팅된 루프들, 소트-병합 조인들) 사이의 논리적 조인들을 수행할 수 있다. 예를 들어, 해시 조인은 복잡성 O (M + N) 을 예상했으며, 여기서 N 및 M 은 조인되는 2 개의 테이블들의 투플 (tuple) 들의 수이다. 그러나, 해시 조인 알고리즘은 바람직하지 않은 메모리 액세스 패턴들 (예를 들어, 랜덤 디스크 액세스) 을 가질 수도 있고, 또한 실행하기가 느릴 수도 있다. 따라서, 기존의 데이터 프로세싱 시스템은 조인 알고리즘을 프로세싱할 때 성능 문제를 겪는다.
상기 및 다른 문제들은 데이터 레코드들을 조인하기 위한 방법, 컴퓨터 및 비일시적 컴퓨터 판독가능 메모리에 의해 해결된다. 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법의 실시형태는, 제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 단계 및 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 단계를 포함한다. 방법은 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 단계 및 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 단계를 포함하고, 제 2 세트의 그루핑들에서의 각각의 그루핑은 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관된다. 방법은 부가적으로, 해시 값들에 기초하여, 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 단계, 및 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 개개의 데이터 레코드들을 조인하는 단계를 포함한다. 방법은 또한, 조인된 데이터 레코드들을 출력하는 단계를 포함한다.
데이터 레코드들을 조인하기 위한 컴퓨터의 실시형태는 적어도 하나의 컴퓨터 프로세서 및 동작들을 수행하도록 프로세서에 의해 실행가능한 컴퓨터 프로그램 명령들을 저장하는 비일시적 컴퓨터 판독가능 메모리를 포함한다. 동작들은 제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 것 및 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 것을 포함한다. 동작들은 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것 및 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것을 더 포함하고, 제 2 세트의 그루핑들에서의 각각의 그루핑은 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관된다. 동작들은 부가적으로, 해시 값들에 기초하여, 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것, 및 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 개개의 데이터 레코드들을 조인하는 것을 포함한다. 동작들은 또한, 조인된 데이터 레코드들을 출력하는 것을 포함한다.
비일시적 컴퓨터 판독가능 메모리의 실시형태는 데이터 레코드들을 조인하기 위한 동작들을 수행하도록 컴퓨터 프로세서에 의해 실행가능한 컴퓨터 프로그램 명령들을 저장한다. 동작들은 제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 것 및 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 것을 포함한다. 동작들은 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것 및 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것을 더 포함하고, 제 2 세트의 그루핑들에서의 각각의 그루핑은 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관된다. 동작들은 부가적으로, 해시 값들에 기초하여, 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것, 및 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 개개의 데이터 레코드들을 조인하는 것을 포함한다. 동작들은 또한, 조인된 데이터 레코드들을 출력하는 것을 포함한다.
본 명세서에 설명된 청구물의 하나 이상의 구현들의 상세들이 첨부 도면들 및 하기의 설명에서 기술된다. 청구물의 다른 피처들, 양태들, 및 잠재적 이점들은 설명, 도면들, 및 청구항들로부터 명백해질 것이다.
도 1 은 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 조인 툴을 구현하는 예시의 환경의 다이어그램이다.
도 2a 및 도 2b 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 조인 툴을 구현하는 일 예의 데이터 분석 워크플로우의 다이어그램들이다.
도 3a 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 조인 기법들을 구현하는 일 예의 프로세스의 다이어그램이다.
도 3b 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 해시 조인 기법들을 구현하는 일 예의 프로세스의 플로우 챠트이다.
도 4 는 일 실시형태에 따른 설명된 시스템들 및 방법들을 구현하는데 사용될 수도 있는 일 예의 컴퓨팅 디바이스의 다이어그램이다.
도 5 는 일 실시형태에 따른 설명된 시스템들 및 방법들을 구현하는데 사용될 수도 있는 소프트웨어 아키텍처를 포함하는 데이터 프로세싱 장치의 일 예의 다이어그램이다.
다양한 도면들에서 같은 참조 번호들 및 표기들은 같은 엘리먼트들을 표시한다.
도 2a 및 도 2b 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 조인 툴을 구현하는 일 예의 데이터 분석 워크플로우의 다이어그램들이다.
도 3a 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 조인 기법들을 구현하는 일 예의 프로세스의 다이어그램이다.
도 3b 는 일 실시형태에 따른 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 해시 조인 기법들을 구현하는 일 예의 프로세스의 플로우 챠트이다.
도 4 는 일 실시형태에 따른 설명된 시스템들 및 방법들을 구현하는데 사용될 수도 있는 일 예의 컴퓨팅 디바이스의 다이어그램이다.
도 5 는 일 실시형태에 따른 설명된 시스템들 및 방법들을 구현하는데 사용될 수도 있는 소프트웨어 아키텍처를 포함하는 데이터 프로세싱 장치의 일 예의 다이어그램이다.
다양한 도면들에서 같은 참조 번호들 및 표기들은 같은 엘리먼트들을 표시한다.
비즈니스-관련 기능들 (예를 들어, 고객 참여, 프로세스 성능, 및 전략적 의사 결정) 에 적절한 데이터를 획득하는데 관심이 있다. 어드밴스 데이터 분석 기법 (예를 들어, 텍스트 분석, 머신 학습, 예측 분석, 데이터 마이닝 및 스태틱스 (statics)) 은 그 후 기업에 의해 예를 들어, 수집된 데이터를 추가로 분석하는데 사용될 수 있다. 또한, 기업과 고객 사이의 상품, 서비스 및 정보의 교환에, 인터넷과 같은 통신 네트워크 및 개인용 컴퓨터 디바이스의 통합 및 전자 상거래 (e-commerce) 의 성장으로, 대량의 비즈니스-관련 데이터가 전자 형태로 전송되고 저장된다. 비즈니스에 중요한 것일 수도 있는 방대한 양의 정보 (예를 들어, 금융 거래, 고객 프로파일 등) 는 네트워크-기반 통신을 사용하여 다중 데이터 소스들로부터 액세스 및 취출될 수 있다. 데이터 분석기에 대한 잠재적 관련성의 정보를 포함할 수도 있는 대량의 전자 데이터 및 이질적 데이터 소스로 인해, 데이터 분석 동작을 수행하는 것은 구조화된/구조화되지 않은 데이터, 스트리밍 또는 배치 데이터, 및 테라바이트에서 제타바이트까지 변화하는 상이한 사이즈의 데이터와 같은 상이한 데이터 타입을 포함하는 매우 크고, 다양한 데이터 세트를 프로세싱하는 것을 수반할 수 있다.
또한, 데이터 분석은 패턴을 인식하고, 상관 관계들을 식별하고, 다른 유용한 정보를 획득하기 위해 상이한 데이터 타입의 복잡하고 계산적으로 과중한 프로세싱을 필요로 할 수도 있다. 일부 데이터 분석 시스템은 데이터 웨어하우스와 같은 크고, 복잡하고 비용이 높은 컴퓨터 디바이스들, 및 메인프레임과 같은 고 성능 컴퓨터 (HCP) 들에 의해 기능성을 레버리지하여, 빅 데이터와 연관된 더 큰 스토리지 용량 및 프로세싱 요구를 핸들링한다. 일부 경우들에서, 이러한 방대한 양의 데이터를 수집하고 분석하는데 필요한 컴퓨팅 파워의 양은 소기업의 네트워크 상에서 이용가능한 전형적인 정보 기술 (IT) 어셋들 (예를 들어, 데스크탑 컴퓨터, 서버) 과 같은, 제한된 능력들로 리소스들을 갖는 환경에서 과제들을 제시할 수 있다. 예를 들어, 랩탑 컴퓨터는 수백 테라바이트의 데이터를 프로세싱하는 것과 연관된 요구를 지원하는데 필요한 하드웨어를 포함할 수 없을 수도 있다. 결과적으로, 빅 데이터 환경은 클러스터링된 컴퓨터 시스템에 걸쳐 큰 데이터 세트의 프로세싱을 지원하기 위해 수천 대의 서버들을 갖는 크고 비용이 높은 슈퍼컴퓨터 상에서 일반적으로 실행하는 상위-엔드 하드웨어 또는 고 성능 컴퓨팅 (HPC) 리소스를 채용할 수도 있다. 데스크탑 컴퓨터와 같은 컴퓨터의 속도 및 프로세싱 파워가 증가되었지만, 그럼에도 불구하고 데이터 분석에서의 데이터 양과 사이즈도 또한 증가하여, 일부 데이터 분석 기술에 대해 최적 미만의 (HPC 와 비교하여) 제한된 계산 능력을 갖는 전형적인 컴퓨터를 사용한다. 예로서, 단일 실행 스레드에서 한 번에 하나의 레코드를 프로세싱하는 계산-집약적 (compute-intensive) 데이터 분석 동작은 예를 들어, 데스크탑 컴퓨터 상에서 바람직하지 않게 더 긴 계산 시간을 초래할 수도 있고, 또한 일부 기존 컴퓨터 아키텍처에서 이용가능한 멀티-코어 중앙 프로세싱 유닛 (CPU) 의 병렬 프로세싱 능력을 이용할 수 없을 수도 있다. 그러나, 예를 들어 멀티-스레드형 설계를 사용하여, 효율적인 스케줄링 및 프로세서 및/또는 메모리 최적화를 제공하는, 현재 컴퓨터 하드웨어에서 사용가능한, 소프트웨어 아키텍처를 결합하면, 낮은 복잡도, 또는 전형적인 IT, 컴퓨터 어셋으로 효율적인 데이터 분석을 제공할 수 있다.
설명된 기법들 및 시스템들은 동일한 CPU 상에서 다중 코어들을 실행하는 독립적 스레드들과 같은, 병렬-프로세싱 컴퓨팅 환경들에서 데이터 프로세싱 효율을 증가시키는데 사용될 수 있다. 보다 구체적으로, 개시된 기법들은 다수의 CPU 코어들에 걸친 조인 동작들의 분배를 유발하는 하드웨어-의식 해시 조인 프로세스를 구현하도록 기능하고, 이로써 다중 코어 프로세서들로 컴퓨터들의 활용을 최적화할 수도 있다. 실시형태들은 애플리케이션 소프트웨어의 실질적인 재설계를 요구하지 않으면서 멀티 코어 CPU들로 도입된 성능 이점들을 레버리지한다. 또한, 설명된 기법들 및 시스템들은 그들의 순차적 실행 거동에 기초하여 제한될 수 있는 분산 프로세싱을 사용하여 기존의 조인 동작들을 실행하는 것과 연관된 과제들을 극복한다.
도 1 은 병렬 프로세싱 컴퓨터 시스템들 (예를 들어, 멀티 코어 프로세서들) 에 최적화된 조인 툴을 구현하기 위한 일 예의 환경의 다이어그램이다. 나타낸 바와 같이, 환경 (100) 은 인터넷 (150) 에 추가로 접속되는, 데이터 분석 시스템 (140) 을 포함하는 내부 네트워크 (110) 를 포함한다. 인터넷 (150) 은 다중의 이질적 리소스 (예를 들어, 서버, 네트워크 등) 을 접속하는 공중 네트워크이다. 일부 경우들에서, 인터넷 (150) 은 내부 네트워크 (110) 외부의 임의의 공중 또는 사설 네트워크일 수도 있거나 또는 내부 네트워크 (110) 와 상이한 엔티티에 의해 동작될 수도 있다. 데이터는 인터넷 (150) 을 통해 예를 들어, 이더넷 (ETHERNET), 동기식 광학 네트워킹 (Synchronous Optical Networking; SONET), 비동기식 전송 모드 (Asynchronous Transfer Mode; ATM), 코드 분할 다중 액세스 (Code Division Multiple Access; CDMA), 롱텀 에볼루션 (Long Term Evolution; LTE), 인터넷 프로토콜 (Internet Protocol; IP), 하이퍼텍스트 전송 프로토콜 (Hypertext Transfer Protocol; HTTP), HTTP 보안 (HTTPS), 도메인 이름 시스템 (Domain Name System; DNS) 프로토콜, 송신 제어 프로토콜 (Transmission Control Protocol; TCP), 유니버설 데이터그램 프로토콜 (Universal Datagram Protocol; UDP) 또는 다른 기술들과 같은, 다양한 네트워크 기술들을 사용하여 인터넷에 접속된 컴퓨터들과 네트워크들 사이에서 전송될 수도 있다.
예로서, 내부 네트워크 (110) 는 스마트 폰 (130a) 및 랩탑 컴퓨터 (130b) 로서 도시된, 핸드헬드 컴퓨팅 디바이스들과 같은, 상이한 능력들을 갖는 복수의 클라이언트 디바이스들을 접속하기 위한 로컬 영역 네트워크 (LAN) 이다. 데스크탑 컴퓨터 (130c) 가 내부 네트워크 (110) 에 접속된 것으로 도시된다. 내부 네트워크 (110) 는 이더넷, WI-FI, CDMA, LTE, IP, HTTP, HTTPS, DNS, TCP, UDP 또는 다른 기술들을 포함하지만 이에 제한되지 않는 하나 이상의 네트워크 기술들을 활용하는 유선 또는 무선 네트워크일 수도 있다. 내부 네트워크 (110) 는 데이터베이스 (135) 로 나타낸 로컬 스토리지 시스템에 대한 액세스를 지원할 수 있다. 예로서, 데이터베이스 (135) 는 내부 데이터, 또는 그렇지 않으면 내부 네트워크 (110) 리소스들에 로컬인 소스들로부터 획득된 데이터 (예를 들어, 클라이언트 디바이스들 (130) 을 사용하여 생성되고 송신된 파일들) 를 저장 및 유지하기 위해 채용될 수 있다.
도 1 에 나타낸 바와 같이, 인터넷 (150) 은 데이터베이스 (160), 서버 (170), 및 웹 서버 (180) 로 도시된, 내부 네트워크 (110) 로부터 외부에 위치된 다양한 데이터 소스들을 통신가능하게 접속할 수 있다. 인터넷 (150) 에 접속된 데이터 소스들의 각각은 데이터 분석 애플리케이션들과 같은 데이터 프로세싱 플랫폼에 의해 거기에 포함된 정보의 분석적 프로세싱을 위해, 데이터 레코드들과 같은 전자 데이터에 액세스하고 이를 취출하는데 사용될 수 있다. 데이터베이스들 (160) 은 데이터 분석 애플리케이션들 또는 다른 기존 데이터 프로세싱 애플리케이션들로의 입력으로서 작용하는 데이터를 컴파일하기 위해 후속하여 액세스될 수 있는, 대량의 데이터 또는 레코드들을 게더링, 저장 및 유지하는데 사용되는 복수의 대용량 스토리지 디바이스들을 포함할 수 있다. 예로서, 데이터베이스들 (160) 은 제 3 자 데이터 소스에 의해 관리되는 빅 데이터 스토리지 시스템에서 사용될 수 있다. 일부 경우들에서, 빅 데이터 스토리지 시스템과 같은 외부 스토리지 시스템은 프로세싱 능력을 위해 DAS (Direct-Attached Storage) 를 갖는, 서버 (170) 로서 도시된 물품 (commodity) 서버를 활용할 수 있다.
또한, 웹 서버 (180) 는 인터넷 (150) 을 통해 클라이언트 디바이스 (130) 의 사용자와 같은 사용자들에게 이용가능하게 하는 콘텐츠를 호스팅할 수 있다. 웹 서버 (180) 는 정적 콘텐츠를 갖는 개별 웹 페이지를 포함하는 정적 웹 사이트를 호스팅할 수 있다. 웹 서버 (180) 는 또한 서버 측 프로세싱, 예를 들어 PHP, 자바 서버 페이지 (Java Server Pages; JSP) 또는 ASP.NET 과 같은 서버 측 스크립트에 의존하는 동적 웹사이트를 위한 클라이언트 측 스크립트를 포함할 수 있다. 일부 경우들에서, 웹 서버 (180) 는 비즈니스에 관심이 있을 수도 있는 다양한 형태의 데이터, 예를 들어 웹 사이트 및 소셜 네트워크 애플리케이션 상에서 액세스가능한 콘텐츠 및 컴퓨터 기반 상호작용 (예를 들어, 클릭 추적 데이터) 과 관련된 데이터를 제공함으로써 외부 데이터 소스로서 작용할 수 있다. 예로서, 클라이언트 컴퓨터 (130) 는 웹 서버 (180) 에 의해 호스팅된 웹 사이트와 같은 인터넷 (150) 상에서 이용가능한 콘텐츠를 요청할 수 있다. 그 후, 웹 서버 (180) 에 의해 호스팅되는 웹 사이트를 뷰잉하면서 사용자에 의해 이루어진, 다른 사이트, 콘텐츠 또는 광고에 대한 하이퍼텍스트 링크 상의 클릭이 모니터링되거나 또는 그렇지 않으면 추적되고, 후속 프로세싱을 위한 데이터 분석 플랫폼으로의 입력으로서 클라우드로부터 서버로 소싱될 수 있다. 예를 들어, 인터넷 (150) 을 통해 데이터 분석 플랫폼에 의해 액세스가능할 수 있는 외부 데이터 소스의 다른 예는, 외부 데이터 제공자, 데이터 웨어하우스, 제 3 자 데이터 제공자, 인터넷 서비스 제공자, 클라우드-기반 데이터 제공자, SaaS (Software as a Service) 플랫폼 등을 포함할 수 있지만 이에 제한되지 않는다.
데이터 분석 시스템 (140) 은 예를 들어 인터넷 (150) 을 통해, 다중 데이터 소스들로부터 수집, 게더링 또는 그렇지 않으면 액세스되는 대량의 데이터를 프로세싱 및 분석하기 위해 활용되는 컴퓨터 기반 시스템이다. 데이터 분석 시스템 (140) 은 광범위한 데이터 소스들로부터 데이터를 액세스, 준비, 블렌딩 및 분석하는데 채용되는 스케일러블 소프트웨어 툴 및 하드웨어 리소스를 구현할 수 있다. 예를 들어, 데이터 분석 시스템 (140) 은 데이터 집약적 프로세스 및 워크플로우의 실행을 지원한다. 데이터 분석 시스템 (140) 은 본 명세서에 설명된 최적화된 해시 조인 기법들을 포함하는 데이터 분석 기능들을 구현하는데 사용된 컴퓨팅 디바이스일 수 있다. 데이터 분석 시스템 (140) 은 예를 들어, 도 3 을 참조하여 상세하게 논의된 바와 같이, 동일한 CPU 다이 상의 다중 프로세서 코어들을 사용하는 하드웨어 아키텍처를 포함할 수 있다. 일부 경우들에서, 데이터 분석 시스템 (140) 은 시스템에 의해 대규모 데이터를 지원하기 위해, 데이터 분석 서버 (120) 로서 나타낸, 전용 컴퓨터 디바이스 (예를 들어, 서버) 를 추가로 채용한다.
데이터 분석 서버 (120) 는 시스템의 일부 분석 기능들을 구현하기 위한 서버 기반 플랫폼을 제공한다. 예를 들어, 데스크탑 컴퓨터 (130c) 와 같은 내부 네트워크 (110) 상에서 이용가능한 다른 컴퓨터 리소스들보다 더 큰 프로세싱 및 메모리 능력들을 가질 수도 있는 데이터 분석 서버 (120) 에 더욱 더 시간 소모적인 데이터 프로세싱이 오프로딩될 수 있다. 또한, 데이터 분석 서버 (120) 는 정보에 대한 중앙집중식 액세스를 지원함으로써, 사용자 액세싱 데이터 분석 시스템 (140) 사이의 공유 및 협업 능력들을 지원하도록 네트워크 기반 플랫폼을 제공할 수 있다. 예를 들어, 데이터 분석 서버 (120) 는 애플리케이션 및 애플리케이션 프로그램 인터페이스 (API) 를 생성, 공개 및 공유하고, 내부 네트워크 (110) 와 같은 분산 네트워킹 환경에서 컴퓨터들에 걸쳐 분석을 배치하는데 활용될 수 있다. 데이터 분석 서버 (120) 는 또한 다중 데이터 소스들로부터의 데이터를 사용하여 실행 데이터 분석 워크플로우들 및 잡들 (job) 의 실행을 자동화 및 스케줄링하는 것과 같은, 소정의 데이터 분석 태스크들을 수행하는데 채용될 수 있다. 또한, 데이터 분석 서버 (120) 는 행정, 관리 및 제어 기능들을 가능하게 하는 분석 통치 능력들을 구현할 수 있다. 일부 경우들에서, 데이터 분석 서버 (120) 는 스케줄러 및 서비스 계층을 실행하도록 구성되어, 워크플로우의 멀티 스레딩과 같은 다양한 병렬 프로세싱 능력들을 지원함으로써 다중의 데이터 집약적 프로세스들이 동시에 실행될 수 있도록 한다. 일부 경우들에서, 데이터 분석 서버 (120) 는 단일 컴퓨터 디바이스로서 구현된다. 다른 구현들에서, 데이터 분석 서버 (120) 의 능력은 예를 들어 프로세싱 성능 증가를 위해 플랫폼을 스케일링하도록, 복수의 서버들에 걸쳐 배치된다.
데이터 분석 시스템 (140) 은 데이터 분석 애플리케이션 (145) 으로서 도 1 에 도시된, 하나 이상의 소프트웨어 애플리케이션들을 지원하도록 구성될 수 있다. 데이터 분석 애플리케이션들 (145) 은 데이터 분석 플랫폼의 능력들을 가능하게 하는 소프트웨어 툴들을 구현한다. 일부 경우들에서, 데이터 분석 애플리케이션들 (145) 은 클라이언트들 (130) 과 같은 다중 엔드 사용자들에게 데이터 분석 툴 및 매크로에 대한 네트워크 또는 클라우드 기반 액세스를 지원하는 소프트웨어를 제공한다. 예로서, 데이터 분석 애플리케이션들 (145) 은 사용자들이 모바일 애플리케이션 스토어 또는 다른 클라우드 기반 서비스와 유사한 방식으로 분석을 공유, 브라우징 및 소비할 수 있도록 한다. 분석 데이터, 매크로 및 워크플로우는 데이터 분석 시스템 (140) 의 다른 사용자들에 의해 액세스될 수 있는, 더 작은 규모 및 맞춤가능한 (customizable) 분석 애플리케이션 (즉, 앱) 으로서 패키징되고 실행될 수 있다. 일부 경우들에서, 공개된 분석 앱들에 대한 액세스는, 즉 액세스를 승인 또는 철회하는, 데이터 분석 시스템 (140) 에 의해 관리됨으로써, 액세스 제어 및 보안 능력들을 제공할 수 있다. 데이터 분석 애플리케이션들 (145) 은 생성, 배치, 공개, 반복, 업데이트 등과 같은 분석 앱들과 연관된 기능들을 수행할 수 있다. 데이터 분석 애플리케이션들 (145) 은 병렬 프로세싱 컴퓨터 시스템들의 하드웨어 리소스들을 이용하는 기법들을 구현하는 조인 툴을 포함한다.
부가적으로, 데이터 분석 애플리케이션들 (145) 은 분석 결과에 대한 액세스, 분석 결과를 준비, 블렌드, 분석 및 출력하는 능력과 같은, 데이터 분석에 수반되는 다양한 스테이지들에서 수행된 기능들을 지원할 수 있다. 일부 경우들에서, 데이터 분석 애플리케이션들 (145) 은 다양한 데이터 소스들에 액세스하여, 예를 들어 데이터의 스트림에서 원시 (raw) 데이터를 취출할 수 있다. 데이터 분석 애플리케이션들 (145) 에 의해 수집된 데이터 스트림들은 원시 데이터의 다중 레코드들을 포함할 수 있고, 여기서 원시 데이터는 상이한 포맷들 및 구조들이다. 적어도 하나의 데이터 스트림을 수신한 후, 데이터 분석 애플리케이션들 (145) 은 데이터 스트림들의 레코드들이 데이터 분석 동작들로서 사용되도록 하는 동작들을 수행한다. 또한, 예측 분석 (예를 들어, 예측 모델링, 클러스터링, 데이터 조사) 과 같은, 레코드들의 통계적, 정성적 또는 정량적 프로세싱에 수반된 분석 기능들은 데이터 분석 애플리케이션들 (145) 에 의해 구현될 수 있다. 데이터 분석 애플리케이션들 (145) 은 또한 시각적 그래픽 사용자 인터페이스 (GUI) 를 통해, 반복가능한 데이터 분석 워크플로우를 설계 및 실행하기 위해 소프트웨어 툴을 지원할 수 있다. 예로서, 데이터 분석 애플리케이션들 (145) 과 연관된 GUI 는 데이터 블렌딩, 데이터 프로세싱 및 어드밴스드 데이터 분석을 위한 드래그 앤 드롭 (drag-and-drop) 워크플로우 환경을 제공한다. 또한, 워크플로우는 본 명세서에 설명된 기법들 및 시스템들에 따라 최적화된 조인 툴을 포함하여, 특정 프로세싱 동작들 또는 데이터 분석 기능들을 수행하는 일련의 데이터 프로세싱 툴들을 포함할 수 있다.
도 2a 는 최적화된 조인 툴을 채용하는 데이터 분석 워크플로우 (200) 의 예를 도시한다. 일 실시형태에서, 데이터 분석 워크플로우 (200) 는 데이터 분석 시스템 (140) 의 GUI 에 의해 지원되는 시각적 워크플로우 환경을 사용하여 생성된다. 시각적 워크플로우 환경은 워크플로우를 설계하기 위해 소프트웨어 코드를 제공할 필요성을 없애고 워크플로우에 의해 구현될 복잡한 수식들을 식별할 필요성을 없애는 드래그 앤 드롭의 세트를 가능하게 한다. 다른 실시형태에서, 워크플로우 (200) 는 XML (Extensible Markup Language) 문서와 같은 문서에서 생성되고 기술된다. 데이터 분석 워크플로우 (200) 는 데이터 분석 시스템 (140) 의 컴퓨터 디바이스에 의해 실행된다. 그러나, 다른 실시형태들에서, 데이터 분석 워크플로우 (200) 는 데이터 분석 시스템 (140) 에 네트워크를 통해 통신가능하게 접속될 수 있는 다른 컴퓨터 디바이스에 배치된다.
데이터 분석 워크플로우는 특정 프로세싱 동작들 또는 데이터 분석 기능들을 수행하는 일련의 툴들을 포함할 수 있다. 일반적인 예로서, 워크플로우의 툴들은 다음의 데이터 분석 기능들 중 하나 이상을 수행할 수 있다: 입력/출력; 준비; 조인; 예측적; 공간적; 조사; 그리고 파싱 및 변환 동작들. 워크플로우를 구현하는 것은 데이터 분석 프로세스를 정의, 실행 및 자동화하는 것을 수반할 수 있으며, 여기서 데이터는 워크플로우에서 각각의 툴에 전달되고, 각각의 툴은 수신된 데이터에 대해 그 개개의 프로세싱 동작을 수행한다. (도 1 에 나타낸) 데이터 분석 플랫폼의 데이터 집성 양태들에 따르면, 개별 레코드들의 집성된 그룹을 포함하는 레코드는 워크플로우의 툴들을 통해 전달될 수 있으며, 이는 개별 프로세싱 동작들이 데이터에 대해 보다 효율적으로 동작하도록 한다. 설명된 데이터 집성 기법들은 대량의 데이터를 프로세싱하더라도, 워크플로우들을 개발하고 실행하는 속도를 증가시킬 수 있다. 워크플로우는 특정된 툴들의 동작 시퀀스를 특정하는, 반복가능한 일련의 동작들을 정의 또는 그렇지 않으면 구조화할 수 있다. 일부 경우들에서, 워크플로우에 포함된 툴들은 선형 순서로 수행된다. 다른 경우들에서, 다중 툴들이 병렬로 실행될 수 있다.
도시된 바와 같이, 도 2a 의 워크플로우 (200) 는 입력 툴들 (205 및 206) 및 브라우즈 툴 (230) 로서 도시된 입력/출력 툴들을 포함한다. 입력 툴들 (205 및 206) 은 로컬 데스크탑 상에서, 관계형 데이터베이스에서, 클라우드 또는 제 3 자 시스템들에서와 같은 특정 위치들로부터의 레코드들에 액세스하도록 기능한다. 입력 툴들 (205 및 206) 은 워크플로우로 액세스된 레코드들을 가져오고 이 레코드들을 워크플로우 (200) 의 후속 툴들에 제공한다. 이 예에서, 입력 툴 (205) 은 액세스된 레코드들을 필터 툴 (210) 에 제공하고 입력 툴 (206) 은 액세스된 레코드를 툴 (211) 을 선택하기 위해 제공한다. 워크플로우 (200) 의 끝에 위치된 브라우즈 툴 (230) 은 워크플로우 (200) 의 업스크림 툴들의 각각의 실행으로부터 야기되는 출력을 수신한다. 이 예에서 브라우즈 툴 (230) 은 워크플로우 (200) 의 끝에 위치되지만, 브라우즈 툴 (230) 은 워크플로우의 임의의 지점에 부가되어 워크플로우의 업스트림 툴들의 실행으로부터의 결과들을 검토 및 검증할 수 있다.
도 2a 의 예로 계속하면, 워크플로우 (200) 는 필터 툴 (210), 선택 툴 (211), 공식 툴 (215) 및 샘플 툴 (212) 로서 나타낸 준비 툴들을 포함한다. 필터 툴 (210) 은 표현식에 기초하여 레코드들을 질의하고 데이터를 2 개의 스트림들, 즉 표현을 만족시키는 레코드들을 포함하는 참 스트림과 표현을 만족시키지 않는 레코드들을 포함하는 거짓 스트림으로 분할한다. 선택 툴 (211) 은 필드들을 선택, 선택해제, 재정렬 및 이름변경하고, 필드 타입 또는 사이즈를 변경하며, 디스크립션을 할당하는데 사용될 수 있다. 데이터 공식 툴 (215) 은 광범위한 산출들 및/또는 동작들을 수행하기 위해 하나 이상의 표현식들을 사용하여 필드들을 생성 또는 업데이트한다. 샘플 툴 (212) 은 레코드들의 수, 퍼센티지, 또는 랜덤 세트로 수신된 레코드들의 스트림을 제한한다.
워크플로우 (200) 는 또한 다중 데이터 소스를 블렌딩하는 최적화된 조인 툴 (220) 을 포함한다. 구체적으로, 최적화된 조인 툴 (220) 은 공통 필드들 (또는 레코드 포지션) 에 기초하여 2 개의 입력 데이터 스트림들을 결합한다. 최적화된 조인 툴 (220) 에 의해 생성된 조인된 출력에서, 각각의 행은 양자의 입력들로부터의 데이터를 포함한다. 워크플로우에 포함된 최적화된 조인 툴은 해시 조인 기법을 구현하며, 이는 도 3a 및 도 3b 를 참조하여 하기에서 상세하게 논의된다. 조인 툴 (220) 과 같은 최적화된 조인 툴들은 조인 동작들과 연관된 태스크들을 다중 스레드들에 분배하고 멀티 코어 CPU들의 병렬 프로세싱 능력들을 레버리지함으로써 하드웨어를 인식하도록 설계된다.
도 2a 의 워크플로우 (200) 는 또한 추가 분석에 필요한 포맷으로 데이터를 재구성 및 재형상화할 수 있는 파싱 및 변환 툴인 요약 툴 (225) 을 포함하는 것으로 나타나 있다. 요약 툴 (225) 은 또한 그루핑, 합산, 카운팅, 공간 프로세싱, 및 스트링 연결 (concatenation) 에 의해 데이터의 요약을 수행할 수 있다. 실시형태에서만, 요약 툴 (225) 에 의해 생성된 출력은 산출(들)의 결과(들)만을 포함한다.
일부 실시형태들에서, 워크플로우 (200) 의 실행은 모든 레코드들이 프로세싱되고 공동 툴 (220) 에 도달할 때까지, 입력 툴 (205) 로 하여금 레코드들이 필터 툴 (210) 및 공식 툴 (215) 을 통해 한번에 하나씩 전달하게 할 것이다. 그 후, 입력 툴 (206) 은 레코드들이 동일한 조인 툴 (220) 로 전달될 때까지, 선택 툴 (211) 및 샘플 툴 (212) 을 통해 한 번에 하나씩 레코드들을 전달할 것이다. 워크플로우 (200) 의 일부 개별 툴들은 마지막 데이터 블록을 프로세싱하거나 소트 (sort) 툴과 같은 컴퓨터 집약적 동작들을 다중 부분들로 나누면서 데이터 블록의 판독을 개시하는 것과 같은, 그 자신의 병렬 동작을 구현하는 능력을 소유할 수 있다. 그러나, 일부 기존 워크플로우 기법들에서, 레코드들의 세트로부터의 각각의 레코드는, 프로세싱 동작을 수행하기 위해 다중 레코드들을 필요로 하는 워크플로우 툴 (예를 들어, 소트 툴, 조인 툴, 요약 툴 등) 에 도달할 때까지, 파이프 라인 방식으로, 한번에 하나의 레코드씩 워크플로우의 각각의 툴에 의해 개별적으로 프로세싱된다.
도 2b 는 데이터 집성 기법들을 사용하여 레코드들을 그루핑하는 데이터 분석 워크플로우 (200) 의 일부 (280) 의 예를 나타낸다. 도 2b 에 도시된 바와 같이, 데이터 스트림은 워크플로우의 상위 부분으로 데이터를 가져오기 위해 입력 툴 (205) 을 실행하는 것과 연관하여 다중 레코드들 (260) 을 포함하여 취출될 수 있다. 이 예에서, 데이터 집성 기법은 레코드들 (260) 에 적용되어 데이터 스트림의 작은 부분의 병렬 프로세싱을 허용한다. 데이터 집성 기법은 데이터 스트림으로부터 다중 레코드 패킷들 (265) 로 레코드들 (260) 을 그루핑하는 것을 포함한다. 이어서, 각각의 레코드 패킷 (265) 은 워크플로우를 통과하고, 다중 패킷들 (265) 을 필요로 하는 워크플로우에서의 툴에 도달할 때까지 또는 워크플로우에서의 지점에 도달할 때까지 워크플로우 (200) 에서의 다중 툴들을 통해 프로세싱되며, 여기서 레코드 패킷들이 횡단하고 있는 경로를 따라 더 이상의 툴들은 없다. 일 구현에서, 데이터 스트림은 레코드 패킷 (265) 보다 큰 차수이고, 레코드 패킷 (265) 은 레코드 (260) 보다 큰 차수이다. 따라서, 전체 스트림에 포함된 데이터 레코드들의 합의 작은 부분인 다수의 다중 레코드들 (260) 이 단일 레코드 패킷 (265) 으로 집성될 수 있다. 예로서, 레코드 패킷 (265) 은 (예를 들어, 레코드가 잇따라서) 다중 집성된 데이터 레코드들 (260), 및 바이트 단위의 패킷의 총 길이를 포함하는 포맷을 갖도록 생성될 수 있다. 레코드 (260) 은 다중 필드들, 및 바이트에서의 레코드의 총 길이를 포함하는 포맷을 가질 수 있다. 그러나, 일부 경우들에서, 개별 레코드 (260) 는 레코드 패킷 (265) 에 대해 미리결정된 용량보다 비교적 큰 사이즈를 가질 수 있다. 따라서, 구현은 이러한 시나리오를 핸들링하고 실질적으로 큰 레코드들을 패킷화하기 위해 조정하는 메커니즘을 활용하는 것을 수반한다. 따라서, 설명된 데이터 집성 기법들은 레코드들 (260) 이 레코드 패킷들 (265) 에 대해 설계된 최대 사이즈를 초과할 수도 있는 경우들에서 채용될 수 있다.
도 2b 는 이 예에서 필터 툴 (210) 인, 데이터 분석 워크플로우 (200) 에서의 다음 연속 프로세싱 동작으로 전달되는 레코드 패킷 (265) 을 나타낸다. 일부 경우들에서, 레코드들 (260) 은 미리결정된 사이즈 용량의 다중 레코드 패킷들 (265) 로 집성된다. 설명된 기법들에 따라, 레코드 패킷 (265) 의 최대 사이즈는 도 1 에 나타낸 데이터 분석 시스템 (140) 을 구현하는데 사용된 컴퓨터 시스템의 하드웨어에 의해 제약되거나, 그렇지 않으면 이와 관련된다. 다른 구현들은 서버의 로드와 같은, 시스템 성능 특징들에 의존하는 레코드 패킷 (265) 의 사이즈를 결정하는 것을 수반할 수 있다. 일 실시형태에서, 레코드 패킷들 (265) 에 대해 최적으로 사이징된 용량은 연관된 시스템 아키텍처에서 사용된 캐시 메모리의 사이즈에 대한 인수분해가능한 관계 (factorable relationship) 에 기초하여 (시동 또는 컴필레이션 (compliation) 시에) 미리결정될 수 있다. 일부 경우들에서, 패킷들은 메모리를 캐시하기 위해 직접적인 관계 (1 대 1 관계) 를 갖도록 설계된다. 예를 들어, 레코드 패킷들 (265) 은 각각의 패킷이 타겟 CPU 상에서 최대 캐시의 사이즈 (예를 들어, 스토리지 용량) 이하이도록 생성된다. 재표시된 (restated) 레코드들 (260) 은 캐시 사이즈의 패킷들로 집성될 수 있다. 예로서, 설명된 데이터 분석 애플리케이션들 (145) 을 구현하기 위해 64MB 캐시를 갖는 컴퓨터 시스템을 활용하면 64MB 의 미리결정된 사이즈 용량으로 설계된 레코드 패킷들 (265) 을 산출한다. 데이터 집성 기법들에 사용된 레코드 패킷들 (265) 의 용량을 최적화하는 것은 (더 작은 사이즈의 패킷들을 활용하는 것과 연관된) 스레드들 사이의 증가된 동기화 노력과, (더 큰 사이즈의 패킷들을 활용하는 것과 연관된) 패킷 당 프로세싱에 있어서 잠재적으로 감소된 캐시 성능 또는 증가된 입도 (graularity)/레이턴시 사이의 트레이드오프를 수반한다.
일부 실시형태들에서, 레코드 패킷들 (265) 에 대한 사이즈 용량은 고정될 수 있지만, 각각의 레코드 패킷 (265) 길이를 형성하기 위해 적절히 집성될 수 있는 레코드들의 수는 필요에 따라 또는 적절히 시스템에 의해 동적으로 조정되는 변수일 수 있다. 일부 기존 데이터베이스 시스템에서, 각각의 레코드는 단일 고정 길이 (예를 들어, 1KB) 로 생성되고 프로세싱된다. 본 명세서에 설명된 기법들에 따라, 레코드 패킷들 (265) 은 가변 사이즈들 또는 길이들을 사용하여 포맷되어, 미리결정된 최대 용량을 갖는 각각의 패킷으로 가능한 많은 레코드들을 최적으로 포함하는 것을 허용한다. 예를 들어, 제 1 레코드 패킷 (265) 은 2MB 의 사이즈로 패킷을 형성하기 위해 다수의 레코드들 (260) 을 포함하여, 실질적으로 대량의 데이터를 유지하도록 생성될 수 있다. 그 후, 제 2 레코드 패킷 (265) 이 생성되고 준비된 것으로 여겨지자 마자 툴로 전달될 수 있다. 예를 계속하면, 제 2 레코드 패킷 (265) 은 제 1 패킷보다 비교적 적은 수의 집성된 레코드들을 포함하여, 1KB 의 사이즈에 도달하지만, 워크플로우에 의해 프로세싱되기 전에 데이터를 준비 및 패킷화하는 것과 연관된 시간 레이턴시를 잠재적으로 감소시킬 수 있다. 따라서, 일부 실시형태들에서, 다중 레코드 패킷들 (265) 은 미리결정된 용량에 의해 제한되고, 추가로 캐시 메모리의 사이즈를 초과하지 않는 다양한 사이즈를 갖는 시스템을 횡단한다. 일 실시형태에서, 패킷에 대한 가변 사이즈를 최적화하는 것은 패킷 마다에 기초하여 생성되는 각각의 패킷에 대해 수행된다. 다른 구현들은 사용된 툴의 타입, 최소 레이턴시, 최대 데이터의 양 등을 포함하지만 이에 제한되지 않는 다양한 튜닝가능한 파라미터들에 기초하여 임의의 그룹 또는 임의의 수의 패킷들에 대해 최적의 사이즈를 결정할 수 있다. 따라서, 집성은 패킷의 결정된 가변 사이즈에 따라 레코드 패킷 (265) 에 배치될 최적의 레코드들 (260) 의 수를 결정하는 것을 더 포함할 수 있다.
일부 구현들에 따라, 대량의 데이터 레코드들 (260) 은 집성 기법들을 사용하여 형성된 레코드 패킷들 (265) 로서 다양한 툴들을 통해 프로세싱, 분석 및 전달될 수 있으며, 이에 의해 데이터 프로세싱 속도 및 효율을 증가시킨다. 예를 들어, 필터 툴 (210) 은 일부 기존의 데이터 분석 플랫폼들의 방식으로, 복수의 레코드들 (260) 의 각각의 레코드를 개별적으로 프로세싱하는 것과 반대로, 수신된 레코드 패킷 (265) 으로 집성된 복수의 레코드들 (260) 의 프로세싱을 수행할 수 있다. 따라서, 플로우를 실행하는 속도는, 개개의 툴들의 소프트웨어 재설계를 필요로 하지 않으면서, 다중 집성된 레코드들의 병렬 프로세싱을 가능하게 함으로써 설명된 기법들에 따라 증가된다. 부가적으로, 레코드들을 패킷들로 집성하면 동기화 오버헤드를 상환 (amortize) 할 수 있다. 예를 들어, 개별 레코드들을 프로세싱하는 것은 큰 동기화 비용 (예를 들어, 레코드 별 동기화) 을 야기할 수 있다. 대조적으로, 복수의 레코드들을 패킷으로 집성함으로써, 다중 레코드들의 각각과 연관된 동기화 비용이 단일 패킷을 동기화하는 것으로 (예를 들어, 패킷 별 동기화) 감소된다.
또한, 일부 경우들에서, 각각의 레코드 패킷 (265) 은 이용가능한 별도의 스레드에서의 프로세싱을 위해 스케줄링되어, 병렬 프로세싱 컴퓨터 시스템들에 대한 데이터 프로세싱 성능을 최적화한다. 예로서, 데이터 분석 시스템 (140) 이 다중 CPU 코어들 상에서 독립적으로 실행되는 다중 스레드들을 활용하는 경우, 복수의 레코드 패킷들로부터의 각각의 레코드 패킷은 그의 대응하는 코어 상에서 개개의 스레드에 의한 프로세싱을 위해 분산될 수 있다. 따라서, 설명된 데이터 집성 기법들은 컴퓨터 아키텍처 (예를 들어, 멀티 스레딩) 의 다양한 병렬 프로세싱 양태들을 레버리징하여 더 큰 CPU 코어들의 세트에 걸쳐 데이터 프로세싱을 실시함으로써, 프로세서 활용을 최적화할 수 있다.
도 3a 는 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 방식으로 해시 조인을 수행하기 위한 일 예의 프로세스의 다이어그램이다. 본 명세서에 설명된 해시 조인 기법은 데이터 분석 시스템 (140) 에서의 데이터 스트림들 사이에서 수행되는 조인 동작들의 속도 및 성능을 개선한다. 해시 조인 기법들은 도 2a 의 최적화된 조인트 툴 (220) 과 같은, 최적화된 조인트 툴의 일부로서 수행된다. 해시 조인 기법들은 데이터 분석 시스템 (140) 의 다중 프로세서 코어들을 사용하여 비동기식으로 프로세싱될 수 있는 별도의 부분들로 조인 동작을 나눔으로써 워크플로우의 전반적인 실행 속도 및 조인 동작의 실행 속도를 증가시킨다. 도 3a 는 2 개의 주요 페이즈들: 파티셔닝 페이즈 (301-302) 및 조인 페이즈 (303-304) 에서 조인 동작을 실행하는 것으로 일 예의 해시 조인 기법을 도시한다. 일부 실시형태들에 따라, 해시 조인 기법들은 데이터베이스 관리 시스템들에서 사용된 다른 기존 해시 조인 알고리즘, 예를 들어 그레이스 해시 조인, 하이브리드 해시 조인 및 해시 루프 조인을 구현하도록 구성될 수 있다.
파티셔닝 페이즈의 동작 (301) 은 조인될 적어도 2 개의 데이터 스트림들 (300a 및 300b) 을 입력으로서 수신하는 것을 포함한다. 예를 들어, 데이터 스트림들 (300a 및 300b) 은 워크플로우에서 하나 이상의 툴들로부터 수신된다. 데이터 스트림 (300a) 은 "좌측 데이터 스트림 (300a)" 으로 지칭되고 데이터 스트림 (300b) 은 "우측 데이터 스트림 (300b)" 으로 지칭된다. 데이터 스트림들 (300) 의 각각은 다중 레코드들을 포함한다. 예를 들어, 각각의 데이터 스트림 (300) 은 상이한 콤마-분리 값 (comma-separated values; CSV) 파일의 레코드들을 포함할 수 있다. 각각의 데이터 스트림 (300) 의 레코드들은 패킷으로 나눠진다. 구체적으로, 패킷N (307) 을 통한 패킷1 (305), 패킷2 (306) 은 좌측 데이터 스트림 (300a) 으로부터 생성되고, 패킷N (310) 을 통한 패킷1 (308), 패킷2 (309) 은 우측 데이터 스트림 (300b) 으로부터 생성된다. 일 실시형태에서, 패킷들은 도 2b 를 참조하여 상술한 레코드 집성 기법들에 따라 생성된다. 일부 실시형태들에서, 데이터 스트림들 (300) 의 레코드들은 최적화된 조인 툴에 의해 수신될 때 이미 패킷들로 나눠진다. 예를 들어, 패킷들은 워크플로우 내의 업스트림 프로세싱 동안 생성되었을 수도 있다. 레코드들이 패킷들에서 수신될 때, 최적화된 조인 툴은 패킷들을 다시 생성할 필요가 없다.
도 3a 에 나타낸 바와 같이, 해시 조인 기법의 파티셔닝 페이즈는, 동작 (302) 로 계속된다. 동작 (302) 에서, 해시는 데이터 스트림들 (300) 의 패킷들에 포함된 각각의 레코드에 대해 계산된다. 레코드의 해시를 계산하기 위해, 해시 함수가 조인될 오브젝트들로서 작용하는 레코드의 속성들 (예를 들어, 레코드의 특정 필드들의 값들) 에 적용된다. 예를 들어, 레코드들은 각각 다중 필드들을 포함할 수도 있고, 이들 중 필드들의 서브세트만이 양자의 데이터 스트림들로부터의 레코드들에 공통이고 조인 동작에 사용되어야 한다. 조인 툴은 데이터 스트림들 (300) 양자 모두에 공통인 필드들을 결정한다. 그 후 조인 툴은, 각각의 레코드에 대해, 결정된 공통 필드들로부터의 레코드에서만 데이터 값들을 함께 해시한다. 레코드의 해시를 계산하는데 사용된 해시 함수는 예를 들어, SpookyHash 또는 MD-5 해시 함수일 수 있다. 일 실시형태에서, 각각의 레코드에 대해 계산된 해시는 128 비트 값이다.
동작 (302) 의 일부로서, 각각의 데이터 스트림 (300) 의 레코드들은 그들 개개의 해시에 기초하여 해시 버킷들로 구성된다. 해시 버킷은 레코드들의 그루핑이다. 각각의 데이터 스트림 (300) 의 레코드들이 구성되는 해시 버킷들의 수는 일 실시형태에서 고정된다. 도 3a 의 예에서, 각각의 데이터 스트림 (300) 의 레코드들은 64 개의 버킷들로 구성된다. 구체적으로, 좌측 데이터 스트림 (300a) 은 해시 버킷64 (313) 을 통해 해시 버킷1 (311), 해시 버킷2 (312) 로 구성되고, 우측 데이터 스트림 (300b) 은 해시 버킷64 (316) 를 통해, 해시 버킷1 (314), 해시 버킷2 (315) 로 구성된다. 사용된 해시 버킷들의 수는 데이터 분석 시스템 (140) 의 하드웨어 아키텍처에 기초하여 결정되는 튜닝가능한 파라미터이다. 일 실시형태에서, 데이터 스트림들을 위해 사용된 해시 버킷들의 수는 조인 동작을 프로세싱하는데 이용가능한 스레드들의 수 및/또는 데이터 분석 시스템 (140) 의 프로세서 코어들의 수에 의존한다. 따라서, 도 3a 의 예에서, 64 개의 버킷들이 선택되었을 수도 있는데, 이는 조인 동작을 프로세싱하는데 이용가능한 64 개의 스레드들이 있기 때문이거나, 또는 데이터 분석 시스템 (140) 이 64 개의 프로세서 코어들을 포함하기 때문이다.
각각의 레코드에 대해 계산된 해시의 비트들의 서브세트는 해시 버킷에 레코드를 할당하는데 사용된다. 구체적으로, 각각의 레코드에 대해 계산된 해시의 최하위 비트 (least significant bit; LSB) 들의 선택 수가 해시 버킷에 레코드를 할당하는데 사용된다. 사용된 LSB들의 수는 각각의 데이터 스트림 (300) 에 사용되고 있는 해시 버킷들의 수에 기초하여 결정된다. 일 실시형태에서, 사용된 LSB들의 수는 다음 식에 따라 결정되며, 여기서 X 는 LSB들의 수이다:
데이터 스트림 (300) 의 해시 버킷들 세트로부터의 각각의 해시 버킷은 LSB들의 상이한 조합과 연관된다. 따라서, 데이터 스트림 (300) 의 각각의 레코드에 대해, 최적화된 조인 툴은 레코드에 대해 계산된 해시의 LSB들을 결정하고 스트림 (300) 의 해시 버킷들의 세트로부터 LSB들과 연관된 해시 버킷에 레코드를 할당한다. 도 3a 의 예에서, 각각의 데이터 스트림 (300) 에 대해 64 개의 버킷들이 있기 때문에, 상기 식에 기초하여, 레코드에 대해 계산된 해시의 6 개의 LSB들이 해시 버킷에 레코드를 할당하는데 사용된다. 구체적으로, 패킷들 (305-307) 내 각각의 레코드는 해시 버킷들 (311-313) 로부터의 대응하는 6 개의 LSB들과 관련된 해시 버킷에 배치된다. 유사하게, 패킷들 (308-310) 내 각각의 레코드는 해시 버킷들 (314-316) 로부터의 대응하는 6 개의 LSB들과 관련된 해시 버킷에 배치된다. 또한, 도 3a 는 동일한 레코드 패킷 내의 레코드들이 계산된 해시에 기초하여, 별도의 해시 버킷들에 배치될 수 있음을 도시한다. 예를 들어, 패킷1 (305) 내의 레코드들 (직선으로 나타냄) 이 해시 버킷들 (311, 312, 313) 각각에 개개로 배치되는 것으로 도시된다 (파선 화살표로 표시됨).
해시 버킷들 (311-316) 은 상이한 데이터 스트림 (300) 의 부분일 때에도 동일한 LSB들을 갖는 레코드들이 동일한 논리 버킷을 공유하는 특성을 갖는다. 예로서, 해시 버킷2 (312) 에 할당된 좌측 데이터 스트림 (300a) 의 레코드들은 해시 버킷2 (315) 에 할당된 우측 데이터 스트림 (300b) 의 레코드와 동일한 LSB 를 갖는다.
조인 페이즈의 동작 (303) 에서, 좌측 데이터 스트림 (300a) 의 각각의 해시 버킷에 대해, 우측 데이터 스트림 (300) 의 대응하는 해시 버킷이 해시 버킷 쌍을 생성하기 위해 동일한 LSB들과 연관되는 것으로 식별된다. 각각의 해시 버킷 쌍은 해시 버킷 쌍의 레코드들을 조인하기 위해 상이한 프로세싱 스레드에 할당되다. 그 후 각각의 스레드는 프로세싱을 위해 데이터 분석 시스템 (140) 의 상이한 프로세서 코어에 할당된다. 일 실시형태에서, 데이터 분석 시스템 (140) 의 코어들은 소진되고 스레드들은 여전히 남아 있는 경우, 나머지 스레드들은 프로세싱 코어들이 이용가능하게 될 때 할당된다 (예를 들어, 라운드 로빈 (round-robin)). 도 3a 는 해시 버킷1 (311) 이 해시 버킷1 (314) 과 쌍을 이루고 그 쌍이 스레드1 (320) 에 할당되는 것을 도시한다. 유사하게, 해시 버킷2 (312) 이 해시 버킷2 (315) 와 쌍을 이루고 그 쌍이 스레드2 (321) 에 할당되는 것을 도시한다. 쌍을 이루는 것 및 할당하는 것은 해시 버킷64 (313) 이 해시 버킷64 (316) 와 쌍을 이루고 그 쌍이 스레드N (322) 에 할당될 때까지 계속된다.
레코드들을 해시 버킷들로 구성하기 위해 LSB들을 사용하는 것에 기초하여, 각각의 해시 버킷 쌍은 다른 해시 버킷 쌍들/스레드들로부터의 레코드들을 필요로 하지 않으면서 조인을 수행하기 위해 대응 스레드에 의해 필요한 레코드들을 포함한다. 결과적으로, 스레드들은 데이터 분석 시스템 (140) 의 다중 코어들을 사용하여 비동기식으로 그리고 독립적으로 해시 버킷 쌍들을 프로세싱할 수 있다. 이러한 분할 및 정복 전략 (divide-and-conquer strategy) 은 최적화된 조인 툴이 데이터 분석 시스템 (140) 의 멀티 코어 아키텍처를 레버리지하도록 한다.
조인 단계의 마지막 단계로서 나타낸 동작 (304) 에서, 각각의 스레드는 그의 대응하는 쌍의 각각의 해시 버킷에서 레코드들을 소팅한다. 대안으로, 쌍의 각각의 버킷은 상이한 스레드로 소팅될 수 있다. 해시 버킷에서의 레코드들은 계산된 해시들에 기초하여 소팅된다. 예를 들어, 레코드들은 그 개개의 해시에 따라 오름차순 또는 내림차순으로 소팅될 수 있다. 해시 버킷 내의 각각의 레코드에 대해, 스레드는 레코드를 쌍의 다른 해시 버킷에서의 하나 이상의 레코드들과 조인할지 여부를 결정한다. 일 실시형태에서, 스레드는 2 개의 레코드들의 전체 128 비트 해시들이 매칭하는 경우 2 개의 레코드들을 조인한다. 스레드는 레코드가 하나 이상의 다른 레코드들과 조인될 수 있다고 결정하는 경우, 스레드가 조인 동작을 수행한다. 레코드가 임의의 다른 레코드들과 조인되지 않는 경우, 레코드는 조인할 수 없는 것으로 고려되고 이어서 조인되지 않은 출력으로 푸시된다. 일부 실시형태들에서, 조인할 수 없는 출력은 필터로서 사용되어 임의의 추가 조인 동작들에 포함되는 것으로부터 조인할 수 없는 레코드들을 제거함으로써, 기법들의 프로세싱 속도를 개선한다. 일 실시형태에 따르면, 동작 (304) 에서의 조인은 레코드들 내의 실제 데이터의 비교를 요구하지 않고, 레코드들의 해시들을 고려함으로써 달성된다. 128 비트 해시를 활용하는 실시형태들에 따르면, 충돌의 잠재력은 실질적으로 작다. 따라서, 설명된 해시 조인 기법들은 각각의 계산된 해시가 단일의 조인 필드들의 세트에 적절하게 대응하게 하고, 각각의 필드가 그의 대응 해시를 사용함으로써 적절히 조인되도록 한다 (충돌들과 연관된 에러들을 감소시킴).
도 3a 에 나타낸 바와 같이, 동작 (304) 는 조인된 패킷들 (330, 331 및 332) 을 생성한다. 구체적으로, 각각의 해시 버킷 쌍으로부터의 조인된 레코드들은 적어도 하나의 대응하는 조인된 패킷 (파선 화살표로 나타냄) 에 부가된다. 도 3a 의 예는 다음을 나타낸다: 스레드1 (320) 은 해시 버킷1 쌍을 조인하는 것으로부터 조인된 패킷들 (330) 을 생성하고; 스레드2 (321) 는 해시 버킷2 쌍을 조인하는 것으로부터 생성하며; 그리고 스레드N (322) 이 해시 버킷64 쌍을 조인하는 것으로부터 조인된 패킷 (332) 를 생성할 때까지 각각의 쌍에 대한 실행을 계속한다. 조인된 패킷들 (330-332) 은 조인 페이즈의 출력인 양자의 데이터 스트림들 (330) 로부터의 조인된 레코드들을 포함한다. 그 후 출력은 대응 워크플로우에서의 다음 툴에 최적화된 조인 도구에 의해 제공될 수 있다.
일부 구현들에서, 조인 단계가 독립적인 프로세서들 상에서 실행되는 스레드들에 의해 수행됨에 따라, 적어도 해시 버킷 쌍들의 그룹에 대한 조인 동작들은 동시에 프로세싱될 수 있다. 따라서, 설명된 해시 조인 기법들은 워크플로우 내에서 조인 동작을 실행하는 속도를 증가시키며, 이는 결국 (예를 들어, 대량의 데이터를 프로세싱하는데 있어서) 데이터 분석 애플리케이션들 (145) 의 전반적인 속도에서 현저한 개선을 유도할 수 있다. 따라서, 설명된 기법들은 개개의 조인 툴들의 각각의 실질적인 소프트웨어 재설계를 필요로 하지 않으면서, 병렬 프로세싱의 이점들을 실현하는 방식으로 기능함으로써 조인 툴을 강화한다.
도 3b 는 다양한 병렬 프로세싱 컴퓨터 시스템들에 최적화되는 해시 조인 기법들을 수행하기 위한 일 예의 프로세스 (335) 의 플로우 챠트이다. 프로세스 (335) 는 도 1 과 관련하여 설명된 최적화된 조인 모듈 및 데이터 분석 시스템 (140) 컴포넌트들에 의해, 또는 컴포넌트들의 다른 구성들에 의해 구현될 수도 있다.
340 에서, 적어도 2 개의 데이터 스트림들의 복수의 레코드 패킷들을 포함하여 입력이 취출된다. 복수의 레코드 패킷들은 실행중인 데이터 분석 워크플로우의 프로세싱 동작 (조인 동작) 과 연관된다. 일부 경우들에서, 데이터 분석 워크플로우는 컴퓨터 디바이스 (도 1 에 나타냄) 상에서 실행하고 도 2a 를 참조하여 설명된 툴들과 같은 특정 데이터 분석 기능을 수행하기 위해 사용될 수 있는 하나 이상의 데이터 프로세싱 동작들을 포함한다. 도 2a 에 나타낸 예에서, 최적화된 조인 툴은 실행 중인 워크플로우 내에 데이터 프로세싱 동작으로서 포함된다. 최적화된 조인 툴은 일반적으로 조인된 출력을 생성하기 위해, 2 개의 취출된 입력 데이터 스트림들을 결합하는 것으로 특징화될 수 있다. 실시형태들에 따라, 조인 툴은 설명된 해시 조인 기법들을 구현함으로써 최적화된다. 다시 도 2a 에 나타낸 예를 참조하면, 예시된 데이터 분석 워크플로우는 워크플로우에 정의된 동작 시퀀스에 따라 다중 프로세싱 동작들을 실행하는 것을 수반한다. 이 예에서, 최적화된 조인 툴은 워크플로우의 동작들의 시퀀스에 기초하여, 이전에 실행하는 동작들, 즉 공식 툴들 및 샘플 툴들의 출력으로부터 그의 입력을 직접 수신한다. 최적화된 조인 툴은 워크플로우 내에서 업스트림 프로세싱 동안 이전에 생성된 레코드 패킷들로서 그의 입력 스트림들을 취출한다. 대안으로, 최적화된 조인 툴은 입력 데이터 스트림들을 패킷들 보다는 원시 데이터 스트림들로서 취출할 수 있다. 이 경우, 최적화된 조인 툴에 대한 입력을 취출하는 것은 또한, 레코드 패킷들을 형성하기 위해 각각의 데이터 스트림의 레코드들을 집성하는 것을 수반한다. 따라서, 최적화된 조인 툴은 또한 도 2b 를 참조하여 설명된 바와 같이 최적화된 데이터 집성 기법들을 수행하도록 구성된다.
345 에서, 입력을 취출한 후, 복수의 레코드 패킷들 각각은 최적화된 조인 툴 동작을 위한 프로세싱을 처리하기 위해 복수의 스레드들로 전송된다. 일부 경우들에서, 최적화된 조인 툴 동작들을 실행하기 위한 스레드들의 할당은 데이터 프로세싱 커널의 스케줄링 양태들에 의해 달성된다. 실시형태들에 따라, 345 에서, 스레드들은 본 명세서에 설명된 해시 조인 기법들과 연관된 일부 태스크들을 실행하도록 할당된다. 예를 들어, 345 에서, 도 3a 를 참조하여 상세하게 논의된 바와 같이, 스레드들은 해시 조인 기법들의 파티셔닝 페이즈 동작들을 실행하기 위해 채용된다. 실시형태들에서, 스레드들은 패킷 마다 스케줄링되고, 따라서 해시 조인 기법들은 다양한 병렬 프로세싱 기술들을 활용하기 위해 최적화되는 하드웨어 인식 방식으로 구현된다. 예를 들어, 워크플로우를 실행하는 컴퓨터 디바이스는 CPU 상에 구현된 다중 코어들과 같은 복수의 프로세서들을 포함할 수 있다. 따라서, 복수의 스레드들의 각각은 멀티-코어 CPU 의 개개의 프로세서 코어 상에서 독립적으로 실행할 수 있어서, 예를 들어 파티셔닝 동작들이 동시에 그리고 효율적으로 실행할 수 있게 한다.
350 에서, 해시들은 각각의 복수의 레코드 패킷들 내의 레코드들에 대해 계산된다. 350 에서, 해시들은 후속하여 조인 프로세스를 더 작은 서브 프로세스들로 분할하거나 또는 그렇지 않으면 파티셔닝하기 위해 해싱을 사용하기 위해서, 해시 조인 기법들의 파티셔닝 페이즈의 부분으로서 산출된다. 350 에서 수행된 해싱은 도 3a 를 참조하여 위에서 설명된 해싱 상세들에 기초하여 구현된다. 일부 경우들에서, 각각의 레코드는 특히, 조인되고 있는 필드들을 해싱하는 해시 함수에 대한 입력으로서 작용한다. 일 실시형태에서, 해시 함수의 출력은 128 비트 해시이다.
355 에서, 각각의 레코드는 레코드에 대해 계산된 해시의 비트들의 서브세트에 기초하여 대응하는 데이터 스트림의 해시 버킷들의 그룹 중에서의 해시 버킷에 할당된다. 설명된 해시 조인 기법들에서, 해시 버킷들은 입력 데이터를 해시 그룹들로 추가로 파티셔닝하기 위한 메커니즘으로서 사용된다. 좌측 데이터 스트림 (300a) 및 우측 데이터 스트림 (300b) 으로 도시된, 도 3a 의 2 개의 데이터 스트림 각각은 대응하는 데이터 스트림의 레코드들을 그루핑하기 위해 64 개의 해시 버킷들을 사용한다. 하나의 데이터 스트림의 각각의 해시 버킷은 동일한 비트들의 서브세트와 연관되는 다른 데이터 스트림에서의 대응하는 해시 버킷을 갖는다. 동일한 비트들의 서브세트와 연관된 2 개의 버킷들은 해시 버킷 쌍으로 지칭된다. 도 3a 를 참조하여 상세히 논의된 바와 같이, 해시 버킷들은 동일한 비트들의 서브세트로 레코딩하는 특성을 가지며, 또한 동일한 논리 버킷 (또는 해시 버킷 쌍) 을 공유할 것이다. 위에 언급된 해시 함수는 데이터 스트림에 할당된 해시 버킷들 중 하나의 해시 버킷 내의 슬롯에 각각의 레코드를 삽입하는데 사용된다. 따라서, 각각의 데이터 스트림으로부터 함께 조인할 수 있는 레코드들은, 동일한 비트들의 서브세트를 가질 것이고, 동일한 해시 버킷 쌍에 배치될 것이다. 도 3a 의 예로 계속하면, 좌측 데이터 스트림 (300a) 의 해시 버킷1 (311) 은 우측 데이터 스트림 (300b) 의 해시 버킷1 (314) 으로부터의 레코드들과 조인할 수도 있는 레코드들을 가질 것이고, 그 역 또한 마찬가지이다.
360 에서, 각각의 해시 버킷 쌍은 최적화된 조인 툴의 나머지 태스크들을 실행하기 위해, 별도의 스레드를 사용하여 프로세싱된다. 도 3a 를 참조하여 상세히 논의된 바와 같이, 버킷 쌍에 할당된 각각의 스레드는 해시 조인 기법들의 조인 페이즈 동작들을 실행할 수 있다. 실시형태들에서, 스레드들은 버킷 쌍 마다 실행하고 있기 때문에, 각각의 스레드는 버킷 경계들을 가로질러 레코드들이 고려될 필요가 있을 수도 있는 리스크 없이 독립적으로 프로세싱될 수 있다. 따라서, 설명된 해시 조인 기법들은 순서대로 또는 시퀀스 방식으로 완료된 실행을 요구할 수도 있는 조인 동작들에 대해 병렬 프로세싱을 사용하는 것과 연관된 과제들을 극복할 수 있다. 부가적으로, 해시 조인 기법들의 조인 페이즈에서의 실행에 있어서, 360 에서의 프로세싱은 대응하는 해시들을 사용하여, 해시 버킷 쌍들의 각각에서 레코드들을 소팅하는 것을 포함한다. 결과로서, 개개의 쌍의 각각의 해시 버킷은 해시에 의해 소팅된, 레코드들의 소팅된 리스트와 연관된다. 일부 실시형태들에서, 각각의 해시 버킷 쌍에 대한 소팅은 별도의 워커 스레드에서 수행된다.
그 후, 365 에서, 각각의 스레드는 그의 대응하는 해시 버킷 쌍의 레코드들이 조인될 수 있는지 여부를 결정한다. 일부 실시형태들에서, 체크는 해시 버킷 쌍의 해시 버킷에서 각각의 소팅된 레코드에 대해 반복적으로 수행된다. 예를 들어, 해시 버킷 내에서 현재 프로세싱된 레코드는 해시 버킷 쌍의 다른 해시 버킷에서의 소팅된 레코드들에 대해 체크된다. 따라서, 쌍의 제 1 해시 버킷에서의 현재 레코드가 그 쌍의 제 2 해시 버킷으로부터의 임의의 레코드와 조인하는지 여부에 관하여 결정이 이루어진다. 365 에서, 결정은 연관된 해시들을 사용하여 달성되며, 레코드들의 실제 데이터 값들의 어떠한 스캐닝 또는 비교를 필요로 하지 않는다. 결과적으로, 설명된 조인 기법들을 실행하는 속도는 적은 CPU 시간을 활용함으로써 실질적으로 증가된다 (예를 들어, 해시 값들에 의해 인덱스된 데이터의 조회 및 비교를 수행하는 것과 연관된 시간을 제거하고, 디스크 판독 수를 최소화하는 등).
375 에서, 해시 버킷 쌍의 레코드가 조인될 수 있다고 결정되는 경우 (즉, "예"), 레코드들은 조인되고 조인된 레코드들은 하나 이상의 조인된 패킷들에 삽입되거나 그렇지 않으면, 이들을 생성하는데 사용된다. 대안으로, 레코드가 상대 해시 버킷으로부터 다른 레코드와 조인될 수 없다고 결정되는 경우 (즉, "아니오"), 레코드는 370 에서 조인되지 않은 출력으로 푸시되어, 조인의 결과들에 포함되지 않는다. 일부 구현들에서, 조인된 결과들로부터 375 에서 조인된 패킷들을 생성하는 것은 개개의 해시 버킷 쌍들에 대해 동시에 수행된다. 해시 조인 기법들로부터의 결과들은 실행 중인 특정 최적화된 조인 툴에 대해 출력으로서 제공될 수 있다. 도 2a 의 예에서, 최적화된 조인 툴 출력, 즉 조인된 패킷들은 워크플로우 (200) 에서 하류로 전달된다. 일부 실시형태들에서, 최적화된 조인 툴 출력은 데이터 분석 애플리케이션들 (145) 과 연관된 GUI 에 대한 그래픽 정보로서 디스플레이를 위해 제공된다.
도 4 는 클라이언트 또는 서버 또는 복수의 서버들로서 본 명세서에 설명된 시스템들 및 방법들을 구현하는데 사용될 수도 있는 컴퓨팅 디바이스들 (400) 의 블록 다이어그램이다. 컴퓨팅 디바이스 (400) 는 랩탑, 데스크탑, 워크스테이션, 개인용 디지털 보조기, 서버, 블레이드 서버, 메인프레임 및 다른 적절한 컴퓨터와 같은 다양한 형태의 디지털 컴퓨터를 나타내도록 의도된다. 일부 경우들에서, 컴퓨팅 디바이스 (450) 는 개인용 디지털 보조기, 셀룰러 전화기, 스마트폰 및 다른 유사한 컴퓨팅 디바이스와 같은 다양한 형태의 모바일 디바이스를 나타내도록 의도된다. 부가적으로, 컴퓨팅 디바이스 (400) 는 유니버셜 시리얼 버스 (Universal Serial Bus; USB) 플래시 드라이브를 포함할 수 있다. USB 플래시 드라이브는 오퍼레이팅 시스템 및 다른 애플리케이션을 저장할 수도 있다. USB 플래시 드라이브는 다른 컴퓨팅 디바이스의 USB 포트에 삽입될 수도 있는 무선 송신기 또는 USB 커넥터와 같은 입력/출력 컴포넌트들을 포함할 수 있다. 여기에 나타낸 컴포넌트들, 그 접속들 및 관계들, 그리고 그 기능들은 예시적인 것으로만 의미되고 본 문서에서 청구되고 및/또는 설명된 발명의 구현을 제한하는 것으로 의미되지 않는다.
컴퓨팅 디바이스 (400) 는 프로세서 (402), 메모리 (404), 스토리지 디바이스 (406), 메모리 (404) 및 고속 확장 포트들 (410) 에 접속하는 고속 인터페이스 (408), 및 저속 버스 (414) 및 스토리지 디바이스 (406) 에 접속하는 저속 인터페이스 (412) 를 포함한다. 실시형태들에 따라, 프로세서 (402) 는 병렬 프로세싱 기술들을 구현하는 설계를 갖는다. 도시된 바와 같이, 프로세서 (402) 는 동일한 마이크로프로세서 칩 또는 다이 상에 다중 프로세서 코어들 (402a) 을 포함하는 CPU 일 수 있다. 프로세서 (402) 는 프로세싱 코어들 (402a) 을 갖는 것으로 나타나 있다. 일부 경우들에서, 프로세서 (402) 는 2-32 개의 코어들을 구현할 수 있다. 컴포넌트들 (402, 404, 406, 408, 410 및 412) 의 각각은 다양한 버스들을 사용하여 상호접속되고, 공통 마더 보드 상에 또는 다른 방식들로 적절히 장착될 수도 있다. 프로세서 (402) 는 고속 인터페이스 (408) 에 커플링된 디스플레이 (416) 와 같은, 외부 입력/출력 디바이스 상에 GUI 에 대한 그래픽 정보를 디스플레이하기 위해 스토리지 디바이스 (406) 상에 또는 메모리 (404) 에 저장된 명령들을 포함하는, 컴퓨팅 디바이스 (400) 내에서 실행을 위한 명령들을 프로세싱할 수 있다. 다른 구현들에서, 다중 프로세서들 및/또는 다중 버스들이 다중 메모리들 및 메모리의 타입들과 함께 적절히 사용될 수도 있다. 또한, 다중 컴퓨팅 디바이스들 (400) 이 접속될 수도 있으며, 각각의 디바이스는 (예를 들어, 서버 뱅크, 블레이드 서버들의 그룹, 또는 멀티-프로세서 시스템으로서) 필요한 동작들의 일부들을 제공한다.
메모리 (404) 는 컴퓨팅 디바이스 (400) 내에 정보를 저장한다. 일 구현에서, 메모리 (404) 는 휘발성 메모리 유닛 또는 유닛들이다. 다른 구현에서, 메모리 (404) 는 비휘발성 메모리 유닛 또는 유닛들이다. 메모리 (404) 는 또한 자기 또는 광학 디스크와 같은 다른 형태의 컴퓨터 판독가능 매체일 수도 있다. 컴퓨팅 디바이스 (40) 의 메모리는 또한 마이크로 프로세서가 정규 랜덤 액세스 메모리 (RAM) 에 액세스할 수 있는 것보다 더 빨리 액세스할 수 있는 RAM 으로서 구현되는 캐시 메모리를 포함할 수 있다. 이 캐시 메모리는 CPU 칩과 직접 통합되거나 또는 CPU 와 별도의 버스 상호접속을 갖는 별도의 칩 상에 배치될 수 있다.
스토리지 디바이스 (406) 는 컴퓨팅 디바이스 (400) 를 위한 대용량 스토리지를 제공할 수 있다. 일 구현에서, 스토리지 디바이스 (406) 는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 테이프 디바이스, 플래시 메모리 또는 다른 유사한 고체 상태 메모리 디바이스, 또는 스토리지 영역 네트워크 또는 다른 구성들에서의 디바이스들을 포함하는 디바이스들의 어레이와 같은, 비일시적 컴퓨터 판독가능 매체이거나 이를 포함할 수도 있다. 컴퓨터 프로그램 제품은 또한 실행될 때, 상술한 바와 같은 하나 이상의 방법들을 수행하는 명령들을 포함할 수도 있다.
고속 제어기 (408) 는 컴퓨팅 디바이스 (400) 에 대한 대역폭 집약적 동작들을 관리하는 한편, 저속 제어기 (412) 는 더 낮은 대역폭 집약적 동작들을 관리한다. 이러한 기능들의 할당은 단지 예시적이다. 일 구현에서, 고속 제어기 (408) 는 (예를 들어, 그래픽 프로세서 또는 가속기를 통해) 메모리 (404), 디스플레이 (416), 및 다양한 카드들 (미도시) 을 수용할 수도 있는 고속 확장 포트들 (410) 에 커플링된다. 구현에서, 저속 제어기 (412) 는 스토리지 디바이스 (406) 및 저속 확장 포트 (414) 에 커플링된다. 다양한 통신 포트들 (예를 들어, USB, 블루투스, 이더넷, 무선 이더넷) 을 포함할 수도 있는 저속 확장 포트는 키보드, 포인팅 디바이스, 스캐너와 같은 하나 이상의 입력/출력 디바이스들에, 또는 스위치 또는 라우터와 같은 네트워킹 디바이스에, 예를 들어 네트워크 어댑터를 통해 커플링될 수도 있다.
컴퓨팅 디바이스 (400) 는 도면에 나타낸 바와 같이, 다수의 상이한 형태들로 구현될 수도 있다. 예를 들어, 그것은 표준 서버 (420) 로서, 또는 이러한 서버들의 그룹에서 복수 회 구현될 수도 있다. 또한 그것은 랙 (rack) 서버 시스템 (424) 의 일부로서 구현될 수도 있다. 또한, 랩탑 컴퓨터 (422) 와 같은 개인용 컴퓨터에서 구현될 수도 있다. 대안으로, 컴퓨팅 디바이스 (400) 로부터의 컴포넌트들은 모바일 디바이스 (도 1 에 나타냄) 에서 다른 컴포넌트들과 결합될 수도 있다. 이러한 디바이스들의 각각은 컴퓨팅 디바이스 (400) 의 하나 이상을 포함할 수도 있고, 전체 시스템은 서로 통신하는 다중 컴퓨팅 디바이스들 (400) 로 구성될 수도 있다.
도 5 는 클라이언트 또는 서버로서 프로그래밍될 수 있는 데이터 프로세싱 장치 (500) 를 포함하는 데이터 프로세싱 시스템의 개략도이다. 데이터 프로세싱 장치 (500) 는 네트워크 (580) 를 통해 하나 이상의 컴퓨터들 (590) 과 접속된다. 도 5 에는 단지 하나의 컴퓨터만이 나타나 있지만, 데이터 프로세싱 장치 (500) 로서, 다중 컴퓨터들이 사용될 수 있다. 데이터 프로세싱 장치 (500) 는 애플리케이션 계층과 데이터 프로세싱 커널 사이에 분산될 수 있는, 다양한 소프트웨어 모듈들을 구현하는 도 1 에 나타낸 데이터 분석 시스템 (140) 을 위한 소프트웨어 아키텍처를 포함하는 것으로 나타나 있다. 이들은 상술한 바와 같은, 데이터 분석 애플리케이션 (145) 의 툴들 및 서비스들을 포함하는, 실행가능 및/또는 해석가능한 소프트웨어 프로그램들 또는 라이브러리들을 포함할 수 있다. 사용된 소프트웨어 모듈들의 수는 구현마다 다를 수 있다. 또한, 소프트웨어 모듈들은 하나 이상의 컴퓨터 네트워크들 또는 다른 적절한 통신 네트워크들에 의해 접속된 하나 이상의 데이터 프로세싱 장치에 분산될 수 있다. 소프트웨어 아키텍처는 데이터 분석 엔진 (520) 을 구현하는 데이터 프로세싱 커널로서 설명된 계층을 포함한다. 도 5 에 도시된 바와 같이, 데이터 프로세싱 커널은 일부 기존 오퍼레이팅 시스템들과 관련되는 피처들을 포함하도록 구현될 수 있다. 예를 들어, 데이터 프로세싱 커널은 스케줄링, 할당, 리소스 관리와 같은 다양한 기능들을 수행할 수 있다. 데이터 프로세싱 커널은 또한 데이터 프로세싱 장치 (500) 의 오퍼레이팅 시스템의 리소스들을 사용하도록 구성될 수 있다. 일부 경우들에서, 데이터 분석 엔진 (520) 은 데이터 분석 애플리케이션들 (145) 을 사용하여 개발된 워크플로우를 실행하는 소프트웨어 컴포넌트이다. 도 5 는 데이터 분석 시스템의 데이터 집성 양태들을 구현하는 최적화된 데이터 집성 모듈 (525) 을 포함하는 것으로 데이터 분석 엔진 (520) 을 나타낸다. 부가적으로, 최적화된 조인 모듈 (530) 은 적어도, 설명된 바와 같이 해시 조인 기법들을 구현하고, 데이터 분석 애플리케이션 (145) 의 최적화된 조인 툴에 의해 활용된다. 예로서, 데이터 분석 엔진 (520) 은, 예를 들어 사용자 및 시스템 구성 (516) 설정들 (510) 을 기술하는 부가 파일들과 함께 워크플로우를 기술하는, XML 파일로서의 워크플로우 (515) 를 로딩할 수 있다. 그 후, 데이터 분석 엔진 (520) 은 워크플로우에 의해 설명된 툴들을 사용하여 워크플로우의 실행을 조정할 수 있다. 나타낸 소프트웨어 아키텍처, 특히 데이터 분석 엔진 (520), 최적화된 데이터 집성 모듈 (525), 및 최적화된 조인 모듈 (530) 은 다중 CPU 코어들, 많은 양의 메모리, 다중 스레드 설계, 및 어드밴스드 스토리지 메커니즘 (예를 들어, 고체 상태 드라이버들, 스토리지 영역 네트워크) 을 포함하는 하드웨어 아키텍처들의 이점들을 실현하도록 설계될 수 있다.
데이터 프로세싱 장치 (500) 는 또한 하나 이상의 프로세서들 (535), 하나 이상의 부가 디바이스들 (536), 컴퓨터 판독가능 매체 (537), 통신 인터페이스 (538) 및 하나 이상의 사용자 인터페이스 디바이스들 (539) 을 포함하는 하드웨어 또는 펌웨어 디바이스들을 포함한다. 각각의 프로세서 (535) 는 데이터 프로세싱 장치 (500) 내에서 실행을 위한 명령들을 프로세싱할 수 있다. 일부 구현들에서, 프로세서 (535) 는 단일 또는 멀티-스레드 프로세서이다. 각각의 프로세서 (535) 는 부가 디바이스들 (536) 중 하나와 같은 스토리지 디바이스 상에 또는 컴퓨터 판독가능 매체 (537) 상에 저장된 명령들을 프로세싱할 수 있다. 데이터 프로세싱 장치 (500) 는 예를 들어, 네트워크 (580) 를 통해 하나 이상의 컴퓨터들 (590) 과 통신하기 위해 그의 통신 인터페이스 (538) 를 사용한다. 사용자 인터페이스 디바이스들 (539) 의 예들은 디스플레이, 카메라, 스피커, 마이크로폰, 촉각 피드백 디바이스, 키보드 및 마우스를 포함한다. 데이터 프로세싱 장치 (500) 는 예를 들어, 컴퓨터 판독 가능 매체 (537) 또는 하나 이상의 부가 디바이스들 (536), 예를 들어 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 테이프 디바이스, 및 고체 상태 메모리 디바이스 중 하나 이상에, 상술한 모듈들과 연관된 동작들을 구현하는 명령들을 저장할 수 있다.
본 명세서에 설명된 청구물 및 기능 동작들의 실시형태들은 본 명세서에 개시된 구조들 및 그 구조의 등가물들을 포함하여, 디지털 전자 회로에서, 또는 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어에서, 또는 이들의 하나 이상의 조합에서 구현될 수 있다. 본 명세서에 설명된 청구물의 실시형태들은 데이터 프로세싱 장치에 의한 실행을 위해, 또는 이 장치의 동작을 제어하기 위해 컴퓨터 판독가능 매체 상에 인코딩된 컴퓨터 프로그램 명령들의 하나 이상의 모듈들을 사용하여 구현될 수 있다. 컴퓨터 판독가능 매체는 내장형 시스템, 또는 소매 채널들을 통해 판매된 광학 디스크 (disc) 또는 컴퓨터 시스템에서의 하드 드라이브와 같은 제조된 제품일 수 있다. 컴퓨터 판독가능 매체는 유선 또는 무선 네트워크를 통해 컴퓨터 프로그램 명령들의 하나 이상의 모듈들의 전달에 의해서와 같은, 컴퓨터 명령들의 하나 이상의 모듈들로 별도로 취득되고 나중에 인코딩될 수 있다. 컴퓨터 판독가능 매체는 비일시적 머신 판독가능 스토리지 디바이스, 머신 판독가능 스토리지 기판, 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있다.
용어 "데이터 프로세싱 장치" 는 예시로서 프로그램가능 프로세서, 컴퓨터, 또는 다중 프로세서들 또는 컴퓨터들을 포함하여, 데이터를 프로세싱하기 위한 장치, 디바이스들, 및 머신들을 모두 포괄한다. 장치는 하드웨어에 부가하여, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어를 구성하는 코드, 프로토콜 스택, 데이터베이스 관리 시스템, 오퍼레이팅 시스템, 런타임 환경, 또는 이들의 하나 이상의 조합을 포함할 수 있다. 부가적으로, 장치는 웹 서비스, 분산 컴퓨팅 및 그리드 컴퓨팅 인프라와 같은 여러 상이한 컴퓨팅 모델 인프라구조를 채용할 수 있다.
컴퓨터 프로그램 (프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 또는 코드로서 또한 알려짐) 은 컴파일되거나 해석된 언어, 선언적 또는 절차적 언어를 포함하는 임의의 형태의 프로그래밍 언어로 기입될 수 있고, 독립형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛으로서를 포함한 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램이 반드시 파일 시스템의 파일에 대응하지 않는다. 프로그램은 다른 프로그램 또는 데이터 (예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트들) 를 유지하는 파일의 일부, 해당 프로그램에 전용된 단일 파일, 또는 다중 조정 파일들 (예를 들어, 하나 이상의 모듈들, 서브 프로그램들 또는 코드의 부분들을 저장하는 파일들) 에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 하나의 사이트에 위치되거나 다중 사이트들에 걸쳐 분산되고 통신 네트워크에 의해 상호접속되는 다중 컴퓨터들 상에서 실행되도록 전개될 수 있다.
본 명세서에 설명된 프로세스들 및 로직 플로우들은 입력 데이터에 대해 동작하고 출력을 생성함으로서 기능들을 수행하도록 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그램가능 프로세서들에 의해 수행될 수 있다. 프로세스들 및 로직 플로우들은 또한 특수 목적 로직 회로, 예를 들어 FPGA (필드 프로그램가능 게이트 어레이) 또는 ASIC (애플리케이션 특정 집적 회로) 로서 구현될 수 있다.
여기에 설명된 기법 및 시스템의 다양한 구현은 디지털 전자 회로, 집적 회로, 특별히 설계된 ASIC (애플리케이션 특정 집적 회로), 컴퓨터 하드웨어, 펌웨어, 소프트웨어 및/또는 이들의 조합으로 실현될 수 있다. 이러한 다양한 구현은 특수 목적 또는 범용일 수도 있고, 스토리지 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스로부터 데이터 및 명령들을 수신하고, 이들로 데이터 및 명령들을 송신하도록 커플링된, 적어도 하나의 프로그램가능 프로세서를 포함하는 프로그램가능 시스템 상에서 실행가능하고 및/또는 해석가능한 하나 이상의 컴퓨터 프로그램들에서의 구현을 포함할 수 있다.
이들 컴퓨터 프로그램 (프로그램, 소프트웨어, 소프트웨어 애플리케이션 또는 코드로서 또한 알려짐) 은 프로그램가능 프로세서를 위한 머신 명령들을 포함하고, 하이 레벨 절차적 및/또는 오브젝트 배향된 프로그래밍 언어, 및/또는 어셈블리/머신 언어에서 구현될 수 있다. 본 명세서에서 사용된 바와 같이, 용어 "머신 판독가능 매체" 및 "컴퓨터 판독가능 매체" 는 머신 판독가능 신호로서 머신 명령들을 수신하는 머신 판독가능 매체를 포함하여, 프로그램가능 프로세서에 머신 명령들 및/또는 데이터를 제공하는데 사용된 임의의 컴퓨터 프로그램 제품, 장치 및/또는 디바이스 (예를 들어, 자기 디스크, 광학 디스크, 메모리, 프로그램가능 로직 디바이스 (PLD)) 를 지칭한다. 용어 "머신 판독가능 신호" 는 프로그램가능 프로세서에 머신 명령들 및/또는 데이터를 제공하는데 사용된 임의의 신호를 지칭한다.
사용자와의 상호작용을 제공하기 위해, 여기에 설명된 시스템 및 기법은 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스 (예를 들어, 마우스 또는 트랙볼) 및 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스를 갖는 컴퓨터 상에서 구현될 수 있다. 또한, 사용자와의 상호작용을 제공하기 위해 다른 종류의 디바이스들이 사용될 수 있다: 예를 들어, 사용자에게 제공되는 피드백이 임의의 형태의 감각 피드백 (예를 들어, 시각적 피드백, 청각적 피드백 또는 촉각적 피드백) 일 수 있고; 그리고 사용자로부터의 입력은 음향, 스피치 또는 촉각 입력을 포함하여 임의의 형태로 수신될 수 있다.
여기에 설명된 시스템들 및 기법들은 백-엔드 컴포넌트 (예를 들어, 데이터 서버로서) 를 포함하거나, 미들웨어 컴포넌트 (예를 들어, 애플리케이션 서버) 를 포함하거나, 프론트 엔드 컴포넌트 (예를 들어, 사용자가 여기서 설명된 기법 및 시스템의 구현과 상호작용할 수 있는 웹 브라우저 또는 그래픽 사용자 인터페이스를 갖는 클라이언트 컴퓨터) 를 포함하거나, 또는 이러한 백 엔드, 미들웨어 또는 프론트 엔드 컴포넌트들의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신 (예를 들어, 통신 네트워크) 의 임의의 형태 또는 매체에 의해 상호접속될 수 있다. 통신 네트워크의 예는 로컬 영역 네트워크 ("LAN"), 광역 네트워크 ("WAN"), 피어 투 피어 네트워크 (애드-혹 또는 정적 멤버를 가짐), 그리드 컴퓨팅 인프라구조, 및 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트 및 서버를 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 원격이고 통상적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는 개개의 컴퓨터에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램에 의해 발생한다.
몇몇 구현들이 위에서 상세히 설명되었지만, 다른 수정들이 가능하다. 또한, 도면에 도시된 로직 플로우는 바람직한 결과를 달성하기 위해 순차적 순서, 또는 나타낸 특정 순서를 요구하지 않는다. 다른 단계들이 제공될 수도 있고, 또는 단계들이 설명된 플로우로부터 제거될 수도 있으며, 다른 컴포넌트들이 설명된 시스템에 부가되거나 이로부터 제거될 수도 있다. 따라서, 다음의 청구항들의 범위 내에서 다른 구현들이 있다.
Claims (20)
- 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법으로서,
제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 단계;
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 단계;
계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 상기 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 단계;
상기 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 단계로서, 상기 제 2 세트의 그루핑들에서의 각각의 그루핑은 상기 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관되는, 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 단계;
해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 단계; 및
상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 상기 개개의 데이터 레코드들을 조인하는 단계; 및
조인된 상기 데이터 레코드들을 출력하는 단계를 포함하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
상기 데이터 레코드들은 값들을 갖는 복수의 필드들을 포함하고, 상기 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 단계는,
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 데이터 레코드들의 상기 복수의 필드들의 서브세트를 식별하는 단계; 및
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 복수의 필드들의 서브세트의 값들의 해시들을 계산하는 단계를 포함하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
상기 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 단계는,
상기 제 1 복수의 데이터 레코드들의 데이터 레코드에 대해 계산된 해시에 포함된 비트들의 서브세트를 결정하는 단계; 및
상기 비트들의 서브세트와 연관된 상기 제 1 세트의 그루핑들로부터의 그루핑에 상기 레코드를 할당하는 단계를 포함하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
상기 해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 단계는,
상기 제 1 세트의 그루핑들로부터의 그루핑의 제 1 데이터 레코드를 상기 제 2 세트의 그루핑들로부터의 그루핑의 제 2 데이터 레코드와, 상기 제 1 및 제 2 데이터 레코드들이 매칭 해시들을 갖는 것에 응답하여, 조인하기로 결정하는 단계를 포함하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
개개의 데이터 레코드들을 조인할지 여부를 결정하는 단계는,
상기 데이터 레코드들에 대한 상기 해시들에 기초하여 상기 제 1 세트의 그루핑들로부터의 그루핑의 데이터 레코드들 및 상기 제 2 세트의 그루핑들로부터의 그루핑의 데이터 레코드들을 소팅하는 단계를 포함하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
상기 컴퓨터는 다수의 프로세서 코어들을 갖고, 상기 제 1 세트의 그루핑들에서의 그루핑들의 수 및 상기 제 2 세트의 그루핑들에서의 그루핑들의 수는 상기 프로세서 코어들의 수에 응답하여 결정되는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 제 1 항에 있어서,
상기 제 1 세트의 그루핑들로부터의 그루핑 및 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑으로 형성된 그루핑들의 쌍을 상기 컴퓨터의 프로세싱 코어에 의해 실행되는 프로세싱 스레드에 할당하는 단계를 더 포함하고,
상기 프로세싱 스레드는 상기 그루핑들의 쌍에서의 개개의 데이터 레코드들을 조인할지 여부를 결정하고 상기 개개의 데이터 레코드들을 조인하고,
상이한 그루핑들의 쌍들이 상이한 프로세싱 스레드들에 할당되며, 그리고
상기 상이한 프로세싱 스레드들은 상기 상이한 그루핑들의 쌍들을 병렬로 프로세싱하는, 컴퓨터를 사용하여 데이터 레코드들을 조인하는 방법. - 데이터 레코드들을 조인하기 위한 컴퓨터로서,
적어도 하나의 컴퓨터 프로세서; 및
동작들을 수행하도록 상기 프로세서에 의해 실행가능한 컴퓨터 프로그램 명령들을 저장하는 비일시적 컴퓨터 판독가능 메모리를 포함하고,
상기 동작들은,
제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 것;
상기 제 1 및 제 2 복수의 데이터 레코드들에서 각각의 데이터 레코드에 대한 해시를 계산하는 것;
계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 상기 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것;
상기 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것으로서, 상기 제 2 세트의 그루핑들에서의 각각의 그루핑은 상기 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관되는, 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것;
해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것; 및
상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 상기 개개의 데이터 레코드들을 조인하는 것; 및
조인된 상기 데이터 레코드들을 출력하는 것을 포함하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
상기 데이터 레코드들은 값들을 갖는 복수의 필드들을 포함하고, 상기 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 것은,
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 데이터 레코드들의 상기 복수의 필드들의 서브세트를 식별하는 것; 및
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 복수의 필드들의 서브세트의 값들의 해시들을 계산하는 것을 포함하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
상기 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것은,
상기 제 1 복수의 데이터 레코드들의 데이터 레코드에 대해 계산된 해시에 포함된 비트들의 서브세트를 결정하는 것; 및
상기 비트들의 서브세트와 연관된 상기 제 1 세트의 그루핑들로부터의 그루핑에 상기 레코드를 할당하는 것을 포함하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
상기 해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것은,
상기 제 1 세트의 그루핑들로부터의 그루핑의 제 1 데이터 레코드를 상기 제 2 세트의 그루핑들로부터의 그루핑의 제 2 데이터 레코드와, 상기 제 1 및 제 2 데이터 레코드들이 매칭 해시들을 갖는 것에 응답하여, 조인하기로 결정하는 것을 포함하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
개개의 데이터 레코드들을 조인할지 여부를 결정하는 것은,
상기 데이터 레코드들에 대한 상기 해시들에 기초하여 상기 제 1 세트의 그루핑들로부터의 그루핑의 데이터 레코드들 및 상기 제 2 세트의 그루핑들로부터의 그루핑의 데이터 레코드들을 소팅하는 것을 포함하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
상기 컴퓨터 프로세서는 다수의 프로세서 코어들을 갖고, 상기 제 1 세트의 그루핑들에서의 그루핑들의 수 및 상기 제 2 세트의 그루핑들에서의 그루핑들의 수는 상기 프로세서 코어들의 수에 응답하여 결정되는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 제 8 항에 있어서,
상기 동작들은,
상기 제 1 세트의 그루핑들로부터의 그루핑 및 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑으로 형성된 그루핑들의 쌍을 상기 컴퓨터 프로세서의 프로세싱 코어에 의해 실행되는 프로세싱 스레드에 할당하는 것을 더 포함하고,
상기 프로세싱 스레드는 상기 그루핑들의 쌍에서의 개개의 데이터 레코드들을 조인할지 여부를 결정하고 상기 개개의 데이터 레코드들을 조인하고,
상이한 그루핑들의 쌍들이 상이한 프로세싱 스레드들에 할당되며, 그리고
상기 상이한 프로세싱 스레드들은 상기 상이한 그루핑들의 쌍들을 병렬로 프로세싱하는, 데이터 레코드들을 조인하기 위한 컴퓨터. - 데이터 레코드들을 조인하기 위한 동작들을 수행하도록 컴퓨터 프로세서에 의해 실행가능한 컴퓨터 프로그램 명령들을 저장하는 비일시적 컴퓨터 판독가능 메모리로서,
상기 동작들은,
제 1 복수의 데이터 레코드들 및 제 2 복수의 데이터 레코드들을 식별하는 것;
상기 제 1 및 제 2 복수의 데이터 레코드들에서 각각의 데이터 레코드에 대한 해시를 계산하는 것;
계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 상기 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것;
상기 계산된 해시들에 기초하여 제 2 세트의 그루핑들로부터의 그루핑들에 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것으로서, 상기 제 2 세트의 그루핑들에서의 각각의 그루핑은 상기 제 1 세트의 그루핑들에서의 개개의 그루핑과 연관되는, 상기 제 2 복수의 레코드들의 데이터 레코드들을 할당하는 것;
해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것; 및
상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인하기로 결정하는 것에 응답하여, 상기 개개의 데이터 레코드들을 조인하는 것; 및
조인된 상기 데이터 레코드들을 출력하는 것
을 포함하는, 비일시적 컴퓨터 판독가능 메모리. - 제 15 항에 있어서,
상기 데이터 레코드들은 값들을 갖는 복수의 필드들을 포함하고, 상기 제 1 및 제 2 복수의 데이터 레코드들에서의 각각의 데이터 레코드에 대한 해시를 계산하는 것은,
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 데이터 레코드들의 상기 복수의 필드들의 서브세트를 식별하는 것; 및
상기 제 1 및 제 2 복수의 데이터 레코드들에서의 데이터 레코드들에 공통인 상기 복수의 필드들의 서브세트의 값들의 해시들을 계산하는 것을 포함하는, 비일시적 컴퓨터 판독가능 메모리. - 제 15 항에 있어서,
상기 계산된 해시들에 기초하여 제 1 세트의 그루핑들로부터의 그루핑들에 제 1 복수의 데이터 레코드들의 데이터 레코드들을 할당하는 것은,
상기 제 1 복수의 데이터 레코드들의 데이터 레코드에 대해 계산된 해시에 포함된 비트들의 서브세트를 결정하는 것; 및
상기 비트들의 서브세트와 연관된 상기 제 1 세트의 그루핑들로부터의 그루핑에 상기 레코드를 할당하는 것을 포함하는, 비일시적 컴퓨터 판독가능 메모리. - 제 15 항에 있어서,
상기 해시 값들에 기초하여, 상기 제 1 세트의 그루핑들로부터의 그루핑의 개개의 데이터 레코드들을 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑의 개개의 데이터 레코드들과 조인할지 여부를 결정하는 것은,
상기 제 1 세트의 그루핑들로부터의 그루핑의 제 1 데이터 레코드를 상기 제 2 세트의 그루핑들로부터의 그루핑의 제 2 데이터 레코드와, 상기 제 1 및 제 2 데이터 레코드들이 매칭 해시들을 갖는 것에 응답하여, 조인하기로 결정하는 것을 포함하는, 비일시적 컴퓨터 판독가능 메모리. - 제 15 항에 있어서,
상기 컴퓨터 프로세서는 다수의 프로세서 코어들을 갖고, 상기 제 1 세트의 그루핑들에서의 그루핑들의 수 및 상기 제 2 세트의 그루핑들에서의 그루핑들의 수는 상기 프로세서 코어들의 수에 응답하여 결정되는, 비일시적 컴퓨터 판독가능 메모리. - 제 15 항에 있어서,
상기 동작들은,
상기 제 1 세트의 그루핑들로부터의 그루핑 및 상기 제 2 세트의 그루핑들로부터의 연관된 그루핑으로 형성된 그루핑들의 쌍을 상기 컴퓨터 프로세서의 프로세싱 코어에 의해 실행되는 프로세싱 스레드에 할당하는 것을 더 포함하고,
상기 프로세싱 스레드는 상기 그루핑들의 쌍에서의 개개의 데이터 레코드들을 조인할지 여부를 결정하고 상기 개개의 데이터 레코드들을 조인하고,
상이한 그루핑들의 쌍들이 상이한 프로세싱 스레드들에 할당되며, 그리고
상기 상이한 프로세싱 스레드들은 상기 상이한 그루핑들의 쌍들을 병렬로 프로세싱하는, 비일시적 컴퓨터 판독가능 메모리.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/652,131 US10489348B2 (en) | 2017-07-17 | 2017-07-17 | Performing hash joins using parallel processing |
US15/652,131 | 2017-07-17 | ||
PCT/US2018/042257 WO2019018271A1 (en) | 2017-07-17 | 2018-07-16 | MAKING HASH JOINTS USING PARALLEL PROCESSING |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200021946A true KR20200021946A (ko) | 2020-03-02 |
KR102152560B1 KR102152560B1 (ko) | 2020-09-04 |
Family
ID=64998959
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197038516A KR102152560B1 (ko) | 2017-07-17 | 2018-07-16 | 병렬 프로세싱을 사용한 해시 조인들의 수행 |
Country Status (8)
Country | Link |
---|---|
US (2) | US10489348B2 (ko) |
EP (1) | EP3635573B1 (ko) |
JP (1) | JP6750137B1 (ko) |
KR (1) | KR102152560B1 (ko) |
CN (1) | CN111095193B (ko) |
AU (1) | AU2018303579B2 (ko) |
CA (1) | CA3069534C (ko) |
WO (1) | WO2019018271A1 (ko) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10320897B2 (en) * | 2015-12-15 | 2019-06-11 | Microsoft Technology Licensing, Llc | Automatic system response to external field-replaceable unit (FRU) process |
US10715459B2 (en) * | 2017-10-27 | 2020-07-14 | Salesforce.Com, Inc. | Orchestration in a multi-layer network |
US11625398B1 (en) | 2018-12-12 | 2023-04-11 | Teradata Us, Inc. | Join cardinality estimation using machine learning and graph kernels |
US11678191B2 (en) * | 2018-12-27 | 2023-06-13 | Apple Inc. | Integrity protection for frequent small data transmission |
EP3686756A1 (en) * | 2019-01-25 | 2020-07-29 | Sage (UK) Limited | Method and apparatus for grouping data records |
US11416496B2 (en) * | 2019-03-01 | 2022-08-16 | Hitachi Vantara Llc | Computer implemented method for continuous processing of data-in-motion streams residing in distributed data sources |
CN111125261B (zh) * | 2020-03-31 | 2020-09-29 | 四川新网银行股份有限公司 | 基于分布式缓存的数据传输方法 |
RU2755568C1 (ru) * | 2020-07-26 | 2021-09-17 | Смоленская общественная организация содействия науке и образованию «Региональный союз ученых» | Способ параллельного выполнения операции JOIN при обработке больших структурированных высокоактивных данных |
CN116702225B (zh) * | 2023-06-08 | 2024-07-02 | 重庆亲笔签数字科技有限公司 | 基于哈希并行计算快速验证电子档案文件的方法、系统、设备及介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080120314A1 (en) * | 2006-11-16 | 2008-05-22 | Yahoo! Inc. | Map-reduce with merge to process multiple relational datasets |
US20080243764A1 (en) * | 2007-03-29 | 2008-10-02 | Microsoft Corporation | Group joins to navigate data relationships |
US20120310916A1 (en) * | 2010-06-04 | 2012-12-06 | Yale University | Query Execution Systems and Methods |
US20130138628A1 (en) * | 2010-07-12 | 2013-05-30 | Christian Bensberg | Hash-join in parallel computation environments |
US8880481B1 (en) * | 2012-03-29 | 2014-11-04 | Pivotal Software, Inc. | Inverse distribution function operations in a parallel relational database |
US20140337314A1 (en) * | 2008-09-19 | 2014-11-13 | Oracle International Corporation | Hash join using collaborative parallel filtering in intelligent storage with offloaded bloom filters |
US20160147450A1 (en) * | 2014-11-20 | 2016-05-26 | International Business Machines Corporation | High-performance hash joins using memory with extensive internal parallelism |
US9436558B1 (en) * | 2010-12-21 | 2016-09-06 | Acronis International Gmbh | System and method for fast backup and restoring using sorted hashes |
US20160378752A1 (en) * | 2015-06-25 | 2016-12-29 | Bank Of America Corporation | Comparing Data Stores Using Hash Sums on Disparate Parallel Systems |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5832310A (en) | 1993-12-30 | 1998-11-03 | Unisys Corporation | Serial I/O channel having dependent and synchronous sources of control data and user defined data |
US5875454A (en) | 1996-07-24 | 1999-02-23 | International Business Machiness Corporation | Compressed data cache storage system |
JP3056704B2 (ja) * | 1997-08-25 | 2000-06-26 | 三菱電機株式会社 | データ管理装置 |
US6625671B1 (en) | 1999-05-03 | 2003-09-23 | Computer Network Technology Corporation | Compression of buffered data |
JP3318834B2 (ja) * | 1999-07-30 | 2002-08-26 | 三菱電機株式会社 | データファイルシステム及びデータ検索方法 |
US6606704B1 (en) | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US6564274B1 (en) | 1999-12-17 | 2003-05-13 | Omnicluster Technologies, Inc. | Modular architecture for small computer networks |
JP3515050B2 (ja) * | 2000-07-07 | 2004-04-05 | 三菱電機株式会社 | データベース演算処理装置 |
US20040236785A1 (en) | 2003-05-22 | 2004-11-25 | Greiner Dylan E. | Method and system for transmitting a digital image over a communication network |
US7003597B2 (en) | 2003-07-09 | 2006-02-21 | International Business Machines Corporation | Dynamic reallocation of data stored in buffers based on packet size |
US7188227B2 (en) | 2003-09-30 | 2007-03-06 | International Business Machines Corporation | Adaptive memory compression |
US7590620B1 (en) * | 2004-06-18 | 2009-09-15 | Google Inc. | System and method for analyzing data records |
US7711876B2 (en) | 2005-03-23 | 2010-05-04 | International Business Machines Corporation | Dynamic category compression in a data storage library |
US9331919B2 (en) | 2007-11-30 | 2016-05-03 | Solarwinds Worldwide, Llc | Method for summarizing flow information of network devices |
US20100115182A1 (en) | 2008-11-06 | 2010-05-06 | Sony Corporation | Flash memory operation |
WO2011156746A2 (en) | 2010-06-11 | 2011-12-15 | California Institute Of Technology | Systems and methods for rapid processing and storage of data |
US8515945B2 (en) * | 2010-11-16 | 2013-08-20 | Sybase, Inc. | Parallel partitioning index scan |
US10055480B2 (en) * | 2015-05-29 | 2018-08-21 | Sap Se | Aggregating database entries by hashing |
JP5712609B2 (ja) | 2010-12-24 | 2015-05-07 | 富士通株式会社 | データ処理装置及びデータ記録方法 |
US9841989B2 (en) | 2012-05-31 | 2017-12-12 | Hitachi, Ltd. | Parallel data processing system, computer, and parallel data processing method |
US20130339473A1 (en) | 2012-06-15 | 2013-12-19 | Zynga Inc. | Real time analytics via stream processing |
US9183200B1 (en) | 2012-08-02 | 2015-11-10 | Symantec Corporation | Scale up deduplication engine via efficient partitioning |
US9600550B2 (en) | 2013-03-15 | 2017-03-21 | Uda, Llc | Optimization for real-time, parallel execution of models for extracting high-value information from data streams |
US9922064B2 (en) * | 2015-03-20 | 2018-03-20 | International Business Machines Corporation | Parallel build of non-partitioned join hash tables and non-enforced N:1 join hash tables |
US10394760B1 (en) * | 2015-04-16 | 2019-08-27 | Western Digital Technologies, Inc. | Browsable data backup |
US20160378824A1 (en) * | 2015-06-24 | 2016-12-29 | Futurewei Technologies, Inc. | Systems and Methods for Parallelizing Hash-based Operators in SMP Databases |
US10489350B2 (en) | 2017-02-24 | 2019-11-26 | Advanced Micro Devices, Inc. | Data compression with inline compression metadata |
US20180285167A1 (en) * | 2017-04-03 | 2018-10-04 | Ocient, Inc | Database management system providing local balancing within individual cluster node |
-
2017
- 2017-07-17 US US15/652,131 patent/US10489348B2/en active Active
-
2018
- 2018-07-16 CA CA3069534A patent/CA3069534C/en active Active
- 2018-07-16 JP JP2020501787A patent/JP6750137B1/ja active Active
- 2018-07-16 KR KR1020197038516A patent/KR102152560B1/ko active IP Right Grant
- 2018-07-16 EP EP18834729.8A patent/EP3635573B1/en active Active
- 2018-07-16 CN CN201880047106.3A patent/CN111095193B/zh active Active
- 2018-07-16 WO PCT/US2018/042257 patent/WO2019018271A1/en unknown
- 2018-07-16 AU AU2018303579A patent/AU2018303579B2/en active Active
-
2019
- 2019-10-18 US US16/657,665 patent/US11334524B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080120314A1 (en) * | 2006-11-16 | 2008-05-22 | Yahoo! Inc. | Map-reduce with merge to process multiple relational datasets |
US20080243764A1 (en) * | 2007-03-29 | 2008-10-02 | Microsoft Corporation | Group joins to navigate data relationships |
US20140337314A1 (en) * | 2008-09-19 | 2014-11-13 | Oracle International Corporation | Hash join using collaborative parallel filtering in intelligent storage with offloaded bloom filters |
US20120310916A1 (en) * | 2010-06-04 | 2012-12-06 | Yale University | Query Execution Systems and Methods |
US20130138628A1 (en) * | 2010-07-12 | 2013-05-30 | Christian Bensberg | Hash-join in parallel computation environments |
US9436558B1 (en) * | 2010-12-21 | 2016-09-06 | Acronis International Gmbh | System and method for fast backup and restoring using sorted hashes |
US8880481B1 (en) * | 2012-03-29 | 2014-11-04 | Pivotal Software, Inc. | Inverse distribution function operations in a parallel relational database |
US20160147450A1 (en) * | 2014-11-20 | 2016-05-26 | International Business Machines Corporation | High-performance hash joins using memory with extensive internal parallelism |
US20160378752A1 (en) * | 2015-06-25 | 2016-12-29 | Bank Of America Corporation | Comparing Data Stores Using Hash Sums on Disparate Parallel Systems |
Also Published As
Publication number | Publication date |
---|---|
CN111095193B (zh) | 2022-03-25 |
CA3069534C (en) | 2020-06-16 |
US20190018855A1 (en) | 2019-01-17 |
AU2018303579A1 (en) | 2019-12-05 |
US10489348B2 (en) | 2019-11-26 |
EP3635573A4 (en) | 2020-12-09 |
KR102152560B1 (ko) | 2020-09-04 |
JP6750137B1 (ja) | 2020-09-02 |
AU2018303579B2 (en) | 2020-01-23 |
WO2019018271A1 (en) | 2019-01-24 |
CA3069534A1 (en) | 2019-01-24 |
JP2020528606A (ja) | 2020-09-24 |
EP3635573A1 (en) | 2020-04-15 |
US20200050585A1 (en) | 2020-02-13 |
CN111095193A (zh) | 2020-05-01 |
EP3635573B1 (en) | 2022-11-09 |
US11334524B2 (en) | 2022-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102152560B1 (ko) | 병렬 프로세싱을 사용한 해시 조인들의 수행 | |
JP7038740B2 (ja) | キャッシュ最適化及び効率的な処理のためのデータ集約の方法 | |
US11888702B2 (en) | Intelligent analytic cloud provisioning | |
US8984516B2 (en) | System and method for shared execution of mixed data flows | |
US20180248934A1 (en) | Method and System for a Scheduled Map Executor | |
CN109614227A (zh) | 任务资源调配方法、装置、电子设备及计算机可读介质 | |
US10326824B2 (en) | Method and system for iterative pipeline | |
US10162830B2 (en) | Systems and methods for dynamic partitioning in distributed environments | |
US11042530B2 (en) | Data processing with nullable schema information | |
US20210365300A9 (en) | Systems and methods for dynamic partitioning in distributed environments | |
CN107204998B (zh) | 处理数据的方法和装置 | |
US11442792B2 (en) | Systems and methods for dynamic partitioning in distributed environments | |
US10049159B2 (en) | Techniques for data retrieval in a distributed computing environment | |
Shein et al. | Processing of aggregate continuous queries in a distributed environment | |
Win et al. | An efficient big data analytics platform for mobile devices | |
Moturi et al. | Use of MapReduce for data mining and data optimization on a web portal | |
Becker et al. | Streamlined and accelerated cyber analyst workflows with clx and rapids | |
Tang et al. | Network-based inference algorithm on hadoop | |
Sharif et al. | DEVELOPMENT OF A PROTOTYPE OF EVENT STREAM PROCESSING ACTIVITY LOGGER FOR MOBILE APPLICATION. | |
Bhaskar et al. | Makespan Map Reduce Architecture for Efficient Memory Utilization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |