KR20160141674A - 스토리지 장치 및 자율 공간 압축 방법 - Google Patents

스토리지 장치 및 자율 공간 압축 방법 Download PDF

Info

Publication number
KR20160141674A
KR20160141674A KR1020160068228A KR20160068228A KR20160141674A KR 20160141674 A KR20160141674 A KR 20160141674A KR 1020160068228 A KR1020160068228 A KR 1020160068228A KR 20160068228 A KR20160068228 A KR 20160068228A KR 20160141674 A KR20160141674 A KR 20160141674A
Authority
KR
South Korea
Prior art keywords
data
compression engine
sstable
spatial compression
stored data
Prior art date
Application number
KR1020160068228A
Other languages
English (en)
Other versions
KR102334735B1 (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 KR20160141674A publication Critical patent/KR20160141674A/ko
Application granted granted Critical
Publication of KR102334735B1 publication Critical patent/KR102334735B1/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
    • G06F17/30153
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F17/30138
    • G06F17/30194
    • 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
    • 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
    • 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
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/0683Plurality of storage devices
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/163Server or database system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명의 실시 예에 의하면, 중앙처리장치와 스토리지 장치 사이의 데이터 이동을 줄이고, 데이터 압축을 위한 in-storage support를 통해 저장 장치들의 가용 용량을 늘림으로, 스토리지 솔루션들의 성능, 에너지 효율성, 그리고 용량을 향상할 수 있다. 실시 예들은 호스트 쪽 명령에 의해 시작되고 호스트에 의해 특정된 메타 데이터에 따라, 자율 인-스토리지 공간을 압축하기 위한 자율 인-스토리지 장치와 방법을 포함한다. 공간 압축 엔진은 스토리지 장치 내에서 독립적인 모듈이나 로직 섹션으로 기능을 수행할 수 있다. 스토리지 장치는 그 내부에서 데이터를 이동할 수 있다. 그것에 의해 용량을 자유롭게 늘리고, 기존 데이터를 좀 더 압축할 수 있다.

Description

스토리지 장치 및 자율 공간 압축 방법 {STORAGE APPARATUS AND METHOD FOR AUTONOMOUS SPACE COMPACTION}
본 발명은 데이터 스토리지에 관한 것으로, 좀 더 상세하게는 데이터의 자율 공간 압축(autonomous space compaction)을 위한 스토리지 장치 및 방법에 관한 것이다.
앞으로 수년 내에, 수백만 개의 센서들이 전세계적으로 효율적으로 사용되고(deploy) 사물 인터넷(IOT)과 연결될 것으로 기대된다. 그러한 센서들에 의해 수집된 데이터의 양은 일시적으로 저장되기도 하지만, 어떤 경우에는 영원히 저장될 것이다. 그러므로 사물 인터넷(IOT)은 광범위한 스토리지 데이터베이스들 및 그 기조를 이루는 스토리지 장치에 의존할 수 밖에 없다. 스토리지 공간 압축(storage space compaction)은 현대의 데이터 스토리지에서 중요한 한 측면을 이룬다. 예를 들면, NoSQL 데이터베이스 시스템들은 흔적 검색(search footprints)를 줄이고 프리 공간(free space)을 극대화하기 위해, 데이터베이스 파일들 및/또는 테이블들을 주기적으로 병합(merge)한다. 로그-구조 파일 시스템들(예를 들면(append-only file systems)은 때때로 순차적 쓰기를 위한 연속적 공간 활용을 향상하기 위하여 세그먼트 클리닝을 구현한다. 다른 전통적 접근들은 보다 좋은 성능을 위해 무효 공간을 정리하는(clean up) 디스크 조각 모음 처리를 포함한다.
전통적 접근들은 공통적으로 데이터 압축을 위한, 호스트 중앙처리장치들과 스토리지 장치들 사이에서 intensive read 및/또는 write activity를 야기한다. 예를 들면, SSTables(Sorted Strings Tables)은 Apache CassandraTM, an open source distributed database management system에서 압축될 수 있다. 그러나 호스트 CPUs과 스토리지 장치들 사이의 intensive communication activity는 성능을 위한 제한된 팩터일 수 있다. 다른 예를 들면, AOF(Append Only File) 파일은 Redis, an open source key-value cache and store에서 다시 쓰고, 통신 오버헤드 때문에 스케일에 챌린징될 수 있다. (Append Only File (AOF) file rewrites in Redis, an open source key-value cache and store, can be challenging to scale due to the communication overhead.) 본 발명의 실시 예가 종래 기술의 이러한 제한들을 해결한다. (Embodiments of the present inventive concept address these and other limitations in the prior art).
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명의 목적은 호스트로부터의 명령 및 메타 데이터에 따라 자율적으로 공간 압축을 수행하는 스토리지 장치 및 그것의 공간 압축 방법을 제공하는 데 있다.
본 발명의 실시 예에 따른 스토리지 장치는, 하나 또는 그 이상의 데이터 스토리지 섹션들, 통신 및 라우팅 로직 섹션, 공간 압축 엔진을 포함한다. 통신 및 라우팅 로직 섹션은 호스트로부터 메타 데이터를 포함하는 데이터 압축 명령을 수신한다. 공간 압축 엔진은 통신 및 라우팅 로직 섹션 및 하나 또는 그 이상의 데이터 스토리지 섹션들과 통신적으로(communicatively) 연결된다. 상기 공간 압축 엔진은 통신 및 라우팅 로직 섹션으로부터 상기 메타 데이터를 포함하는 상기 데이터 압축 명령을 입력받고, 상기 호스트로부터 입력된 상기 메타 데이터 및 상기 데이터 압축 명령에 근거하여, 상기 하나 또는 그 이상의 데이터 스토리지 섹션들에 있는 기존 저장된 데이터를 압축할 수 있다.
본 발명의 실시 예에 따른, 스토리지 장치의 저장 공간을 압축하는 방법은, 상기 스토리지 장치의 통신 및 라우팅 로직 섹션에 의해, 호스트로부터 메타 데이터를 포함하는 데이터 압축 명령을 수신하는 단계, 상기 통신 및 라우팅 로직 섹션에 의해, 상기 데이터 압축 명령을 공간 압축 엔진으로 라우팅하는 단계, 상기 공간 압축 엔진에 의해, 상기 메타 데이터를 포함하는 상기 데이터 압축 명령을 수신하는 단계, 및 상기 공간 압축 엔진에 의해, 상기 호스트로부터 수신된 상기 메타 데이터와 상기 데이터 압축 명령에 근거하여, 상기 스토리지 장치의 하나 또는 그 이상의 데이터 스토리지 섹션들에 있는 기존 저장된 데이터를 압축하는 단계를 포함한다.
본 발명의 실시 예에 의하면, 중앙처리장치와 스토리지 장치 사이의 데이터 이동을 줄이고, 데이터 압축을 위한 in-storage support를 통해 저장 장치들의 가용 용량을 늘림으로, 스토리지 솔루션들의 성능, 에너지 효율성, 그리고 용량을 향상할 수 있다.
본 발명의 특징들 및 유용성, 및/또는 그 외 다른 특징들 및 유용성은 첨부되는 도면들과 함께하는 이하 실시 예들의 설명으로부터 명확해지고 더 잘 이해될 것이다.
도 1은 호스트 레이어와 장치 레이어를 포함하는 자율 공간 압축 시스템을 예시적으로 보여주는 블록도이다.
도 2는 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 메타 데이터는 인터페이스(152)를 경유하여, 도 1의 스토리지 장치(130)에 의해 입력 받은 객체 포인터(205), 소스 데이터 어드레스들(215), 신규 데이터 어드레스들(220)과 관련된다.
도 3은 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 메타 데이터(155)는 인터페이스(152)를 통해 도 1에 도시된 스토리지 장치(130)에 의해 입력 받은 객체 포인터(305)와 관련된다.
도 4는 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 메타 데이터(155)는 인터페이스(152)를 통해 도 1에 도시된 스토리지 장치(130)에 의해 입력된 제 1 및 제 2 객체 포인터(405, 415)와 관련된다.
도 5는 메타 데이터를 포함하는 명령을 에시적으로 보여주는 블록도이다. 메타 데이터(155)는 도 1에 도시된 스토리지 장치(130)에 의해 입력 받은 제 1 내지 제 3 객체 포인터(505, 515, 525)와 연관될 수 있다.
도 6은 본 발명의 실시 예에 따른, 호스트 명령(도 1 참조, 125, 150)에 근거하여 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 있는 기존 저장된 데이터를 압축하기 위한 기술을 설명하기 위한 순서도이다.
도 7은 본 발명의 실시 예에 따른, 호스트 명령(도 1 참조, 125, 150)에 근거하여 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 있는 기존 저장된 데이터를 압축하기 위한 다른 기술을 설명하기 위한 순서도이다.
도 8은 도 1에 도시된 공간 압축 엔진을 갖는 스토리지 장치를 포함하는 컴퓨팅 시스템을 보여주는 블록도이다.
본 발명의 기술적 사상이 첨부된 도면들을 참조하여 상세히 설명된다. 아래의 상세한 설명에서, 다양한 구체적이고 상세한 설명이 본 발명의 기술적 사상을 이해하는 데 도움을 주기 위하여 제공된다. 그러나 이 분야에서 숙련된 자들은 이러한 구체적인 상세한 설명 없이도 본 발명의 기술적 사상을 실시할 수 있다. 다른 예로서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들 및 네트워크들은 본 발명의 실시 예들을 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않을 것이다.
제1, 제2 등의 용어들이 다양한 구성 요소들을 설명하기 위하여 사용되지만, 이러한 구성 요소들은 용어들에 의해 한정되지 않음은 자명하다. 이러한 용어들은 하나의 구성 요소들 다른 구성 요소와 식별하기 위해서만 사용된다. 예를 들어, 본 발명의 기술적 사상의 범위로부터 벗어나지 않으면서, 제1 모듈은 제2 모듈로 명명될 수 있으며, 마찬가지로 제2 모듈은 제1 모듈로 명명될 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어는 구체적인 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것을 의도하지 않는다. 본 발명의 기술적 사상의 설명에서 사용되는 "그리고/또는"의 용어는 연관된 아이템들의 하나 또는 그 이상의 어떠한 그리고 모든 가능한 조합들을 포함한다. 상세한 설명에서 사용되는 "포함한다"는 용어는 언급된 특성, 수, 단계들, 동작들, 그리고/또는 구성 요소들의 존재를 명시하며, 하나 또는 그 이상의 다른 특성, 수, 단계들, 동작들, 구성 요소들, 그리고/또는 이들의 그룹들의 존재 또는 추가를 배제하지 않는다.
본 발명의 실시 예에 의하면, 중앙처리장치와 스토리지 장치 사이의 데이터 이동을 줄이고, 데이터 압축을 위한 in-storage support를 통해 저장 장치들의 가용 용량을 늘림으로, 스토리지 솔루션들의 성능, 에너지 효율성, 그리고 용량을 향상할 수 있다. 실시 예들은 호스트 쪽 명령에 의해 시작되고 호스트에 의해 특정된 메타 데이터에 따라, 자율 인-스토리지 공간을 압축하기 위한 자율 인-스토리지 장치와 방법을 포함한다.
공간 압축 엔진은 스토리지 장치 내에서 독립적인 모듈이나 로직 섹션으로 기능을 수행할 수 있다. 스토리지 장치는 그 내부에서 데이터를 이동할 수 있다. 그것에 의해 용량을 자유롭게 늘리고, 기존 데이터를 좀 더 압축할 수 있다. 이것은 이하에서 좀 더 자세히 설명될 것이다. 공간 압축 엔진은 아래에서 설명되는 바와 같이, 셀프 압축 동작들(self-compact operations), 셀프 압축 및 트림 동작들(self-compact and trim operations), 이동 및 압축 동작들(move and compact operations), 및 /또는 머지 및 압축 동작들(merge and compact operations)을 야기할 수 있다. 공간 압축 엔진은 이런 동작들의 완료를 호스트에 통지할 수 있다. Memory bandwidth and host-CPU consuming work 은 스토리지 장치의 내부 대역폭을 좀 더 잘 이용하고 소모 전력을 줄이기 위해 지능형 스토리지 장치로 오프로드(offload)될 수 있다. 즉, 그러한 대역폭과 호스트-CPU consuming work는 호스트로부터의 명령들과 메타 데이터에 응답하여, 공간 압축 엔진으로 대체될 수 있고, 스토리지 장치 내에서 처리될 수 있다.
도 1은 호스트 레이어와 장치 레이어를 포함하는 자율 공간 압축 시스템을 예시적으로 보여주는 블록도이다. 장치 레이어(110)는 본 발명의 실시 예에 따른, 데이터 압축을 위한 공간 압축 엔진(145)을 갖는 스토리지 장치(130)를 포함할 수 있다. 공간 압축 엔진(145)은 공간 압축 로직 섹션(147) 및/또는 공간 압축 스토리지 섹션(149)을 포함할 수 있다. 실시 예로서, 공간 압축 로직 섹션(147)은 중앙처리장치(CPU), 필드 프로그램어블 게이트 어레이(FPGA; Field Programmable Gate Array), 주문형 집적회로(ASIC; Application Specific Integrated Circuit) 등을 포함할 수 있다. 그리고 공간 압축 스토리지 섹션(149)은 랜덤 액세스 메모리(RAM), 플래시 메모리, 상변환 메모리(PCM; Phase-Change Memory) 등을 포함할 수 있다. 스토리지 장치(130)는 플래시 메모리, 상변환 메모리, 스핀 전달 토그 램(SST-RAM)과 같은 적당한 형태의 불휘발성 메모리들을 포함할 수 있다. 예를 들면, 스토리지 장치(130)는 솔리드 스테이트 드라이브(SSD) 저장 장치일 수 있다. 호스트 레이어(105)는 호스트 프로세서(102)와 같은 호스트를 포함할 수 있다. 예를 들면, 호스트 프로세서(102)는 중앙처리장치(CPU)일 수 있다. 그러나 호스트 프로세서(102)는 다른 적당한 형태의 프로세서일 수 있음은 자명하다. 호스트(102)가 소프트웨어 프로세스, 펌웨어 섹션, 하드웨어 유닛, 또는 그것들을 결합한 형태일 수 있음은 자명하다.
호스트(102)는 하나 또는 그 이상의 어플리케이션들(115)과 장치 드라이버(120)를 포함할 수 있다. 예를 들면, 하나 또는 그 이상의 어플리케이션들(115)은 파일 시스템, 데이터베이스, 하나 또는 그 이상의 프로세스들과 같은 것들을 포함할 수 있다. 하나 또는 그 이상의 어플리케이션들(115)은 장치 드라이버(120)에 하나 또는 그 이상의 명령 호출들(125)을 발생(issue)할 수 있다. 예를 들면, 하나 또는 그 이상의 명령 호출들(125)은 데이터 압축 명령 호출(125)을 포함할 수 있다. 데이터 압축 명령 호출(125)은 특별 지정 장치, 명령 스트링, 그리고 메타 데이터를 포함하는, Ioct1방식으로 발행될 수 있다. 예를 들면, Ioct1은Ioct1(dev, “COMPACT”, metadata, …) 형식(form)일 수 있다. 데이터 압축 명령 호출(125)은 다른 적당한 형식을 취하거나, 본 명세서에서 벗어나지 않은 다른 적당한 방식으로 발행될 수 있음은 자명하다. 예를 들면, 압축 명령은 웹-서비스 인터페이스(web-service interface), 어플리케이션 프로그래밍 인터페이스(API) 등을 경유하여 발행될 수 있다.
호스트(102)는 인터페이스(152)를 통해 스토리지 장치(130)와 통신할 수 있다. 인터페이스(152)는 SATA(serial advanced technology attachment interface), serial attached SCSI or SAS(small computer system interface), NVMe(non-volatile memory host controller interface specification express interface), 10G/40G/100G Ethernet interface와 같은 이더넷 인터페이스, Fibre Channel (FC) interface, an Infiniband interface, a remote direct memory access (RDMA) interface 등을 포함할 수 있다. 호스트(102)의 장치 드라이버(120)는 데이터 압축 명령 호출(125)을 입력 받을 수 있다. 장치 드라이버(120)는 메타 데이터(155)를 포함하는 명령(150)을 발생할 수 있다. 메타 데이터(155)는 인터페이스(152)를 경유하여, 호스트 레이어(105)로부터 장치 레이어(110)로, 스토리지 장치(130)에 전달될 수 있다.
이런 식으로, 스토리지 장치(130)는 호스트 레이어(105) 상에서 결정된 그들 자신의 데이터 구조에 따라, 사용자 및/또는 어플리케이션에 의해 정의된 압축 파라미터들을 물려받을 수 있다. 스토리지 장치(130)의 더 낮은 레벨의 FTL(lower level FTL) 또는 플래시 가비지 컬렉터(GC; flash garbage collector)는 사용자 및/또는 어플리케이션에 의해 정의된 압축 파라미터들을 인식할 필요 없다. 그 역도 마찬가지이다. 게다가, 공간 압축 엔진(145)은 호스트로부터 파라미터들을 물려받을 수 있고, 그런 파라미터들을 기초로 스토리지 장치(130) 내에서 압축(compaction)을 자율적으로 구현할 수 있다. 결과적으로, 공간 압축 엔진(145)은 FTL 또는 플래시 가비지 컬렉션을 인식할 필요 없고, 하드웨어 및/또는 소프트웨어 스택(stack)에서 보다 높은 레벨에 위치할 수 있다. 명령(150)과 관련된 메터 데이터(155)는 아래에서 자세하게 기술될 것이다.
스토리지 장치(130)는 통신 및 라우팅 로직 섹션(140)을 포함할 수 있다. 통신 및 라우팅 로직 섹션(140)은 호스트(102)의 장치 드라이버(120)로부터 명령(150) 및 관련 메타 데이터(155)를 입력 받을 수 있다. 데이터 압축 명령 호출(예를 들면, 125)과 관련되는 명령(150)에 응답하여, 명령 및 라우팅 로직 섹션(140)은 라인(160)을 경유하여, 공간 압축 엔진(145)에 명령(150)을 라우트할 수 있다.
공간 압축 엔진(145)은 라인들(160 및/또는 170)을 경유하여 통신 및 라우팅 로직 섹션(140)에 통신으로(communicatively) 연결되고, 라인(165)을 경유하여 물리적 스토리지 섹션(135)에 통신으로 연결될 수 있다. 물리적 스토리지 섹션(135)은 예를 들면, 하나 또는 그 이상의 불휘발성 메모리 섹션들(134) 및/또는 하나 또는 그 이상의 휘발성 메모리 섹션들(136)과 같은, 하나 또는 그 이상의 데이터 스토리지 섹션들을 포함할 수 있다. 물리적 스토리지 섹션(135)은 하나 또는 그 이상의 프로세서들(132)을 포함할 수 있다. 하나 또는 그 이상의 프로세서들(132)은 하나 또는 그 이상의 마이크로프로세서들 및/또는 중앙처리장치들을 포함할 수 있다. 공간 압축 엔진(145)은 통신 및 라우팅 로직 섹션(140)으로부터, 메타 데이터(155)를 포함하는 데이터 압축 명령(150)을 입력 받을 수 있다. 공간 압축 로직 섹션(147)은 데이터 압축 명령(150) 및/또는 메타 데이터(155)를 처리할 수 있다. 공간 압축 스토리지 섹션(149)은 데이터 압축 명령(150) 및/또는 메타 데이터(155)를 저장할 수 있다. 공간 압축 엔진(145)은 적어도, 호스트(102)로부터 입력된 메타 데이터(155)와 데이터 압축 명령(150)을 근거로, 물리적 스토리지 섹션(135)에 미리 존재하고 저장되어 있는 데이터(preexisting stored data)를 압축할 수 있다. 이것은 아래에서 좀 더 자세하게 설명될 것이다. 공간 압축 엔진(145)은 응답(170)을 발생하고 통신 및 라우팅 로직 섹션(140)에 전달할 수 있다. 통신 및 라우팅 로직 섹션(140)은 응답(175)을 호스트(102)의 장치 드라이버(120)에 보낼 수 있다. 응답(170 및/또는 175)은 예를 들면, 스토리지 압축 요청의 성공(success) 또는 실패(failure)를 가리킬 수 있다.
통신 및 라우팅 로직 섹션(140)은 정기 통로(regular paths) 180과 185를 경유하여, 비압축 관련 명령들(non-compaction related commands, 예를 들면, 데이터 압축 또는 공간 압축 엔진(145)에 관련되지 않은 명령들)을 라우트할 수 있다. 즉, 공간 압축과 관련되지 않은 모든 다른 명령들은 통신 및 라우팅 로직 센션(140)에 의해, 라인 185를 경유하여 통신 및 라우팅 로직 섹션(140)에 되돌아 간 응답들과 함께, 물리적 스토리지 섹션(135)에 직접 라우트될 수 있다. 그 다음에, 공간 압축과 관련되지 않은 모든 다른 명령들은 호스트(102)의 장치 드라이버(120)에 응답(175)으로 리턴(return)될 수 있다.
도 2는 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 도 2를 참조하면, 메타 데이터는 인터페이스(152)를 경유하여, 도 1의 스토리지 장치(130)에 의해 입력 받은 객체 포인터(205), 소스 데이터 어드레스들(215), 신규 데이터 어드레스들(220)과 관련된다. 명령(150)은 데이터 압축 명령일 수 있다. 메타 데이터(155)는 객체 포인터(205), 하나 또는 그 이상의 소스 데이터 어드레스들(215), 및/또는 하나 또는 그 이상의 신규 데이터 어드레스들(220)을 포함할 수 있다. 객체 포인터(205)는 스토리지 장치(130)에 저장될 수 있는 한 객체(210)를 가리키고(point), 기존 저장된 데이터(preexisting stored data, 222)를 포함할 수 있다. 기존 저장된 데이터(222)는 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 객체(210)에 존재할 수 있다. 또한, 무효 데이터(invalid data, 225)도 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 객체(210)에 존재할 수 있다.
도 1에 도시된 공간 압축 엔진(145)은, 하나 또는 그 이상의 소스 데이터 어드레스들(215)에 대응하는 기존 저장된 데이터(222)의 하나 또는 그 이상의 서브세트들(217)이, 하나 또는 그 이상의 신규 데이터 어드레스들(220)에 대응하는 객체(210) 내의 신규 위치(new location, 226)로 이동(migrate)되게 할 수 있다. 공간 압축 엔진(145)은, 하나 또는 그 이상의 소스 데이터 어드레스들(215)에 대응하는 기존 저장된 데이터(222)의 다른 하나 또는 그 이상의 서브세트들(예를 들면, 219)이, 하나 또는 그 이상의 신규 데이터 어드레스들(220)에 대응하는 객체(210) 내의 신규 위치(new location, 226)로 이동(migrate)되게 할 수 있다. 무효 데이터(225)는 객체(210) 내의 프리 업 공간(free up space)로 버려질 수 있다(discard). 그런 이유로, 추가 빈 공간(additional empty space, 230)이 제공된다. 객체 포인터(205)는 그런 이동(such migration) 전과 후에, 동일 객체(210)를 가리킬 수 있다.
실시 예로서, 객체(210)는 파일(file)일 수 있다. 예를 들면, 객체(210)는 파일 시스템, 데이터베이스, 키 스토어(key store) 등과 같은 것들 내의 파일(file)일 수 있다. 예로서, 하나 또는 그 이상의 소스 데이터 어드레스들(215)은 파일(210) 내의 제 1 범위의 논리 블록 어드레스들(LBAs, 217)과 제 2 범위 논리 블록 어드레스들(219)에 대응할 수 있다. 하나 또는 그 이상의 신규 데이터 어드레스들(220)은 파일(210) 내의 제 3 범위의 논리 블록 어드레스들(LBAs, 226)에 대응할 수 있다. 예를 들면, 제 1 범위(217)는 LBAs 1-400에 대응하고, 제 2 범위(219)는 LBAs 1000-1100에 대응하고, 제 3 범위(226)는 LBAs 4000-4500에 대응할 수 있다. 기존 저장된 데이터 및 관련된 LBA 범위들의 서브세트들의 적당한 수는 파일(210)에 존재할 수 있음은 자명하다. 데이터의 이동 후에, 기존 저장된 데이터의 일부는 파일(210)의 다른 부분에 위치될 수 있다. 반면에, 기존 저장된 데이터의 나머지는 파일(210)의 동일 부분에 위치할 수 있다.
데이터의 이동 후에, 빈 부분(230)은 버려질 무효 데이터(225)의 적어도 일 부분 때문에, 파일(210)의 끝이나 테일(tail)을 향하여 존재할 수 있다. 이동 전 로그 테일(log tail, 235)은 이동 후에 신규 위치(240)로 조절될 수 있다. 따라서, 압축은 파일(210)을 재조직(reorganize)할 수 있다. 그래서 유효 데이터(222)는, 호스트(도 1 참조, 102)로부터 입력 받은 적어도 명령(150)과 메타 데이터(155)에 근거하여, 논리적으로 연속적으로 조직화되고, 프리 또는 빈 공간도 논리적으로 연속적으로 조직화 될 수 있다. 스토리지 장치(130)은 내부적으로 데이터 이동 업무를 다룰 수 있고, 그것이 행해질 때 호스트(102)에 응답할 수 있다.
도 3은 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 도 3을 참조하면, 메타 데이터(155)는 인터페이스(152)를 통해 도 1에 도시된 스토리지 장치(130)에 의해 입력 받은 객체 포인터(305)와 관련된다. 명령(150)은 데이터 압축 명령(150)일 수 있다. 메타 데이터(155)는 객체 포인터(305)를 포함할 수 있다. 객체 포인터(305)는 스토리지 장치(130)에 저장될 수 있는 한 객체(310)를 가리키고(point), 기존 저장된 데이터(preexisting stored data, 315)를 포함할 수 있다. 기존 저장된 데이터(315)는 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 객체(310)에 존재할 수 있다. 또한, 무효 데이터(invalid data, 225)도는 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 객체(210)에 존재할 수 있다. 도 1에 도시된 공간 압축 엔진(145)은, 기존 저장된 데이터(315)의 하나 또는 그 이상의 서브세트들이, 객체(310) 내의 신규 위치(new location)로 이동(migrate)되게 할 수 있다. 이것은 아래에서 상세하게 설명될 것이다.
객체(310)는 하나 또는 그 이상의 페이지들(예를 들면, 페이지1~페이지N)을 포함하는 데이터베이스 테이블(310)일 수 있다. 하나 또는 그 이상의 페이지들 각각은 하나 또는 그 이상의 유효 기록들(예를 들면, valid R1, valid R2 등)과 하나 또는 그 이상의 미사용(unused) 및/또는 무효 엔트리들(invalid entries) (예를 들면, 320, 322, 및/또는 325)을 포함할 수 있다. 공간 압축 엔진(도 1 참조, 145)은 하나 또는 그 이상의 페이지들(예를 들면, 페이지1~페이지N) 각각의 하나 또는 그 이상의 유효 기록들(예를 들면, valid R1, valid R2 등)이, 대응하는 각각의 페이지들(예를 들면, 페이지1~페이지N) 내에서 논리적이고 연속적인 정렬(logically contiguous arrangement)로 재정렬되게 할 수 있다.
예를 들면, 데이터베이스 테이블(310)의 미리 존재하는 데이터(315)의 페이지1에 도시된 바와 같이, 유효 기록R1다음에는 미사용(unused) 및/또는 무효 공간(invalid space, 320)이 뒤따른다. 그리고 그 다음에는 유효 기록 R2가 뒤따르고, 그 다음에는 미사용 공간(322)이 뒤따른다. 공간 압축 엔진(도 1 참조, 1450)이 데이터를 재정렬 데이터(rearranged data, 317)로 재정렬한 후에, 페이지 1은 전과 다르게 정렬(arrange)될 수 있다. 특히, 페이지 1은 유효 기록 R1을 포함할 수 있고, 그 뒤에 유효 기록 R2이 뒤따르고, 그 뒤에 미사용 공간(330)이 뒤따를 수 있다. 미사용 공간의 일부 또는 모두는 참조 번호 335에서 보는 바와 같이, 페이지 1 내의 프리 업 추가 공간(free up more space)에 조절되고 해제(trimmed and released)될 수 있다.
다른 예에 의하면, 데이터베이스 테이블(310)의 기존 데이터(315)의 페이지 N에서 보는 바와 같이, 유효 기록 R1 다음에는 미사용 공간(325)이 뒤따르고, 그 다음에는 유효 기록 R3이 뒤따르고, 그 다음에는 유효 기록 R2가 뒤따른다. 공간 압축 엔진(도 1 참조, 1450)이 데이터를 재정렬 데이터(rearranged data, 317)로 재정렬한 후에, 페이지 N은 전과 다르게 정렬(arrange)될 수 있다. 특히, 페이지 N은 유효 기록 R1을 포함할 수 있고, 그 뒤에 유효 기록 R2이 뒤따르고, 그 뒤에 유효 기록 R3이 뒤따를 수 있다. 페이지 N의 미사용 공간의 일부 또는 모두는 참조 번호 340에서 보는 바와 같이, 페이지 N 내의 프리 업 추가 공간(free up more space)에 조절되고 해제(trimmed and released)될 수 있다. 페이지 헤더들, 디렉토리 구조와 같은 내부 메타 데이터는 데이터베이스 테이블(310) 내에 업데이트될 수 있다.
따라서, 공간 압축 엔진(도 1 참조, 145)은 하나 또는 그 이상의 페이지들(예를 들면, 페이지1~페이지N) 각각의 하나 또는 그 이상의 미사용 및/또는 무효 엔트리들(예를 들면, 320, 322, 및 /또는 325)이, 대응하는 각각의 페이지들(예를 들면, 페이지1~페이지N) 내에서 논리적이고 연속적인 정렬(logically contiguous arrangement)로 재정렬되게 할 수 있다. 유효 기록들의 적당한 수가 각 페이지 내에서 논리적이고 연속적으로 재정렬될 수 있음은 자명하다. 공간 압축 엔지(145)은 하나 또는 그 이상의 페이지들(예를 들면, 페이지1~페이지N) 의 하나 또는 그 이상의 미사용 및/또는 유효 엔트리들(320, 322, 및/또는 325)이, 데이터베이스 테이블(310)로부터 조절되거나 해제(trimmed or released)되게 할 수 있다. 적당한 미사용 공간이 각 페이지 내에서 프리 업 추가 공간(free up additional space)으로 조절되거나 해제될 수 있음은 자명하다. 압축(compaction)은 데이터베이스 테이블(310)의 상태를 개선할 수 있다. 호스트(도 1 참조, 102)로부터 입력 받은 명령(150)과 메타 데이터(155)에 근거하여, 데이터베이스 테이블(310)에서, 유효 기록들은 논리적이고 연속적으로 조직화되고, 미사용 기록들은 프리 업 공간(free up space)으로 조절되고 해제될 수 있다. 스토리지 장치(130)는 내부적으로 데이터 압축 업무를 다룰 수 있고, 그것이 행해질 때 호스트(102)에 응답할 수 있다.
도 4는 메타 데이터를 포함하는 명령을 예시적으로 보여주는 블록도이다. 메타 데이터(155)는 인터페이스(152)를 통해 도 1에 도시된 스토리지 장치(130)에 의해 입력된 제 1 및 제 2 객체 포인터(405, 415)와 관련된다. 명령(150)은 데이터 압축 명령(150)일 수 있다. 메타 데이터(155)는 제 1 객체 포인터(405)를 포함할 수 있다. 제 1 객체 포인터(405)는 AOF 파일(410)과 같은 제 1 객체를 가리킬 수 있다. 메타 데이터(155)는 제 2 객체 포인터(415)를 포함할 수 있다. 제 2 객체 포인터(415)는 AOF 파일(420)과 같은 제 2 객체를 가리킬 수 있다. 제 1 및 제 2 AOF 파일(410, 420)은 스토리지 장치(130)에 저장될 수 있다. 이 실시 예에서, 압축(compaction)은 제 1 AOF 파일(410)로부터 제 2 AOF 파일(420)로 유효 데이터를 이동하고, 그것에 의해 본래 객체(original object)를 재조직화 하는 것을 포함할 수 있다. 그 다음에 본래 AOF 파일(original AOF file, 410)은 삭제될 수 있다.
제 1 AOF 파일(410)은 기존 저장된 데이터(425)를 포함할 수 있다. 기존 저장된 데이터(425)는, 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 제 1 AOF 파일(410)에 존재할 수 있다. 공간 압축 엔진(도 1 참조, 145)은, 제 1 객체(410) 안에 있는 기존 저장된 데이터(425)의 하나 또는 그 이상의 서브 세트들(예를 들면, U12-A, U9-B, 및/또는 U10-C)이 제 2 객체(420)로 이동되게 할 수 있다. 제 1 AOF 파일(410)의 기존 저장된 데이터(425)는 하나 또는 그 이상의 시간 스탬프 기록들(time-stamped records, 예를 들면, W1-A, W2-B, W3-D, U4-A, U5-C, W6-D, U7-B, U8-C, U9-B, U10-C, D11-D, 및 U12-A). 여기에서, W는 쓰기 동작을 나타내고, U는 업데이트 동작을 나타내고, D는 삭제 동작을 나타내며, 숫자 1-12는 기록들의 시간 스탬프를 나타낸다. 기록들의 시간 스탬프는 제 1 AOF 파일(410)에서 발생 순서(chronological order) 대로 정렬될 수 있다. A는 제 1 유닉 키(unique key) 또는 데이터 타입을 나타내고, B는 제 2 유닉 키(unique key) 또는 데이터 타입을 나타내고, C는 제 3 유닉 키(unique key) 또는 데이터의 타입을 나타내며, D는 제 4 유닉 키(unique key) 또는 데이터의 타입을 나타낸다. 예를 들면, W1-A, U4-A, 및 U12-A는 동일 유닉 키 또는 데이터 타입일 수 있다. 이와 같이, 다양한 동작들이 AOF 파일 내에서 인터리브(interleave)될 수 있다. 제 1 AOF 파일이 적당한 동작들의 수를 나타내는 적당한 기록들의 수와, 각 기록들과 관련된 적당한 종류의 시간 스탬프(timestamp)를 포함할 수 있음은 자명하다. 또한, 제 1 AOF 파일(4100이 적장 수의 유닉 키들과 데이터 타입들을 포함할 수 있음은 자명하다.
공간 압축 엔진(145)은, 제1 AOF 파일(410)의 하나 또는 그 이상의 시간 스탬프 기록들(425)의 서브세트(예를 들면, W1-A, U4-A, 및 U12-A)가 싱글 스탬프 기록(예를 들면, U12-A)으로 집중되고(condense) 제 2 AOF 파일(420)에 저장되게 할 수 있다. 다른 예로서, 공간 압축 엔진(145)은, 제1 AOF 파일(410)의 하나 또는 그 이상의 시간 스탬프 기록들(425)의 다른 서브세트(예를 들면, W2-B, U7-B, 및 U9-B)가 싱글 스탬프 기록(예를 들면, U9-B)으로 집중되고(condense) 제 2 AOF 파일(420)에 저장되게 할 수 있다. 또 다른 예로서, 공간 압축 엔진(145)은, 제1 AOF 파일(410)의 하나 또는 그 이상의 시간 스탬프 기록들(425)의 또 다른 서브세트(예를 들면, W3-C, U5-C, U8-C, 및 U10-C)가 싱글 스탬프 기록(예를 들면, U10-C)으로 집중되고(condense) 제 2 AOF 파일(420)에 저장되게 할 수 있다. D에 의해 표현된 유닉 키 또는 데이터 타입의 마지막 기록은 삭제(예를 들면, D11-D)이기 때문에, D에 의해 표현된 유닉 키 또는 데이터 타입과 관련된 기록들은 버려질 수 있고(discard), 제 2 AOF 파일(420)로 복사(copy)되거나 집중(condense)될 필요는 없다.
따라서, Redis와 같은 어드밴스 키-값 캐시 스토어들(advanced key-value cache stores)에서, 압축(compaction)은, 호스트(102)로부터 입력 받은 명령(150)과 메타 데이터(155)에 근거하여, 제 1 AOF 파일(410)을 제 2 AOF 파일(420)로 압축(compact)할 수 있다. 실시 예로서, AOF 파일은 수백 만의 동작들과 관련된 수백 만의 기록들을 담을 수 있다. 수백 만의 기록들과 동작들은 훨씬 더 적은 기록들과 관련된 동작들로 압축될 수 있다. 심지어는 수백 만 대신에 수 천의 차수(order)로 압축될 수도 있다. 스토리지 장치(130)는 내부적으로 데이터 압축 업무를 다룰 수 있고, 그것이 행해질 때 호스트(102)에 응답할 수 있다.
도 5는 메타 데이터를 포함하는 명령을 에시적으로 보여주는 블록도이다. 도 5를 참조하면, 메타 데이터(155)는 도 1에 도시된 스토리지 장치(130)에 의해 입력 받은 제 1 내지 제 3 객체 포인터(505, 515, 525)와 연관될 수 있다. 명령(150)은 데이터 압축 명령(150)일 수 있다. 메타 데이터(155)는 객체 포인터들(505, 515, 및/또는 525)을 포함할 수 있다. 실시 예로서, 객체 포인터들(예를 들면, 505, 515, and 525)은 NoSQL 데이터베이스와 각각 연관될 수 있다. 객체 포인터들(예를 들면, 505, 515, and 525)은 Cassandra, Hbase, LevelDB, 또는 적당한 종류의 데이터베이스 테이블에 있는SSTable과 같은 데이터베이스 테이블을 각각 가리킬 수 있다. SSTables과 관련된 레이아웃 정보는 키-값 쌍들이 얼마나 스토리지 장치(130)에 저장되는지를 설명할 수 있다.
객체 포인터(505)는 객체(510)를 가리킬 수 있다. 객체(510)는 스토리지 장치(130)에 저장될 수 있고, 기존 저장된 데이터의 제 1 부분(예를 들면, keys 545, values 540, 및/또는 stale values 535)을 포함할 수 있다. 기존 저장된 데이터의 제 1 부분(예를 들면, keys 545, values 540, 및/또는 stale values 535)은, 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 객체(510)에 존재할 수 있다. 객체 포인터(515)는 다른 객체(520)를 가리킬 수 있다. 다른 객체(520)는 스토리지 장치(130)에 저장될 수 있고, 기존 저장된 데이터의 제 2 부분(예를 들면, keys 547, values 555, 및/또는 stale values 550)을 포함할 수 있다. 기존 저장된 데이터의 제 2 부분(예를 들면, keys 547, values 555, 및/또는 stale values 550)은, 명령(150)이 발생되기 전에, 스토리지 장치(130)에 저장된 다른 객체(520)에 존재할 수 있다. 객체 포인터(525)는 객체(530)을 가리킬 수 있다. 객체(530)는 미리 할당되거나 스토리지 장치(130)에 저장될 수 있다.
공간 압축 엔진(145)은, 기존 저장된 데이터의 제 1 부분(예를 들면, keys 545, values 540, 및/또는 stale values 535)의 하나 또는 그 이상의 서브세트들(예를 들면, values 540 및 대응하는 keys 545)이 제 3 객체(530)로 이동되도록 할 수 있다. 이것은 아래에서 좀 더 상세하게 설명될 것이다. 공간 압축 엔진(145)은, 제 2 객체(520) 내의 기존 저장된 데이터의 제 2 부분(예를 들면, keys 547, values 555, 및/또는 stale values 550)의 하나 또는 그 이상의 서브세트들(예를 들면, values 555 및 대응하는 keys 547)이 제 3 객체(530)로 이동되도록 할 수 있다
제 1 객체(510)는 제 1 SSTable(Sorted Strings Table, 510)에 대응될 수 있다. 제 1 SSTable(510)에 있는 기존 저장된 데이터의 제 1 부분은 하나 또는 그 이상의 키들(545), 하나 또는 그 이상의 값들(540), 및/또는 하나 또는 그 이상의 스테일 값들(stale values, 535)을 포함할 수 있다. 제 2 객체(520)는 제 2 SSTable(Sorted Strings Table, 520)에 대응될 수 있다. 제 2 SSTable(520)에 있는 기존 저장된 데이터의 제 2 부분은 하나 또는 그 이상의 값들(555)과 대응하는 하나 또는 그 이상의 키들(547)을 포함할 수 있다. 제 3 객체(530)는 제 3 SSTable(Sorted Strings Table, 530)에 대응될 수 있다. 제 2 SSTable(530)은 새로 머지된 SSTable을 쓰기 위하여, 스토리지 장치(130)에 미리 할당될 수 있다.
공간 압축 엔진(145)은, 제 1 SSTable(510)의 하나 또는 그 이상의 값들(540) 및 대응하는 하나 또는 그 이상의 키들(545)이 제 3 SSTable(530)에 이동하도록 할 수 있다. 유사하게, 공간 압축 엔진(145)은, 제 2 SSTable(520)의 하나 또는 그 이상의 값들(555) 및 대응하는 하나 또는 그 이상의 키들(547)이 제 3 SSTable(530)에 이동하도록 할 수 있다. 이런 방식으로, 압축된 키 값들이 참조 번호 560에서 볼 수 있듯이, 신규 SSTable(530)에 저장될 수 있다. 즉, 압축(compaction)은 여러 객체들을 머지하고, 입력 객체들에서 tombstones을 제거(remove)하고, 입력 개체들을 하나의 신규 출력 객체로 재조직화 할 수 있다. 머지가 완료된 후에, 제 1 및 제 2 SSTable(510, 520)은 스토리지 장치(130) 내에서 프리 업 공간(free up space)으로 삭제될 수 있다.
스테일 값들 (예를 들면, 535와 550)은 머지될 필요가 없다. 좀 더 특별하게는, 공간 압축 엔진(145)은, 제 1 SSTable(510)의 하나 또는 그 이상의 스테일 값들(535) 및 대응하는 하나 또는 그 이상의 키들(545)이 제 3 SSTable(530)에 이동하지 못하도록 할 수 있다. 유사하게, 공간 압축 엔진(145)은, 제 2 SSTable(520)의 하나 또는 그 이상의 스테일 값들(550) 및 대응하는 하나 또는 그 이상의 키들(547)이 제 3 SSTable(530)에 이동하지 못하도록 할 수 있다.
따라서, 압축(compaction)은, 호스트(102)로부터 입력 받은 명령(150)과 메타 데이터(155)에 근거하여, 제 1 및 제 2 SSTable(510, 520)을 제 3 SSTable(530)로 머지할 수 있다. 스토리지 장치(130)는 내부적으로 데이터 머지 임무를 다룰 수 있고, 그것이 완료될 때 호스트(102)에 응답할 수 있다. 응답(도 1 참조, 175)은 압축 후에, 새롭게 쓰여진 SSTable(530)의 레이아웃 설명(layout description)을 포함할 수 있다.
도 6은 본 발명의 실시 예에 따른, 호스트 명령(도 1 참조, 125, 150)에 근거하여 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 있는 기존 저장된 데이터를 압축하기 위한 기술을 설명하기 위한 순서도이다. 그 기술은 참조번호605에서 시작한다. 스토리지 장치(130)의 통신 및 라우팅 로직 섹션(도 1 참조, 140)은 호스트(102)로부터 메타 데이터를 포함하는 데이터 압축 명령을 수신할 수 있다. 610에서, 통신 및 라우팅 로직 섹션(140)은 데이터 압축 명령을 공간 압축 엔진(145)에 라우트할 수 있다. 615에서, 공간 압축 엔진(145)은 메타 데이터를 포함하는 데이터 압축 명령을 수신할 수 있다. 620에서, 공간 압축 엔진(145)은 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)을 압축할 수 있다. 도 6에 도시된 단계들은 지정된 순서대로 완성될 필요는 없고, 다른 순서 및/또는 개입 단계들로 수행될 수도 있음은 자명하다.
도 7은 본 발명의 실시 예에 따른, 호스트 명령(도 1 참조, 125, 150)에 근거하여 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 있는 기존 저장된 데이터를 압축하기 위한 다른 기술을 설명하기 위한 순서도이다. 그 기술은 참조번호705에서 시작한다. 스토리지 장치(130)의 통신 및 라우팅 로직 섹션(도 1 참조, 140)은 호스트(102)로부터 메타 데이터를 포함하는 명령을 수신할 수 있다. 710에서, 명령이 데이터 압축 명령인지가 판단된다. 만약 명령이 데이터 압축 명령이 아니면, 715 단계가 수행될 수 있다. 715에서, 통신 및 라우팅 로직 섹션(140)은 정상적인 방법으로, 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 명령을 직접 라우트할 수 있다.
만약 명령이 데이터 압축 명령이면, 720 단계가 수행될 수 있다. 720에서, 통신 및 라우팅 로직 섹션(140)은 데이터 압축 명령을 공간 압축 엔진(145)에 라우트할 수 있다. 725에서, 공간 압축 엔진(145)은 메타 데이터를 포함하는 데이터 압축 명령을 수신할 수 있다. 730에서, 공간 압축 엔진(145)은 스토리지 장치(130)의 하나 또는 그 이상의 데이터 스토리지 섹션들(134, 136)에 있는 기존 저장된 데이터를 압축할 수 있다. 도 7에 도시된 단계들은 지정된 순서대로 완성될 필요는 없고, 다른 순서 및/또는 개입 단계들로 수행될 수도 있음은 자명하다.
도 8은 도 1에 도시된 공간 압축 엔진을 갖는 스토리지 장치를 포함하는 컴퓨팅 시스템을 보여주는 블록도이다. 도 8을 참조하면, 컴퓨팅 시스템(800)은 클록(810), 랜덤 액세스 메모리(RAM, 815), 사용자 인터페이스(820), 베이스밴드 칩셋과 같은 모뎀(825), 솔리드 스테이트 드라이브(SSD, 840), 및/또는 프로세서(835)를 포함할 수 있다. 그리고 이들 모두는 시스템 버스(805)에 전기적으로 연결될 수 있다. 컴퓨팅 시스템(800)은 도 1에 도시된 스토리지 장치(130) 및 공간 압축 엔진(145)을 포함할 수 있다. 이들 또한, 시스템 버스(805)에 전기적으로 연결될 수 있다. 공간 압축 엔진(145)은 클록(810), 랜덤 액세스 메모리(RAM, 815), 사용자 인터페이스(820), 모뎀(825), 솔리드 스테이트 드라이브(SSD, 840), 및/또는 프로세서(835)를 포함하거나, 이들과 인터페이스할 수 있다.
아래의 논의는 본 발명의 특정 측면들이 구현되는 적절한 기계 또는 기계들의 간단하고, 일반적인 설명을 제공하기 위한 의도이다. 일반적으로, 기계 또는 기계들은 프로세서들, 메모리 예컨대, RAM(randon access memory), ROM(read-only memory), 또는 다른 상태 저장 매체와 같은 메모리, 스토리지 장치들, 비디오 인터페이스, 및 입력/출력 인터페이스 포트들과 부착되는 시스템 버스를 포함한다. 기계 또는 기계들은 키보드, 마우스, 등과 같은 통상적인 입력 장치들로부터의 입력뿐만 아니라 다른 기계로부터 직접 수신된 입력, 가상 현실 환경과의 상호작용, 생리학적 피드백, 또는 다른 입력 신호에 의해서도 적어도 부분적으로 제어될 수 있다. 본 명세서에서 사용된 용어 "기계"은 단일 기계, 가상 기계, 또는 통신 가능하게 연결된 기계들의 시스템, 가상 기계들, 또는 함께 동작하는 장치들을 폭넓게 포함할 의도이다. 예시적인 기계들은 개인용 컴퓨터들, 워크스테이션들, 서버들, 포터블 컴퓨터들, 핸드헬드 장치들, 전화기, 타블렛, 등과 같은 컴퓨팅 장치뿐만 아니라 개인 또는 공공 교통수단 예컨대, 자동차, 기차, 택시 등과 같은 운송 장치들 포함한다.
기계 또는 기계들은 프로그램 가능하거나 또는 프로그램 불가능한 로직 장치들 또는 어레이들, ASICs(Application Specific Integrated Circuits), 임베디드 컴퓨터들, 스마트 카드들, 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 또는 기계들은 하나 이상의 원격 기계들과 네트워크 인터페이스, 모뎀, 또는 다른 통신 연결 수단들을 통하는 것과 같은 하나 이상의 연결들을 사용할 수 있다. 기계들은 물리적 및/또는 인트라넷, 인터넷, LAN(local area network), WAN(wide area network) 등과 같은 논리 네트워크의 방식에 의해 상호 연결될 수 있다. 기술 분야에서 통상의 기술자는 네트워크 통신이 다양한 유선 및/또는 RF(radio frequency), 위성, 초단파, IEEE(Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®, 광학, 적외선, 케이블, 레이저 등을 포함하는 무선 단거리 또는 장거리 반송파 및 프로토콜들을 사용할 수 있음을 알 수 있을 것이다.
본 발명의 실시 예들은 기능들, 절차들, 데이터 구조들, 어플리케이션 프로그램들 등을 참조하거나 또는 그것들과 함께 설명될 수 있다. 연관된 데이터는 예를 들어, RAM, ROM, 등과 같은 휘발성 및/또는 불휘발성 메모리, 또는 다른 저장 매체들에 저장될 수 있고 그리고 하드-드라이브들, 플로피 디스크들, 광학 저장 매체, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생물학적 저장 매체 등을 포함하는 그것들의 연관된 저장 매체에 저장될 수 있다. 연관된 데이터는 물리적 및/또는 논리적 네트워크, 패킷의 형태, 직렬 데이터, 병렬 데이터, 전파 신호들 등을 포함하는 전송 환경을 통해 전달될 수 있고 그리고 압축되거나 또는 암호화된 포맷에서 사용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있고 그리고 기계 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 발명의 실시 예들은 하나 이상의 프로세서들에 의해 실행 가능한 명령어들을 포함하는 유형의, 비 일시적 기계 판독가능 매체를 포함할 수 있고, 명령어들은 본 명세서에서 설명된 본 발명의 컨셉에 따른 요소들을 수행하기 위한 명령어들을 포함한다.
도식화된 실시 예들을 참조하여 본 발명의 원리들이 설명되고 그리고 도식화 되었지만, 도식화된 실시 예들이 그와 같은 원리들을 벗어나지 않고 배열 및 구체적인 항목에서 수정될 수 있고, 어떠한 원하는 방식으로 조합될 수 있음을 알 수 있을 것이다. 그리고 비록 상술한 논의가 특정한 실시 예들에 초점을 맞추었지만, 다른 구성들도 고려될 수 있다. 특히, 본 명세서에서 "본 발명의 실시 예에 따른"이라는 표현 또는 그와 유사한 표현이 사용되었지만, 이러한 구는 일반적으로 가능한 참조 실시 예를 의미하는 것이지 본 발명을 특정한 실시 예의 구성들로 한정하고자 하는 것은 아니다. 본 명세서에서 사용된 바와 같이, 이러한 용어들은 다른 실시 예들로 조합될 수 있는 동일 또는 다른 실시 예들을 참조할 수 있다.
상술한 도식적인 실시 예들은 본 발명의 컨셉을 제한하는 것으로 이해되어서는 안된다. 비록 몇몇 실시 예들이 설명되었지만, 기술 분야에서 통상의 기술자는 본 발명의 이점들 및 새로운 시사를 벗어나지 않고 이러한 실시 예들이 가능한 다양한 수정들을 쉽게 알 수 있을 것이다. 따라서, 모든 그와 같은 수정들은 청구항에 의해 정의되는 본 발명의 컨셉의 범위 내에 포함될 것이다.
결과적으로, 본 명세서에서 설명된 실시 예들에 대한 폭넓고 다양한 순열들의 관점에서, 본 상세한 설명 및 첨부된 도면들은 단지 도식적인 것으로 의도된 것이고, 그리고 본 발명의 컨셉의 범위를 제한하기 위한 것은 아니다. 따라서, 본 발명의 컨셉에 따라 청구하는 것은 아래의 청구항들의 범위 및 사상과 그것의 균등물로 따라올 수 있는 그와 같은 모든 수정들이다.

Claims (20)

  1. 하나 또는 그 이상의 데이터 스토리지 섹션들;
    호스트로부터 메타 데이터를 포함하는 데이터 압축 명령을 수신하고 라우터 하는 통신 및 라우팅 로직 섹션; 및
    상기 통신 및 라우팅 로직 섹션 및 상기 하나 또는 그 이상의 데이터 스토리지 섹션들과 통신적으로(communicatively) 연결되는 공간 압축 엔진을 포함하되,
    상기 공간 압축 엔진은 통신 및 라우팅 로직 섹션으로부터 상기 메타 데이터를 포함하는 상기 데이터 압축 명령을 입력 받고, 상기 호스트로부터 입력된 상기 메타 데이터 및 상기 데이터 압축 명령에 근거하여, 상기 하나 또는 그 이상의 데이터 스토리지 섹션들에 있는 기존 저장된 데이터를 압축하는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 하나 또는 그 이상의 데이터 스토리지 섹션들은 하나 또는 그 이상의 불휘발성 메모리 섹션들과 하나 또는 그 이상의 휘발성 메모리 섹션들을 포함하는 스토리지 장치.
  3. 제 1 항에 있어서,
    상기 메타 데이터는 객체 포인터, 하나 또는 그 이상의 소스 데이터 어드레스들, 그리고 하나 또는 그 이상의 신규 데이터 어드레스들을 포함하고;
    상기 객체 포인터는 상기 기존 저장된 데이터를 포함하는 객체를 가리키고;
    상기 공간 압축 엔진은, 상기 하나 또는 그 이상의 소스 데이터 어드레스들에 대응하는 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 하나 또는 그 이상의 신규 데이터 어드레스들에 대응하는 상기 객체 내의 신규 위치로 이동하게 하는 스토리지 장치.
  4. 제 1 항에 있어서,
    상기 객체는 파일이고;
    상기 하나 또는 그 이상의 소스 데이터 어드레스들은 상기 파일 내의 제 1 범위 논리 블록 어드레스들 및 상기 파일 내의 제 2 범위 논리 블록 어드레스들에 대응하고;
    상기 하나 또는 그 이상의 신규 데이터 어드레스들은 상기 파일 내의 제 3 범위 논리 블록 어드레스들에 대응하는 스토리지 장치.
  5. 제 1 항에 있어서,
    상기 메타 데이터는 객체 포인터를 포함하고;
    상기 객체 포인터는 상기 기존 저장된 데이터를 포함하는 객체를 가리키고;
    상기 공간 압축 엔진은, 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 객체 내의 신규 위치로 이동하게 하는 스토리지 장치.
  6. 제 5 항에 있어서,
    상기 객체는 하나 또는 그 이상의 페이지들을 포함하는 데이터베이스 테이블이고, 상기 하나 또는 그 이상의 페이지들 각각은 하나 또는 그 이상의 유효 기록들(valid records) 및 하나 또는 그 이상의 미사용 또는 무효 엔트리들(unused or invalid entries)을 포함하고;
    상기 공간 압축 엔진은, 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 유효 기록들이 상기 하나 또는 그 이상의 페이들 중으로부터 상기 대응하는 페이지들 각각 내의 논리적이고 연속적인 재배열로 재배열되게 하고;
    상기 공간 압축 엔진은, 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 미사용 또는 무효 엔트리들이 상기 하나 또는 그 이상의 페이지들 중으로부터 상기 대응하는 페이지들 각각 내의 논리적이고 연속적인 재배열로 재배열되게 하는 스토리지 장치.
  7. 제 6 항에 있어서,
    상기 공간 압축 엔진은, 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 미사용 또는 무효 엔트리들이 상기 데이터베이스 테이블로부터 트림되도록 하는 스토리지 장치.
  8. 제 1 항에 있어서,
    상기 메타 데이터는 제 1 및 제 2 객체 포인터를 포함하고;
    상기 제 1 객체 포인터는 상기 기존 저장된 데이터를 포함하는 제 1 객체를 가리키고;
    상기 제 2 객체 포인터는 제 2 객체를 가리키고;
    상기 공간 압축 엔진은, 상기 제 1 객체 내의 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 제 2 개체로 이동되게 하는 스토리지 장치.
  9. 제 8 항에 있어서,
    상기 제 1 객체는 제 1 AOF 파일에 대응하고;
    상기 제 1 AOF 파일에 있는 상기 기존 저장된 데이터는 하나 또는 그 이상의 시간 스탬프 기록들(times tamped records)을 포함하고;
    상기 제 2 객체는 제 2 AOF 파일에 대응하고;
    상기 공간 압축 엔진은, 상기 제 1 AOF 파일의 상기 하나 또는 그 이상의 시간 스템프 기록들의 서브세트가 싱글 시간 스탬프 기록으로 집중(condense)되고 상기 제 2 AOF 파일에 저장되는 스토리지 장치.
  10. 제 9 항에 있어서,
    상기 제 1 AOF 파일의 상기 하나 또는 그 이상의 시간 스탬프 기록들의 상기 서브세트는 제 1 서브 세트로 언급되고;
    상기 제 2 AOF 파일의 상기 싱글 시간 스탬프 기록은 제 1 싱글 시간 스탬프 기록으로 언급되고;
    상기 공간 압축 엔진은, 상기 제 1 AOF 파일의 상기 하나 또는 그 이상의 시간 스탬프 기록들의 제 2 서브세트가 제 2 싱글 시간 스탬프 기록으로 집중되고 상기 제 2 AOF 파일에 저장되는 스토리지 장치.
  11. 제 1 항에 있어서,
    상기 메타 데이터는 제 1 내지 제 3 객체 포인터를 포함하고;
    상기 제 1 객체 포인터는 상기 기존 저장된 데이터의 제 1 부분을 포함하는 제 1 객체를 가리키고;
    상기 제 2 객체 포인터는 상기 기존 저장된 데이터의 제 2 부분을 포함하는 제 2 객체를 가리키고;
    상기 제 3 객체 포인터는 제 3 객체를 가리키고;
    상기 공간 압축 엔진은, 상기 제 1 객체에 있는 상기 기존 저장된 데이터의 상기 제 1 부분의 하나 또는 그 이상의 서브세트들이 상기 제 3 객체로 이동되도록 하고;
    상기 공간 압축 엔진은, 상기 제 2 객체에 있는 상기 기존 저장된 데이터의 상기 제 12부분의 하나 또는 그 이상의 서브세트들이 상기 제 3 객체로 이동되도록 하는 스토리지 장치.
  12. 제 11 항에 있어서,
    상기 제 1 객체는 제 1 SSTable(Sorted Strings Table)에 대응하고;
    상기 제 1 SSTable에 있는 상기 기존 저장된 데이터의 상기 제 1 부분은 하나 또는 그 이상의 키들, 하나 또는 그 이상의 값들, 그리고 하나 또는 그 이상의 스테일 값들(stale values)을 포함하고;
    상기 제 2 객체는 제 2 SSTable에 대응하고;
    상기 제 2 SSTable에 있는 상기 기존 저장된 데이터의 상기 제 2 부분은 하나 또는 그 이상의 값들과 그것에 대응하는 하나 또는 그 이상의 키들, 그리고 하나 또는 그 이상의 스테일 값들(stale values)과 그것에 대응하는 하나 또는 그 이상의 키들을 포함하고;
    상기 제 3 객체는 제 3 SSTable에 대응하고;
    상기 공간 압축 엔진은, 상기 제 1 SSTable의 상기 하나 또는 그 이상의 값들과 그것에 대응하는 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동되게 하고;
    상기 공간 압축 엔진은, 상기 제 2 SSTable의 상기 하나 또는 그 이상의 값들과 그것에 대응하는 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동되게 하는 스토리지 장치.
  13. 제 12 항에 있어서,
    상기 공간 압축 엔진은, 상기 제 1 SSTable의 상기 하나 또는 그 이상의 스테일 값들과 그것에 대응하는 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하지 못하게 하고;
    상기 공간 압축 엔진은, 상기 제 2 SSTable의 상기 하나 또는 그 이상의 스테일 값들과 그것에 대응하는 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하지 못하게 하는 스토리지 장치.
  14. 스토리지 장치의 저장 공간을 압축하는 방법에 있어서,
    상기 스토리지 장치의 통신 및 라우팅 로직 섹션에 의해, 호스트로부터 메타 데이터를 포함하는 데이터 압축 명령을 수신하는 단계;
    상기 통신 및 라우팅 로직 섹션에 의해, 상기 데이터 압축 명령을 공간 압축 엔진으로 라우팅하는 단계;
    상기 공간 압축 엔진에 의해, 상기 메타 데이터를 포함하는 상기 데이터 압축 명령을 수신하는 단계; 및
    상기 공간 압축 엔진에 의해, 상기 호스트로부터 수신된 상기 메타 데이터와 상기 데이터 압축 명령에 근거하여, 상기 스토리지 장치의 하나 또는 그 이상의 데이터 스토리지 섹션들에 있는 기존 저장된 데이터를 압축하는 단계를 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 메타 데이터는 상기 기존 저장된 데이터, 하나 또는 그 이상의 소스 데이터 어드레스들, 그리고 하나 또는 그 이상의 신규 데이터 어드레스들을 포함하는 객체를 가리키는 객체 포인터를 포함하고,
    상기 방법은, 상기 공간 압축 엔진에 의해, 상기 하나 또는 그 이상의 소스 데이터 어드레스들에 대응하는 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 하나 또는 그 이상의 신규 데이터 어드레스들에 대응하는 상기 객체 내의 신규 위치로 이동하게 되는 단계를 더 포함하는 방법.
  16. 제 14 항에 있어서,
    상기 메타 데이터는 상기 기존 저장된 데이터를 포함하는 객체를 가리키는 객체 포인터를 포함하고,
    상기 방법은, 상기 공간 압축 엔진에 의해, 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 객체 내의 신규 위치로 이동하게 되는 단계를 더 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 객체는 하나 또는 그 이상의 페이지들을 포함하는 데이터베이스 테이블이고, 상기 하나 또는 그 이상의 페이지들 각각은 하나 또는 그 이상의 유효 기록들과 하나 또는 그 이상의 미사용 또는 무효 엔트리들을 포함하고,
    상기 방법은,
    상기 공간 압축 엔진에 의해, 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 유효 기록들이 상기 하나 또는 그 이상의 페이지들 중으로부터 상기 대응하는 페이지들 각각 안에서 논리적이고 연속적인 재배열로 재배열 되게 하는 단계;
    상기 공간 압축 엔진에 의해, 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 미사용 또는 무효 엔트리들이 상기 하나 또는 그 이상의 페이지들 중으로부터 상기 대응하는 페이지들 각각 안에서 논리적이고 연속적인 재배열로 재배열 되게 하는 단계; 및
    상기 데이터베이스 테이블로부터 상기 하나 또는 그 이상의 페이지들 각각의 상기 하나 또는 그 이상의 미사용 또는 무효 엔트리들을 트리밍하는 단계를 더 포함하는 방법.
  18. 제 14 항에 있어서,
    상기 메타 데이터는 상기 기존 저장된 데이터를 포함하는 제 1 객체를 가리키는 제 1 객체 포인터를 포함하는, 그리고 제 2 객체를 가리키는 제 2 객체 포인터를 포함하되,
    상기 방법은, 상기 공간 압축 엔진에 의해, 상기 제 1 객체 내에 상기 기존 저장된 데이터의 하나 또는 그 이상의 서브세트들이 상기 제 2 객체로 이동되게 하는 단계를 더 포함하는 방법.
  19. 제 18 항에 있어서,
    상기 제 1 객체는 제 1 AOF 파일에 대응하고, 상기 제 1 AOF 파일에 있는 상기 기존 저장된 데이터는 하나 또는 그 이상의 시간 스탬프 기록들(time-stamped records)을 포함하고, 상기 제 2 객체는 제 2 AOF 파일에 대응하되,
    상기 방법은,
    상기 공간 압축 엔진에 의해, 상기 제 1 AOF 파일의 상기 하나 또는 그 이상의 시간 스탬프 기록들의 제 1 서브세트가 제 1 싱글 시간 스탬프 기록으로 집중되고 상기 제 2 AOF 파일에 저장되게 하는 단계; 및
    상기 공간 압축 엔진에 의해, 상기 제 1 AOF 파일의 상기 하나 또는 그 이상의 시간 스탬프 기록들의 제 2 서브세트가 제 2 싱글 시간 스탬프 기록으로 집중되고 상기 제 2 AOF 파일에 저장되게 하는 단계를 더 포함하는 방법.
  20. 제 14 항에 있어서,
    상기 메타 데이터는 제 1 내지 제 3 객체 포인터를 포함하고, 상기 제 1 객체 포인터는 상기 기존 저장된 데이터의 제 1 부분을 포함하는 제 1 SSTable을 가리키고, 상기 제 2 객체 포인터는 상기 기존 저장된 데이터의 제 2 부분을 포함하는 제 2 SSTable을 가리키고, 상기 제 3 객체 포인터는 제 3 SSTable을 가리키고,
    상기 방법은,
    상기 공간 압축 엔진에 의해, 하나 또는 그 이상의 값들 및 그것들에 대응하는 상기 제 1 SSTable의 상기 기존 저장된 데이터의 상기 제 1 부분의 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하게 하는 단계;
    상기 공간 압축 엔진에 의해, 하나 또는 그 이상의 값들 및 그것들에 대응하는 상기 제 2 SSTalbe의 상기 기존 저장된 데이터의 상기 제 2 부분의 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하게 하는 단계;
    상기 공간 압축 엔진에 의해, 하나 또는 그 이상의 스테일 값들 및 그것들에 대응하는 상기 제 1 SSTable의 상기 기존 저장된 데이터의 상기 제 1 부분의 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하게 하는 단계; 및
    상기 공간 압축 엔진에 의해, 하나 또는 그 이상의 스테일 값들 및 그것들에 대응하는 상기 제 2 SSTable의 상기 기존 저장된 데이터의 상기 제 2 부분의 하나 또는 그 이상의 키들이 상기 제 3 SSTable로 이동하게 하는 단계를 더 포함하는 방법.
KR1020160068228A 2015-06-01 2016-06-01 스토리지 장치 및 자율 공간 압축 방법 KR102334735B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562169551P 2015-06-01 2015-06-01
US62/169,551 2015-06-01
US14/863,438 2015-09-23
US14/863,438 US10216418B2 (en) 2015-06-01 2015-09-23 Storage apparatus and method for autonomous space compaction

Publications (2)

Publication Number Publication Date
KR20160141674A true KR20160141674A (ko) 2016-12-09
KR102334735B1 KR102334735B1 (ko) 2021-12-06

Family

ID=57398629

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160068228A KR102334735B1 (ko) 2015-06-01 2016-06-01 스토리지 장치 및 자율 공간 압축 방법

Country Status (4)

Country Link
US (1) US10216418B2 (ko)
KR (1) KR102334735B1 (ko)
CN (1) CN106202138B (ko)
TW (2) TWI668626B (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10938765B1 (en) * 2016-03-11 2021-03-02 Veritas Technologies Llc Systems and methods for preparing email databases for analysis
CN106844102B (zh) * 2017-01-16 2022-11-04 腾讯科技(深圳)有限公司 数据恢复方法和装置
US10606767B2 (en) * 2017-05-19 2020-03-31 Samsung Electronics Co., Ltd. Ethernet-attached SSD for automotive applications
TWI646424B (zh) * 2017-08-09 2019-01-01 宏碁股份有限公司 智慧型磁碟重組方法與智慧型磁碟重組系統
CN107479833B (zh) * 2017-08-21 2020-04-17 中国人民解放军国防科技大学 一种面向键值存储的远程非易失内存访问与管理方法
CN110716690B (zh) * 2018-07-12 2023-02-28 阿里巴巴集团控股有限公司 数据回收方法和系统
US11237744B2 (en) * 2018-12-28 2022-02-01 Verizon Media Inc. Method and system for configuring a write amplification factor of a storage engine based on a compaction value associated with a data file
US11079958B2 (en) 2019-04-12 2021-08-03 Intel Corporation Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
US11232070B2 (en) * 2019-06-24 2022-01-25 Western Digital Technologies, Inc. Metadata compaction in a distributed storage system
KR20210004701A (ko) 2019-07-05 2021-01-13 삼성전자주식회사 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법
CN113094292B (zh) 2020-01-09 2022-12-02 上海宝存信息科技有限公司 数据存储装置以及非挥发式存储器控制方法
WO2022267508A1 (zh) * 2021-06-25 2022-12-29 华为技术有限公司 元数据压缩方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120030408A1 (en) * 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for atomic storage operations
US20120110249A1 (en) * 2010-10-29 2012-05-03 Hyojin Jeong Memory system, data storage device, user device and data management method thereof
US20130013639A1 (en) * 2008-04-29 2013-01-10 Overland Storage, Inc. Peer-to-peer redundant file server system and methods
US20130191649A1 (en) * 2012-01-23 2013-07-25 International Business Machines Corporation Memory address translation-based data encryption/compression
US20130226931A1 (en) * 2012-02-28 2013-08-29 Cloudtree, Inc. Method and system for append-only storage and retrieval of information
US20140081146A1 (en) * 2012-09-13 2014-03-20 Alan R. Keim Bone mineral density measurement apparatus and method
US20140297601A1 (en) * 2013-03-28 2014-10-02 Avaya Inc. System and method for deletion compactor for large static data in nosql database

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8363837B2 (en) * 2005-02-28 2013-01-29 HGST Netherlands B.V. Data storage device with data transformation capability
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
KR101638061B1 (ko) * 2009-10-27 2016-07-08 삼성전자주식회사 플래시 메모리 시스템 및 그것의 플래시 조각 모음 방법
US8140740B2 (en) 2009-10-29 2012-03-20 Hewlett-Packard Development Company, L.P. Data defragmentation of solid-state memory
US9558247B2 (en) 2010-08-31 2017-01-31 Samsung Electronics Co., Ltd. Storage device and stream filtering method thereof
US8850114B2 (en) 2010-09-07 2014-09-30 Daniel L Rosenband Storage array controller for flash-based storage devices
US8904137B1 (en) * 2011-05-12 2014-12-02 Symantec Corporation Deduplication system space recycling through inode manipulation
US8930614B2 (en) 2011-07-29 2015-01-06 Kabushiki Kaisha Toshiba Data storage apparatus and method for compaction processing
US9298707B1 (en) * 2011-09-30 2016-03-29 Veritas Us Ip Holdings Llc Efficient data storage and retrieval for backup systems
US10803970B2 (en) 2011-11-14 2020-10-13 Seagate Technology Llc Solid-state disk manufacturing self test
KR101824949B1 (ko) 2011-11-23 2018-02-05 삼성전자주식회사 플래시 메모리를 기반으로 하는 저장 장치 및 그것을 포함한 사용자 장치
CN103049388B (zh) * 2012-12-06 2015-12-23 深圳市江波龙电子有限公司 一种分页存储器件的压缩管理方法及装置
US9448738B2 (en) * 2013-03-15 2016-09-20 Western Digital Technologies, Inc. Compression and formatting of data for data storage systems
US8819335B1 (en) 2013-08-30 2014-08-26 NXGN Data, Inc. System and method for executing map-reduce tasks in a storage device

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130013639A1 (en) * 2008-04-29 2013-01-10 Overland Storage, Inc. Peer-to-peer redundant file server system and methods
US20120030408A1 (en) * 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for atomic storage operations
US20120110249A1 (en) * 2010-10-29 2012-05-03 Hyojin Jeong Memory system, data storage device, user device and data management method thereof
US20130191649A1 (en) * 2012-01-23 2013-07-25 International Business Machines Corporation Memory address translation-based data encryption/compression
US20130226931A1 (en) * 2012-02-28 2013-08-29 Cloudtree, Inc. Method and system for append-only storage and retrieval of information
US20140081146A1 (en) * 2012-09-13 2014-03-20 Alan R. Keim Bone mineral density measurement apparatus and method
US20140297601A1 (en) * 2013-03-28 2014-10-02 Avaya Inc. System and method for deletion compactor for large static data in nosql database

Also Published As

Publication number Publication date
US10216418B2 (en) 2019-02-26
TWI706315B (zh) 2020-10-01
CN106202138A (zh) 2016-12-07
TW201702860A (zh) 2017-01-16
CN106202138B (zh) 2022-04-01
KR102334735B1 (ko) 2021-12-06
TWI668626B (zh) 2019-08-11
TW201937361A (zh) 2019-09-16
US20160350007A1 (en) 2016-12-01

Similar Documents

Publication Publication Date Title
KR102334735B1 (ko) 스토리지 장치 및 자율 공간 압축 방법
US10489059B2 (en) Tier-optimized write scheme
US9043540B2 (en) Systems and methods for tracking block ownership
US9298726B1 (en) Techniques for using a bloom filter in a duplication operation
US11042328B2 (en) Storage apparatus and method for autonomous space compaction
US7908436B1 (en) Deduplication of data on disk devices using low-latency random read memory
US20160162207A1 (en) System and method for data deduplication utilizing extent id database
US20140156601A1 (en) Systems and methods for hierarchical reference counting via sibling trees
US10437521B2 (en) Consistent method of indexing file system information
KR20200122994A (ko) 키 값 첨부
US10248656B2 (en) Removal of reference information for storage blocks in a deduplication system
US9965383B2 (en) File system indirection technique for directly managing solid state devices
US9965487B2 (en) Conversion of forms of user data segment IDs in a deduplication system
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system
US10606499B2 (en) Computer system, storage apparatus, and method of managing data
CN104424219A (zh) 一种数据文件的管理方法及装置
WO2013038465A1 (en) Storage system and method of controlling storage system
US11675789B2 (en) Tracking utilization of data blocks in a storage system
CN104199926A (zh) 文件归档实现方法和装置以及文件访问方法和装置
WO2017172377A1 (en) File system support for file-level ghosting
WO2022267508A1 (zh) 元数据压缩方法及装置
US20220011948A1 (en) Key sorting between key-value solid state drives and hosts
US9965488B2 (en) Back referencing of deduplicated data
Lee et al. Boosting compaction in B-tree based key-value store by exploiting parallel reads in flash ssds
CN115729889A (zh) 数据访问方法、数据库系统、及存储装置

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant