KR20200051835A - 데이터 분석 시스템에서의 메모리 할당 - Google Patents

데이터 분석 시스템에서의 메모리 할당 Download PDF

Info

Publication number
KR20200051835A
KR20200051835A KR1020207012710A KR20207012710A KR20200051835A KR 20200051835 A KR20200051835 A KR 20200051835A KR 1020207012710 A KR1020207012710 A KR 1020207012710A KR 20207012710 A KR20207012710 A KR 20207012710A KR 20200051835 A KR20200051835 A KR 20200051835A
Authority
KR
South Korea
Prior art keywords
memory
ready
computer
state
blocks
Prior art date
Application number
KR1020207012710A
Other languages
English (en)
Other versions
KR102170624B1 (ko
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 KR20200051835A publication Critical patent/KR20200051835A/ko
Application granted granted Critical
Publication of KR102170624B1 publication Critical patent/KR102170624B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0626Reducing size or complexity of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Debugging And Monitoring (AREA)

Abstract

모듈은 컴퓨터에서 메모리를 관리한다. 모듈은 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링한다. 프라이머리 메모리는 메모리 블록들을 준비 상태로 저장한다. 준비 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 모듈은 준비 상태에서의 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들을 형성한다. 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 모듈은 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제한다. 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 모듈은 압축 상태에서의 적어도 일부 메모리 블록들을 컴퓨터와 연관된 세컨더리 메모리에 전송한다.

Description

데이터 분석 시스템에서의 메모리 할당
발명자들:
Edward P. Harding Jr .
Adam D. Riley
Christopher H. Kingsley
기술 분야
설명되는 실시형태들은 일반적으로 컴퓨터 메모리 관리에 관한 것이고, 특히, 대량의 데이터를 프로세싱하는 동안 메모리를 할당하는 것에 관한 것이다.
관련 기술의 설명
빅 데이터 분석 (Big Data Analytics) 과 같은 데이터 분석 플랫폼들의 성장은, 비즈니스 가치를 갖는 정보를 추출하기 위해 대량의 데이터를 프로세싱하기 위한 툴로 데이터 프로세싱을 확장하였다. 예를 들어, 소기업은 외부 데이터 제공자, 내부 데이터 소스 (예를 들어, 로컬 컴퓨터 상의 파일), 빅 데이터 스토어, 및 클라우드 기반 데이터 (예를 들어, 소셜 미디어 정보) 와 같은 다양한 소스로부터 방대한 양의 데이터를 게더링, 프로세싱 및 분석하기 위해 전용 컴퓨팅 및 인적 리소스를 채용하는 제 3 자 데이터 분석 환경을 활용할 수도 있다. 유용한 정량적 및 정성적 정보를 추출하는 방식으로, 데이터 분석에 사용되는 바와 같은, 이러한 대규모 데이터 세트들을 프로세싱하는 것은 통상적으로 강력한 컴퓨터 디바이스들 상에서 구현되는 복잡한 소프트웨어 툴들을 필요로 한다.
또한, 상이한 데이터 소스들로부터의 대규모 데이터 세트들을 액세스, 프로세싱 및 분석하기 위해 효율적인 데이터 프로세싱 기법들이 필요하다. 그렇지 않으면, 성능 병목 현상이 발생하여 데이터 분석 플랫폼의 기능을 방해하고 데이터의 프로세싱을 지연시키며, 데이터로부터 추출된 정보의 품질을 떨어뜨릴 수 있다. 예를 들어, 플랫폼에서의 하나 이상의 프로세서들이 적시에 데이터를 처리하지 못할 수도 있으며, 플랫폼에서의 다른 서브시스템들이 그 프로세서들의 출력을 대기함에 따라 지연들을 초래하게 된다. 다른 예에서, 프로세싱되고 있는 데이터의 양은 플랫폼에 대해 이용가능한 작업 메모리의 사이즈를 초과할 수도 있다. 이 후자의 예에서, 데이터가 메모리로 그리고 메모리로부터 전송됨에 따라 지연들이 발생할 수도 있다.
요약
컴퓨터에서 메모리를 관리하기 위한 방법, 컴퓨터 시스템, 및 컴퓨터 판독가능 저장 매체에 의해 상기 및 다른 문제점들이 해결된다. 방법의 일 실시형태는, 컴퓨터와 연관된 프라이머리 메모리 (primary memory) 의 사용을 모니터링하는 단계를 포함하고, 프라이머리 메모리는 준비 상태 (ready state) 에서 메모리 블록들을 저장한다. 그 방법은 추가로, 준비 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 준비 상태에서의 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하는 단계를 포함한다. 그 방법은 추가로, 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치 (release threshold) 를 초과하는 것에 응답하여, 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제하는 단계를 포함한다. 그 방법은 또한, 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 압축 상태에서의 적어도 일부 메모리 블록들을 컴퓨터와 연관된 세컨더리 메모리 (secondary memory) 에 전송하여 온-디스크 상태 (on-disk state) 에서의 메모리 블록들을 형성하는 단계를 포함한다.
컴퓨터 시스템의 일 실시형태는 컴퓨터 프로그램 명령들을 실행하기 위한 컴퓨터 프로세서를 포함한다. 그 시스템은 또한, 실행될 때 컴퓨터 프로세서로 하여금 단계들을 수행하게 하는 컴퓨터 프로그램 명령들을 저장하는 비일시적 (non-transitory) 컴퓨터 판독가능 저장 매체를 포함한다. 그 단계들은, 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링하는 단계를 포함하고, 그 프라이머리 메모리는 준비 상태에서 메모리 블록들을 저장한다. 그 단계들은 추가로, 준비 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 준비 상태에서의 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하는 단계를 포함한다. 그 단계들은 추가로, 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제하는 단계를 포함한다. 그 단계들은 또한, 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 압축 상태에서의 적어도 일부 메모리 블록들을 컴퓨터와 연관된 세컨더리 메모리에 전송하여 온-디스크 상태에서의 메모리 블록들을 형성하는 단계를 포함한다.
비일시적 컴퓨터 판독가능 저장 매체의 일 실시형태는 실행가능 컴퓨터 프로그램 명령들을 저장한다. 그 명령들은, 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링하도록 실행가능하고, 그 프라이머리 메모리는 준비 상태에서 메모리 블록들을 저장한다. 그 명령들은 추가적으로, 준비 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 준비 상태에서의 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하도록 실행가능하다. 그 명령들은 추가적으로, 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제 (release) 한다. 그 명령들은 또한, 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 압축 상태에서의 적어도 일부 메모리 블록들을 컴퓨터와 연관된 세컨더리 메모리에 전송하여 온-디스크 상태에서의 메모리 블록들을 형성한다.
도면들의 간단한 설명
도 1 은 하나의 실시형태에 따른, 데이터 분석 시스템을 포함하는 데이터 분석 환경을 나타내는 블록도이다.
도 2 는 하나의 실시형태들에 따른, 데이터를 프로세싱하기 위해 데이터 분석 시스템을 이용하여 형성된 워크플로우를 나타내는 블록도이다.
도 3 은 하나의 실시형태들에 따른, 도 1 의 데이터 분석 시스템으로서 사용하기 위한 통상적 컴퓨터 시스템의 기능도를 나타내는 하이-레벨 블록도이다.
도 4 는 하나의 실시형태에 따른, 데이터 분석 시스템의 데이터 분석 애플리케이션의 보다 상세한 모습을 나타내는 블록도이다.
도 5 는 하나의 실시형태에 따른, 메모리 관리 모듈의 보다 상세한 모습을 나타내는 블록도이다.
도 6 은 하나의 실시형태에 따른, 데이터 분석 애플리케이션 내의 메모리 할당의 프로세스를 나타내는 플로우 차트이다.
도 7 은 하나의 실시형태들에 따른, 데이터 블록에 대한 액세스를 요청하는 툴 모듈에 대해 데이터 블록을 서빙하는 프로세스를 나타내는 플로우 차트이다.
도면들은 다양한 실시형태들을 오직 예시의 목적들을 위해 나타낸다. 당해 기술분야에서 통상의 지식을 가진 자 (이하, '통상의 기술자' 라 함) 는, 본 명세서에서 나타낸 구조들 및 방법들의 대안적인 실시형태들이 본 명세서에서 기술된 실시형태들의 원리들로부터 벗어남이 없이 채용될 수도 있음을 이하의 논의로부터 쉽게 인식할 것이다. 다양한 도면들에서 같은 참조 번호들 및 표기들은 같은 엘리먼트들을 나타낸다.
상세한 설명
도 1 은 하나의 실시형태에 따른, 데이터 분석 시스템 (110) 을 포함하는 데이터 분석 환경 (100) 을 나타내는 블록도이다. 환경 (100) 은 추가로, 네트워크 (130) 를 통해 데이터 분석 시스템 (110) 에 접속된 다수의 데이터 소스들 (120) 을 포함한다. 비록 도시된 환경 (100) 은 다수의 데이터 소스들 (120) 에 커플링된 오직 하나의 데이터 분석 시스템 (110) 을 포함하지만, 실시형태들은 다수의 데이터 분석 시스템들 및 단일의 데이터 소스를 가질 수 있다.
데이터 분석 시스템 (110) 은 대량의 데이터를 프로세싱 및 분석하기 위해 활용되는 컴퓨터-기반 시스템이다. 데이터는 네트워크 (130) 를 통해 다수의 데이터 소스들 (120) 로부터 수집되고, 게더링되고, 또는 그 외에 액세스된다. 데이터 분석 시스템 (110) 은 아주 다양한 데이터 소스들로부터 데이터를 액세스, 준비, 블렌딩 및 분석하는데 채용되는 스케일러블 (scalable) 소프트웨어 툴들 및 하드웨어 리소스들을 구현할 수 있다. 실례로, 데이터 분석 시스템 (110) 은 데이터 집약적 프로세스들 및 워크플로우들의 실행을 지원한다. 데이터 분석 시스템 (110) 은 본 명세서에 설명된 메모리 관리 기법들을 포함하는 데이터 분석 기능들을 구현하기 위해 사용되는 컴퓨팅 디바이스일 수 있다.
데이터 분석 시스템 (110) 은 또한, 데이터 분석 애플리케이션 (160) 으로서 도 1 에 도시된, 하나 이상의 소프트웨어 애플리케이션들을 지원하도록 구성될 수 있다. 데이터 분석 애플리케이션 (160) 은 데이터 소스들 (120) 중 하나 이상으로부터 획득된 대량의 데이터를 프로세싱하고 분석한다. 일부 경우들에서, 데이터 분석 애플리케이션 (160) 은 다중 엔드 사용자들에게 데이터 분석 툴들 및 매크로들에 대한 네트워킹된, 또는 클라우드-기반 액세스를 지원하는 소프트웨어를 제공한다. 일례로서, 데이터 분석 애플리케이션 (160) 은 사용자들이 모바일 애플리케이션 스토어 또는 다른 클라우드 기반 서비스와 유사한 방식으로 분석을 공유, 브라우징 및 소비할 수 있도록 한다. 분석 데이터, 매크로들 및 워크플로우들은 예를 들어 데이터 분석 시스템 (110) 의 다른 사용자들에 의해 액세스될 수 있는, 더 작은 규모 및 맞춤형 (customizable) 분석 애플리케이션 (즉, 앱) 으로서 패키징되고 실행될 수 있다. 일부 경우들에서, 공개된 분석 앱들에 대한 액세스는, 즉 액세스를 승인 또는 철회하는, 데이터 분석 시스템 (110) 에 의해 관리됨으로써, 액세스 제어 및 보안 능력들을 제공할 수 있다. 데이터 분석 애플리케이션 (160) 은 생성, 배치, 공개, 반복, 업데이트 등과 같은 분석 앱들과 연관된 기능들을 수행할 수 있다.
추가적으로, 데이터 분석 애플리케이션 (160) 은 분석 결과들에 대한 액세스, 준비, 블렌드, 분석 및 출력하기 위한 능력과 같은, 데이터 분석에 수반되는 다양한 스테이지들에서 수행된 기능들을 지원할 수 있다. 일부 경우들에서, 데이터 분석 애플리케이션 (160) 은 다양한 데이터 소스들에 액세스하여, 예를 들어 데이터의 스트림에서 원시 (raw) 데이터를 취출할 수 있다. 데이터 분석 애플리케이션 (160) 에 의해 수집된 데이터 스트림들은 원시 데이터의 다중 레코드들을 포함할 수 있고, 여기서, 원시 데이터는 상이한 포맷들 및 구조들이다. 적어도 하나의 데이터 스트림을 수신한 후에, 데이터 분석 애플리케이션 (160) 은 데이터 스트림들의 레코드들이 데이터 분석 동작들로의 입력으로서 사용되도록 허용하는 동작들을 수행할 수 있다. 또한, 예측 분석 (예컨대, 예측 모델링, 클러스터링, 데이터 조사) 과 같은, 레코드들의 통계적, 정성적, 또는 정량적 프로세싱에서 수반되는 분석 기능들은 데이터 분석 애플리케이션 (160) 에 의해 구현될 수 있다.
데이터 분석 애플리케이션 (160) 은 또한, 시각적 그래픽 사용자 인터페이스 (GUI) 를 통해, 반복가능한 워크플로우들을 설계 및 실행하기 위해 소프트웨어 툴을 지원할 수 있다. 일례로서, 데이터 분석 애플리케이션 (160) 과 연관된 GUI 는 데이터 블렌딩, 데이터 프로세싱 및 어드밴스드 데이터 분석을 위한 드래그 앤 드롭 (drag-and-drop) 워크플로우 환경을 제공한다. 더욱이, 워크플로우는 특정 프로세싱 동작들 또는 데이터 분석 기능들을 수행하는 일련의 데이터 프로세싱 툴들을 포함할 수 있다. 워크플로우의 부분인 각 툴은 그 툴에 특정적인 데이터에 관련된 기능을 수행한다. 일례로서, 워크플로우는 입력/출력; 준비; 조인; 예측적; 공간적; 조사; 및 파싱 및 변환 동작들 중 하나 이상을 포함하는 다양한 데이터 분석 기능들을 구현하는 툴들을 포함할 수 있다. 워크플로우에 관한 보다 상세한 내용들은 도 2 와 함께 설명된다.
도 1 의 실시형태에서, 데이터 분석 시스템 (110) 은 프라이머리 메모리 (140) 및 세컨더리 메모리 (150) 를 포함한다. 일부 실시형태들에서, 프라이머리 메모리 (140) 는 비교적 작은 데이터 저장 영역에 대한 비교적 빠른 액세스를 제공하는 한편, 세컨더리 메모리 (150) 는 비교적 큰 데이터 저장 영역에 대한 비교적 느린 액세스를 제공한다 (여기서, “비교적 (relative)” 은 프라이머리 및 세컨더리 메모리들 사이의 차이들을 치징한다). 예를 들어, 프라이머리 메모리 (140) 는 데이터 분석 시스템 (110) 상에서 이용가능한 예컨대 16GB 의 랜덤 액세스 메모리 (RAM) 의 부분을 포함할 수도 있다. 반면, 세컨더리 메모리 (150) 는, 테라바이트들의 데이터를 저장할 수 있는 데이터 분석 시스템 (110) 과 통신하는 하드 디스크 드라이브 (HDD) 들 및/또는 솔리드-스테이트 드라이브 (SSD) 들과 같은 저장 디바이스들의 부분들을 포함할 수도 있다.
일 실시형태에서, 데이터 분석 애플리케이션 (160) 은, 특정된 워크플로우에 따라 데이터 소스들 (120) 로부터의 데이터의 효율적인 프로세싱을 제공하기 위해 프라이머리 및 세컨더리 메모리들의 사용을 할당한다. 예를 들어, 프로세싱되는 데이터는 프라이머리 메모리 (140) 에서 이용가능한 저장 공간의 양을 초과할 수도 있다. 또한, 세컨더리 메모리 (150) 가 데이터를 공급할 수 있는 속도는 데이터 분석 애플리케이션 (160) 내의 툴들이 데이터를 소비할 수 있는 레이트보다 더 느릴 수도 있다. 데이터 분석 애플리케이션 (160) 은 그 툴들에 데이터가 공급되는 레이트를 최적화하는 방식으로 프라이머리 메모리 (140) 및 세컨더리 메모리 (150) 의 메모리 관리를 수행함으로써 이들 문제점들을 해결한다. 이와 같이, 메모리 관리는 데이터 분석 애플리케이션 (160) 및 데이터 분석 시스템 (110) 의 성능을 향상시킨다.
상기 언급된 바와 같이, 데이터 소스들 (120) 은 데이터 분석 시스템 (110) 에 전자 데이터를 제공한다. 데이터 소스 (120) 는 컴퓨터, 데이터베이스, 또는 클라우드 저장 시스템일 수도 있다. 데이터 소스 (120) 는 또한, 다른 소스로부터 데이터를 취출 (retrieve) 할 수 있는 컴퓨터 시스템일 수도 있다. 데이터 소스들 (120) 은 데이터 분석 시스템 (110) 으로부터 원격일 수도 있고, 네트워크 (130) 를 통해 데이터를 제공할 수도 있다. 또한, 일부 또는 모든 데이터 소스들 (120) 은 데이터 분석 시스템에 직접 커플링될 수도 있고, 네트워크 (130) 를 통해 데이트를 패싱함이 없이 데이터를 제공할 수도 있다. 데이터 소스들 (120) 로부터 제공된 데이터는 통상적으로 데이터 레코드들로 조직되고, 각각이 데이터 레코드는 하나 이상의 값들을 포함한다. 예를 들어, 데이터 소스에 의해 제공된 데이터 레코드는 콤마-분리된 값들의 시리즈들을 포함할 수도 있다. 데이터는 데이터 분석 시스템을 이용하는 기업에 관한 정보를 기술한다. 예를 들어, 데이터 소스 (120) 로부터의 데이터는 웹사이트들 상에서 액세스가능한 콘텐츠와의 및/또는 소셜 미디어 애플리케이션들과의 컴퓨터-기반 상호작용들 (예컨대, 트래킹 데이터 클릭) 을 기술할 수 있다.
네트워크 (130) 는 데이터 분석 시스템 (110) 과 데이터 소스들 (120) 사이의 통신 경로들을 나타낸다. 하나의 실시형태에서, 네트워크 (130) 는 인터넷이고, 표준 통신 기술들 및/또는 프로토콜을 이용한다. 네트워크 (130) 를 통해 교환되는 데이터는 하이퍼텍스트 마크업 언어 (HTML), 확장가능 마크업 언어 (XML) 등을 포함하는 기술들 및/또는 포맷들을 이용하여 표현될 수 있다. 다른 실시형태에서, 엔티티들은 상기 설명된 것들 대신에 또는 추가하여 맞춤형 및/또는 전용 데이터 통신을 이용할 수 있다.
도 2 는 하나의 실시형태들에 따른, 데이터를 프로세싱하기 위해 데이터 분석 시스템 (110) 을 이용하여 형성된 워크플로우 (200) 를 나타내는 블록도이다. 하나의 실시형태에서, 워크플로우 (200) 는 데이터 분석 시스템 (110) 의 GUI 에 의해 지원되는 시각적 워크플로우 환경을 이용하여 형성된다. 시각적 워크플로우 환경은 워크플로우를 설계하기 위해 소프트웨어 코드를 제공할 필요성을 없애고 워크플로우에 의해 구현될 복잡한 공식들을 식별할 필요성을 없애는 드래그 앤 드롭 툴들의 세트를 가능하게 한다. 다른 실시형태에서, 워크플로우 (200) 는 XML (Extensible Markup Language) 문서와 같은 문서에서 형성되고 기술된다. 워크플로우 (200) 는 데이터 분석 시스템 (110) 의 컴퓨터 디바이스에 의해 실행된다. 그러나, 다른 실시형태들에서, 워크플로우 (200) 는 데이터 분석 시스템 (110) 에 네트워크 (예컨대, 네트워크 (130)) 를 통해 통신가능하게 접속될 수도 있는 다른 컴퓨터 디바이스에 대해 전개된다.
워크플로우는 특정 프로세싱 동작들 또는 데이터 분석 기능들을 수행하는 일련의 툴들을 포함할 수 있다. 일반적인 예로서, 워크플로우의 툴들은 다음의 데이터 분석 기능들 중 하나 이상을 수행할 수 있다: 입력/출력; 준비; 조인; 예측적; 공간적; 조사; 그리고 파싱 및 변환 동작들. 워크플로우를 구현하는 것은 데이터 분석 프로세스를 정의, 실행 및 자동화하는 것을 수반할 수 있으며, 여기서, 데이터는 워크플로우에서 각각의 툴에 패스되고, 각각의 툴은 수신된 데이터에 대해 그것의 각각의 프로세싱 동작을 수행한다. 개별 레코드들의 집성된 그룹을 포함하는 레코드는 워크플로우의 툴들을 통해 전달될 수 있으며, 이는 개별 프로세싱 동작들이 데이터에 대해 보다 효율적으로 동작하도록 허용한다. 이러한 데이터 집성 (aggregation) 기법들은 대량의 데이터를 프로세싱하더라도, 워크플로우들을 전개하고 실행하는 속도를 증가시킬 수 있다. 워크플로우는 특정된 툴들의 동작 시퀀스를 특정하는, 반복가능한 일련의 동작들을 정의 또는 그렇지 않으면 구조화할 수 있다. 일부 경우들에서, 워크플로우에 포함된 툴들은 선형 순서로 수행된다. 다른 경우들에서, 다중 툴들이 병렬로 실행될 수 있다.
도시된 바와 같이, 도 2 의 워크플로우 (200) 는 입력 툴들 (205 및 206) 및 브라우즈 툴 (230) 로서 도시된 입력/출력 툴들을 포함한다. 입력 툴들 (205 및 206) 은 특정 데이터 소스들 (120) 로부터 레코드들을 액세스하도록 기능한다. 입력 툴들 (205 및 206) 은 워크플로우로 액세스된 레코드들을 가져오고 이 레코드들을 워크플로우 (200) 의 후속 툴들에 제공한다. 이 예에서, 입력 툴 (205) 은 액세스된 레코드들을 필터 툴 (210) 에 제공하고, 입력 툴 (206) 은 액세스된 레코드들을 선택 툴 (211) 에 제공한다. 브라우즈 툴 (230) 은 워크플로우 (200) 의 끝에 위치되고, 워크플로우 (200) 의 업스크림 툴들의 각각의 실행으로부터 초래되는 출력을 수신한다. 이 예에서 브라우즈 툴 (230) 은 워크플로우 (200) 의 끝에 위치되지만, 브라우즈 툴 (230) 은 워크플로우의 임의의 지점에 부가되어 워크플로우의 업스트림 툴들의 실행으로부터의 결과들을 검토 및 검증할 수 있다.
도 2 의 예로 계속하면, 워크플로우 (200) 는 필터 툴 (210), 선택 툴 (211), 공식 툴 (215) 및 샘플 툴 (212) 로서 나타낸 준비 툴들을 포함한다. 필터 툴 (210) 은 표현에 기초하여 레코드들을 질의하고 데이터를 2 개의 스트림들, 즉 표현을 만족시키는 레코드들을 포함하는 참 스트림과 표현을 만족시키지 않는 레코드들을 포함하는 거짓 스트림으로 분할한다. 선택 툴 (211) 은 필드들을 선택, 선택해제, 재정렬 및 이름변경하고, 필드 타입 또는 사이즈를 변경하며, 디스크립션을 할당하는데 사용될 수 있다. 공식 툴 (formula tool) (215) 은 광범위한 산출들 및/또는 동작들을 수행하기 위해 하나 이상의 표현들을 사용하여 필드들을 생성 또는 업데이트한다. 샘플 툴 (212) 은 레코드들의 수, 퍼센티지, 또는 랜덤 세트로 수신된 레코드들의 스트림을 제한한다.
워크플로우 (200) 는 또한 다중 데이터 소스를 블렌딩하는 조인 툴 (join tool) (220) 을 포함한다. 구체적으로, 조인 툴 (220) 은 공통 필드들 (또는 레코드 포지션) 에 기초하여 2 개의 입력 데이터 스트림들을 결합한다. 도 2 의 워크플로우 (200) 는 또한 추가 분석에 사용되는 포맷으로 데이터를 재구조화 및 재형상화할 수 있는 파싱 및 변환 툴인 요약 툴 (summarize tool) (225) 을 포함하는 것으로 나타나 있다. 요약 툴 (225) 은 또한 그룹핑 (grouping), 합산, 카운팅, 공간 프로세싱, 및 스트링 연접 (concatenation) 에 의해 데이터의 요약을 수행할 수 있다. 하나의 실시형태에서, 요약 툴 (225) 에 의해 생성된 출력은 산출(들)의 결과들을 포함한다.
일부 실시형태들에서, 워크플로우 (200) 의 실행은 모든 레코드들이 프로세싱되고 조인 툴 (220) 에 도달할 때까지, 입력 툴 (205) 로 하여금 레코드들이 필터 툴 (210) 및 공식 툴 (215) 을 통해 한번에 하나씩 패스하게 할 것이다. 그 후, 입력 툴 (206) 은 레코드들이 동일한 조인 툴 (220) 로 패스될 때까지, 선택 툴 (211) 및 샘플 툴 (212) 을 통해 한 번에 하나씩 레코드들을 패스하는 것을 시작할 것이다. 워크플로우 (200) 의 일부 개별 툴들은 마지막 데이터 블록을 프로세싱하거나 소트 (sort) 툴과 같은 컴퓨터 집약적 동작들을 다중 부분들로 나누면서 데이터 블록의 판독을 개시하는 것과 같은, 그것들 자신의 병렬 동작을 구현하기 위한 능력을 소유할 수 있다. 그러나, 일부 기존 워크플로우 기법들에서, 레코드들의 세트로부터의 각각의 레코드는, 프로세싱 동작을 수행하기 위해 다중 레코드들을 필요로 하는 워크플로우에서의 툴 (예를 들어, 소트 툴, 조인 툴, 요약 툴 등) 에 도달할 때까지, 파이프 라인 방식으로, 한번에 하나의 레코드씩 워크플로우의 각각의 툴에 의해 개별적으로 프로세싱된다.
도 3 은 일 실시형태들에 따른, 도 1 의 데이터 분석 시스템 (110) 으로서 사용하기 위한 통상적 컴퓨터 시스템 (300) 의 기능도를 나타내는 하이-레벨 블록도이다. 컴퓨터 시스템 (300) 은 도 2 의 워크플로우를 구현하기 위해 데이터 분석 애플리케이션 (160) 을 실행할 수 있다.
예시된 컴퓨터 시스템 (300) 은 칩셋 (304) 에 커플링된 적어도 하나의 프로세서 (302) 를 포함한다. 프로세서 (302) 는 동일한 다이 상에 다수의 프로세서 코어들을 포함할 수 있다. 칩셋 (304) 에 또한 커플링되는 것은 프라이머리 메모리 (140), 세컨더리 메모리 (150), 키보드 (310), 그래픽 어댑터 (312), 포인팅 디바이스 (314), 및 네트워크 어댑터 (316) 이다. 디스플레이 (318) 가 그래픽 어댑터 (312) 에 커플링된다. 하나의 실시형태에서, 칩셋 (304) 의 기능성은 메모리 제어기 허브 (320) 및 I/O 제어기 허브 (322) 에 의해 제공된다. 네트워크 어댑터 (316) 는 컴퓨터 시스템 (300) 을 네트워크 (130) 에 커플링한다.
일부 실시형태들에서, 컴퓨터 시스템 (300) 은 추가적인, 더 적은, 또는 상이한 컴포넌트들을 가질 수도 있고, 그 컴포넌트들은 상이하게 커플링될 수도 있다. 예를 들어, 컴퓨터 시스템 (300) 의 실시형태들은 디스플레이들 및/또는 키보드들이 없을 수도 있다. 다른 예로서, 컴퓨터 시스템 (300) 은 다수의 프라이머리 메모리 (140) 및/또는 세컨더리 메모리 (150) 들을 가질 수도 있다. 또한, 컴퓨터 시스템 (300) 은 일부 실시형태들에서 랙-마운티드 블레이드 서버로서 또는 쿨라우드 서버 인스턴스로서 인스턴스화될 수도 있다.
프라이머리 메모리 (140) 는 비일시적 컴퓨터 판독가능 저장 매체이고, 프로세서 (302) 에 의해 사용되는 명령들 및 데이터를 유지한다. 일부 실시형태들에서, 프라이머리 메모리 (140) 는 랜덤-액세스 메모리이다. 데이터 액세스를 위해 필요한 시간의 양은 비교적 짧다. 그리하여, 프로세서에 의해 액세스되고 있는, 또는 가까운 기간 내에 액세스될 것 같은 데이터를 프라이머리 메모리 (140) 에 저장하는 것이 유리하다.
세컨더리 메모리 (150) 는 마찬가지로 프로세서 (302) 에 의해 사용되는 명령들 및 데이터를 유지하는 비일시적 컴퓨터 판독가능 저장 매체이다. 세컨더리 메모리는 유닛으로서 액세스되는, 본 명세서에서 "세컨더리 데이터 블록들" 로서 지칭되는, 데이터 블록들에 데이터를 저장한다. 세컨더리 데이터 블록 사이즈들은 세컨더리 메모리 (150) 의 사이즈에 의존하여 변화하고, 1KB 내지 8KB 의 범위일 수도 있다.
실시형태에 따라, 세컨더리 메모리 (150) 는 (예컨대, 세컨더리 메모리가 HDD 또는 SSD 인지 여부에 따라) 세컨더리 데이터 블록들에 대한 랜덤 액세스 또는 순차적 액세스를 지원할 수도 있다. 이에 따라, 세컨더리 메모리 (150) 를 수반하는 데이터 액세스를 위해 필요한 시간은 액세스되고 있는 로케이션 (location) 에 의존하여 변화할 수도 있다. 어쨌든, 세컨더리 메모리 (150) 를 수반하는 데이터 액세스를 위해 필요한 시간의 양은 프라이머리 메모리 (140) 를 수반하는 동등한 액세스를 위해 필요한 시간의 양보다 더 크다. 그리하여, 프로세서에 의해 액세스되고 있는, 또는 가까운 기간 내에 액세스될 것 같은 데이터를 세컨더리 메모리 (150) 에 저장하는 것은 컴퓨터 시스템 (300) 의 성능에 불리하다.
컴퓨터 시스템 (300) 은 제한된 양의 프라이머리 메모리 (140) 를 포함한다. 예를 들어, 시스템 (300) 은 16 또는 32 GB 의 프라이머리 메모리를 포함할 수도 있다. 하지만, 컴퓨터 시스템 (300) 은 사실상 무제한의 양의 세컨더리 메모리 (150) 를 포함한다. 예를 들어, 시스템은 수백 기가바이트 또는 테라바이트의 세컨더리 메모리를 포함할 수도 있다. 통상적으로, 데이터 분석 시스템 (110) 에 의해 프로세싱되고 있는 데이터의 양은 프라이머리 메모리 (140) 의 용량을 초과한다. 따라서, 데이터의 적어도 일부는 세컨더리 메모리 (150) 에 저장된다. 그 데이터는 데이터가 워크플로우를 통해 통과함에 따라 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이에서 이동된다.
컴퓨터 시스템 (300) 은 본원에 기술된 기능성을 제공하기 위해 컴퓨터 프로그램 모듈들을 실행하도록 적응된다. 본 명세서에서 사용된 바와 같이, "모듈 (module)" 이라는 용어는 특정 기능성을 제공하기 위한 컴퓨터 프로그램 명령들 및 다른 로직 (logic) 을 지칭한다. 모듈은 하드웨어, 펌웨어, 및/또는 소프트웨어에서 실현될 수 있다. 모듈은 프로세스로서 실행될 수 있다. 또한, 모듈은 프로세스 내에서 하나 이상의 스레드들로서 실행될 수 있다. 모듈은 통상적으로 세컨더리 메모리 (308) 상에 저장되고, 프라이머리 메모리 (306) 내로 로딩되며, 프로세서 (302) 에 의해 실행된다.
도 4 는 하나의 실시형태에 따른, 데이터 분석 시스템 (110) 의 데이터 분석 애플리케이션 (160) 의 보다 상세한 모습을 나타내는 블록도이다. 분석 애플리케이션 (160) 은 데이터 수신기 모듈 (410), 툴 모듈들 (420), 메모리 관리 모듈 (430), 및 데이터 서빙 모듈 (440) 을 포함한다. 통상의 기술자는, 다른 실시형태들은 본 명세서에서 기술된 것들과는 상이한 및/또는 다른 컴포넌트들을 가질 수 있고, 기능성들은 상이한 방식으로 컴포넌트들 사이에 분포될 수 있음을 인식할 것이다.
데이터 수신기 모듈 (410) 은 데이터 소스들 (120) 로부터 데이터 레코드들을 수신하고, 데이터 레코드들을 데이터 분석 애플리케이션 (160) 에서의 다른 모듈들에 제공한다. 하나의 실시형태에서, 데이터 수신기 모듈 (410) 은, 도 2 에서 예시된 입력 툴들 (206) 과 같은, 데이터 분석 애플리케이션에서의 툴들 사이에 인터페이스로서 기능한다. 다른 실시형태에서, 데이터 수신기 모듈 (410) 은 부존재하고, 데이터 수신기 모듈 (410) 의 기능은 그 툴들에 의해 수행된다.
툴 모듈들 (420) 은 입력/출력; 준비; 조인; 예측적; 공간적; 조사; 및 파싱 및 변환 동작들 중 하나 이상을 포함하는 데이터 분석 기능들 또는 특정 프로세싱 동작들을 수행하는 데이터 프로세싱 툴들의 세트를 제공한다. 툴들은 데이터 수신기 모듈 (410) 에 의해 데이터 소스들 (120) 로부터 수신된 데이터 레코드들에 대해 동작한다. 툴 모듈들 (420) 은 도 2 와 함께 설명된 워크플로우 (200) 에 포함된 툴들을 제공한다.
하나의 실시형태에서, 툴 모듈들 (420) 중 하나 이상은 워크플로우에 대한 데이터 레코드들을 프로세싱하는 동안 병렬적으로 실행될 수도 있다. 이러한 툴 모듈은 다수의 별개의 스레드들로서 실행될 수도 있고, 각각의 스레드 (thread) 는 프로세서 (302) 의 별개의 코어 상에서 동작한다. 예를 들어, 조인 툴의 일 실시형태는 프로세서 (302) 의 병렬적 프로세싱 능력들을 레버리징하기 위해 조인 동작과 연관된 태스크들을 다수의 스레드들에 분배한다.
추가적으로, 툴 모듈들 (420) 에 의해 제공된 툴들은 워크플로우 내에서 프로세싱되는 데이터 레코드들을 저장하기 위해 메모리를 사용한다. 툴 모듈들 (420) 은 프로세싱 동안의 사용을 위해 메모리를 할당하기 위해 그리고 일단 프로세싱이 완료되고 나면 그 메모리를 해제하기 위해 메모리 관리 모듈 (430) 과 상호작용한다. 일부 툴들은 데이터를 프로세싱하는 동안 소정의 패턴들로 메모리를 사용할 수도 있다. 예를 들어, 조인 툴은 통상적으로 다중 패스들을 사용하여 데이터 레코드들을 프로세싱한다. 이러한 툴들은 통상적으로, 프로세싱되고 있는 데이터 레코드들을 저장하고, 제 1 패스 동안 각 데이터 레코드를 한번 액세스하고, 그 다음, 후속 패스 동안 각 데이터 레코드를 다시 액세스하기 위해, 대량의 메모리를 할당한다.
메모리 관리 모듈 (430) 은 데이터 분석 애플리케이션 (160) 에 의한 메모리 사용을 관리한다. 하나의 실시형태에서, 메모리 관리 모듈 (430) 은 데이터 분석 애플리케이션 (160) 에 전용된다. 메모리 관리 모듈 (430) 은 데이터 분석 시스템 (110) 에 의해 제공된 메모리 관리 기능성과 별도로 인터페이싱할 수도 있다. 예를 들어, 메모리 관리 모듈 (430) 은 데이터 분석 시스템 (110) 상에서 실행되는 오퍼레이팅 시스템에 의해 제공되는 상이한 메모리 관리 시스템과 인터페이싱할 수도 있다. 메모리 관리 모듈 (430) 은 오퍼레이팅 시스템 메모리 관리 시스템으로부터 멀리 데이터 분석 애플리케이션 (160) 의 메모리 동작들을 추상화한다.
이를 위해서, 메모리 관리 모듈 (430) 은, 툴들이 워크플로우를 구현함에 따라, 툴 모듈들 (420) 의 툴들에 의해 프로세싱되고 있는 데이터 레코드들을 저장하기 위해 메모리를 할당하고 해제한다. 또한, 메모리 관리 모듈 (430) 은 할당된 메모리를 프라이머리 메모리 (140) 또는 세컨더리 메모리 (150) 중 어느 일방에 선택적으로 저장한다. 일반적으로, 메모리 관리 모듈 (430) 은 프라이머리 메모리 (140) 에 툴들에 의해 현재 액세스되고 있는 데이터 레코드들을 저장하고, 세컨더리 메모리 (150) 에 툴들에 의해 현재 액세스되고 있지 않는 데이터 레코드들을 저장한다. 메모리 관리 (430) 는, 레코드들이 툴들에 의해 액세스됨에 따라, 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이에 데이터 레코드들을 이동시킨다. 또한, 메모리 관리 모듈 (430) 은 프라이머리 메모리 (140) 의 제한된 저장 용량을 효과적으로 사용하기 위해 프라이머리 메모리 (140) 에 데이터 레코드들을 선택적으로 압축한다.
하나의 실시형태에서, 툴들은, 툴들이 데이터 레코드들을 포함하는 메모리 블록들을 액세스할 것 같을 때를 나타내는 통지들을 메모리 관리 모듈 (430) 에 제공한다. 예를 들어, 툴은 짧은 또는 긴 기간 내에 특정 블록을 액세스할 것 같은지 여부를 나타내는 통지를 제공할 수도 있다. 또한, 통지는, 툴이 언제 블록을 다시 액세스하려는지 및 그것이 언제 블록을 액세스하는 것을 완전히 마쳤는지를 메모리 관리 모듈 (430) 에게 알려줄 수도 있다. 예를 들어, 통지는, 툴이 언제 블록을 액세스하는 것을 일시적으로 마쳤고 하지만 장래에 다시 블록을 액세스할 것임을 메모리 관리 모듈 (430) 에게 알려줄 수도 있다. 통지는 또한, 툴이 블록을 다시 액세스하지 않을 때를 메모리 관리 모듈 (430) 에게 알려줄 수도 있다.
메모리 관리 모듈 (430) 은, 특정 메모리 블록들을 프라이머리 메모리 (140) 및 세컨더리 메모리 (150) 에 저장할지 여부, 및 그 블록들을 저장할 상태 (예컨대, 준비, 압축) 를 결정할 때 툴들로부터의 통지들을 사용할 수 있다. 메모리 관리 모듈 (430) 은 또한, 특정 블록들을 해제 (예컨대, 리사이클) 할 때를 결정하기 위해 통지들을 사용할 수 있다. 추가로, 하나의 실시형태에서, 메모리 관리 모듈 (430) 은 특정 블록들을 액세스하는 툴들의 수를 기술하는 수개의 카운트들을 유지하기 위해 통지들을 사용한다. 메모리 관리 모듈 (430) 은, 블록을 현재 액세스하고 있는 툴들의 수를 나타내는 액세스 카운트 및 장래에 블록을 액세스할 수도 있는 툴들의 수를 나타내는 락 카운트 (lock count) 를 유지한다. 락 카운트가 제로에 도달할 때, 메모리 관리 모듈 (430) 은 블록을 해제할 수 있다.
메모리 관리 모듈 (430) 은 따라서, 상대적으로 더 바른 프라이머리 메모리 (140) 에서 툴 모듈들 (420) 의 툴들에 의해 액세스되고 있는 레코드들을 저장함으로써 데이터 분석 시스템 (110) 및 데이터 분석 애플리케이션 (160) 의 성능을 향상시킨다. 특히, 메모리 관리 모듈 (430) 은, 다수의 데이터 레코드들에 걸쳐 다수의 패스들을 수행하는, 조인 툴과 같은, 툴들의 성능을 향상시킨다.
데이터 출력 모듈 (440) 은 데이터 분석 애플리케이션 (160) 에 의해 수행되는 프로세싱의 결과들을 출력한다. 즉, 데이터 출력 모듈 (440) 은 워크플로우 (200) 의 실행에 의해 생성된 프로세싱된 데이터 레코드들을 수신하고, 그 데이터 레코드들이 다른 시스템들 및/또는 인간 검토자들에 대해 이용가능하게 만든다. 예를 들어, 데이터 출력 모듈 (440) 은 GUI 를 제공할 수도 있고, 그 GUI 에 의해, 기업과 연관된 인간 검토자는 기업과 연관된 데이터 레코드들을 프로세싱하는 것으로부터 발생하는 워크플로우 (200) 의 출력을 검토할 수 있다.
도 5 는 하나의 실시형태에 따른, 메모리 관리 모듈 (430) 의 보다 상세한 모습을 나타내는 블록도이다. 메모리 관리 모듈 (430) 은 할당 모듈 (510), 압축 모듈 (520), 데이터 전송 모듈 (530), 및 메모리 제어 모듈 (540) 을 포함한다. 다른 실시형태들은 본 명세서에서 기술된 것들과는 상이한 및/또는 다른 컴포넌트들을 가질 수 있고, 기능성들은 상이한 방식으로 컴포넌트들 사이에 분포될 수 있다.
할당 모듈 (510) 은, 툴 모듈들 (420) 및/또는 데이터 분석 애플리케이션 (160) 내의 다른 모듈들로부터의 요청들에 응답하여 메모리 블록들을 할당하고 해제한다. 할당 모듈 (510) 은 데이터 분석 애플리케이션 (160) 내의 다른 모듈들로부터 할당 요청들을 수신하고, 응답하여 메모리의 블록들을 할당한다. 할당 요청은, 예를 들어, 툴들이 워크플로우를 프로세싱하고 있는 동안 툴 모듈들 (420) 의 툴들로부터 수신될 수도 있다. 메모리 할당 모듈 (510) 은 무한한 것처럼 만들어진 블록들의 가상 풀 (virtual pool) 로부터 블록들을 할당한다. 이들 가상 블록들은 메모리 아키텍처 (memory architecture) 의 제한들을 고려하여, 프라이머리 메모리 (140) 에 또는 세컨더리 메모리 (150) 에 있을 수도 있다. 할당 모듈 (510) 에 의해 할당된 메모리의 블록들은 세컨더리 메모리 (150) 에 대해 설명된 세컨더리 데이터 블록들과는 구별된다.
구체적으로, 할당 모듈 (510) 은 메모리 할당 요청을 수신하고, 그 요청에 응답하여 메모리의 논리적 인접 블록을 할당하고, 메모리의 블록에 대한 핸들 (handle) 을 요청자에게 리턴한다. 일부 실시형태들에서, 할당 요청은 블록 사이즈를 명시하고, 할당 모듈 (510) 은 블록 사이즈에 기초하여 블록을 할당한다. 하나의 실시형태에서, 할당 모듈 (510) 은 2 개의 상이한 타입들의 블록들을 할당한다: 압축되지 않은 메모리 블록 및 압축된 메모리 블록. 압축되지 않은 메모리 블록은 압축되지 않은 데이터 레코드들을 유지한다. 압축된 메모리 블록은 압축되지 않은 메모리 블록보다 더 작고, 압축된 데이터 레코드들 (즉, 압축을 겪은 하나 이상의 압축되지 않은 메모리 블록들) 을 유지한다. 할당 모듈 (510) 에 의해 수신된 메모리 할당 요청은 할당할 메모리 블록의 타입을 명시한다.
할당 모듈 (510) 은 또한, 메모리의 블록들에 대한 핸들들을 명시하는 메모리 해제 요청들을 수신한다. 할당 모듈 (510) 은, 블록들이 후속 요청들에서 재할당되도록 이용가능하도록, 이러한 메모리 블록들을 해제한다. 할당 모듈 (510) 은 재할당되도록 이용가능한 프리 블록들의 리스트를 유지한다.
압축 모듈 (520) 은, 프라이머리 메모리 사용이 임계치를 초과하거나 임계치 아래로 떨어질 때 메모리 블록들을 선택적으로 압축하고 압축해제한다. 압축된 메모리 블록은 압축되지 않은 메모리 블록보다 상당히 더 적은 저장 공간을 차지한다. 압축을 위해 사용될 때, 압축 모듈 (520) 에는, 프라이머리 메모리 (140) 에 저장된 그리고 데이터 레코드들을 유지하는 압축되지 않은 메모리 블록의 핸들이 제공된다. 압축 모듈 (520) 은 압축되지 않은 메모리 블록 핸들에 의해 식별된 메모리 블록에서 데이터 레코드들을 압축하고, 압축된 데이터 레코드들을 압축된 메모리 블록 핸들에 의해 식별된 로케이션에 저장한다. 압축 모듈 (520) 은 압축된 메모리 블록 핸들을 요청자에게 리턴한다. 압축되지 않은 메모리 블록 및 압축된 메모리 블록 양자는 압축이 수행된 후에 프라이머리 메모리 (140) 에 여전히 유지됨에 유의한다. 하나의 실시형태에서, 압축 모듈 (520) 은 전용의, 별개의 스레드들을 이용하여 압축 및 압축해제 동작들을 수행한다. 이러한 방식으로, 데이터 분석 시스템 (110) 상에서 실행되는 다른 스레드들은 압축 및 압축해제 태스크들에 의해 방해되지 않는다.
압축 모듈 (520) 은 그것이 압축을 수행할 때 할당 모듈 (510) 로부터 압축된 메모리 블록 핸들을 요청한다. 할당 모듈 (510) 은 요청에 응답하여 프리 리스트로부터 압축된 메모리 블록을 리턴하거나 새로운 압축된 메모리 블록을 할당한다. 압축된 메모리 블록들은 준비 블록들보다 더 작을 수도 있고, 압축 모듈 (520) 은 압축되지 않은 메모리 블록의 콘텐트를 저장하기 위해 하나보다 많은 압축된 메모리 블록을 이용할 수도 있다.
압축해제를 위해, 압축 모듈 (520) 은 프라이머리 메모리 (140) 에 저장된 압축된 메모리 블록을 식별하는 압축된 메모리 블록 핸들을 수신한다. 압축 모듈 (520) 은 할당 모듈 (510) 로부터 압축되지 않은 메모리 블록들에 대한 하나 이상의 핸들들을 요청하고 수신하며, 하나 이상의 압축된 메모리 블록들을 할당된 압축되지 않은 메모리 블록들로 압축해제한다. 일단 압축해제가 수행되고 나면, 압축 모듈 (520) 은 압축된 메모리 블록을 해제하거나 또는 아니면 후속 압축 요청을 서비스하기 위해 그것을 사용한다.
압축 모듈 (520) 은 압축 비율에 대해 최적화된 알고리즘보다는 압축의 속도에 대해 최적화된 무손실 압축 알고리즘을 이용한다. 예를 들어, 압축 모듈 (520) 은 메모리 블록들을 압축하기 위해 Snappy 압축 알고리즘을 이용할 수도 있다. 압축 모듈 (520) 은 또한, Huffman 코딩 및 Lempel-Ziv 압축의 변형들과 같은 다른 압축 알고리즘들을 이용할 수도 있다.
데이터 전송 모듈 (530) 은, 메모리 관리 모듈 (430) 내의 다른 모듈들로부터의 요청들에 응답하여, 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이에 데이터 블록들을 선택적으로 이동시킨다. 하나의 실시형태에서, 데이터 전송 모듈 (530) 은 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이에 압축된 메모리 블록들을 이동시킨다. 압축된 메모리 블록들은 세컨더리 메모리 (150) 에 의해 사용되는 세컨더리 데이터 블록들보다 더 클 수 있다. 압축된 메모리 블록은 따라서, 다수의 세컨더리 데이터 블록들을 점유할 수 있다. 데이터 전송 모듈 (530) 은 유닛으로서 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이에 동일한 압축된 메모리 블록으로부터의 데이터를 유지하는 세컨더리 데이터 블록들을 이동시킨다.
메모리 제어 모듈 (540) 은 프라이머리 메모리 (140) 와 세컨더리 메모리 (150) 사이의 메모리 블록들의 전송 및 선택적 압축/압축해제를 제어하기 위해 메모리 관리 모듈 (430) 에서의 다른 모듈들과 상호작용한다. 메모리 제어 모듈 (540) 은, 툴들이 워크플로우를 프로세싱함에 따라, 메모리 블록들을 액세스하기 위한 툴 모듈들 (420) 에 의한 요청들을 모니터링한다. 메모리 제어 모듈 (540) 은, 액세스가 요청되는 임의의 메모리가 압축되지 않은 상태로 프라이머리 메모리 (140) 에 저장되는 것을 보장한다. 이러한 블록들은 "준비 (ready)" 상태인 것으로서 지칭된다.
요청된 메모리 블록이 준비 상태에 있지 않은 경우에, 메모리 제어 모듈 (540) 은 세컨더리 메모리 (150) 로부터 메모리 블록을 취출하고 및/또는 블록을 준비 상태로 가져오기 위해 메모리 블록을 프라이머리 메모리 (140) 내로 압축해제한다. 일부 실시형태들에서, 메모리 제어 모듈 (540) 은, 주어진 메모리 블록이, 툴 모듈 (420) 이 그것에 대한 액세스를 요청할 때, 이미 준비 상태에 있는 가능성을 증가시키기 위해서 메모리 블록들을 추론적으로 (speculatively) 압축, 압축해제, 및 전송할 수 있다.
이를 위해서, 메모리 제어 모듈 (540) 은 메모리 블록들을 저장하기 위해서 이용가능한 프라이머리 메모리 (140) 의 총량을 결정한다. 워크플로우가 실행됨에 따라, 메모리 제어 모듈 (540) 은 메모리 블록들을 저장하기 위해 실제로 사용되고 있는 프라이머리 메모리 (140) 의 양을 트래킹하고, 확장에 의해, 또한 추가적인 메모리 블록들을 저장하기 위해 비어 있는 프라이머리 메모리의 양을 트래킹한다. 또한, 메모리 제어 모듈 (540) 은 메모리 블록들을 다양한 상이한 상태들로 저장하기 위해 사용되는 프라이머리 메모리의 양들을 트래킹한다.
준비 상태에서의 메모리 블록들에 의해 점유되는 프라이머리 메모리 사용의 양이 "준비 상태 임계치 (ready state threshold)" 라고 불리는 특정 제한을 초과하는 경우에, 메모리 제어 모듈 (540) 은 준비 상태에서의 적어도 일부 메모리 블록들을 "압축된" 상태로 추론적으로 압축하기 위해 압축 모듈 (520) 을 사용한다. 준비 상태 임계치는 하나의 실시형태에서 이용가능한 프라이머리 메모리 (140) 의 80% 이다.
메모리 제어 모듈 (540) 은 프라이머리 메모리 (140) 에서 압축된 및 대응하는 압축되지 않은 메모리 블록들 양자를 유지하고; 압축된 메모리 블록들은 프라이머리 메모리 사용이 추가로 증가하는 경우에 세컨더리 메모리 (150) 로의 전송을 위해 준비된다. 프라이머리 메모리에 또한 저장된 대응하는 압축된 블록들을 갖는 프라이머리 메모리 (140) 에서의 압축되지 않은 메모리 블록들은 "준비 및 압축 (ready and compressed)" 상태에 있는 것으로서 지칭된다. 툴 모듈 (420) 이 준비 및 압축 상태에서의 메모리 블록들을 액세스하는 경우에, 메모리 제어 모듈 (540) 은 압축 상태에서의 대응하는 블록들을 해제함으로써 (예컨대, 리사이클링 (recycling) 함으로써) 메모리 블록을 준비 상태로 변환할 수도 있다. 하나의 실시형태에서, 툴 모듈 (420) 이 메모리 블록에 기입하는 경우에 메모리 제어 모듈 (540) 은 메모리 블록을 준비 상태로 변환하고, 그 준비 상태에서의 변환된 메모리 블록을 기입함으로써 요청에 서빙한다. 툴 모듈 (420) 이 메모리 블록으로부터 판독하는 경우에, 메모리 제어 모듈 (540) 은 메모리 블록을 그 상태로 남겨 두면서 준비 및 압축 상태에서의 메모리 블록들을 이용하여 판독 액세스를 서빙할 수도 있다.
프라이머리 메모리 (140) 사용이 준비 상태 임계치를 지나서 계속 증가하는 경우에, 메모리 제어 모듈 (540) 은 준비 및 압축 상태에서의 적어도 일부 메모리 블록들을 해제하고, 따라서, 이들 블록들에 의해 점유된 프라이머리 메모리를 자유롭게 한다. 하나의 실시형태에서, 프라이머리 메모리 (140) 사용이 준비 상태 임계치보다 더 큰 해제 임계치를 초과하는 경우에, 메모리 제어 모듈 (540) 은 메모리 블록들의 새로운 할당들을 위한 공간을 만들기 위해 준비 및 압축 상태에서의 메모리 블록들을 해제한다. 하나의 실시형태에서, 해제 임계치는 프라이머리 메모리의 100% 이다. 따라서, 메모리 제어 모듈 (540) 은, 일단 프라이머리 메모리의 사용이 100% 에 도달하면, 준비 및 압축 상태에서의 메모리 블록들을 해제한다.
또한, 메모리 제어 모듈 (540) 은 압축 상태에서의 메모리 블록들을 세컨더리 메모리 (150) 에 전송함으로써 프라이머리 메모리 (140) 에서 이용가능한 공간을 만든다. 하나의 실시형태에서, 메모리 제어 모듈 (540) 은 압축 상태에서의 메모리 블록들에 의해 점유된 프라이머리 메모리 (140) 의 양을 트래킹한다. 압축 상태에서의 메모리 블록들이 프라이머리 메모리의 임계량 ("압축 (compressed)" 임계치) 을 초과하는 경우에, 메모리 제어 모듈 (540) 은 압축된 블록들을 세컨더리 메모리에 기입하고 블록들이 저장되었던 프라이머리 메모리 (140) 를 해제함으로써 압축된 블록들의 적어도 일부를 세컨더리 메모리 (150) 에 전송한다. 세컨더리 메모리 (150) 에 저장된 메모리 블록들은 "온 디스크 (on disk)" 상태에 있는 것으로서 지칭된다.
프라이머리 메모리 (140) 의 사용이 감소할 때, 메모리 제어 모듈 (540) 은 온 디스크 상태에서의 메모리 블록들을 세컨더리 메모리 (150) 로부터 프라이머리 메모리로 추론적으로 전송한다. 메모리 제어 모듈 (540) 은 프라이머리 메모리의 사용이 사용 임계치 아래로 떨어지는 때 (또는, 역으로, 프라이머리 메모리에서의 할당되지 않은 자유로운 공간이 임계치를 초과하는 때) 를 검출한다. 하나의 실시형태에서, 사용 임계치는 50% 이다. 프라이머리 메모리 사용이 사용 임계치 아래로 떨어지는 것에 응답하여, 메모리 제어 모듈 (540) 은 온 디스크 상태에서의 적어도 일부 메모리 블록들을 프라이머리 메모리 (140) 에 전송한다.
이들 전송된 메모리 블록들은 압축 상태로 프라이머리 메모리 (140) 에 저장된다. 또한, 메모리 제어 모듈 (540) 은 온 디스크 상태에서 세컨더리 메모리 (150) 에서 그 전송된 메모리 블록들을 보유한다. 따라서, 이들 메모리 블록들은 압축 상태 및 온 디스크 상태 양자에서 동시에 유지된다. 프라이머리 메모리 (140) 사용이 증가하고, 그리고, 예컨대, 압축 임계치를 초과하는 경우에, 메모리 제어 모듈 (540) 은 대응하는 온-디스크 메모리 블록들을 갖는 압축된 메모리 블록들의 적어도 일부를 해제한다. 이러한 방식으로, 프라이머리 메모리 (140) 는 메모리 블록들을 프라이머리 메모리로부터 세컨더리 메모리 (150) 로 전송할 필요 없이 복원된다. 마찬가지로, 툴 모듈 (420) 이 압축 및 온 디스크 상태 양자에 있지 않은 메모리 블록을 액세스하는 경우에, 메모리 제어 모듈 (540) 은 메모리 블록의 압축된 버전을 준비 상태로 압축해제하고, 메모리 블록을 온 디스크 상태로 해제한다.
메모리 제어 모듈 (540) 의 일 실시형태는, 특정 블록들이 툴 모듈들 (420) 에 의해 할당 및/또는 액세스되었던 때에 기초하여 순서대로 메모리 블록들에 대해 상술된 동작들을 수행한다. 블록들을 준비 상태로부터 준비 및 압축 상태로 변환할 때, 메모리 제어 모듈 (540) 은 가장 최근에 할당된 메모리 블록들을 먼저 압축한다. 다른 방식으로 말하자면, 메모리 제어 모듈 (540) 은 할당 이후에 경과된 시간의 오름 차순으로 블록들을 압축한다. 메모리 제어 모듈 (540) 은 또한, 압축된 블록들을 세컨더리 메모리 (150) 로 (예컨대, 온 디스크 상태로) 이동시킬 때 이 순서를 사용한다. 메모리 제어 모듈 (540) 은, 데이터 레코드들에 대해 다중 패스들을 수행하는 툴들이 할당 시에 블록을 액세스하고 그 다음에 제 2 패스까지 그것을 다시 액세스하지 않는 경향이 있을 것이기 때문에, 이 순서를 사용한다. 그리하여, 보다 최근에 할당된 블록들 전에 덜 최근에 할당된 블록들이 액세스될 것이라는 가정에 기초하여 가장 최근에 할당된 블록들이 압축된다.
세컨더리 메모리 (150) 로부터 프라이머리 메모리 (140) 로 메모리 블록들을 전송할 때, 메모리 제어 모듈 (540) 은 메모리 블록들이 세컨더리 메모리 (150) 로 전송되었던 때 (즉, 블록들이 온 디스크 상태로 변환되었던 때) 에 기초한 순서를 사용한다. 일 실시형태에서, 메모리 제어 모듈 (540) 은 가장 덜 최근의 블록들로 시작하여 세컨더리 메모리 (150) 로부터 메모리를 취출한다. 달리 말하면, 메모리 제어 모듈 (540) 은 블록들이 세컨더리 메모리 (150) 에 저장되었던 때부터 경과된 시간의 내림 차순으로 블록들을 취출한다. 메모리 제어 모듈 (540) 은, 툴 모듈들 (420) 이 보다 새로운 블록들을 액세스하기 전에 더 오래된 블록들을 액세스할 것이라는 가정에 기초하여 이 순서를 사용한다.
도 6 은 하나의 실시형태에 따른, 데이터 분석 애플리케이션 내의 메모리 할당의 프로세스를 나타내는 플로우 차트이다. 일부 실시형태들에서, 방법은 메모리 제어 모듈 (540) 에 의해 수행되지만, 그 방법에서의 동작들의 일부 또는 전부는 다른 실시형태들에서 다른 엔티티들에 의해 수행될 수도 있다. 일부 실시형태들에서, 플로우 차트에서의 동작들은 상이한 순서로 수행되고, 상이한 및/또는 추가적인 단계들을 포함할 수 있다.
메모리 제어 모듈 (540) 은 메모리의 블록들을 할당하기 위한 할당 요청을 수신한다 (610). 메모리 제어 모듈 (540) 은, 수신된 할당 요청을 승인하고, 프라이머리 메모리 (140) 의 사용의 양을 결정한다 (620). 예를 들어, 메모리 제어 모듈 (540) 은 압축 상태에서의 메모리 블록들 및 준비 상태에서의 메모리 블록들에 의해 점유된 프라이머리 메모리 (140) 의 양을 결정한다. 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 메모리 제어 모듈 (540) 은 준비 및 압축 상태에서의 그리고 압축 상태에서의 메모리 블록들을 생성하기 위해 준비 상태에서의 메모리 블록들을 압축한다 (630). 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 메모리 제어 모듈 (540) 은, 압축 상태에서의 대응하는 메모리 블록들을 보유하면서, 준비 및 압축 상태에서의 메모리 블록들을 해제한다 (640).
압축 상태에서의 메모리 블록들이 압축 임계치를 초과하는 것에 응답하여, 메모리 제어 모듈 (540) 은 온 디스크 상태에서의 블록들을 형성하기 위해 압축된 메모리 블록들을 세컨더리 메모리 (150) 로 전송한다 (650). 그들 압축된 메모리 블록들은 압축 상태 및 온 디스크 상태 양자에서 유지될 수도 있다. 가용 프라이머리 메모리 (140) 가 증가, 예컨대, 압축 임계치를 초과하는 경우에, 메모리 제어 모듈 (540) 은 대응하는 온 디스크 메모리 블록들을 갖는 압축된 메모리 블록들의 하나 이상을 프라이머리 메모리 (140) 로부터 해제할 수 있다.
프라이머리 메모리 사용이 사용 임계치 아래로 떨어지는 것에 응답하여, 메모리 제어 모듈 (540) 은 온 디스크 상태에서의 메모리 블록들을 세컨더리 메모리 (150) 로부터 프라이머리 메모리 (140) 로 전송한다 (660). 이들 메모리 블록들은 온 디스크 상태 및 압축 상태 양자에서 유지될 수도 있다.
도 7 은 하나의 실시형태들에 따른, 메모리 블록에 대한 액세스를 요청하는 툴 모듈 (420) 에 대해 데이터 블록을 서빙 (serving) 하는 프로세스를 나타내는 플로우 차트이다. 일부 실시형태들에서, 방법은 메모리 제어 모듈 (540) 에 의해 수행되지만, 그 방법에서의 동작들의 일부 또는 전부는 다른 실시형태들에서 다른 엔티티들에 의해 수행될 수도 있다. 일부 실시형태들에서, 플로우 차트에서의 동작들은 상이한 순서로 수행되고, 상이한 및/또는 추가적인 단계들을 포함할 수 있다.
메모리 제어 모듈 (540) 은 메모리 블록을 액세스하기 위한 요청을 수신한다 (710). 그 요청은, 일부 경우들에서, 툴 모듈 (420) 에 의해 이루어진다. 일부 실시형태들에서, 메모리 제어 모듈 (540) 은 요청된 블록이 준비 상태에 있는지 여부를 결정한다 (720). 요청된 메모리 블록은, 그것이 압축되지 않은 상태로 프라이머리 메모리 (140) 에 저장될 때, 준비 상태에 있다.
요청된 메모리 블록이 준비 상태에 있지 않다는 결정에 응답하여, 메모리 제어 모듈 (540) 은 요청된 메모리 블록의 상태를 준비 상태로 업데이트한다 (730). 예를 들어, 메모리 제어 모듈 (540) 은, 요청된 메모리 블록이 압축 상태에 있다는 결정 시에, 요청된 메모리 블록을 압축해제한다. 다른 예로서, 메모리 제어 모듈 (540) 은, 요청된 메모리 블록이 온 디스크 상태로 저장된다는 결정 시에, 요청된 메모리 블록을 세컨더리 메모리 (150) 로부터 프라이머리 메모리 (140) 로 전송한다. 메모리 제어 모듈 (540) 이, 요청된 메모리 블록이 준비 상태에 있다고 결정할 때, 메모리 제어 모듈 (540) 은 요청된 메모리 블록의 상태를 변경하지 않고, 다음 단계를 수행하는 것으로 진행할 수 있다. 메모리 제어 모듈 (540) 은 그 다음, 액세스 요청에 응답하여 요청된 메모리 블록을 서빙한다 (740). 예를 들어, 메모리 제어 모듈 (540) 은 요청된 메모리 블록을 액세스 요청을 만든 툴 모듈 (420) 에 전송한다.
다른 실시형태에서, 준비 및 압축 상태에서의 메모리 블록에 대한 판독 액세스 요청을 수신 시에, 메모리 제어 모듈 (540) 은 준비 및 압축 상태에서의 메모리 블록의 버전 (즉, 블록의 압축되지 않은 버전) 을 이용하여 그 요청을 서빙하고, 압축 상태에서의 메모리 블록의 버전을 프라이머리 메모리에서 남겨둔다. 이러한 방식으로, 요청은 만족되고, 메모리 블록을 압축하기 위해 수행되는 작업은 유지된다.
컴포넌트들의 특별한 명명, 용어들의 대문자, 속성들, 데이터 구조들, 또는 임의의 다른 프로그래밍 또는 구조적 양태는 필수적이거나 중요하지 않으며, 설명되는 실시형태들을 구현하는 메커니즘들은 상이한 명칭들, 포맷들, 또는 프로토콜들을 가질 수도 있다. 추가로, 시스템들은 설명된 바와 같이 하드웨어와 소프트웨어의 조합을 통해서, 또는 완전히 하드웨어 엘리먼트들에서 구현될 수도 있다. 또한, 본원에서 설명된 다양한 시스템 컴포넌트들 사이의 기능성의 특정 분할은 단지 예시적인 것이고, 필수적인 것은 아니며; 단일 시스템 컴포넌트에 의해 수행되는 기능들은 대신에 다수의 컴포넌트들에 의해 수행될 수도 있고, 다수의 컴포넌트들에 의해 수행되는 기능들은 대신에 단일 컴포넌트에 의해 수행될 수도 있다.
상기 설명의 일부 부분들은 정보에 대한 동작들의 알고리즘들 및 심볼 표현들의 관점에서 특징들을 제시한다. 이들 알고리즘적 설명들 및 표현들은 그것들의 작업의 본질을 다른 통상의 기술자들에게 가장 효과적으로 전달하기 위해 데이터 프로세싱 기술분야에서 통상의 지식을 가진 자에 의해 사용되는 수단들이다. 이들 동작들은, 기능적으로 또는 논리적으로 설명되지만, 컴퓨터 프로그램들에 의해 구현되는 것으로 이해된다. 또한, 동작들의 이들 배열들을 일반성의 손실 없이 모듈들로서 또는 기능적 명칭들에 의해 지칭하는 것이 때로는 편리한 것으로 증명되었다.
상기 논의로부터 명백한 바와 같이 특별히 달리 언급되지 않으면, 설명 전반에 걸쳐, "프로세싱하는 것" 또는 "계산하는 것" 또는 "산출하는 것" 또는 "결정하는 것" 또는 "디스플레이하는 것" 등과 같은 용어들을 활용하는 논의들은 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 액션 및 프로세스들을 지칭함이 인해되며, 이 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스는 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장, 송신 또는 디스플레이 디바이스들 내의 물리적 (전자적) 양들로서 표현되는 데이터를 조작하고 변환한다.
본원에 기술된 특정 실시형태들은 알고리즘의 형태로 기술된 프로세스 단계들 및 명령들을 포함한다. 실시형태들의 프로세스 단계들 및 명령들은 소프트웨어, 펌웨어 또는 하드웨어로 구현될 수 있을 것이고, 소프트웨어로 구현될 때, 실시간 네트워크 오퍼레이팅 시스템들에 의해 사용되는 상이한 플랫폼들 상에 상조하고 그 상이한 플랫폼들로부터 동작되도록 다운로드될 수 있을 것임에 유의하여야 한다.
본 명세서에서 제시된 알고리즘들 및 동작들은 임의의 특정 컴퓨터 또는 다른 장치에 본질적으로 관련되지 않는다. 다양한 범용 시스템들이 또한 본 명세서에서의 교시들에 따른 프로그램들과 함께 사용될 수도 있거나, 또는 요구된 방법 단계들을 수행하기 위해 보다 특별한 장치를 구성하는 것이 편리함을 입증할 수도 있다. 다양한 이들 시스템들을 위해 요구되는 구조는 균등의 변형들과 함께, 통상의 기술자에게 자명할 것이다. 또한, 본 실시형태들은 임의의 특정 프로그래밍 언어를 참조하여 기술되지 않는다. 다양한 프로그래밍 언어들이 본 명세서에 설명된 바와 같은 실시형태들의 교시들을 구현하기 위해 사용될 수도 있음이 인식된다.
실시형태들은 수많은 토폴로지들에 걸쳐 아주 다양한 컴퓨터 네트워크 시스템들에 대해 잘 맞다. 이 분야 내에서, 큰 네트워크들의 구성 및 관리는 인터넷과 같은 네트워크에 걸쳐 비유사한 컴퓨터들 및 저장 디바이스들에 통신가능하게 커플링된 저장 디바이스들 및 컴퓨터들을 포함한다.
마지막으로, 명세서에서 사용된 언어는 주로 판독성 및 교시적 목적들을 위해 선택되었고, 본 발명의 주제를 개관하고 제한하기 위해 선택되지 않았을 수도 있음에 유의하여야 한다. 따라서, 실시형태들의 개시는 예시적인 것으로 의도되고, 제한하는 것으로 의도되지 아니한다.

Claims (20)

  1. 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법으로서,
    상기 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링하는 단계로서, 상기 프라이머리 메모리는 준비 상태에서 메모리 블록들을 저장하는, 상기 프라이머리 메모리의 사용을 모니터링하는 단계;
    상기 준비 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하는 단계;
    상기 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 상기 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제하는 단계; 및
    상기 압축 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태에서의 적어도 일부 메모리 블록들을 상기 컴퓨터와 연관된 세컨더리 메모리에 전송하여 온-디스크 상태에서의 메모리 블록들을 형성하는 단계를 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  2. 제 1 항에 있어서,
    상기 컴퓨터 상에서 실행되는 모듈로부터 메모리 블록을 액세스하기 위한 요청을 수신하는 단계;
    요청된 상기 메모리 블록이 상기 준비 상태에 있는지 여부를 결정하는 단계; 및
    상기 요청된 메모리 블록이 상기 준비 상태에 있지 않다는 결정에 응답하여, 상기 요청된 메모리 블록을 상기 준비 상태로 변경하는 단계; 및
    상기 액세스 요청에 응답하여 상기 준비 상태에서의 상기 요청된 메모리 블록을 서빙하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  3. 제 1 항에 있어서,
    프라이머리 메모리 사용이 사용 임계치 아래로 떨어지는 것에 응답하여, 상기 온-디스크 상태에서의 적어도 일부 메모리 블록들을 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  4. 제 3 항에 있어서,
    상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들은 상기 압축 상태로 상기 프라이머리 메모리에 저장되고,
    상기 방법은,
    전송된 상기 메모리 블록들을 상기 온-디스크 상태에서 상기 세컨더리 메모리 상에 보유하는 단계; 및
    프라이머리 메모리 사용이 상기 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태로 저장된 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들을 해제하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  5. 제 1 항에 있어서,
    상기 컴퓨터 상에서 실행되는 모듈로부터 상기 준비 및 압축 상태에서의 메모리 블록을 액세스하기 위한 요청을 수신하는 단계;
    상기 액세스 요청이 판독 요청인지 또는 기입 요청인지 여부를 결정하는 단계;
    상기 액세스 요청이 기입 요청이라는 결정에 응답하여:
    요청된 상기 메모리 블록을 상기 준비 상태로 변경하는 단계; 및
    상기 요청된 메모리 블록에 대응하는 상기 압축 상태에서의 메모리 블록을 해제하는 단계;
    상기 액세스 요청이 판독 요청이라는 결정에 응답하여:
    상기 준비 및 압축 상태에서의 상기 메모리 블록을 이용하여 상기 판독 요청을 서빙하는 단계; 및
    상기 준비 및 압축 상태에서 상기 요청된 메모리 블록을 유지하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  6. 제 1 항에 있어서,
    상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들을 형성하는 단계는,
    상기 메모리 블록들의 할당 이후의 경과 시간의 오름 차순으로 상기 준비 상태에서의 상기 메모리 블록들을 압축하는 단계를 포함하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  7. 제 1 항에 있어서,
    상기 프라이머리 메모리는 상기 세컨더리 메모리에 비해 상기 메모리 블록들에 대한 더 빠른 액세스를 제공하는, 컴퓨터에서 메모리를 관리하는 컴퓨터 구현 방법.
  8. 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템으로서,
    상기 시스템은, 실행가능 컴퓨터 프로그램 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체를 포함하고,
    상기 컴퓨터 프로그램 명령들은, 실행될 때 컴퓨터 프로세서로 하여금,
    상기 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링하는 단계로서, 상기 프라이머리 메모리는 준비 상태에서 메모리 블록들을 저장하는, 상기 프라이머리 메모리의 사용을 모니터링하는 단계;
    상기 준비 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하는 단계;
    상기 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 상기 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제하는 단계; 및
    상기 압축 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태에서의 적어도 일부 메모리 블록들을 상기 컴퓨터와 연관된 세컨더리 메모리에 전송하여 온-디스크 상태에서의 메모리 블록들을 형성하는 단계
    를 포함하는 단계들을 수행하게 하는 명령들을 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  9. 제 8 항에 있어서,
    상기 컴퓨터 프로세서에 의해 수행되는 상기 단계들은,
    상기 컴퓨터 상에서 실행되는 모듈로부터 메모리 블록을 액세스하기 위한 요청을 수신하는 단계;
    요청된 상기 메모리 블록이 상기 준비 상태에 있는지 여부를 결정하는 단계; 및
    상기 요청된 메모리 블록이 상기 준비 상태에 있지 않다는 결정에 응답하여, 상기 요청된 메모리 블록을 상기 준비 상태로 변경하는 단계; 및
    상기 액세스 요청에 응답하여 상기 준비 상태에서의 상기 요청된 메모리 블록을 서빙하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  10. 제 8 항에 있어서,
    상기 컴퓨터 프로세서에 의해 수행되는 상기 단계들은,
    프라이머리 메모리 사용이 사용 임계치 아래로 떨어지는 것에 응답하여, 상기 온-디스크 상태에서의 적어도 일부 메모리 블록들을 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  11. 제 10 항에 있어서,
    상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들은 상기 압축 상태로 상기 프라이머리 메모리에 저장되고,
    상기 컴퓨터 프로세서에 의해 수행되는 상기 단계들은,
    전송된 상기 메모리 블록들을 상기 온-디스크 상태에서 상기 세컨더리 메모리 상에 보유하는 단계; 및
    프라이머리 메모리 사용이 상기 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태로 저장된 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들을 해제하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  12. 제 8 항에 있어서,
    상기 컴퓨터 프로세서에 의해 수행되는 상기 단계들은,
    상기 컴퓨터 상에서 실행되는 모듈로부터 상기 준비 및 압축 상태에서의 메모리 블록을 액세스하기 위한 요청을 수신하는 단계;
    상기 액세스 요청이 판독 요청인지 또는 기입 요청인지 여부를 결정하는 단계;
    상기 액세스 요청이 기입 요청이라는 결정에 응답하여:
    요청된 상기 메모리 블록을 상기 준비 상태로 변경하는 단계; 및
    상기 요청된 메모리 블록에 대응하는 상기 압축 상태에서의 메모리 블록을 해제하는 단계;
    상기 액세스 요청이 판독 요청이라는 결정에 응답하여:
    상기 준비 및 압축 상태에서의 상기 메모리 블록을 이용하여 상기 판독 요청을 서빙하는 단계; 및
    상기 준비 및 압축 상태에서 상기 요청된 메모리 블록을 유지하는 단계를 더 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  13. 제 8 항에 있어서,
    상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들을 형성하는 단계는,
    상기 메모리 블록들의 할당 이후의 경과 시간의 오름 차순으로 상기 준비 상태에서의 상기 메모리 블록들을 압축하는 단계를 포함하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  14. 제 8 항에 있어서,
    상기 프라이머리 메모리는 상기 세컨더리 메모리에 비해 메모리 블록들에 대한 더 빠른 액세스를 제공하는, 컴퓨터에서 메모리를 관리하기 위한 컴퓨터 시스템.
  15. 컴퓨터에서 메모리를 관리하기 위한 실행가능 컴퓨터 프로그램 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 컴퓨터 프로그램 명령들은, 실행될 때 컴퓨터 프로세서로 하여금,
    상기 컴퓨터와 연관된 프라이머리 메모리의 사용을 모니터링하는 것으로서, 상기 프라이머리 메모리는 준비 상태에서 메모리 블록들을 저장하는, 상기 프라이머리 메모리의 사용을 모니터링하는 것을 행하게 하고;
    상기 준비 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 준비 상태 임계치를 초과하는 것에 응답하여, 상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하게 하며;
    상기 준비 및 압축 상태에서의 메모리 블록들에 의한 프라이머리 메모리 사용이 해제 임계치를 초과하는 것에 응답하여, 상기 준비 및 압축 상태에서의 메모리 블록들의 적어도 일부를 해제하게 하고; 그리고
    상기 압축 상태에서의 상기 메모리 블록들에 의한 프라이머리 메모리 사용이 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태에서의 적어도 일부 메모리 블록들을 상기 컴퓨터와 연관된 세컨더리 메모리에 전송하여 온-디스크 상태에서의 메모리 블록들을 형성하게 하는
    명령들을 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  16. 제 15 항에 있어서,
    상기 컴퓨터에서 메모리를 관리하기 위한 상기 컴퓨터 프로그램 명령들은, 실행될 때 상기 컴퓨터 프로세서로 하여금,
    상기 컴퓨터 상에서 실행되는 모듈로부터 메모리 블록을 액세스하기 위한 요청을 수신하게 하고;
    요청된 상기 메모리 블록이 상기 준비 상태에 있는지 여부를 결정하게 하며; 그리고
    상기 요청된 메모리 블록이 상기 준비 상태에 있지 않다는 결정에 응답하여, 상기 요청된 메모리 블록을 상기 준비 상태로 변경하게 하고; 그리고
    상기 액세스 요청에 응답하여 상기 준비 상태에서의 상기 요청된 메모리 블록을 서빙하게 하는
    명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  17. 제 15 항에 있어서,
    상기 컴퓨터에서 메모리를 관리하기 위한 상기 컴퓨터 프로그램 명령들은, 실행될 때 상기 컴퓨터 프로세서로 하여금,
    프라이머리 메모리 사용이 사용 임계치 아래로 떨어지는 것에 응답하여, 상기 온-디스크 상태에서의 적어도 일부 메모리 블록들을 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송하게 하는 명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  18. 제 17 항에 있어서,
    상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들은 상기 압축 상태로 상기 프라이머리 메모리에 저장되고,
    상기 컴퓨터에서 메모리를 관리하기 위한 상기 컴퓨터 프로그램 명령들은, 실행될 때 상기 컴퓨터 프로세서로 하여금,
    전송된 상기 메모리 블록들을 상기 온-디스크 상태에서 상기 세컨더리 메모리 상에 보유하게 하고; 그리고
    프라이머리 메모리 사용이 상기 압축 임계치를 초과하는 것에 응답하여, 상기 압축 상태로 저장된 상기 세컨더리 메모리로부터 상기 프라이머리 메모리로 전송된 상기 메모리 블록들을 해제하게 하는
    명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  19. 제 15 항에 있어서,
    상기 컴퓨터에서 메모리를 관리하기 위한 상기 컴퓨터 프로그램 명령들은, 실행될 때 상기 컴퓨터 프로세서로 하여금,
    상기 컴퓨터 상에서 실행되는 모듈로부터 상기 준비 및 압축 상태에서의 메모리 블록을 액세스하기 위한 요청을 수신하게 하고;
    상기 액세스 요청이 판독 요청인지 또는 기입 요청인지 여부를 결정하게 하며;
    상기 액세스 요청이 기입 요청이라는 결정에 응답하여:
    요청된 상기 메모리 블록을 상기 준비 상태로 변경하게 하고; 그리고
    상기 요청된 메모리 블록에 대응하는 상기 압축 상태에서의 메모리 블록을 해제하게 하며;
    상기 액세스 요청이 판독 요청이라는 결정에 응답하여:
    상기 준비 및 압축 상태에서의 상기 메모리 블록을 이용하여 상기 판독 요청을 서빙하게 하고; 그리고
    상기 준비 및 압축 상태에서 상기 요청된 메모리 블록을 유지하게 하는
    명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  20. 제 15 항에 있어서,
    상기 준비 상태에서의 상기 메모리 블록들의 적어도 일부를 압축하여 준비 및 압축 상태에서의 메모리 블록들 및 압축 상태에서의 메모리 블록들을 형성하기 위한 상기 컴퓨터 프로그램 명령들은, 실행될 때 상기 컴퓨터 프로세서로 하여금,
    상기 메모리 블록들의 할당 이후의 경과 시간의 오름 차순으로 상기 준비 상태에서의 상기 메모리 블록들을 압축하게 하는 명령들을 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020207012710A 2017-10-16 2018-10-15 데이터 분석 시스템에서의 메모리 할당 KR102170624B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/785,353 2017-10-16
US15/785,353 US10558364B2 (en) 2017-10-16 2017-10-16 Memory allocation in a data analytics system
PCT/US2018/055890 WO2019079187A1 (en) 2017-10-16 2018-10-15 MEMORY ASSIGNMENT IN AN ANALYTICAL DATA SYSTEM

Publications (2)

Publication Number Publication Date
KR20200051835A true KR20200051835A (ko) 2020-05-13
KR102170624B1 KR102170624B1 (ko) 2020-10-27

Family

ID=66095732

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207012710A KR102170624B1 (ko) 2017-10-16 2018-10-15 데이터 분석 시스템에서의 메모리 할당

Country Status (9)

Country Link
US (2) US10558364B2 (ko)
EP (1) EP3698254B1 (ko)
JP (1) JP6768989B1 (ko)
KR (1) KR102170624B1 (ko)
CN (1) CN111226201B (ko)
AU (1) AU2018350897B2 (ko)
CA (1) CA3078397C (ko)
SG (1) SG11202001675RA (ko)
WO (1) WO2019079187A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220253338A1 (en) * 2021-02-09 2022-08-11 Alteryx, Inc. Memory management through control of data processing tasks
US11762874B2 (en) 2021-07-28 2023-09-19 Alteryx, Inc. Interactive workflow for data analytics

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060259652A1 (en) * 2002-05-13 2006-11-16 Trek 2000 International Ltd. System and apparatus for compressing and decompressing data stored to a portable data storage device
KR20150090211A (ko) * 2012-12-28 2015-08-05 애플 인크. 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치
KR20160019949A (ko) * 2013-06-13 2016-02-22 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 페이지 기반 압축 저장 관리
KR20170036075A (ko) * 2014-09-26 2017-03-31 인텔 코포레이션 데이터 압축을 채용하는 캐싱 기술들
KR20170097609A (ko) * 2014-12-16 2017-08-28 인텔 코포레이션 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법

Family Cites Families (32)

* Cited by examiner, † Cited by third party
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
US6625671B1 (en) 1999-05-03 2003-09-23 Computer Network Technology Corporation Compression of buffered data
US6606704B1 (en) 1999-08-31 2003-08-12 Intel Corporation Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode
US6360300B1 (en) 1999-08-31 2002-03-19 International Business Machines Corporation System and method for storing compressed and uncompressed data on a hard disk drive
US6564274B1 (en) 1999-12-17 2003-05-13 Omnicluster Technologies, Inc. Modular architecture for small computer networks
JP2001297006A (ja) 2000-04-17 2001-10-26 Hitachi Ltd 半導体集積回路装置および情報処理システム
US7181457B2 (en) * 2003-05-28 2007-02-20 Pervasive Software, Inc. System and method for utilizing compression in database caches to facilitate access to database information
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
US7711876B2 (en) * 2005-03-23 2010-05-04 International Business Machines Corporation Dynamic category compression in a data storage library
US8438351B2 (en) * 2007-06-06 2013-05-07 Hewlett-Packard Development Company, L.P. Binary level update of compressed read-only file systems
US9331919B2 (en) 2007-11-30 2016-05-03 Solarwinds Worldwide, Llc Method for summarizing flow information of network devices
WO2010033877A1 (en) 2008-09-19 2010-03-25 Oracle International Corporation Storage-side storage request management
US20100115182A1 (en) 2008-11-06 2010-05-06 Sony Corporation Flash memory operation
US9552299B2 (en) 2010-06-11 2017-01-24 California Institute Of Technology Systems and methods for rapid processing and storage of data
US8370316B2 (en) 2010-07-12 2013-02-05 Sap Ag Hash-join in parallel computation environments
US20120036301A1 (en) * 2010-08-03 2012-02-09 Caspole Eric R Processor support for filling memory regions
US9436558B1 (en) 2010-12-21 2016-09-06 Acronis International Gmbh System and method for fast backup and restoring using sorted hashes
JP5712609B2 (ja) * 2010-12-24 2015-05-07 富士通株式会社 データ処理装置及びデータ記録方法
US8819361B2 (en) * 2011-09-12 2014-08-26 Microsoft Corporation Retaining verifiability of extracted data from signed archives
US8880481B1 (en) 2012-03-29 2014-11-04 Pivotal Software, Inc. Inverse distribution function operations in a parallel relational database
EP2857975A4 (en) 2012-05-31 2016-03-02 Univ Tokyo PARALLEL DATA PROCESSING SYSTEM, COMPUTER, AND METHOD FOR PARALLEL DATA PROCESSING
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
US9141554B1 (en) * 2013-01-18 2015-09-22 Cisco Technology, Inc. Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques
EP2973042A4 (en) 2013-03-15 2016-11-09 Uda Llc HIERARCHICAL PARALLEL MODELS FOR REAL-TIME EXTRACTION OF HIGHLY DATA STREAM INFORMATION, AND SYSTEM AND METHOD FOR THEIR CREATION
US20150095553A1 (en) * 2013-10-01 2015-04-02 International Business Machines Corporation Selective software-based data compression in a storage system based on data heat
US9176887B2 (en) 2014-01-05 2015-11-03 Quantum Corporation Compressed level two block buffer metadata cache
US9817612B2 (en) 2014-11-20 2017-11-14 International Business Machines Corporation High-performance hash joins using memory with extensive internal parallelism
US10013443B2 (en) 2015-06-25 2018-07-03 Bank Of America Corporation Comparing data stores using hash sums on disparate parallel systems
US10489350B2 (en) * 2017-02-24 2019-11-26 Advanced Micro Devices, Inc. Data compression with inline compression metadata

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060259652A1 (en) * 2002-05-13 2006-11-16 Trek 2000 International Ltd. System and apparatus for compressing and decompressing data stored to a portable data storage device
KR20150090211A (ko) * 2012-12-28 2015-08-05 애플 인크. 압축되고 컴팩트화된 가상 메모리를 위한 방법 및 장치
KR20160019949A (ko) * 2013-06-13 2016-02-22 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 페이지 기반 압축 저장 관리
KR20170036075A (ko) * 2014-09-26 2017-03-31 인텔 코포레이션 데이터 압축을 채용하는 캐싱 기술들
KR20170097609A (ko) * 2014-12-16 2017-08-28 인텔 코포레이션 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법

Also Published As

Publication number Publication date
WO2019079187A1 (en) 2019-04-25
US10996855B2 (en) 2021-05-04
AU2018350897B2 (en) 2020-03-26
JP2020537260A (ja) 2020-12-17
US10558364B2 (en) 2020-02-11
CA3078397A1 (en) 2019-04-25
CN111226201B (zh) 2021-06-08
JP6768989B1 (ja) 2020-10-14
EP3698254B1 (en) 2023-02-22
EP3698254A1 (en) 2020-08-26
CA3078397C (en) 2021-02-09
CN111226201A (zh) 2020-06-02
AU2018350897A1 (en) 2020-03-05
EP3698254A4 (en) 2021-08-04
KR102170624B1 (ko) 2020-10-27
US20190114085A1 (en) 2019-04-18
US20200133504A1 (en) 2020-04-30
SG11202001675RA (en) 2020-03-30

Similar Documents

Publication Publication Date Title
US20210374610A1 (en) Efficient duplicate detection for machine learning data sets
CA2953826C (en) Machine learning service
Lai et al. Towards a framework for large-scale multimedia data storage and processing on Hadoop platform
US11494409B2 (en) Asynchronously processing sequential data blocks
US10996855B2 (en) Memory allocation in a data analytics system
Sinthong et al. AFrame: Extending DataFrames for large-scale modern data analysis (Extended Version)
AU2022218687B2 (en) Memory management through control of data processing tasks

Legal Events

Date Code Title Description
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant