KR20230023565A - 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치 - Google Patents

데이터 분할 및 압축을 위한 시스템, 방법, 및 장치 Download PDF

Info

Publication number
KR20230023565A
KR20230023565A KR1020220087186A KR20220087186A KR20230023565A KR 20230023565 A KR20230023565 A KR 20230023565A KR 1020220087186 A KR1020220087186 A KR 1020220087186A KR 20220087186 A KR20220087186 A KR 20220087186A KR 20230023565 A KR20230023565 A KR 20230023565A
Authority
KR
South Korea
Prior art keywords
data
delimeter
input data
storage
chunks
Prior art date
Application number
KR1020220087186A
Other languages
English (en)
Inventor
기양석
류성욱
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20230023565A publication Critical patent/KR20230023565A/ko

Links

Images

Classifications

    • 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/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3091Data deduplication
    • H03M7/3095Data deduplication using variable length segments
    • 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/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • 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/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • 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/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • 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
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6047Power optimization with respect to the encoder, decoder, storage or transmission

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Image Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

데이터 압축을 위한 방법은 입력 데이터를 스캔하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터를 사용하여 압축 데이터를 생성하기 위한 압축 동작을 수행하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터의 델리미터를 찾는 단계, 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 압축 데이터를 사용하여 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터는 기록을 포함할 수 있고, 상기 델리미터는 상기 기록의 경계를 나타내고, 그리고 상기 부분 데이터는 상기 기록을 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 부분 크기에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 부분 크기는 기본 부분 크기일 수 있다. 상기 부분 크기는 기본 부분 크기 및 상기 입력 데이터의 매치의 길이에 기반할 수 있다.

Description

데이터 분할 및 압축을 위한 시스템, 방법, 및 장치{SYSTEMS, METHODS, AND APPARATUS FOR DIVIDING AND COMPRESSING DATA}
본 개시는 계산적 스토리지 시스템에 관한 것으로, 좀 더 상세하게는 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치에 관한 것이다.
계산적 스토리지 장치는 장치에 저장된 데이터에 대해 동작할 수 있는 하나 이상의 프로세싱 리소스들을 포함할 수 있다. 예를 들어, 호스트는 장치에 저장된 데이터에 대해 수행할 동작을 나타내는 명령을 스토리지 장치로 전송함으로써 스토리지 장치로 프로세싱 작업을 오프로드할 수 있다. 스토리지 장치는 명령을 실행하기 위해 하나 이상의 프로세싱 리소스들을 사용할 수 있다. 스토리지 장치는 동작 결과를 호스트로 전송하거나 그리고/또는 장치에 결과를 저장할 수 있다.
배경기술 란에 개시된 상기 정보는 오직 발명 원리의 배경의 이해를 돕기 위한 것이며, 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시는 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치를 제공한다.
데이터 압축을 위한 방법은 입력 데이터를 수신하는 단계, 상기 입력 데이터의 델리미터를 찾는 단계, 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 입력 데이터의 일부를 사용하여 부분 데이터를 생성하는 단계, 및 상기 부분 데이터를 압축하는 단계를 포함할 수 있다. 상기 입력 데이터는 기록을 포함할 수 있고, 상기 델리미터는 상기 기록의 경계를 나타내고, 그리고 상기 부분 데이터는 상기 기록을 포함할 수 있다. 상기 델리미터의 상기 위치는 상기 입력 데이터의 상기 일부 상에 있을 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 일부의 부분집합에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터의 상기 일부는 상기 입력 데이터의 제 1 부분일 수 있고, 그리고 상기 델리미터의 상기 위치는 상기 입력 데이터의 제 2 부분 상에 있을 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 제 1 부분 및 상기 입력 데이터의 상기 제 2 부분에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터의 상기 일부의 크기는 기본 부분 크기에 기반할 수 있다. 상기 방법은 상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터의 크기를 변형하는 단계를 더 포함할 수 있다. 상기 부분 데이터의 크기를 변형하는 단계는 상기 부분 데이터의 크기를 확장하는 단계를 포함할 수 있다. 상기 입력 데이터를 수신하는 단계는 입력 데이터의 스트림을 수신하는 단계를 포함할 수 있다. 상기 입력 데이터의 델리미터를 찾는 단계는 상기 입력 데이터에 대해 제 1 스캔 동작을 수행하는 단계를 포함할 수 있고, 그리고 상기 부분 데이터를 압축하는 단계는 상기 부분 데이터에 대해 제 2 스캔 동작을 수행하는 단계를 포함할 수 있다.
데이터 압축을 위한 방법은 입력 데이터를 스캔하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터를 사용하여 압축 데이터를 생성하기 위한 압축 동작을 수행하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터의 델리미터를 찾는 단계, 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 압축 데이터를 사용하여 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터는 기록을 포함할 수 있고, 상기 델리미터는 상기 기록의 경계를 나타내고, 그리고 상기 부분 데이터는 상기 기록을 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 부분 크기에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 부분 크기는 기본 부분 크기일 수 있다. 상기 부분 크기는 기본 부분 크기 및 상기 입력 데이터의 매치의 길이에 기반할 수 있다. 상기 매치는 상기 델리미터를 포함할 수 있다. 상기 델리미터는 제 1 델리미터일 수 있고, 상기 방법은 제 1 델리미터를 유지하는 단계, 및 상기 입력 데이터의 제 2 델리미터를 찾는 단계를 포함할 수 있고, 상기 부분 데이터를 생성하는 단계는 상기 제 1 델리미터 및 상기 제 2 델리미터에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 방법은 상기 압축 데이터의 크기에 기반하여 지시를 설정하는 단계를 더 포함할 수 있다. 상기 지시는 종료 지시를 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 지시 및 상기 델리미터에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 스캔하는 단계는 상기 지시에 기반하여 상기 입력 데이터를 스캔하는 단계를 포함할 수 있다. 상기 스캔하는 단계는 상기 델리미터에 기반하여 상기 입력 데이터를 스캔하는 단계를 포함할 수 있다. 상기 압축 동작을 수행하는 단계는 상기 델리미터에 기반하여 상기 압축 동작을 수행하는 단계를 포함할 수 있다. 상기 입력 데이터는 입력 데이터의 스트림을 포함할 수 있다. 상기 압축 동작은 스트림 기반 압축 동작을 포함할 수 있다.
시스템은 호스트를 포함할 수 있고, 상기 호스트는 입력 데이터에 기반하여 스캔 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터를 사용하여 압축 데이터를 생성하기 위해 데이터 압축 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터의 델리미터를 찾고, 그리고 상기 델리미터에 기반하여, 상기 압축 데이터를 사용하여 부분 데이터를 생성하는 호스트 로직을 포함할 수 있다. 상기 호스트 로직은 기본 부분 크기 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여 상기 부분 데이터를 생성할 수 있다. 상기 델리미터는 제 1 델리미터일 수 있고, 상기 호스트 로직은 상기 입력 데이터의 제 2 델리미터의 위치에 기반하여 상기 부분 데이터를 생성할 수 있다. 상기 시스템은 상기 호스트로부터 상기 부분 데이터를 수신하는 장치를 더 포함할 수 있고, 상기 장치는 압축 해제된 부분 데이터를 생성하기 위해 상기 부분 데이터를 압축 해제하고, 그리고 상기 압축 해제된 부분 데이터에 대해 연산을 수행하는 장치 로직을 포함할 수 있다.
데이터 암호화를 위한 방법은 입력 데이터를 수신하는 단계, 상기 입력 데이터의 델리미터를 찾는 단계, 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 입력 데이터의 일부를 사용하여 부분 데이터를 생성하는 단계, 및 상기 부분 데이터를 암호화하는 단계를 포함할 수 있다. 상기 입력 데이터는 기록을 포함할 수 있고, 상기 델리미터는 상기 기록의 경계를 나타내고, 그리고 상기 부분 데이터는 상기 기록을 포함할 수 있다. 상기 델리미터의 상기 위치는 상기 입력 데이터의 상기 일부 상에 있을 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 일부의 부분집합에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터의 상기 일부는 상기 입력 데이터의 제 1 부분일 수 있고, 그리고 상기 델리미터의 상기 위치는 상기 입력 데이터의 제 2 부분 상에 있을 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 제 1 부분 및 상기 입력 데이터의 상기 제 2 부분에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터의 상기 일부의 크기는 기본 부분 크기에 기반할 수 있다. 상기 방법은 상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터의 크기를 변형하는 단계를 더 포함할 수 있다. 상기 부분 데이터의 크기를 변형하는 단계는 상기 부분 데이터의 크기를 확장하는 단계를 포함할 수 있다. 상기 입력 데이터를 수신하는 단계는 입력 데이터의 스트림을 수신하는 단계를 포함할 수 있다. 상기 입력 데이터의 델리미터를 찾는 단계는 상기 입력 데이터에 대해 제 1 스캔 동작을 수행하는 단계를 포함할 수 있고, 그리고 상기 부분 데이터를 압축하는 단계는 상기 부분 데이터에 대해 제 2 스캔 동작을 수행하는 단계를 포함할 수 있다.
데이터 암호화를 위한 방법은 입력 데이터를 스캔하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터를 사용하여 암호화 데이터를 생성하기 위한 암호화 동작을 수행하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터의 델리미터를 찾는 단계, 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 암호화 데이터를 사용하여 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터는 기록을 포함할 수 있고, 상기 델리미터는 상기 기록의 경계를 나타내고, 그리고 상기 부분 데이터는 상기 기록을 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 부분 크기에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 부분 크기는 기본 부분 크기일 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터의 크기를 확장하는 단계를 포함할 수 있다. 상기 암호화 동작은 블록 기반 암호화 동작을 포함할 수 있고, 상기 암호화 동작을 수행하는 단계는 상기 입력 데이터의 제 1 블록에 대해 상기 암호화 동작을 수행하여 암호화 데이터의 제 1 블록을 생성하는 단계를 포함할 수 있다. 상기 델리미터는 입력 데이터의 제 2 블록에 위치할 수 있고, 상기 방법은 상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터의 상기 크기를 확장하는 단계를 포함할 수 있다. 상기 방법은 입력 데이터의 상기 제 2 블록의 크기에 기반하여 상기 부분 데이터의 상기 크기를 확장하는 단계를 더 포함할 수 있다. 상기 크기를 확장하는 단계는 입력 데이터의 상기 제 2 블록의 상기 크기에 기반하여 상기 부분 데이터를 패딩하는 단계를 포함할 수 있다. 입력 데이터의 상기 제 2 블록의 상기 크기는 상기 암호화 동작에 대한 키 길이에 기반할 수 있다. 상기 암호화 동작을 수행하는 단계는 상기 입력 데이터의 상기 제 2 블록에 대해 상기 암호화 동작을 수행하여 암호화 데이터의 제 2 블록을 생성하는 단계를 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 암호화 데이터의 상기 제 1 블록 및 암호화 데이터의 상기 제 2 블록을 사용하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다.
시스템은 호스트를 포함할 수 있고, 상기 호스트는 입력 데이터에 기반하여 스캔 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터를 사용하여 암호화 데이터를 생성하기 위해 데이터 암호화 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터의 델리미터를 찾고, 그리고 상기 델리미터에 기반하여, 상기 암호화 데이터를 사용하여 부분 데이터를 생성하는 호스트 로직을 포함할 수 있다. 상기 호스트 로직은 기본 부분 크기 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여 상기 부분 데이터를 생성할 수 있다. 상기 호스트 로직은 상기 암호화 동작의 키 길이에 기반하여 상기 부분 데이터를 생성할 수 있다. 상기 시스템은 상기 호스트로부터 상기 부분 데이터를 수신하는 장치를 더 포함할 수 있고, 상기 장치는 복호화된 부분 데이터를 생성하기 위해 상기 부분 데이터를 복호화하고, 그리고 상기 복호화된 부분 데이터에 대해 연산을 수행하는 장치 로직을 포함할 수 있다.
데이터 분할을 위한 방법은 입력 데이터를 스캔하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터를 사용하여 처리된 데이터를 생성하기 위한 동작을 수행하는 단계, 상기 스캔하는 단계에 기반하여, 상기 입력 데이터의 델리미터를 찾는 단계, 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 처리된 데이터를 사용하여 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 동작은 데이터 압축 동작을 포함할 수 있다. 상기 동작은 데이터 암호화 동작을 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 기본 부분 크기에 기반하여 상기 부분 데이터를 생성하는 단계를 포함할 수 있다. 상기 입력 데이터는 입력 데이터의 스트림을 포함할 수 있고, 상기 동작은 스트리밍 기반 동작을 포함할 수 있다. 상기 동작은 블록 기반 동작을 포함할 수 있다. 상기 동작을 수행하는 단계는 상기 입력 데이터의 블록을 사용하여 상기 동작을 수행하는 단계를 포함할 수 있다. 상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터를 변형하는 단계를 포함할 수 있다. 상기 부분 데이터를 변형하는 단계는 상기 부분 데이터를 확장하는 단계를 포함할 수 있다. 상기 부분 데이터를 확장하는 단계는 상기 동작의 블록 크기에 기반하여 상기 부분 데이터를 확장하는 단계를 포함할 수 있다. 상기 부분 데이터를 확장하는 단계는 상기 부분 데이터를 패딩하는 단계를 포함할 수 있다.
시스템은 호스트를 포함할 수 있고, 상기 호스트는 입력 데이터에 기반하여 스캔 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터를 사용하여 처리된 데이터를 생성하기 위해 프로세싱 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터의 델리미터를 찾고, 그리고 상기 델리미터에 기반하여, 상기 처리된 데이터를 사용하여 부분 데이터를 생성하는 호스트 로직을 포함할 수 있다. 상기 호스트 로직은 기본 부분 크기 및 상기 입력 데이터의 상기 델리미터의 위치에 기반하여 상기 부분 데이터를 생성할 수 있다. 상기 시스템은 상기 호스트로부터 상기 부분 데이터를 수신하는 장치를 더 포함할 수 있고, 상기 장치는 복구된 부분 데이터를 생성하기 위해 상기 부분 데이터를 복구하고, 그리고 상기 복구된 부분 데이터에 대해 연산을 수행하는 장치 로직을 포함할 수 있다.
본 개시의 실시 예에 따르면, 스토리지 시스템의 동작을 향상시킬 수 있다. 또한 본 개시의 실시 예에 따르면, 데이터 청킹 동작의 효율을 증가시킬 수 있다.
도면은 반드시 일정한 비율로 그려진 것은 아니며 유사한 구조 또는 기능의 요소들은 일반적으로 도면 전체에 걸쳐 설명의 목적으로 유사한 참조 번호 또는 그 부분으로 표시될 수 있다. 도면은 여기에 설명된 다양한 실시 예들의 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 여기에 개시된 교시의 모든 측면들을 설명하지 않으며, 청구범위의 범위를 제한하지 않는다. 도면이 모호해지는 것을 방지하기 위해 모든 구성 요소, 연결 등이 표시되지 않을 수 있으며, 모든 구성 요소들에 참조 번호가 표시되지 않을 수 있다. 그러나 구성 요소들의 구성 패턴은 도면에서 쉽게 알 수 있다. 첨부된 도면들은 본 명세서와 함께 본 개시의 실시 예들을 도시한 것으로, 상세한 설명과 함께 본 개시의 원리를 설명하기 위한 것이다.
도 1a는 본 개시의 실시 예들에 따른 서버 측 암호화를 사용하는 객체 스토리지 방식의 예를 나타낸다.
도 1b는 본 개시의 실시 예들에 따른 클라이언트 측 암호화를 사용하는 객체 스토리지 방식의 예를 나타낸다.
도 2a는 본 개시의 실시 예들에 따른 사용자의 장치로 객체를 반환할 수 있는 객체 스토리지 방식의 예를 나타낸다.
도 2b는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 예를 나타낸다.
도 3a는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 쓰기 동작의 예를 나타낸다.
도 3b는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 읽기 동작의 예를 나타낸다.
도 4는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 시스템의 예를 나타낸다.
도 5는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 시스템의 다른 실시 예를 나타낸다.
도 6a는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 서버 측 암호화를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다.
도 6b는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 클라이언트 측 암호화를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다.
도 7a는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다.
도 7b는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 읽기 동작과 데이터 선택의 예를 나타낸다.
도 8은 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 객체 스토리지 방식에 대한 시스템 구조의 예를 나타낸다.
도 9a는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 읽기 및/또는 쓰기 동작들의 예를 나타낸다.
도 9b는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 데이터 선택 동작을 이용하는 스토리지 방식에 대한 읽기 동작의 예를 나타낸다.
도 10은 본 개시의 실시 예들에 따른 3개의 계산적 스토리지 장치들의 세 개의 데이터 청크들 상에 표 1의 데이터가 분포된 예를 나타낸다.
도 11은 본 개시의 실시 예들에 따른 서로 다른 스토리지 장치들의 데이터 청크들 사이에 분할된 기록들을 재구축할 수 있는 서버를 포함하는 스토리지 시스템의 예를 나타낸다.
도 12는 본 개시의 실시 예들에 따른 데이터를 청크들로 분할하고 압축하기 위한 내용 인식 방법의 예를 나타낸다.
도 13은 본 개시의 실시 예들에 따른 데이터 압축을 위한 방법의 예를 나타낸다.
도 14는 도 13에 나타난 방법에 의해 수행될 수 있는 동작들의 예를 나타낸다.
도 15는 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방식의 예를 나타낸다.
도 16은 본 개시의 실시 예들에 따른 도 15에 나타난 방식을 이용하여 수행될 수 있는 통합된 청킹 및 압축 방법의 예를 나타낸다.
도 17은 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방식의 다른 예를 나타낸다.
도 18은 개시의 실시 예들에 따른 도 17에 나타난 방식을 이용하여 수행될 수 있는 통합된 청킹 및 압축 방법의 예를 나타낸다.
도 19는 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방법의 다른 예를 나타낸다.
도 20은 본 개시의 실시 예들에 따른 통합된 청킹 및 압축을 사용하는 시스템의 예를 나타낸다.
도 21은 본 개시의 실시 예들에 따른 데이터를 청크들로 분할하고 암호화하기 위한 내용 인식 방식의 예를 나타낸다.
도 22는 본 개시의 실시 예들에 따른 암호화 데이터 기술들에 대해 사용될 수 있는 블록 암호 방식의 예를 나타낸다.
도 23은 본 개시의 실시 예들에 따른 통합된 데이터 청킹 및 암호화 방식의 예를 나타낸다.
도 24는 본 개시의 실시 예들에 따른 통합된 데이터 청킹 및 암호화 방법의 예를 나타낸다.
도 25는 본 개시의 실시 예들에 따른 통합된 청킹 및 암호화를 이용하는 시스템의 예를 나타낸다.
도 26은 본 개시의 실시 예들에 따른 데이터 청크 변형을 이용하는 스토리지 방식에 대한 호스트 장치의 예를 나타낸다.
도 27은 본 개시의 실시 예들에 따른 데이터 청크 변형을 이용하는 스토리지 장치의 예를 나타낸다.
도 28은 본 개시의 실시 예들에 따른 데이터 압축 방법의 예를 나타낸다.
도 29는 본 개시의 실시 예들에 따른 데이터 암호화 방법의 예를 나타낸다.
도 30은 본 개시의 실시 예들에 따른 데이터를 하나 이상의 부분 데이터들로 분할하기 위한 방법의 예를 나타낸다.
객체 스토리지 시스템은 사용자의 장치를 활성화하여 저장된 객체로부터 검색할 데이터의 특정 부분집합을 요청할 수 있는 데이터 선택 특징을 구현할 수 있다. 이러한 요청을 처리하기 위해, 스토리지 서버는 하나 이상의 스토리지 장치들에 저장된 하나 이상의 부분 데이터로부터 객체를 재구축할 수 있다. 스토리지 서버는 또한 객체가 암호화된 경우 이를 복호화할 수 있고, 그리고/또는 객체가 압축된 경우 이를 압축 해제하여 원래의 형태로 복구할 수 있다. 스토리지 서버는 복구된 객체에 대해 필터링, 스캐닝 등과 같은 하나 이상의 선택 동작들을 수행하여 사용자의 장치에 의해 요청된 데이터의 특정 부분집합을 찾을 수 있다. 스토리지 서버는 요청된 데이터의 부분집합을 사용자의 장치로 반환할 수 있다.
일부 측면들에서, 계산적 스토리지 장치는 장치에 저장된 객체에 대해 필터링, 스캐닝 등의 하나 이상의 선택 동작들을 수행할 수 있다. 그러나, 객체의 부분이 장치에 저장된 경우, 그리고 객체가 데이터를 부분들로 분할하기 이전에 변형(예를 들어, 압축, 암호화 등)된 경우, 장치에 저장된 부분은 스토리지 장치가 원래 데이터로 복구(예를 들어, 압축 해제 및/또는 복호화)할 수 없는 무작위(장치에 대해) 정보만을 포함할 수 있다. 그러므로, 스토리지 장치는 장치에 저장된 부분 데이터에 대해 국부적으로 유의미한 동작을 수행하지 못할 수 있다.
본 개시는 계산적 스토리지와 관련된 다수의 원리들을 포함한다. 본 명세서에 개시된 원리들은 독립적인 활용성을 가질 수 있고, 개별적으로 구현될 수 있으며, 모든 실시 예가 모든 원리를 활용하는 것은 아니다. 나아가, 원리들은 또한 다양한 조합들 상에서 구현될 수 있고, 이들 중 일부는 시너지를 이루어 개별적인 원리들의 이점들을 증폭시킬 수 있다.
본 명세서에 개시된 일부 원리들은 하나 이상의 부분들에 대해 하나 이상의 변형들을 수행하기 이전에 데이터를 하나 이상의 부분들로 분할하는 것과 관련된다. 예를 들어, 본 개시의 실시 예들에 따른 계산적 스토리지 방식에서, 객체 또는 다른 원래 데이터는 데이터에 대한 압축 및/또는 암호화와 같은 변형들을 수행하기 이전에 부분 데이터들로 분할될 수 있다. 하나 이상의 부분 데이터는 개별적으로 변형될 수 있고(예를 들어, 개별적인 부분 데이터에 대해 압축 및/또는 암호화가 수행될 수 있고), 변형된 부분 데이터는 저장 및/또는 프로세싱을 위해 계산적 스토리지 장치로 전송될 수 있다. 예를 들어, 스토리지 장치는 변형된 부분 데이터에 대해 복호화 및/또는 압축 해제를 수행함으로써 변형된 부분 데이터로부터 복구된 부분 데이터를 생성할 수 있다. 스토리지 장치는 복구된 부분 데이터에 대해 국부적으로 동작(예를 들어, 선택 동작)을 수행할 수 있다.
구현의 세부 사항들에 따라, 계산적 스토리지 장치에서 국부적으로 선택 동작을 수행하는 것은 하나 이상의 스토리지 장치들에서 서버로 전송될 수 있는 데이터의 양을 감소시킬 수 있다. 나아가, 구현의 세부 사항들에 따라, 계산적 스토리지 장치는 서버보다 효율적으로 선택 동작과 같은 동작을 수행할 수 있다.
본 개시에 따른 일부 실시 예들에서, 스토리지 장치, 스토리지 서버 등은 어떻게 원래 데이터를 부분들로 분할하는지, 및/또는 하나 이상의 계산적 스토리지 장치들에 의한 저장 및/또는 프로세싱을 용이하게 하기 위해 부분들을 어떻게 변형시킬지에 대한 하나 이상의 지시들을 제공할 수 있다. 예를 들어, 일부 실시 예들에서, 지시는 스토리지 장치에 의해 지원될 수 있는 하나 이상의 부분 크기들, 압축 알고리즘들, 암호화 알고리즘들 등을 포함할 수 있다. 일부 실시 예들에서, 하나 이상의 지시들은 필수적, 선택적(예를 들어, 권장되는), 또는 이들의 조합일 수 있다. 예를 들어, 특정 스토리지 장치에 대한 저장을 위한 최적의 부분 크기에 대한 지시는 권장될 수 있는 반면, 스토리지 장치가 장치에서의 국부적 프로세싱을 위해 부분 데이터를 압축 해제하기 위해, 지원되는 압축 알고리즘에 대한 지시는 필수적일 수 있다.
데이터 분할, 데이터 변형(예를 들어, 데이터 압축 및/또는 암호화), 데이터 삭제 코딩, 데이터 저장, 데이터 프로세싱, 데이터 선택 등을 포함하는 본 명세서에 개시된 임의의 동작들은 본 개시의 실시 예들에 따라 제한되지 않는 구성들을 갖는 다양한 장치들 사이에 분배(예를 들어, 맵핑)될 수 있다. 예를 들어, 일부 실시 예들에서, 클라이언트는 원래 데이터(예를 들어, 객체)를 하나 이상의 부분들로 분할할 수 있고, 부분 데이터를 압축할 수 있고, 압축된 부분 데이터를 서버로 전송할 수 있다. 서버는 압축된 부분 데이터를 암호화할 수 있고, 하나 이상의 스토리지 장치들 상에 압축되고 암호화된 부분 데이터를 저장할 수 있다. 또 다른 예로서, 일부 실시 예들에서, 클라이언트는 원래 데이터(예를 들어, 객체)를 하나 이상의 부분들로 분할할 수 있고, 부분 데이터를 압축 및 암호화할 수 있고, 하나 이상의 스토리지 장치들 상에 저장하기 위해 압축되고 암호화된 부분 데이터를 서버로 전송할 수 있다. 또 다른 예로서, 클라이언트는 원래 데이터(예를 들어, 객체)를 서버로 전송할 수 있고, 서버는 데이터를 하나 이상의 부분들로 분할할 수 있고, 부분 데이터에 대해 압축, 암호화, 및/또는 삭제 코딩을 수행할 수 있고, 하나 이상의 스토리지 장치들 상에 변형된 부분 데이터를 개별적으로 저장할 수 있다.
본 개시의 일부 추가적인 원리들은 데이터를 부분들로 분할하기 위한 내용 인식(contents-aware) 기술들과 관련된다. 예를 들어, 일부 실시 예들에서, 부분 크기는 데이터가 분할되는 도중 기록의 경계(예를 들어, 델리미터에 의해 표시되는)를 찾기 위해 부분의 내용들을 분석함으로써 동적으로 결정될 수 있다. 부분 크기는 부분 내의 하나 이상의 완전한 기록들과 정렬되도록 결정될 수 있다. 예를 들어, 기본 부분 크기를 갖는 부분 데이터가 부분적인 기록을 포함하는 경우, 부분 크기는 부분이 부분 내부의 기록의 델리미터와 함께 종료되도록(예를 들어, 부분이 오직 완전한 기록들만 포함할 수 있도록) 변형될(예를 들어, 확장될 또는 감소될) 수 있다. 이에 따른(결과적인) 자체 포함된(self-contained; 완전한 기록들을 포함하는) 부분은 유닛으로서 압축 및/또는 암호화될 수 있다.
본 개시의 실시 예들에 따른 일부 추가적인 내용 인식 데이터 분할 기술들은 분할될 데이터를 스캔할 수 있는 다른 동작과 데이터 분할 동작을 통합할 수 있다. 예를 들어, 일부 실시 예들에서, 데이터 분할 동작은 입력 데이터의 스트림이 압축 목적으로 스캔되고 있는 동안 하나 이상의 기록들의 하나 이상의 경계들을 나타내는 하나 이상의 델리미터들을 위해 스캔될 수 있도록, 데이터 분할 동작은 데이터 압축 동작과 결합될 수 있다. 데이터 부분 크기는 부분이 기록의 끝에서 종료될 수 있도록 하나 이상의 델리미터들의 위치에 의해 결정될 수 있다. 일부 실시 예들에서, 데이터 압축 동작은 또한 부분의 끝에서 종료될 수 있다. 구현의 세부 사항들에 따라, 이는 압축의 목적으로 이미 수행되고 있었던 데이터 스캔을 활용할 수 있기 때문에 데이터 분할 동작의 효율성을 증가시킬 수 있다.
본 개시의 실시 예들에 따른 일부 추가적인 내용 인식 데이터 분할 기술들은 데이터 암호화 동작들과 결합될 수 있다. 입력 데이터의 스트림이 암호화 목적으로 읽히고 있는 동안, 이는 하나 이상의 기록들의 하나 이상의 경계들을 나타내는 하나 이상의 델리미터들을 위해 스캔될 수 있다. 데이터 부분 크기는 부분이 기록의 끝에서 종료될 수 있도록 하나 이상의 델리미터들의 위치에 의해 결정될 수 있다. 일부 실시 예들에서, 데이터 암호화 동작 또한 부분의 끝에서 종료될 수 있다. 암호화 동작이 블록 암호(block-cipher) 알고리즘으로 구현되는 경우, 부분 크기는 부분의 끝이 블록의 끝에 정렬될 수 있도록(데이터 크기가 블록 크기의 짝수 배가 아닌 경우 패딩될 수 있는) 변형될(예를 들어, 확장될 또는 감소될) 수 있다.
일부 실시 예들에서, 부분 데이터는 또한 데이터의 청크로 지칭될 수도 있고, 데이터를 부분들 또는 청크들로 분할하는 것은 데이터 청킹으로 지칭될 수도 있다. 예를 들어 일부 실시 예들에서, 데이터의 부분 또는 청크는 하나 이상의 스토리지 장치들에 저장하기 위한 목적으로 데이터 분할에 의해 얻어질 수 있는 데이터의 임의의 유닛을 지칭할 수 있다. 일부 상황들에서, 원래 데이터의 양이 부분 또는 청크 크기(예를 들어, 기본 부분 또는 청크 크기) 이하인 경우, 분할 또는 청킹 동작에 의해 생성되는 원래 데이터의 유닛은, 그것이 원래 데이터의 양과 동일한 크기를 갖더라도, 여전히 데이터의 부분 또는 청크로 지칭될 수 있다.
설명의 목적으로, 일부 실시 예들은 데이터 선택 특징을 구현하거나 및/또는 하나 이상의 키-값(key-value; KV) 스토리지 장치들에 데이터를 저장할 수 있는 객체 스토리지 시스템의 맥락에서 설명될 수 있다. 그러나, 본 개시에서 설명된 원리들은 특정 데이터 포맷, 데이터 프로세싱 특징들, 스토리지 장치 인터페이스들 등에 한정되지 않는다. 예를 들어, 본 개시의 실시 예들에 따른 시스템, 방법, 및/또는 장치는 또한 파일 스토리지, 데이터베이스 스토리지, 블록 스토리지 등을 제공할 수 있는 스토리지 시스템들 상에 구현될 수 있고, 가속, 그래프 프로세싱, 그래픽 프로세싱, 머신 러닝 등과 같은 임의의 유형의 프로세싱 특징들을 구현할 수 있고, 그리고 키-값 스토리지 장치들, 블록 스토리지 장치들 등을 포함하는 임의의 유형의 스토리지 장치들 상에서 동작할 수 있다.
객체 스토리지 시스템은 사용자의 장치가 데이터를 객체들의 형태로 저장할 수 있도록 한다. 객체의 데이터는 저장되기 전에 다양한 방법으로 변형될 수 있다. 예를 들어, 데이터는 스토리지 매체에서 차지하는 공간의 양을 감소시키기 위해 그리고/또는 클라이언트에서 하나 이상의 스토리지 장치들로 데이터를 전송(예를 들어, 네트워크를 통해)하는 데 요구되는 시간, 대역폭, 전력 등을 감소시키기 위해 압축될 수 있다. 또 다른 예로서, 객체의 데이터는 데이터의 전송 및/또는 저장 도중 데이터로의 무단 접근을 방지하기 위해 암호화될 수 있다.
객체는 비교적 큰 양의 데이터를 포함할 수 있고, 그렇기 때문에, 신뢰성, 접근 가능성 등을 위해, 객체는 다수의 스토리지 장치들에 저장될 수 있는 청크들로 분할될 수 있다(데이터를 청크들로 분할하는 것은 데이터를 청킹하는 것으로 지칭될 수 있다). 예를 들어, 압축 및/또는 암호화 이후, 객체는 스토리지 시스템 상의 하나 이상의 블록 기반 스토리지 장치들에 의해 사용될 수 있는 블록 크기에 적합하도록 고정된 크기의 청크들로 분할될 수 있다. 일부 실시 예들에서, 데이터를 데이터 청크들로 분할하고, 스토리지 시스템이 손실 또는 손상된 데이터 청크를 복원할 수 있도록 하는 하나 이상의 패리티 청크들을 생성하기 위해 삭제 코딩 방식이 사용될 수 있다.
도 1a는 본 개시의 실시 예들에 따른 서버 측 암호화를 사용하는 객체 스토리지 방식의 예를 나타낸다. 도 1a의 좌측은 읽기 및/또는 쓰기 동작들 동안 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 도 1a의 우측은 쓰기 동작 동안 데이터에 대한 동작들을 나타낸다.
도 1a의 좌측에 나타난 시스템은 클라이언트(102), 하나 이상의 서버들(104)(집합적으로 서버라고 지칭), 및 하나 이상의 스토리지 장치들(108)(집합적으로 스토리지라고 지칭)을 포함할 수 있다. 도 1a의 우측에 나타난 동작들은 클라이언트(102)에 의해 수행되는 제 1 그룹(110A) 및 서버(104)에 의해 수행되는 제 2 그룹(112A)에 나타난다.
예를 들어, 쓰기 동작 동안, 클라이언트(102)는 객체일 수 있는 원래 데이터(114)를 갖고 시작할 수 있다. 클라이언트(102)는 원래 데이터(114)에 대해 하나 이상의 압축 동작들을 수행하여 압축 데이터(116)를 생성할 수 있다. 클라이언트(102)는 압축 데이터(116)를 암호화하여 암호화 데이터(118)를 생성할 수 있는 서버(104)로 압축 데이터(116)를 전송할 수 있다. 서버(104)는 압축 암호화 데이터(118)를 하나 이상의 데이터 청크들(120)로 분할할 수 있고, 하나 이상의 스토리지 장치들(108)로 하나 이상의 데이터 청크들(120)을 전송할 수 있다. 일부 실시 예들에서, 서버(104)는 하나 이상의 데이터 청크들(120)에 대해 삭제 코딩을 수행하여 하나 이상의 스토리지 장치들(108)에 또한 저장될 수 있는 하나 이상의 패리티 청크들(121)을 생성할 수 있다.
읽기 동작 동안, 도 1a에 나타난 동작들은 역순으로 수행될 수 있다. 예를 들어, 서버(104)는 하나 이상의 스토리지 장치들(108)로부터 하나 이상의 데이터 청크들(120)을 읽을 수 있다. 예를 들어, 스토리지 장치의 결함으로 인해 데이터 청크들 중 하나가 손실되거나 또는 손상된 경우, 서버(104)는 하나 이상의 패리티 청크들(121)을 이용하여 손실된 또는 손상된 데이터 청크를 복구할 수 있다. 서버(104)는 데이터 청크들(120)로부터 압축 암호화 데이터(118)를 재구축할 수 있다. 서버(104)는 압축 암호화 데이터(118)를 복호화할 수 있고, 압축 복호화 데이터(116)를 클라이언트(102)로 전송할 수 있다. 클라이언트(102)는 압축 복호화 데이터(116)를 압축 해제할 수 있고, 원래 데이터(114)(예를 들어, 객체일 수 있는)를 복구할 수 있다.
도 1b는 본 개시의 실시 예들에 따른 클라이언트 측 암호화를 사용하는 객체 스토리지 방식의 예를 나타낸다. 도 1b의 좌측은 읽기 및/또는 쓰기 동작들 동안 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 도 1b의 우측은 쓰기 동작 동안 데이터에 대한 동작들을 나타낸다.
도 1b의 좌측에 나타난 시스템 및 도 1b의 우측에 나타난 동작들은 도 1a에 나타난 것들과 유사할 수 있는 일부 구성 요소들 및/또는 동작들을 포함할 수 있고, 동일한 또는 유사한 참조 번호들로 나타내어질 수 있다. 그러나, 도 1b에 나타난 실시 예에서, 클라이언트(102)는 클라이언트(102)에 의해 수행되는 동작들의 제 1 그룹(110B)에 의해 나타난 바와 같이 압축 데이터(116)를 암호화하여 압축 암호화 데이터(118)를 생성할 수 있다. 클라이언트(102)는 압축 암호화 데이터(118)를 서버(104)로 전송할 수 있고, 서버(104)는 서버(104)에 의해 수행되는 동작들의 제 2 그룹(112B)에 의해 나타난 바와 같이 압축 암호화 데이터(118)를 하나 이상의 데이터 청크들(120)로 분할할 수 있다. 서버(104)는 하나 이상의 스토리지 장치들(108)로 하나 이상의 데이터 청크들(120)을 전송할 수 있다. 일부 실시 예들에서, 서버(104)는 하나 이상의 데이터 청크들(120)에 대해 삭제 코딩을 수행하여, 하나 이상의 스토리지 장치들(108)에 또한 저장될 수 있는 하나 이상의 패리티 청크들(121)을 생성할 수 있다.
읽기 동작 동안, 도 1b에 나타난 동작들은 역순으로 수행될 수 있다. 예를 들어, 서버(104)는 데이터 청크들(120)로부터 압축 암호화 데이터(118)를 재구축할 수 있고(필요하다면 하나 이상의 패리티 청크들(121)을 사용하여 손실되거나 손상된 데이터 청크를 복구), 압축 암호화 데이터(118)를 클라이언트(102)로 전송할 수 있다. 클라이언트(102)는 압축 암호화 데이터(118)를 복호화하여 압축 복호화 데이터(116)를 생성할 수 있다. 클라이언트(102)는 압축 복호화 데이터(116)를 압축 해제하여 원래 데이터(114)(예를 들어, 객체일 수 있는)로 복구할 수 있다.
도 1a 및 도 1b에 나타난 실시 예들은 오직 예시적인 실시 예들이고, 구성 요소들 및/또는 동작들의 수, 순서, 및/또는 배열은 변화할 수 있다. 예를 들어, 일부 구현들에서, 원래 데이터(114)는 압축되지 않고 및/또는 암호화되지 않고 저장될 수 있다. 일부 실시 예들에서, 하나 이상의 서버들(104)은 객체 스토리지 서버로서 구성될 수 있는 제 1 서버 및 하나 이상의 스토리지 장치들(108)을 관리하기 위한 스토리지 서버(스토리지 노드로서 지칭될 수도 있는)로서 구성될 수 있는 제 2 서버를 이용하여 구현될 수 있다. 그러므로, 제 1 및 제 2 서버들은 객체 스토리지 서비스를 구현할 수 있다. 원래 데이터(114)의 일부 또는 전부가 암호화된 경우, 암호화 키들은 스토리지 서비스 및/또는 서비스의 사용자에 의해 생성될 수 있다. 일부 실시 예들에서, 쓰기 동작의 마지막 또는 끝나갈 때 청킹 동작을 수행하는 것은 서버(104)가 하나 이상의 스토리지 장치들(108)의 하나 이상의 블록 크기들에 대응할 수 있는 크기들을 갖는 청크들로 데이터를 분할할 수 있도록 한다.
일부 상황들에서, 사용자의 장치와 관련된 사용자는 오직 객체에 저장된 데이터의 부분집합만을 검색할 필요가 있을 수 있다. 일부 객체 스토리지 시스템은 사용자가 전체 객체를 검색하고 데이터의 부분집합을 찾기 위해 객체를 처리할 것을 요구할 수 있다. 이는 상대적으로 많은 양의 불필요한 데이터가 사용자의 장치로 전송되도록 야기할 수 있고, 시간, 대역폭, 전력 등과 같은 불필요한 리소스들을 소비할 수 있다.
불필요한 데이터의 전송을 감소 및/또는 방지하기 위해, 일부 객체 스토리지 시스템은 사용자가 저장된 객체로부터 검색할 데이터의 특정 부분집합을 요청하도록 할 수 있다. 전체 객체를 사용자의 장치로 전송하기보다, 객체 스토리지 시스템은 스캐닝, 필터링, 및/또는 다른 데이터 선택 동작을 객체에 대해 수행하여 데이터의 특정 부분집합을 찾을 수 있다. 객체 스토리지 시스템은 사용자의 장치로 데이터의 특정 부분집합을 반환할 수 있다.
도 2a는 본 개시의 실시 예들에 따른 사용자의 장치로 객체를 반환할 수 있는 객체 스토리지 방식의 예를 나타낸다. 도 2b는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 예를 나타낸다.
도 2a를 참조하면, 객체 스토리지 서비스(201)는 데이터 버킷 또는 컨테이너(205)의 사용자를 위해 객체들(203A, 203B, 203C)을 저장할 수 있다. 사용자가 객체들 중 하나(203A)로부터 데이터의 부분집합(예를 들어, 하나 이상의 기록들)을 검색할 필요가 있는 경우, 객체 스토리지 서비스(201)는 사용자가 네트워크를 통해 클라이언트 계산 동작(207)으로 전송될 수 있는 전체 객체(203A)를 요청할 것을 요구할 수 있다. 클라이언트 계산 동작(207)은 데이터의 부분집합을 찾기 위해 객체(203A)에 대해 스캐닝, 필터링 등과 같은 데이터 선택 동작(209)을 수행할 수 있다. 클라이언트 계산 동작(207)은 추후 동작(211)을 위해 데이터의 부분집합을 사용할 수 있다.
도 2b를 참조하면, 데이터 선택 특징을 갖는 객체 스토리지 서비스(213)는 사용자가 저장된 객체(203A)로부터 데이터의 부분집합을 요청할 것을 요구하도록 할 수 있다. 예를 들어, 객체 스토리지 서비스(213)는 사용자가 쿼리(예를 들어, SQL과 같은 데이터베이스 언어를 사용하는 표현)를 전송함으로써 CSV(Comma Separated Variables), JSON(JavaScript Object Notation), Parquet 등과 같은 포맷으로 저장될 수 있는 객체(203A)에 대해 동작할 수 있는 요청을 제출하도록 할 수 있다. 예를 들어 일부 실시 예들에서, 쿼리는 API(application programming interface), SDK(software development kit) 등을 사용하여 객체 스토리지 서비스(213)로 전송될 수 있다.
전체 객체(203A)를 전송하기보다, 객체 스토리지 서비스(213)는 객체(203A)에 대해 스캐닝, 필터링 등과 같은 데이터 선택 동작(209)을 수행하여 요청 상의 사용자에 의해 특정된 데이터의 부분집합을 찾을 수 있다. 객체 스토리지 서비스(213)는 추후 동작(211)을 위해 클라이언트 계산 동작(217)으로 데이터의 부분집합(213a)을 전송할 수 있다. 구현의 세부 사항들에 따라, 객체 스토리지 서비스(213)는 객체(203A)가 저장되었을 때 수행되었을 수 있는 압축 동작, 암호화 동작 등을 되돌리기 위해 압축 해제, 복호화 등과 같은 하나 이상의 복구 동작들(219)을 객체(203A)에 대해 수행할 수 있다.
도 3a는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 쓰기 동작의 예를 나타낸다. 도 3b는 본 개시의 실시 예들에 따른 데이터 선택 특징을 갖는 객체 스토리지 방식의 읽기 동작의 예를 나타낸다. 예를 들어, 도 3a 및 도 3b에 나타난 실시 예들은 도 2b에 나타난 객체 스토리지 방식을 구현하기 위해 사용될 수 있다.
도 3a의 좌측은 읽기 및/또는 쓰기 동작들 동안 객체 스토리지 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 도 3a의 우측은 쓰기 동작 도중 데이터에 대한 동작들을 나타낸다.
도 3a의 좌측에 나타난 시스템은 클라이언트(302), 하나 이상의 서버들(304)(집합적으로 서버라고 지칭), 및 하나 이상의 스토리지 장치들(308)(집합적으로 스토리지라고 지칭)을 포함할 수 있다. 도 3a의 우측에 나타난 동작들은 클라이언트(302)에 의해 수행되는 제 1 그룹(310A) 및 서버(304)에 의해 수행되는 제 2 그룹(312A)에 나타나 있다. 도 3a에 나타난 구성 요소들 간의 데이터 흐름 및/또는 데이터에 대한 동작들은 도 1a에 나타난 서버 측 암호화를 포함하는 실시 예 또는 도 1b에 나타난 클라이언트 측 암호화를 포함하는 실시 예와 유사할 수 있고, 동일한 자리수로 끝나는 참조 번호들을 갖는 구성 요소들은 유사할 수 있다. 그러므로, 도 3a에서, 압축 암호화 데이터(318)는 클라이언트 측 암호화를 이용하는 구현에서는 그룹(310A)의 일부일 수 있고, 또는 서버 측 암호화를 이용하는 구현에서는 그룹(310B)의 일부일 수 있다.
도 3b를 참조하면, 사용자는 하나 이상의 스토리지 장치들(308)에 저장된 객체 또는 다른 원래 데이터로부터 데이터의 부분집합을 요청할 수 있다. 이러한 요청을 처리하기 위해, 서버(304)는 하나 이상의 스토리지 장치들(308)로부터 하나 이상의 데이터 청크들(320)을 읽을 수 있다. 하나 이상의 데이터 청크들이 손실되거나 또는 손상된 경우, 서버(304)는 하나 이상의 패리티 청크들(321)을 이용하여 손실된 또는 손상된 데이터 청크를 복구할 수 있다. 서버(304)는 데이터 청크들(320)로부터 압축 암호화 데이터(318)를 재구축할 수 있다.
서버(304)는 압축 암호화 데이터(318)를 복호화하여 원래 데이터(314)(예를 들어, 객체)를 복구하기 위해 압축 해제될 수 있는 압축 복호화 데이터(316)를 생성할 수 있다. 서버(304)는 원래 데이터(314)에 대해 데이터 선택 동작(예를 들어, 스캐닝, 필터링 등)을 수행하여 요청된 데이터의 부분집합(323)를 얻을 수 있다. 서버(304)는 클라이언트(302)로 데이터의 부분집합(323)을 전송할 수 있다. 클라이언트의 압축 해제 동작이 생략될 수 있기 때문에, 회색으로 표시되었다. 도 3b의 우측에 나타난 동작들은 서버(304)에 의해 수행되는 그룹(312B)에 나타나 있다.
도 1a 및 도 1b에 나타난 실시 예들처럼, 도 3a 및 도 3b에 나타난 서버(304)는 객체 스토리지 서버로서 구성될 수 있는 제 1 서버 및 하나 이상의 스토리지 장치들(308)을 관리하기 위한 스토리지 서버로서 구성될 수 있는 제 2 서버를 이용하여 구현될 수 있다. 그러므로, 일부 실시 예들에서, 스토리지 서버는 하나 이상의 데이터 청크들(320)로부터 압축 암호화 데이터(318)를 재구축할 수 있고, 객체 스토리지 서버는 복호화, 압축 해제, 및/또는 데이터 선택 동작들을 수행할 수 있다. 나아가, 비록 도 3a 및 도 3b에 나타난 실시 예들은 서버 측 암호화를 구현할 수 있지만, 다른 실시 예들은 클라이언트 측 암호화를 구현할 수도 있다.
예를 들어 구현의 세부 사항들에 따라, 도 3a 및 도 3b에 나타난 실시 예들은 스토리지 시스템 및 클라이언트 사이에 전송되는 데이터의 양을 감소시킴으로써 네트워크 트래픽을 감소시킬 수 있다. 그러나, 도 3a 및 도 3b에 나타난 구조를 위한 데이터 프로세싱 흐름은, 스토리지 시스템이 구현의 세부 사항들에 따라 서버(304)에 의해 수행되는 동작들의 일부 또는 전부를 수행하는 데 매우 적합할 수 있는 계산적 스토리지 장치들을 이용하지 못하도록 할 수 있다. 예를 들어, 일부 실시 예들에서, 계산적 스토리지 장치는 서버에 존재할 수 있는 범용 프로세싱 리소스들보다 더 효율적으로 압축 해제, 복호화, 및/또는 데이터 선택 동작들과 같은 다른 동작들을 수행할 수 있는 프로세싱 리소스들을 포함할 수 있다. 그러나, 원래 데이터(314)가 청킹 이전에 변형(예를 들어, 압축, 암호화 등)될 수 있기 때문에, 데이터 청크가 저장된 개별 스토리지 장치(308)는 데이터의 청크를 복호화, 압축 해제하거나, 및/또는 장치에서 유의미한 동작이 국부적으로 수행될 수 있는 형태로 복구하지 못할 수도 있다.
도 4는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 시스템의 예를 나타낸다. 도 4에 나타난 시스템은 호스트(424) 및 연결(422)을 통해 통신할 수 있는 계산적 스토리지 장치(408)를 포함할 수 있다. 호스트(424)는 데이터 청킹 로직(426)(데이터 분할 로직으로 지칭될 수도 있음) 및 스토리지 장치(408)가 동작을 수행할 수 있는 형태로 데이터 청크를 복구할 수 있는 형태로 하나 이상의 데이터 청크들을 스토리지 장치(408)로 제공하도록 구성될 수 있는 데이터 변형 로직(427)을 포함할 수 있다. 예를 들어, 데이터 청킹 로직(426)은 데이터 변형 로직(427)에 의한 변형 이전에 객체 또는 원래 데이터를 하나 이상의 데이터 청크들로 분할할 수 있다. 데이터 청킹 로직(426)은 내용을 인식할 수도 있고, 인식하지 않을 수도 있다. 예를 들어, 데이터 청킹 로직(426)이 내용을 인식하지 않는 실시 예에서, 데이터 청킹 로직(426)은 데이터를 고정된 크기의 청크들로 분할할 수 있고, 하나 이상의 청크들은 하나 이상의 기록들의 조각들을 포함할 수 있다. 또 다른 예로서, 데이터 청킹 로직(426)이 내용을 인식하는 실시 예에서, 데이터 청킹 로직(426)은 청크가 기록 델리미터로 끝남으로써 완전한 기록과 함께 끝날 수 있도록 다양한 크기의 청크들로 데이터를 분할하기 위해 데이터의 기록 델리미터를 찾을 수 있다.
데이터 변형 로직(427)은 원래 데이터의 하나 이상의 변형된 청크들을 생성하기 위해 하나 이상의 청크들에 대해 개별적으로 압축, 암호화, 삭제 코딩 등의 하나 이상의 데이터 변형 동작들을 수행할 수 있다. 호스트(424)는 스토리지 및/또는 프로세싱을 위해 계산적 스토리지 장치(408) 및/또는 하나 이상의 추가적인 계산적 스토리지 장치들로 원래 데이터의 하나 이상의 변형된 청크들을 전송할 수 있다.
계산적 스토리지 장치(408)는 데이터 복구 로직(428), 하나 이상의 프로세싱 요소들(429), 및 스토리지 매체(430)를 포함할 수 있다. 데이터 복구 로직(428)은 데이터의 변형된 청크를 하나 이상의 프로세싱 요소들(429)이 동작을 수행할 수 있는 형태로 복구하도록 구성될 수 있다. 예를 들어, 데이터 복구 로직(428)은 데이터의 변형된 청크가 암호화된 경우 복호화할 수 있고, 압축된 경우 압축 해제할 수 있다. 하나 이상의 프로세싱 요소들(429)은 데이터 선택(예를 들어, 스캐닝, 필터링 등), 가속 계산, 그래프 프로세싱, 그래픽 프로세싱, 머신 러닝 등과 같은 임의의 유형의 동작을 수행하도록 구성될 수 있다. 스토리지 매체(430)는 호스트(424)에 의해 전송된 하나 이상의 데이터의 변형된 청크들을 포함하는 임의의 데이터를 저장하는 데 사용될 수 있다.
일부 실시 예들에서, 데이터 복구 로직(428) 및/또는 하나 이상의 프로세싱 요소들(429)은 스토리지 매체(430)로부터 하나 이상의 데이터 청크들을 읽고 복구하도록 구성될 수 있고, 스토리지 장치(408)에서 수신될 수 있는 쿼리(예를 들어, 표현)를 포함할 수 있는 요청에 응답하여, 데이터의 특정 부분집합을 반환하거나, 또는 복구된 데이터 청크에 대해 임의의 다른 동작을 수행할 수 있다.
일부 실시 예들에서, 복구된 데이터 청크는 청킹 이전의 원래 데이터와 완전히 동일할 수 있거나, 또는 동일하지 않을 수 있다. 예를 들어, 스토리지 장치(424)에 저장된 데이터 청크가 은행 계좌 거래, 잔액 등과 같은 재정적인 정보를 포함하고, 사용자가 계좌 잔액만을 요청하는 경우, 복구 로직(428) 및/또는 하나 이상의 프로세싱 요소들(429)은 데이터 청크를 원래 형태로 복구하여 정확한 계좌 잔액을 찾고, 이를 사용자의 장치로 전송해야 한다. 그러나, 스토리지 장치(424)에 저장된 데이터 청크가 사진 이미지를 포함하고, 사용자가 이미지 특징들의 리스트를 요청하는 경우, 복구 로직(428) 및/또는 하나 이상의 프로세싱 요소들(429)은 하나 이상의 프로세싱 요소들(429)이 사용자에 의해 요청된 특징들을 식별할 수 있을 정도로만 이미지를 압축 해제하기만 하면 된다.
호스트(424)는 스토리지 장치(408)가 복구할 수 있거나 및/또는 동작을 수행할 수 있는 형태로 하나 이상의 데이터 청크들을 스토리지 장치(408)로 제공할 수 있는 임의의 구성 요소 또는 구성 요소들의 결합으로서 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트(424)는 클라이언트, 객체 스토리지 서버, 및/또는 스토리지 노드를 포함할 수 있다. 데이터 청킹 로직(426) 및/또는 데이터 변형 로직(427)은 임의의 방법으로 호스트(424)의 임의의 구성 요소들 사이에 분배될 수 있다. 예를 들어, 일부 실시 예들에서, 데이터 청킹 로직(426)은 클라이언트에 구현될 수 있고, 데이터 변형 로직(427)은 객체 스토리지 서버 및/또는 스토리지 노드에 구현될 수 있다. 또 다른 예로서, 데이터 청킹 로직(426) 및 압축 로직을 포함하는 데이터 변형 로직(427)의 일부는 클라이언트에 구현될 수 있고, 암호화 및/또는 삭제 코딩 로직을 포함하는 데이터 변형 로직(427)의 일부는 서버에 구현될 수 있다. 그러므로, 클라이언트는 원래 데이터를 청크들로 분할할 수 있고, 데이터 청크들을 개별적으로 압축할 수 있고, 서버로 압축된 데이터 청크들을 전송할 수 있다. 서버는 압축된 데이터 청크들을 개별적으로 암호화할 수 있고, 하나 이상의 패리티 청크들을 생성하기 위해 데이터 청크들에 대해 삭제 코딩을 수행할 수 있고, 그리고 계산적 스토리지 장치(408)를 포함하는 하나 이상의 스토리지 장치들 상에 데이터 청크들 및/또는 패리티 청크들을 저장할 수 있다.
스토리지 장치(408) 및/또는 본 명세서에 개시된 임의의 다른 스토리지 장치들은, SATA(Serial ATA), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), M.2, U.2, U.3 등과 같은 임의의 커넥터 설정을 사용하여, 3.5인치, 2.5인치, 1.8인치, M.2, EDSFF(Enterprise and Data Center SSD Form Factor), NF1 등과 같은 임의의 폼 팩터로 구현될 수 있다.
스토리지 장치(408) 및/또는 본 명세서에 개시된 임의의 다른 스토리지 장치들은, 솔리드 스테이트 매체, 자성 매체, 광학 매체 등 또는 이들의 결합을 포함하는 임의의 스토리지 매체(430)를 이용하여 구현될 수 있다. 솔리드 스테이트 매체의 예들은 NAND 플래시 메모리, 로우-레이턴시 NAND 플래시 메모리와 같은 플래시 메모리, 크로스-그리드 불휘발성 메모리와 같은 PMEM(persistent memory), 대량 저항 변화가 있는 메모리, PCM(phase change memory) 등 또는 이들의 결합을 포함할 수 있다.
스토리지 장치(408) 및/또는 본 명세서에 개시된 임의의 다른 스토리지 장치들은 PCIe(Peripheral Component Interconnect Express), NVMe, NVMe-oF(NVMe-over-fabric), NVMe-KV(NVMe Key-Value), SATA, SCSI 등 또는 이들의 결합과 같은 임의의 유형의 스토리지 인터페이스 및/또는 프로토콜을 사용하여 통신할 수 있다. 일부 실시 예들에서, 스토리지 장치(408) 및/또는 본 명세서에 개시된 임의의 다른 스토리지 장치들은 CXL(Compute Express Link)과 같은 코히런트(예를 들어, 메모리 코히런트, 캐시 코히런트 등) 또는 메모리 시맨틱 인터페이스, 및/또는 CXL.mem, CXL.cache, 및/또는 CXL.IO와 같은 코히런트 프로토콜을 구현할 수 있다. 코히런트 및/또는 메모리 시맨틱 인터페이스들 및/또는 프로토콜들의 다른 예들은 Gen-Z, CAPI(Coherent Accelerator Processor Interface), CCIX(Cache Coherent Interconnect for Accelerators) 등을 포함할 수 있다.
스토리지 장치(408) 및/또는 본 명세서에 개시된 임의의 다른 스토리지 장치들뿐만 아니라 호스트(424)의 임의의 구성 요소들(예를 들어, 클라이언트, 객체 스토리지 서버, 스토리지 노드 등)은 서버 섀시, 서버 랙, 데이터룸, 데이터센터, 엣지 데이터센터, 모바일 엣지 데이터센서, 및/또는 이들의 결합들을 전부 또는 부분적으로 이용하여 구현될 수 있거나, 및/또는 관련되어 사용될 수 있다.
통신 연결(422) 및/또는 클라이언트들, 서버들, 스토리지 장치들 등과 같은 구성 요소들 사이의 임의의 연결들을 포함한 본 명세서에 개시된 임의의 다른 연결들은 PCIe, 이더넷, TCP/IP, RDMA(remote direct memory access), ROCE(RDMA over Converged Ethernet), FibreChannel, InfiniBand, iWARP 등 또는 이들의 결합을 포함하는 임의의 인터커넥트 및/또는 네트워크 인터페이스들 및/또는 프로토콜들을 이용하여 구현될 수 있다.
데이터 청킹 로직(426), 데이터 변형 로직(427), 데이터 복구 로직(428), 하나 이상의 프로세싱 요소들(429), 지시 로직(531) 등과 같은 로직을 포함한 본 명세서에 개시된 임의의 기능들은, 임의의 유형의 메모리에 저장된 명령들을 실행하는 결합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들, 및/또는 상태 머신들, 하나 이상의 CPLD(complex programmable logic device), FPGA(field programmable gate array), ASIC(application specific integrated circuit), x86 프로세서들과 같은 CSIC(complex instruction set computer) 프로세서들 및/또는 ARM 프로세서들과 같은 RISC(reduced instruction set computer)과 같은 CPU(central processing unit), GPU(graphics processing unit), NPU(neural processing unit), TPU(tensor processing unit) 등 또는 이들의 결합을 포함하는 하드웨어, 소프트웨어 또는 이들의 결합을 이용하여 구현될 수 있다. 일부 실시 예들에서, 데이터 복구 로직(428), 프로세싱 요소들(429) 등 중 하나 이상은 압축 및/또는 압축 해제, 암호화 및/또는 복호화, 마이크로서비스, 삭제 코딩, 비디오 인코딩 및/또는 디코딩, 데이터베이스 가속, 검색, 머신 러닝, 그래프 프로세싱 등과 같은 임의의 기능들을 수행하기 위한 고정된 및/또는 프로그래밍 가능한 기능을 포함할 수 있다. 일부 실시 예들에서, 하나 이상의 구성 요소들은 시스템-온-칩(SOC)으로서 구현될 수 있다.
일부 실시 예들에서, 데이터 복구 로직(428), 프로세싱 요소들(429) 등 중 하나 이상은 스토리지 장치 컨트롤러, FTL(flash translation layer) 등과 같은 스토리지 장치의 하나 이상의 다른 구성 요소들과 통합될 수 있다.
압축, 암호화 등(또는 그 반대 동작들)과 같이 본 명세서에 개시된 임의의 데이터 변형 동작들은 임의의 적절한 기술들을 이용하여 구현될 수 있다. 예를 들어, 데이터 압축 및/또는 압축 해제는 LZ77, gzip, Snappy 등을 이용하여 구현될 수 있다. 암호화 및/또는 복호화는 AES-256, RSA(Rivest-Shamir-Adleman) 등과 같은 AES(Advanced Encryption Standard)를 이용하여 구현될 수 있다.
도 5는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 시스템의 다른 실시 예를 나타낸다. 도 5에 나타난 시스템은 도 4에 나타난 실시 예에 관해 설명된 바와 유사한 구성 요소들 및/또는 구현 동작들을 포함할 수 있고, 동일한 자리수로 끝나는 참조 번호들은 유사할 수 있다. 그러나, 도 5에 나타난 실시 예에서, 계산적 스토리지 장치(508)는 호스트(524)의 데이터 청킹 로직(526) 및/또는 데이터 변형 로직(527)으로 하나 이상의 지시들(532)을 제공하도록 구성될 수 있는 지시 로직(531)을 더 포함할 수 있다.
하나 이상의 지시들(532)은 데이터 청킹 로직(526)이 원래 데이터를 어떻게 청크들로 분할할 지 결정하기 위해 사용될 수 있는 정보를 포함할 수 있다. 예를 들어, 하나 이상의 지시들(532)은 스토리지 활용, 프로세싱 효율(예를 들어, 청크 압축 해제, 복호화, 데이터 선택, 및/또는 다른 동작들), 대역폭 활용 등을 위한 최소 청크 크기, 최대 청크 크기, 최적 청크 크기 등과 같은 하나 이상의 스토리지 하이퍼-파라미터들을 포함할 수 있다.
하나 이상의 지시들(532)(예를 들어, 스토리지 하이퍼-파라미터들)은 데이터 변형 로직(527)이 데이터 청킹 로직(526)에 의해 제공되는 개별 데이터 청크들을 어떻게 변형할 지 결정하기 위해 사용될 수 있는 정보를 포함할 수 있다. 예를 들어, 하나 이상의 지시들(532)은 스토리지 장치(508)의 데이터 복구 로직(528)에 의해 지원되는 압축 알고리즘들, 암호화 알고리즘들 등의 유형들의 리스트를 포함할 수 있다.
일부 실시 예들에서, 하나 이상의 지시들은 필수적이거나, 선택적이거나(예를 들어, 제안으로서 제공되거나), 또는 이들의 결합일 수 있다. 예를 들어, 스토리지 장치(508) 상의 스토리지를 위한 최적 청크 크기를 나타내는 지시는 제안으로서 제공될 수 있는 반면, 데이터 복구 로직(528)에 의해 지원되는 하나 이상의 압축 알고리즘들, 암호화 알고리즘들 등을 나타내는 지시는, 스토리지 장치(508)의 하나 이상의 프로세싱 요소들(529)에 의한 로컬 프로세싱을 위해 스토리지 장치(508)가 데이터 청크를 압축 해제 및/또는 복호화할 수 있도록 하기 위해 필수적일 수 있다.
일부 실시 예들에서, 지시 로직(531)은 전부 계산적 스토리지 장치(508)에 위치할 수 있다. 그러나 다른 일부 실시 예들에서, 지시 로직(531)은 호스트(524)에 위치할 수 있거나, 호스트(524) 및 스토리지 장치(508) 또는 다수의 스토리지 장치들 사이에 분배되거나, 또는 아예 다른 장치(예를 들어, 시스템의 스토리지 장치들의 특성 리스트 또는 데이터베이스를 유지할 수 있는 별도의 서버, 관리 컨트롤러 등) 상에 위치할 수도 있다. 예를 들어, 일부 실시 예들에서, 하나 이상의 스토리지 노드들은 스토리지 노드에 설치된 각 스토리지 장치에 대한 지시들의 리스트 또는 데이터베이스를 유지할 수 있고 하나 이상의 클라이언트들, 객체 스토리지 서버들 등으로 지시들을 제공할 수 있는 지시 로직(531)을 포함할 수 있다. 또 다른 예로서, 하나 이상의 스토리지 노드들은 스토리지 노드에 설치된 각 스토리지 장치에 대한 지시들을 유지할 수 있는 지시 로직(531)의 일부를 포함할 수 있고, 객체 스토리지 서버는 하나 이상의 스토리지 노드들로부터 지시들을 취합하여 지시들을 하나 이상의 클라이언트들로 제공할 수 있는 지시 로직(531)의 일부를 포함할 수 있다.
예를 들어, 임의의 지시들(532)은 쿼리, 명령 등(예를 들어, NVMe 명령, API를 통한 쿼리, SDK 등)에 응답하여 지시 로직(531)에 의해 클라이언트, 객체 스토리지 서버, 스토리지 노드 등과 같은 임의의 장치로 제공될 수 있다. 일부 실시 예들에서, 하나 이상의 지시들(532)(예를 들어, 하나 이상의 스토리지 하이퍼-파라미터들)은 클라이언트 라이브러리를 통해 사용자의 장치(예를 들어, 클라이언트에 의해)로 제공될 수 있다.
도 6a는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 서버 측 암호화를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다. 예를 들어, 도 6a에 나타난 실시 예는 도 4 및 도 5에 나타난 스토리지 방식들 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 6a의 좌측은 스토리지 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 도 6a의 우측은 쓰기 동작 도중 데이터에 대한 동작들을 나타낸다.
도 6a의 좌측에 나타난 시스템은 클라이언트(602), 하나 이상의 서버들(604)(집합적으로 서버라고 지칭), 및 하나 이상의 스토리지 장치들(608)(집합적으로 스토리지라고 자칭)을 포함할 수 있다. 도 6a의 우측에 나타난 동작들은 클라이언트(602)에 의해 수행되는 제 1 그룹(610A) 및 서버(604)에 의해 수행되는 제 2 그룹(612A)에 나타나 있다.
쓰기 동작은 스토리지 장치(608) 및/또는 서버(604)가 청크 크기, 압축 알고리즘 등을 나타내는 하나 이상의 지시들(632)을 클라이언트(602)로 제공할 때 시작될 수 있다. 예를 들어, 클라이언트(602)는 하나 이상의 지시들(632)에 기반하여 원래 데이터(614)를 하나 이상의 청크들(633)로 분할할 수 있다.
다시 도 3a 및 도 3b를 참조하면, 예를 들어, 데이터 청크들(320)은 필수적으로 스토리지(308)가 하나 이상의 블록 기반 스토리지 장치들을 이용하여 구현되는 경우 요구될 수 있는 동일한 크기여야 할 수 있다. 그러나 도 6a에 나타난 실시 예에서, 예를 들어, 데이터 청크들(633)은 KV 인터페이스들을 이용하여 구현될 수 있는 하나 이상의 스토리지 장치들(608)을 활용하기 위해 서로 다른 크기를 가질 수 있다. 추가적으로 또는 대안적으로, 서버(604)는 하나 이상의 블록 기반 스토리지 장치들(608) 위에 키-값 인터페이스의 소프트웨어 에뮬레이션(예를 들어, RocksDB, LevelDB 등)을 구현할 수 있다. 비록 도 3a 및 도 3b에 나타난 데이터 청크들이 서로 다른 크기들을 갖는 것으로 도시되어 있으나, 이러한 원리들은 또한 일부 또는 모든 스토리지 장치들이 블록 기반 인터페이스들을 갖는 시스템들에도 적용될 수 있고, 이는 다양한 크기를 갖는 청크들의 부분집합으로 간주될 수 있다.
예를 들어 일부 실시 예들에서, 선택적인 및/또는 필수적인 청크 크기는 특정 스토리지 장치에 대해 가장 잘 알려진 크기일 수 있는 청크 크기에 기반하여 결정될 수 있다. 예를 들어, 일부 SSD의 경우 128KB 청크 크기가 SSD 대역폭을 완전히 활용할 수 있다. 추가적으로 또는 대안적으로, 스토리지 서버는 라이브러리를 통해 클라이언트(602)로 최적의 청크 크기를 제공할 수 있고, 클라이언트(602)는 사용자가 객체 또는 다른 원래 데이터를 저장할 때 객체 또는 다른 원래 데이터를 더 작은 청크들로 내부적으로 분할할 수 있다. 추가적으로 또는 대안적으로, 클라이언트(602)는 내용을 분석할 수 있고 동적으로 청크 크기를 결정할 수 있다.
원래 데이터(614)를 청킹한 이후, 클라이언트는 하나 이상의 데이터 청크들(633)을 개별적으로 압축하여 하나 이상의 압축 청크들(634)을 생성할 수 있다. 클라이언트(602)는 하나 이상의 압축 청크들(634)을 암호화하여 하나 이상의 압축 암호화 데이터 청크들(635)을 생성할 수 있는 서버(604)로 압축 청크들(634)을 전송할 수 있다. 서버(604)는 하나 이상의 압축 암호화 데이터 청크들(635)에 대해 삭제 코딩을 수행하여 하나 이상의 패리티 청크들(636)을 생성할 수 있고, 하나 이상의 데이터 청크들(635) 및 하나 이상의 패리티 청크들(636)을 하나 이상의 스토리지 장치들(608) 상에 저장할 수 있다.
도 6b는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 클라이언트 측 암호화를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다. 예를 들어, 도 6b에 나타난 실시 예는 도 4 및 도 5에 나타난 스토리지 방식들 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 6b의 좌측은 스토리지 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 도 6b의 우측은 쓰기 동작 도중 데이터에 대한 동작들을 나타낸다.
도 6b에 나타난 구성 요소들 사이의 데이터 흐름 및/또는 데이터에 대한 동작들은 도 6a에 나타난 서버 측 암호화를 이용하는 실시 예와 유사할 수 있고, 동일한 자리수로 끝나는 참조 번호들을 갖는 구성 요소들은 유사할 수 있다. 그러나, 도 6b에 나타난 실시 예에서, 클라이언트(602)는 제 1 동작 그룹(610B)에 나타난 바와 같이, 하나 이상의 압축 데이터 청크들(634)을 암호화하여 하나 이상의 압축 암호화 데이터 청크들(635)을 생성할 수 있다. 클라이언트(602)는 동작 그룹(612B)에 나타난 바와 같이, 하나 이상의 압축 암호화 데이터 청크들(635)에 대해 삭제 코딩을 수행하여 하나 이상의 패리티 청크들(636)을 생성할 수 있는 서버(604)로 하나 이상의 압축 암호화 데이터 청크들(635)을 전송할 수 있고, 하나 이상의 데이터 청크들(635) 및 하나 이상의 패리티 청크들(636)을 하나 이상의 스토리지 장치들(608) 상에 저장할 수 있다.
하나 이상의 데이터 청크들(633)이 개별적으로 변형(예를 들어, 압축, 암호화 등)되고, 하나 이상의 스토리지 장치들(608) 상에 변형된 데이터 청크들(636)로서 저장된 이후, 각 스토리지 장치는 하나 이상의 데이터 청크들을 복구(예를 들어, 하나 이상의 데이터 청크들을 복호화 및/또는 압축 해제)할 수 있고, 복구된 데이터 청크에 대해 동작을 수행할 수 있다. 예를 들어, 사용자, 클라이언트(602), 서버(604) 등은 하나 이상의 스토리지 장치들(608)로 하나 이상의 청크들을 복구하고, 복구된 데이터 청크에 대해 하나 이상의 동작들(예를 들어, 데이터 선택 동작)을 수행하기 위한 요청을 전송할 수 있다.
도 7a는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 쓰기 동작의 예를 나타낸다. 도 7b는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 읽기 동작과 데이터 선택의 예를 나타낸다. 예를 들어, 도 7a 및 도 7b에 나타난 실시 예들은 도 4 및 도 5에 나타난 스토리지 방식들 중 어느 하나를 구현하기 위해 사용될 수 있다.
도 7a를 참조하면, 좌측은 스토리지 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 우측은 쓰기 동작 도중 데이터에 대한 동작들을 나타낸다. 도 7b를 참조하면, 좌측은 스토리지 시스템의 구성 요소들 사이의 데이터 흐름을 나타내고, 우측은 읽기 동작 도중 데이터에 대한 동작들을 나타낸다.
도 7a에 나타난 쓰기 동작은 도 6a에 나타난 것과 유사한 서버 측 암호화 또는 도 6b에 나타난 것과 유사한 클라이언트 측 암호화를 구현할 수 있고, 동일한 자리수로 끝나는 참조 번호들을 갖는 구성 요소들은 유사할 수 있다. 그러므로, 개별적으로 압축되었을 데이터 청크들(734)은 클라이언트 동작들(710A)의 일부 또는 서버 동작들(712A)의 일부로서 암호화되어 압축 암호화 데이터 청크들(735)을 생성할 수 있다.
도 7b를 참조하면, 하나 이상의 계산적 스토리지 장치들(708)은 스토리지 장치에 저장된 하나 이상의 데이터 청크들(735)로부터 하나 이상의 데이터의 부분집합들을 읽기 위한 데이터 선택 동작을 수행하기 위한 하나 이상의 요청들을 수신할 수 있다. 예를 들어, 하나 이상의 요청들은 요청된 데이터의 부분집합들을 특정하기 위한 하나 이상의 표현들을 포함할 수 있다. 예를 들어, 요청들은 서버(704)를 통해 클라이언트(702)로부터 수신될 수 있다.
하나 이상의 요청들을 처리하기 위해, 하나 이상의 스토리지 장치들(708)은 하나 이상의 스토리지 장치들(708) 상에서 국부적으로 동작들의 그룹(737)을 수행할 수 있다. 서로 다른 세 개의 스토리지 장치들 각각은 데이터 복구 및 데이터 선택 동작들의 그룹들(737-1, 737-2, 737-3)을 각 장치에 저장된 대응하는 데이터 청크에 대해 각각 수행할 수 있다. 그러나, 일부 실시 예들에서, 단일의 스토리지 장치가 장치에 저장된 임의의 수의 데이터 청크들에 대해 데이터 복구 및 데이터 선택 또는 다른 동작들을 수행할 수 있다.
각 스토리지 장치(708)는 스토리지 매체로부터 개별적으로 압축되고 암호화되었던 대응하는 데이터 청크(735)를 읽을 수 있다. 각 스토리지 장치는 대응하는 데이터 청크를 복호화하여 압축 복호화 데이터 청크(734)를 생성할 수 있다. 각 스토리지 장치는 대응하는 데이터 청크를 압축 해제하여 복구된 데이터 청크(738)를 생성할 수 있다. 일부 실시 예들에서, 각 복구된 데이터 청크(738)는 원래 데이터(714)의 대응하는 부분과 동일할 수 있다. 그러나, 일부 실시 예들에서, 복구된 데이터 청크(738)는 스토리지 장치(708)가 복구된 데이터에 대해 유의미한 동작을 수행할 수 있도록 하는 형태로만 복구될 수 있다(예를 들어, 일부 실시 예들은 완전히 압축 해제되지 않았던 데이터 청크에 대해 하나 이상의 동작들을 수행할 수 있다).
예를 들어, 데이터 청크들이 복구된 후, 각 스토리지 장치(708)는 요청과 함께 제공된 표현에 기반하여 데이터 선택 동작을 수행하고 하나 이상의 대응하는 결과들(739)을 얻을 수 있다. 하나 이상의 스토리지 장치들(708)은 원래 데이터(714)의 하나 이상의 요청된 부분집합들(740)로서 클라이언트로 결과들(739)을 전송할 수 있다. 클라이언트의 압축 해제 및/또는 복호화 동작이 생략될 수 있기 때문에, 회색으로 표시되었다.
일부 실시 예들에서, 하나 이상의 스토리지 장치들(708)은 스토리지 장치에 패리티 청크(736)가 저장되어 있는 경우, 하나 이상의 손실된 데이터 청크들(735)을 복구할 수 있다. 추가적으로 또는 대안적으로, 서버(704)는 하나 이상의 다른 스토리지 장치들 상에 저장된 하나 이상의 패리티 청크들(736)을 이용하여 하나 이상의 손실된 데이터 청크들(735)을 복구할 수 있다.
구현의 세부 사항들에 따라, 스토리지 장치에서 데이터 복구 및/또는 데이터 선택 동작을 수행하는 것은 하나 이상의 스토리지 장치들에 저장된 하나 이상의 청크들에 저장된 원래 데이터의 부분집합(예를 들어, 객체의 부분집합)을 읽는 것과 관련된 시간, 대역폭, 전력, 레이턴시 등을 감소시킬 수 있다.
도 8은 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 객체 스토리지 방식에 대한 시스템 구조의 예를 나타낸다. 예를 들어, 도 8에 나타난 시스템은 도 4, 도 5, 도 6a, 도 6b, 도 7a, 도 7b, 도 9a, 및/또는 도 9b와 관련된 방식들 중 어느 하나를 구현하기 위해 사용될 수 있다.
도 8에 나타난 시스템은 클라이언트(802) 및 네트워크 연결(842)을 통해 연결된 객체 스토리지 서버 클러스터(804)를 포함할 수 있다. 시스템은 또한 스토리지 네트워크(844)를 통해 객체 스토리지 서버 클러스터(804)와 연결되는 하나 이상의 스토리지 노드들(806)을 포함할 수 있다.
클라이언트(802)는 하나 이상의 계산적 스토리지 장치(808)가 데이터 청크를 복구하여 복구된 데이터 청크에 대해 동작을 수행할 수 있도록, 개별 데이터 청크들을 압축하기 이전에 원래 데이터(예를 들어, 하나 이상의 객체들)의 데이터 청킹을 수행하도록 구성될 수 있는 데이터 청킹 로직(826) 및/또는 압축 로직(846)을 포함할 수 있다.
객체 스토리지 서버 클러스터(804)는 암호화 로직(847), 삭제 코딩 로직(848), 데이터 선택 로직(849), 클러스터 관리 로직(850), 및/또는 노드 및 스토리지 장치 관리 로직(851)을 포함할 수 있다. 암호화 로직(847)은 클라이언트(802)로부터 수신된 데이터 청크들(예를 들어, 압축 데이터)을 개별적으로 암호화하는 데 사용될 수 있다. 삭제 코딩 로직(848)은 스토리지 노드들(806) 및/또는 스토리지 장치들(808) 상의 데이터 청크들에 대해 삭제 코딩을 수행할 수 있다. 데이터 선택 로직(849)은 개별 스토리지 장치들(808)에 의해 수행되는 데이터 복구, 데이터 선택, 및/또는 다른 프로세싱 동작들과 관련된 다양한 동작들을 수행할 수 있다. 예를 들어, 데이터 선택 로직(849)은 클라이언트(802)로부터 하나 이상의 스토리지 장치들(808) 상의 청크들에 저장될 수 있는 데이터의 하나 이상의 부분집합들을 읽기 위한 요청들을 수신할 수 있다. 데이터 선택 로직(849)은 대응하는 스토리지 노드들(806) 및/또는 스토리지 장치들(808)로 요청들을 전달할 수 있고, 대응하는 스토리지 노드들(806) 및/또는 스토리지 장치들(808)로부터 결과들을 수신 및/또는 취합할 수 있고, 그리고 클라이언트(802)로 취합된 결과들을 전송할 수 있다. 클러스터 관리 로직(850)은 스토리지 서버 클러스터(804)를 유지하는 것과 관련되는 하우스킵핑 및/또는 관리 기능들을 수행할 수 있다. 노드 및 스토리지 장치 관리 로직(851)은 하나 이상의 스토리지 노드들(806) 및/또는 스토리지 장치들(808)을 유지하는 것과 관련되는 하우스킵핑 및/또는 관리 기능들을 수행할 수 있다.
스토리지 노드들(806) 각각은 프로세싱 유닛(예를 들어, DPU(data processing unit), CPU 등)(852) 및 하나 이상의 계산적 스토리지 장치들(808)을 포함할 수 있다. DPU(852)는 하나 이상의 스토리지 장치들(808) 상의 청크들에 저장될 수 있는 데이터의 하나 이상의 부분집합들을 읽기 위해 클라이언트(802)로부터 요청들을 수신하고 분배하는 것과 같은 다양한 기능들을 수행할 수 있다. 일부 실시 예들에서, DPU(852)는 객체 스토리지 서버 클러스터(804)로부터 수신되고 하나 이상의 계산적 스토리지 장치들(808) 상에 저장되는 데이터 청크들에 대해 데이터 압축, 데이터 암호화, 삭제 코딩 등을 수행할 수 있다. 일부 실시 예들에서, DPU(852)는 하나 이상의 계산적 스토리지 장치들(808)에 의해 수행되는 하나 이상의 데이터 선택 동작들의 결과들을 취합할 수 있고, 취합된 결과를 객체 스토리지 서버 클러스터(804) 및/또는 클라이언트(802)로 전달할 수 있다.
계산적 스토리지 장치(808a)는 계산적 스토리지 장치들(808) 중 하나 이상에 포함될 수 있는 구성 요소들의 예를 나타낸다. 계산적 스토리지 장치(808a)는 데이터 선택 엔진(853) 및 스토리지 매체(830)를 포함할 수 있다. 데이터 선택 엔진(853)은 동작될 수 있는 형태로 데이터 청크들을 복구하기 위해 개별적으로 암호화 및/또는 압축되었던 데이터 청크들을 각각 복호화 및/또는 압축 해제하기 위해 사용될 수 있는 복호화 로직(854) 및 압축 해제 로직(855)을 포함할 수 있다. 데이터 선택 엔진(853)은 또한 복구된 데이터 청크에 대해 데이터 선택 또는 다른 동작을 수행하는 데 사용될 수 있는 데이터 선택 로직(856)을 포함할 수 있다. 데이터 선택 엔진(853)은 또한 스토리지 장치(808a)를 위한 KV 인터페이스를 구현하는 데 사용될 수 있는 KV 로직(857)을 포함할 수 있다.
일부 실시 예들에서, 도 8에 나타난 시스템은 스토리지 장치들(808) 중 일부 또는 전부를 위한 KV 인터페이스들을 이용하여 구현될 수 있다. 구현의 세부 사항들에 따라, 이는 데이터 청크들이 다양한 청크 크기들을 이용하여 구현되는 것을 용이하게 및/또는 가능하게 할 수 있다. 설명의 목적으로, 도 8에 나타난 실시 예는 스토리지 장치들(808) 중 하나 이상에서 국부적으로 복구된 데이터 청크들을 이용하는 데이터 선택 특징을 구현하는 것으로서 설명될 수 있으나, 원리들은 복구된 데이터 청크들에 대해 수행될 수 있는 임의의 유형의 프로세싱에 대해 적용될 수 있다.
도 9a는 본 개시의 실시 예들에 따른 로컬 데이터 복구를 이용하는 스토리지 방식에 대한 읽기 및/또는 쓰기 동작들의 예를 나타낸다. 예를 들어, 도 9a에 나타난 동작들은 도 8에 나타난 시스템을 사용하여 구현될 수 있다. 설명의 목적으로, 동작들의 제 1 그룹(958A)은 도 8에 나타난 클라이언트(802) 및 객체 스토리지 서버 클러스터(804)에 의해 수행되는 것으로 가정하고, 동작들의 제 2 그룹(959A)은 도 8에 나타난 하나 이상의 스토리지 노드들(806) 및/또는 스토리지 장치들(808)에 의해 수행되는 것으로 가정하지만, 다른 실시 예들에서, 도 9a에 나타난 동작들은 임의의 다른 구성 요소들에 의해 수행될 수도 있다.
도 9a를 참조하면, 쓰기 동작(예를 들어, 넣기 동작) 동안 원래 데이터(914)(예를 들어, 하나 이상의 객체들)은 하나 이상의 데이터 청크들(933)을 생성하기 위해 클라이언트에 의해 청킹될 수 있다. 하나 이상의 청크들(933)은 하나 이상의 압축 청크들(934)을 생성하기 위해 클라이언트에 의해 개별적으로 압축될 수 있고, 하나 이상의 압축 및/또는 암호화 청크들(935)을 생성하기 위해 객체 스토리지 서버로 전송되고, 개별적으로 암호화될 수 있다. 객체 스토리지 서버는 하나 이상의 압축 및/또는 암호화 청크들(935)에 대해 삭제 코딩을 수행하여 하나 이상의 패리티 청크들(936)을 생성할 수 있다.
객체 스토리지 서버는 하나 이상의 압축 암호화 청크들(935) 및 하나 이상의 패리티 청크들(936)을 하나 이상의 스토리지 장치들 상의 저장을 위해 하나 이상의 스토리지 노드들로 전송(예를 들어, 넣기 동작(960)을 통해)할 수 있다. 그러므로, 쓰기 동작 이후, 원래 데이터(914)(예를 들어, 객체)는 하나 이상의 스토리지 장치들 상의 개별적으로 변형(예를 들어, 압축 및/또는 암호화)되었을 하나 이상의 청크들(935) 내에 저장될 수 있다.
예를 들어, 읽기 동작(예를 들어, 얻기 동작) 동안, 스토리지 장치가 데이터 청크를 복구하지 않거나 및/또는 동작을 수행하지 않는 구현의 경우, 개별적으로 변형된 하나 이상의 데이터 청크들(935)은 하나 이상의 스토리지 장치들로부터 읽힐 수 있다. 하나 이상의 데이터 청크들(935)이 손실되거나 또는 손상된 경우, 손실된 및/또는 손상된 청크들은 하나 이상의 패리티 청크들(936)을 이용하여 복구될(예를 들어, 스토리지 장치 및/또는 스토리지 노드에 의해) 수 있다.
하나 이상의 압축 및/또는 암호화 청크들(935)은 하나 이상의 압축 복호화 청크들(934)를 생성하기 위해 하나 이상의 압축 및/또는 암호화 청크들(935)을 복호화할 수 있는 객체 스토리지 서버로 전송(예를 들어, 얻기 동작(962)을 통해)될 수 있다. 하나 이상의 압축 복호화 청크들(934)은 압축 해제된 복호화 데이터 청크들(933)을 생성하고, 이들을 원래 데이터(914)로 결합하기 위해 하나 이상의 데이터 청크들(934)을 압축 해제할 수 있는 클라이언트로 전송될 수 있다.
도 9b는 본 개시의 실시 예들에 따른 로컬 데이터 복구 및 데이터 선택 동작을 이용하는 스토리지 방식에 대한 읽기 동작의 예를 나타낸다. 예를 들어, 도 9b에 나타난 동작들은 도 8에 나타난 시스템을 이용하여 구현될 수 있다. 설명의 목적으로, 동작들의 제 1 그룹(958B)은 도 8에 나타난 클라이언트(802) 및/또는 객체 스토리지 서버 클러스터(804)에 의해 수행되는 것으로 가정하고, 동작들의 제 2 그룹(959B)은 도 8에 나타난 하나 이상의 스토리지 노드들(806) 및/또는 스토리지 장치들(808)에 의해 수행되는 것으로 가정하지만, 도 9b에 나타난 동작들은 임의의 다른 구성 요소들에 의해 수행될 수도 있다.
읽기 동작(예를 들어, 얻기 동작(963))을 시작하기 위해, 하나 이상의 계산적 스토리지 장치들은 데이터 선택 동작을 수행하기 위한 하나 이상의 요청들을 수신하여 하나 이상의 스토리지 장치들에 저장된 하나 이상의 데이터 청크들(935)로부터 데이터의 하나 이상의 부분집합들을 읽을 수 있다. 예를 들어, 하나 이상의 요청들은 요청된 데이터의 부분집합들을 특정하기 위한 하나 이상의 표현들을 포함할 수 있다.
하나 이상의 요청들을 서비스하기 위해, 개별적으로 변형된 하나 이상의 데이터 청크들(935)은 하나 이상의 스토리지 장치들로부터 읽힐 수 있다. 하나 이상의 스토리지 장치들은 하나 이상의 데이터 청크들(935)을 개별적으로 복호화하여 하나 이상의 압축 복호화 데이터 청크들(934)을 생성할 수 있다. 하나 이상의 스토리지 장치들은 하나 이상의 압축 복호화 데이터 청크들(934)을 개별적으로 압축 해제하여 하나 이상의 복구된 데이터 청크들(938)을 생성할 수 있다. 일부 실시 예들에서, 복구된 데이터 청크들(938) 각각은 원래 데이터(914)의 대응하는 부분과 동일할 수 있다. 그러나, 일부 실시 예들에서, 복구된 데이터 청크(938)는 복구된 데이터에 대해 스토리지 장치가 유의미한 동작을 수행할 수 있는 형태로만 복구될 수도 있다(예를 들어, 일부 실시 예들은 완전히 압축 해제되지 않은 데이터 청크에 대해 하나 이상의 동작들을 수행할 수 있다).
스토리지 장치는 하나 이상의 복구된 데이터 청크들(938)에 대해 데이터 선택 동작(예를 들어, 스캐닝, 필터링 등)을 수행하여 하나 이상의 요청들에 의해 특정된 데이터의 하나 이상의 부분집합들(결과들(R)로 나타내어지는)을 찾을 수 있다. 스토리지 장치가 하나 이상의 데이터 청크를 복구하고, 데이터 선택 동작을 수행한 경우, 스토리지 장치는 객체 스토리지 서버 및 요청을 전송한 클라이언트로 전송될 취합된 결과(940)를 생성하기 위해 데이터 선택 동작의 결과들을 취합할 수 있다. 추가적으로 또는 대안적으로, 다수의 스토리지 장치들에 의한 데이터 선택 동작들에 의해 찾아진 결과들(R)(예를 들어, 데이터의 부분집합들)(939)은 스토리지 노드에 의해 취합될 수 있고, 객체 스토리지 서버 및 요청을 전송한 클라이언트로 전송될 수 있다.
표 1은 본 개시의 실시 예들에 따른 스토리지 시스템에 저장될 수 있는 데이터의 일부 예들을 나타낸다. 설명의 목적으로, 표 1에 나타난 데이터는 부동산 리스팅을 위한 것이지만, 원리들은 임의의 유형의 데이터에 대해 적용될 수 있다. 표 1의 각 행은 7개의 항목들(기록 인덱스, 제곱피트로 표현된 주거 면적, 침실들의 수, 욕실들의 수, 우편번호, 건축 년도, 그리고 리스트 가격)을 갖는 기록에 대응할 수 있다. 예를 들어, 첫 번째 8개의 기록들은 인덱스 1~8로 각각 식별될 수 있다.
인덱스 주거 면적 (sq ft) 침실들의 수 욕실들의 수 우편번호 건축 년도 리스트 가격 ($)
1 2222 3 3.5 32312 1981 250000
2 1628 3 2 32308 2009 185000
3 3824 5 4 32312 1954 399000
4 1137 3 2 32309 1993 150000
5 3560 6 4 32309 1973 315000
6 2893 4 3 32312 1994 699000
7 3631 4 3 32309 1996 649000
8 2483 4 3 32312 2016 399000
9 2100 5 3 32305 1926 497000
10
도 10은 본 개시의 실시 예들에 따른 3개의 계산적 스토리지 장치들의 세 개의 데이터 청크들 상에 표 1의 데이터가 분포된 예를 나타낸다. 도 10에 나타난 실시 예에서, 세미콜론은 개별 기록들(표 1에 나타난 행들에 대응할 수 있는) 사이의 델리미터로서 사용되지만, 다른 실시 예들에서, 다른 델리미팅 기술들이 사용될 수 있다.도 10을 참조하면, 처음 두 개의 기록들(인덱스 1, 2에 의해 식별되는)은 제 1 스토리지 장치(1008A)에 저장된 제 1 데이터 청크(1064A)에 완전히 포함될 수 있다. 세 번째 기록(인덱스 3에 의해 식별되고, 단일 밑줄이 그어진 항목들로 나타내어지는)은 각각 제 1 및 제 2 스토리지 장치들(1008A, 1008B)에 저장된 데이터 청크들(1064A, 1064B) 사이에 분할될(예를 들어, 조각날) 수 있다. 네 번째 및 다섯 번째 기록들(인덱스 4, 5에 의해 식별되는)은 제 2 스토리지 장치(1008B)에 저장된 제 2 데이터 청크(1064B)에 완전히 포함될 수 있다. 여섯 번째 기록(인덱스 6에 의해 식별되고, 단일 밑줄이 그어진 항목들로 나타내어지는)은 각각 제 2 및 제 3 스토리지 장치들(1008B, 1008C)에 저장된 데이터 청크들(1064B, 1064C) 사이에 분할될 수 있다. 일곱 번째 및 여덟 번째 기록들(인덱스 7, 8에 의해 식별되는)은 제 3 스토리지 장치(1008C)에 저장된 제 3 데이터 청크(1064C)에 완전히 포함될 수 있다. 아홉 번째 기록(인덱스 9에 의해 식별되고, 단일 밑줄이 그어진 항목들로 나타내어지는)은 제 3 스토리지 장치(1008C)에 저장된 제 3 데이터 청크(1064C) 및 다른 스토리지 장치에 저장된 다른 데이터 청크 사이에 분할될 수 있다.
예를 들어, 설명의 목적으로, 계산적 스토리지 장치들(1008A, 1008B, 1008C)은 스토리지 장치들이 복구된 데이터 청크(1038)를 생성하기 위해 복호화(복호화 데이터 청크(1034)를 생성하기 위해) 및/또는 압축 해제에 의해 개별적으로 변형된 데이터 청크(1035)를 복구하도록 할 수 있고, 장치에 저장된 데이터 청크의 하나 이상의 기록들로부터 특정 데이터 부분집합(1039)을 얻기 위해 복구된 데이터 청크(1038)에 대해 데이터 선택 동작과 같은 동작을 수행할 수 있는, 상술된 데이터 복구 로직 및/또는 프로세싱 요소들을 이용하여 구현되는 것으로 나타난다. 그러나, 원리들은 이러한 구현의 세부 사항들에 한정되지 않으며, 임의의 유형의 계산적 스토리지 장치들에 저장된 임의의 유형의 데이터 청크들에 대해 수행될 수 있는 임의의 유형의 동작들에 적용될 수 있다. 설명의 목적으로, 본 명세서에 개시된 일부 실시 예들은 고정된 크기의 데이터 청크들(예를 들어, 블록 기반 스토리지 장치들과 함께 사용될 수 있는)을 구현할 수 있으나, 원리들은 또한 가변 크기의 데이터 청크들(예를 들어, KV 스토리지 장치들과 함께 사용될 수 있는)을 구현할 수 있는 실시 예들에 대해서도 적용될 수도 있다.
일부 실시 예들에서, 기록은 객체에 대응할 수 있다. 본 명세서에 개시된 일부 실시 예들에서, 기록(예를 들어, JSON 객체)은 청크보다 작은 것으로 간주되는데, 이는 구현의 세부 사항들에 따라 객체가 두 개 이상의 청크들에 걸쳐 있지 않도록 보장할 수 있다. 일부 실시 예들에서, 델리미터는 세미콜론과 같이 단순한 문자로서 구현될 수 있다. 예를 들어, CSV 객체들의 경우, 델리미터는 캐리지 리턴(carriage return)으로서 구현될 수 있다. 추가적으로 또는 대안적으로, 하나 이상의 델리미터들은 계층 구조에 의해 결정될 수 있다. 그러므로, 델리미터를 검출하는 것은 단순 비교보다 더 복잡할 수 있다. 예를 들어, JSON 객체들의 경우, 중괄호의 쌍(“{…}”)은 JSON 객체를 정의할 수 있다. 나아가, 일부 실시 예들에서, JSON 객체들에는 중첩된 JSON 배열들이 있을 수 있고, 가장 바깥에 있는 중괄호의 쌍은 단일 기록을 정의할 수 있다. 그러므로, 델리미터는 가장 바깥에 있는 오른쪽 중괄호(“}”)에 의해 정의될 수 있다.
다시 도 10을 참조하면, 스토리지 장치들 중 하나에 완전히 포함되는 기록들(예를 들어, 기록들 1, 2, 4, 5, 7, 8)은 대응하는 스토리지 장치에 의해 처리될 수 있다. 예를 들어, 클라이언트가 표 1에 저장된 데이터의 부분집합을 반환하기 위해 데이터 선택 동작을 위한 읽기 요청을 발행하는 경우(예를 들어, 클라이언트가 건축 년도가 1980년 이후인 모든 기록들(또는 그 일부)을 반환하기 위한 표현을 포함하는 읽기 요청을 전송하는 경우), 기록들 1, 2, 4, 5, 7, 8은 대응하는 스토리지 장치에 의해 직접적으로 처리될 수 있다. 그러나, 기록들 3, 6, 9는 두 개의 서로 다른 스토리지 장치들 상의 데이터 청크들 사이에 분할되어 있기 때문에, 스토리지 장치에서 국부적으로 처리되지 않을 수 있다.
도 11은 본 개시의 실시 예들에 따른 서로 다른 스토리지 장치들의 데이터 청크들 사이에 분할된 기록들을 재구축할 수 있는 서버를 포함하는 스토리지 시스템의 예를 나타낸다. 도 11에 나타난 실시 예는 객체 스토리지 서버(1104), 스토리지 네트워크를 통해 객체 스토리지 서버(1104)와 연결되는 2개의 스토리지 노드들(1106A, 1106B), 및 도 10에 나타난 것들과 유사하게 기록들을 포함하는 데이터 청크들을 저장할 수 있는 계산적 스토리지 장치들(1108A, 1108B, 1108C, 1108D, 1108E)을 포함할 수 있다.
도 11을 참조하면, 스토리지 장치들(1108A~1108E) 각각은 대응하는 데이터 청크(1164A~1164E)의 임의의 완전한 기록들에 대해 수행할 수 있는 데이터 선택 동작의 결과들(1165)을 각각 전송할 수 있다(직접적으로, 또는 스토리지 장치가 위치한 스토리지 노드를 통해). 그러나, 기록들 3, 6, 9가 스토리지 장치에서 국부적으로 처리되지 않을 수 있기 때문에, 객체 스토리지 서버(1104)는 하나 이상의 취합 버퍼들(1166) 상의 분할된 기록들을 재구축할 수 있다. 일부 실시 예들에서, 각 취합 버퍼(1106)는 i번째 장치와 (i+1)번째 장치 사이에 분할된 기록을 재구축할 수 있다. 예를 들어, 스토리지 장치(1108A)는 데이터 청크(1164A)에 위치한 기록 3(예를 들어, 인덱스, 주거 면적, 침실들의 수, 욕실들의 수, 우편번호, 및 건축 년도)의 제 1 부분(조각으로서 지칭될 수도 있는)을 객체 스토리지 서버(1104)로 전송하여, 제 1 버퍼(1166A)에서 데이터 청크(1164B)에 존재하고 스토리지 장치(1108B)에 의해 전송되는 기록 3(리스트 가격)의 제 2 부분과 취합되도록 할 수 있다. 일부 실시 예들에서, 객체 스토리지 서버(1104)는 N개의 취합 버퍼들을 포함할 수 있는데, N은 객체 스토리지 서버(1104)와 연결되는 스토리지 장치들의 수일 수 있다.
객체 스토리지 서버(1104)는 취합 버퍼들(1166A, 1166B, 1166C)에 각각 존재하는 재구축된 기록들 3, 6, 9에 대해 선택 동작을 수행하여 결과들(1167)을 생성할 수 있다. 그러므로, 개별적인 스토리지 장치들에 의해 전송되는 결과들(1165) 및 취합 버퍼들(1166)로부터 생성되는 결과들(1167) 사이에서, 객체 스토리지 서버(1104)는 요청에 의해 특정된 데이터의 모든 부분집합들을 얻을 수 있고, 부분집합들을 클라이언트로 반환할 수 있다.
그러나, 구현의 세부 사항들에 따라, 스토리지 장치들(1108)로부터 객체 스토리지 서버(1104)로 전송되는 기록들의 조각들 각각은 시간, 대역폭, 및/또는 전력을 소모할 수 있고, 레이턴시를 증가시킬 수 있고, 프로세싱 자원들 등의 활용을 감소시킬 수 있고, 및/또는 객체 스토리지 서버(1104)가 잠재적인 병목이 되도록 할 수 있다.
도 12는 본 개시의 실시 예들에 따른 데이터를 청크들로 분할하고 압축하기 위한 내용 인식 방법의 예를 나타낸다. 도 12에 나타난 방법에서, 도 12의 윗부분에 나타나는 비압축 입력 데이터(1268)(버퍼에 저장될 수 있는)는 이 예시에서 세미콜론일 수 있는 델리미터로 각각 종료하는 하나 이상의 기록들을 포함할 수 있다. 그러나 다른 실시 예들에서, 대괄호, 캐리지 리턴-라인 피드(carriage return-line feed; CR-LF) 시퀀스들 등과 같은 다른 델리미터들이 사용될 수도 있다. 일부 실시 예들에서, 하나 이상의 기록들은 입력 데이터(1268) 내의 배열(예를 들어, JSON 배열), 문서(예를 들어, JSON 문서) 등에 포함될 수 있다. 기록이 배열, 문서 등의 끝에서 종료하는 경우, 서로 다른 델리미터들이 배열, 문서 등의 끝을 나타내기 위해 사용될 수 있으나, 도 12에 나타난 방법은 또한 기록의 끝으로서 서로 다른 델리미터를 해석할 수 있다.
제 1 경로(동작 1) 동안, 방법은 입력 데이터(1268)를 스캔할 수 있고, 기본 청크 크기 N에 도달할 때까지 데이터 청크를 생성하기 위해 사용할 수 있다. 청크(1269)의 마지막 데이터 구성 요소가 델리미터인 경우, 방법은 제 2 경로(동작 2)로 진행할 수 있다. 청크의 마지막 데이터 구성 요소가 델리미터가 아닌 경우, 방법은 청크의 크기를 변형하여 청크가 델리미터의 끝과 정렬하도록 할 수 있다. 예를 들어, 방법은 데이터(1268)를 보유하고 있는 버퍼의 위치 N+1에서 시작할 수 있고, 델리미터(1270)를 찾을 때까지 역방향으로 스캔할 수 있다. 방법은 델리미터(1270)가 청크의 마지막 데이터 구성 요소일 때까지 청크의 크기를 감소(예를 들어, 청크를 축소)시킬 수 있다. 그러므로, 청크의 크기는 축소 공간 S의 크기와 같아지도록 감소하여 오직 하나 이상의 완전한 기록들만 포함할 수 있다.
대안적으로, 방법은 데이터(1268)를 보유하고 있는 버퍼의 위치 N+1에서 시작할 수 있고, 델리미터(1271)를 찾을 때까지 순방향으로 스캔할 수 있다. 방법은 도 12의 중앙에 나타난 바와 같이 델리미터(1271)가 청크(1269)의 마지막 데이터 구성 요소일 때까지 청크의 크기를 확장시킬 수 있다. 그러므로, 청크의 크기는 확장 공간 E의 크기와 같아지도록 증가하여 오직 하나 이상의 완전한 기록들만 포함할 수 있다.
청크 크기가 결정된 후, 방법은 델리미터로 종료하고 오직 완전한 기록들만 포함할 수 있는 자체 포함된(self-contained) 청크(예를 들어, 청크(1269))가 하나 이상의 압축 알고리즘들을 사용하여 길이 C로 압축되어 압축 데이터(1272)를 생성할 수 있는 제 2 경로(동작 2)로 진행할 수 있다.
비압축 데이터 청크의 크기가 감소 또는 확장될 수 있기 때문에, 비압축 데이터 청크(1269)의 크기는 가변적일 수 있고, 그러므로 압축 데이터 청크(1272)의 크기도 가변적일 수 있다.
방법이 청크의 길이를 감소시킬 지 확장시킬 지는, 청크가 전송될 수 있는 객체 또는 키-값 스토리지 장치에 대한 최대 및/또는 최적 데이터 크기, 또는 청크가 전송될 수 있는 블록 기반 스토리지 장치의 블록 크기와 같은 다양한 요인들에 기반할 수 있다. 객체 또는 키-값 스토리지 장치의 경우, 결과적인 압축 자체-포함된 데이터 청크(1272)는 추가적인 변형 및/또는 프로세싱 없이 저장될 수 있다.
예를 들어 구현의 세부 사항들에 따라, 도 12에 나타난 내용 인식 데이터 청킹 방법은, 서로 다른 스토리지 장치들 상의 청크들 사이에 분할될 수 있는 기록들이 더 적거나 없음으로써, 스토리지 장치들, 스토리지 노드들, 스토리지 서버들 등 사이에 전송되는 기록들의 조각들도 더 적거나 없을 수 있기 때문에, 스토리지 시스템의 동작을 향상시켜 구성 요소들이 완전한 기록들을 갖는 데이터 청크를 복구하거나, 및/또는 완전한 기록들 상에 동작들을 수행할 수 있도록 할 수 있다.
예를 들어, 도 12에 나타난 압축 방법은 청킹 로직(426, 526, 및/또는 826)이 비압축 입력 데이터(1268) 상의 기록들 또는 다른 데이터 유닛들의 경계들(예를 들어, 델리미터들)을 찾는 것에 기반하여 청크 크기를 결정하도록 구성되는 내용 인식 로직을 포함할 수 있는 도 4, 도 5, 및/또는 도 9에 나타난 시스템들 중 어느 하나를 사용하여 구현될 수 있다.
비록 도 12에 나타난 방법이 스토리지 시스템의 동작을 향상시킬 수 있으나, 일부 실시 예들에서 구현의 세부 사항들에 따라, 두 개의 경로들을 사용하는 것과 관련된 오버헤드는, 특히 비교적 큰 객체들을 스캐닝할 때 프로세싱 부담을 증가시킬 수 있다.
본 개시의 실시 예들에 따른 일부 추가적인 내용 인식 데이터 청킹 기술들은 청킹될 데이터를 스캔할 수 있는 데이터 압축 동작과 같은 다른 동작과 청킹 동작을 통합할 수 있다. 구현의 세부 사항들에 따라, 이는 압축의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에 청킹 동작의 효율을 증가시킬 수 있다. 그러므로 일부 실시 예들에서, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
도 13은 본 개시의 실시 예들에 따른 데이터 압축을 위한 방법의 예를 나타낸다. 도 14는 도 13에 나타난 방법에 의해 수행될 수 있는 동작들의 예를 나타낸다. 예를 들어, 도 13 및 도 14에 나타난 방법은 LZ77과 같은 압축 알고리즘에 기반할 수 있다. 도 13의 윗부분에 나타난 바와 같이, 방법은 미리보기 버퍼(1374) 및 윈도우(1373)(또한 버퍼로서 구현될 수도 있는)를 통해 통과할 수 있는 입력 데이터의 스트림 상에 동작할 수 있다. 미리보기 버퍼(1374)의 앞에 있는 입력 데이터의 스트림의 부분(또는 일부라고 지칭)은, 압축을 수행하는 로직이 아닐 수 있기 때문에 투명 부분(1375)으로 나타내어질 수 있다. 미리보기 버퍼(1374) 및 윈도우(1373)를 통해 얼마나 많은 양의 데이터가 통과했는지에 따라, 윈도우(1373) 이후 또 다른 투명 데이터의 부분이 존재할 수 있다.
도 13에 나타난 방법은 도 14에 나타난 바와 같은 이하의 동작들을 수행할 수 있다. 도 13 및 도 14에 나타난 실시 예들은 바이트, 워드, 니블 등과 같은 임의의 크기, 구성 등을 갖는 데이터 구성 요소들을 이용하여 구현될 수 있다.
(1) 제 1 동작(1477-1)에서, 방법은 도 13의 윗부분에 나타난 바와 같이 코딩 위치를 입력 데이터의 스트림의 제 1 데이터 구성 요소로 설정할 수 있다.
(2) 제 2 동작(1477-2)에서, 방법은 도 13의 윗부분에 나타난 바와 같이 미리보기 버퍼(1374)의 하나 이상의 데이터 구성 요소들(리터럴이라고도 지칭)과, 윈도우(1373)의 하나 이상의 데이터 구성 요소들 사이의 길이 L을 갖는 가장 긴 매치를 찾기 위해 입력 데이터의 스트림을 스캔할 수 있다.
(3) 제 3 동작(1477-3)에서, 제 2 동작 (2)(1477-2)에서 매치를 찾은 경우, 방법은 도13의 윗부분에 나타난 바와 같이, 예컨대 윈도우(1373)의 매칭된 데이터의 시작 위치를 나타내는 코딩 위치로부터의 오프셋과 매칭되는 데이터 구성 요소들의 수를 나타내는 길이 L을 포함할 수 있는 포인터 P를 출력할 수 있다. 방법은 도 13의 아랫부분에 나타난 바와 같이 코딩 위치 및 윈도우(1373)를 순방향으로 L개의 데이터 구성 요소들만큼 이동시킬 수 있다. 방법은 제 5 동작 (5)(1477-5)로 진행할 수 있다. 길이 L에 따라, 이는 입력 데이터 스트림의 투명 부분(1375)의 전부 또는 일부가 미리보기 버퍼(1374)로 진입하도록 하고, 이전에 윈도우(1373)에 존재했던 데이터 길이 L의 일부(1375)가 투명해지도록(예를 들어, 방법을 수행하는 로직이 액세스하지 못하도록) 할 수 있다.
(4) 제 4 동작(1477-4)에서, 제 2 동작 (2)(1477-2)에서 매치를 찾지 못한 경우, 방법은 널 포인터(예를 들어, 오프셋 및/또는 길이 L이 0인 포인터) 및 미리보기 버퍼(1374)의 다음 데이터 구성 요소(리터럴)을 출력할 수 있다. 방법은 코딩 위치 및 윈도우(1373)를 순방향으로 한 개의 데이터 구성 요소만큼 이동시킬 수 있다.
(5) 제 5 동작(1477-5)에서, 미리보기 버퍼(1374)가 비어 있지 않은 경우, 방법은 제 2 동작 (2)(1477-2)로 돌아갈 수 있다. 그렇지 않으면, 방법은 종료할 수 있다.
그러므로, 도 13 및 도 14에 나타난 압축 방법은 윈도우(1373)의 범위 내에 미리보기 버퍼(1374) 상의 하나 이상의 리터럴들의 시퀀스가 나타난 적이 있는지를 검토하고, 이를 윈도우(1373)의 해당 시퀀스의 인스턴스를 나타내는 포인터(예를 들어, 인덱스)와 대체한다. 압축 동작에 의해 생성되는 출력 데이터의 스트림은 일련의 리터럴 데이터 구성 요소들(예를 들어, 바이트들) 및 이미 출력 상에 있는 데이터 구성 요소들의 시퀀스를 지시할 수 있는 포인터일 수 있다.
일부 실시 예들에서, 기록은 유닛으로서 사용되거나 및/또는 유닛에 대해 동작할 수 있는 임의의 완전한 데이터 구조(예를 들어, 데이터베이스의 행)를 포함할 수 있다. 일부 실시 예들에서, 델리미터는 기록(예를 들어, 하나 이상의 데이터 구성 요소들)의 경계를 나타낼 수 있는 임의의 것(예를 들어, 세미콜론, 대괄호, CR-LF 시퀀스 등)을 이용하여 구현될 수 있다. 일부 실시 예들에서, 델리미터는 기록이 끝나는 지점을 나타낼 수 있는 인덱스 테이블과 같은 데이터 구조를 이용하여 구현될 수 있다.
도 13 및 도 14에 나타난 압축 방법이 정상 동작의 부분으로서 입력 데이터를 스캔할 수 있기 때문에, 본 개시의 실시 예들에 따른 청킹 동작은 도 13 및 도 14에 나타난 압축 방법에 통합되어 압축 동작에 의해 이미 수행되고 있는 데이터 스캐닝을 활용할 수 있다.
도 15는 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방식의 예를 나타낸다.
도 15의 윗부분에 나타난 바와 같이, 입력 데이터의 스트림은 미리보기 버퍼(1574) 및 윈도우(1573)(또한 버퍼로서 구현될 수도 있는)를 통해 통과할 수 있다. 미리보기 버퍼(1574)보다 앞선 입력 데이터의 스트림의 일부는 압축을 수행하는 로직이 아닐 수 있기 때문에 투명 부분(1575)으로서 나타내어질 수 있다. 미리보기 버퍼(1574) 및 윈도우(1573)를 통해 얼마나 많은 양의 데이터가 통과했는지에 따라, 윈도우(1573) 이후 또 다른 투명 데이터의 부분이 존재할 수 있다.
도 16은 본 개시의 실시 예들에 따른 도 15에 나타난 방식을 이용하여 수행될 수 있는 통합된 청킹 및 압축 방법의 예를 나타낸다.
도 15 및/또는 도 16에 나타난 실시 예들은 바이트, 워드, 니블 등과 같은 임의의 크기, 구성 등을 갖는 데이터 구성 요소들을 이용하여 구현될 수 있다. 도 15 및/또는 도 16에 나타난 실시 예들은 현재 청크 크기(c), 조기 종료 지시기(예를 들어, 조기 종료 비트)(e), 및 기록 델리미터 길이(l)를 사용할 수 있다. 일부 실시 예들에서, 도 15에 나타난 방식은 도 16에 나타나는 바와 같은 이하의 동작들을 수행할 수 있다.
(1) 제 1 동작(1678-1)에서, 방법은 도 15의 윗부분에 나타난 바와 같이 코딩 위치를 입력 데이터의 스트림의 첫 번째 데이터 구성 요소의 위치로 설정할 수 있다. 일부 실시 예들에서, 현재 청크 크기(c), 조기 종료 비트(e), 및/또는 기록 델리미터 길이(l)는 0으로 초기화될 수 있다. 일부 실시 예들에서, 초기 코딩 위치는 도 15의 중간 및 아랫부분에 나타난 바와 같이 데이터 청크의 시작 지점에 대응할 수 있다.
(2) 제 2 동작(1678-2)에서, 방법은 도 15의 윗부분에 나타난 바와 같이 미리보기 버퍼(1574)의 하나 이상의 데이터 구성 요소들과, 윈도우(1573)의 하나 이상의 데이터 구성 요소들 사이의 길이 L을 갖는 가장 긴 매치를 찾기 위해 입력 데이터의 스트림을 스캔할 수 있다. 가장 긴 매치를 찾기 위해 입력 데이터의 스트림을 스캔하는 동안, 방법은 또한 기록의 델리미터에 대한 매치를 찾을 수 있다. 예를 들어 델리미터에 대한 매치가 찾아진 경우, 방법은 윈도우(1573)의 델리미터 매치의 첫 번째 인스턴스를 유지할 수 있고, 델리미터 길이(l)을 찾아진 델리미터 매치의 길이로 설정할 수 있다.
(3) 제 3 동작(1678-3)에서, 제 2 동작 (2)(1678-2)에서 가장 긴 매치를 찾지 못한 경우, 방법은 널 포인터(예를 들어, 오프셋 및/또는 길이 L이 0인 포인터) 및 미리보기 버퍼(1574)의 다음 데이터 구성 요소(리터럴)를 출력하여 압축 출력 데이터의 스트림을 생성할 수 있다. 방법은 코딩 위치 및 윈도우(1573)를 순방향으로 한 개의 데이터 구성 요소만큼 이동시킬 수 있다. 방법은 또한 미리보기 버퍼(1574)로부터의 한 개의 데이터 구성 요소 출력만큼 현재 청크 크기가 증가할 것임을 나타낼 수 있는 길이로 길이(L)을 설정할 수 있다.
(4) 제 4 동작(1678-4)에서, 조기 종료 비트(e)가 설정되지 않고, 현재 청크 크기(c+L)가 기본 청크 크기(N) 이상인 경우, 방법은 조기 종료 비트를 1(e=1)로 설정할 수 있다.
(5) 제 5 동작(1678-5)에서, 조기 종료 비트가 설정(e=1)되고, 델리미터 매치가 찾아진 경우(예를 들어, l!=0), 방법은 L을 l(1 이상인)과 동일하게 설정할 수 있고, 포인터 P를 처음 매칭된 델리미터로(예를 들어, 윈도우(1573)의 처음 매칭된 델리미터의 시작 위치를 나타내는 코딩 위치로부터의 오프셋과, 매칭된 델리미터의 길이를 나타내는 길이 l로) 업데이트할 수 있다.
(6) 제 6 동작(1678-6)에서, 매치(예를 들어, 가장 긴 매치 또는 델리미터 매치)가 찾아진 경우, 방법은 예컨대 도 15의 중간 부분에 나타난 바와 같이 가장 긴 매치(예를 들어, 정상 매치)의 위치 및 길이에 기반하여, 또는 도 15의 아랫부분에 나타난 바와 같이 두 번째 델리미터 매치(예를 들어, 조기 종료)의 위치 및 길이에 기반하여 포인터 P를 출력하여 압축 출력 데이터의 스트림을 생성할 수 있다.
(7) 제 7 동작(1678-7)에서, 방법은 코딩 위치 및 윈도우(1573)를 L개의 데이터 구성 요소들만큼 순방향으로 이동시킬 수 있는데, L은 도 15의 중간 부분의 정상 동작에 나타난 바와 같이 가장 긴 매치의 길이일 수 있거나, 또는 도 15의 아랫부분의 조기 종료 동작에 나타난 바와 같이 델리미터 매치의 길이 l일 수 있다. 제 7 동작 이후, 데이터의 스트림은 길이들 L 및 l에 기반하여, 하나 이상의 투명 부분들(1575A, 1575B, 및/또는 1575C)을 가질 수 있다.
(8) 제 8 동작(1678-8)에서, 미리보기 버퍼(1574)가 비어 있지 않은 경우, 방법은 제 2 동작 (2)(1678-2)로 돌아갈 수 있다. 그렇지 않으면, 청크의 끝은 도 15의 아랫부분의 코딩 위치에 나타난 바와 같이 델리미터의 끝에 의해 결정될 수 있다.
일부 실시 예들에서, 도 15에 나타난 방식 및/또는 도 16에 나타난 방법은 기본 청크 크기 N에 도달할 때까지 도 13 및 도 14에 나타난 방법과 유사하게 가장 긴 매치들을 찾음으로써 초기에 압축 동작을 수행할 수 있다. 그러나, 기본 청크 크기에 도달한 경우, 도 15 및/또는 도 16에 나타난 실시 예들은 기본 청크 크기를 초과할 때까지 기록 단위로 입력 데이터를 압축할 수 있다. 예를 들어, 일부 실시 예들에서, 방법은 기본 청크 크기보다 큰(그리고 델리미터들로 종료할 수 있는) 가장 작은 청크를 찾을 수 있다. 일부 실시 예들에서, 이는 최소 최대(minimum largest) 청크라고 지칭될 수 있다. 방법이 입력 데이터의 스트림을 스캔함에 따라, 도 15의 중간 및 아랫부분에 나타난 바와 같은 청크의 시작 지점은 점차 코딩 위치로부터 멀리 이동할 수 있다.
예를 들어 구현의 세부 사항들에 따라, 도 15 및/또는 도 16에 나타난 내용 인식 데이터 청킹 기술들은, 서로 다른 스토리지 장치들 상의 청크들 사이에 분할될 수 있는 기록들이 더 적거나 없음으로써, 스토리지 장치들, 스토리지 노드들, 스토리지 서버들 등 사이에 전송되는 기록들의 조각들도 더 적거나 없을 수 있기 때문에, 도 11에 나타난 바와 같은 스토리지 시스템의 동작을 향상시켜 구성 요소들이 완전한 기록들을 갖는 데이터 청크를 복구하거나, 및/또는 완전한 기록들 상에 동작들을 수행할 수 있도록 할 수 있다.
구현의 세부 사항들에 따라, 도 15 및/또는 도 16에 나타난 실시 예들은 또한 압축의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에 청킹 동작의 효율을 증가시킬 수 있다. 그러므로 일부 실시 예들에서, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
도 17은 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방식의 다른 예를 나타낸다.
도 18은 본 개시의 실시 예들에 따른 도 17에 나타난 방식을 이용하여 수행될 수 있는 통합된 청킹 및 압축 방법의 예를 나타낸다.
도 17에 나타난 방식은 도 15에 나타난 실시 예에 관해 설명된 것과 유사한 구성 요소들 및/또는 구현 동작들을 포함할 수 있고, 동일한 자리수로 끝나는 참조 번호들을 갖는 구성 요소들은 유사할 수 있다. 그러나, 도 17에 나타난 실시 예에서, 입력 데이터를 기록 단위로 압축하기보다는, 방법은 첫 번째 기록이 나타났을 때 청크 크기를 결정할 수 있다. 예를 들어, 일부 실시 예들에서, 방법은 기본 청크 크기보다 작은(그리고 델리미터들로 종료할 수 있는) 가장 큰 청크를 찾을 수 있다. 일부 실시 예들에서, 이는 최대 최소(maximum smallest) 청크라고 지칭될 수 있다.
도 17의 윗부분에 나타난 바와 같이, 입력 데이터의 스트림은 미리보기 버퍼(1774) 및 윈도우(1773)(또한 버퍼로서 구현될 수도 있는)를 통해 통과할 수 있다. 미리보기 버퍼(1774)보다 앞선 입력 데이터의 스트림의 일부는 압축을 수행하는 로직이 아닐 수 있기 때문에 투명 부분(1775)으로서 나타내어질 수 있다. 미리보기 버퍼(1774) 및 윈도우(1773)를 통해 얼마나 많은 양의 데이터가 통과했는지에 따라, 윈도우(1773) 이후 또 다른 투명 데이터의 부분이 존재할 수 있다.
도 17에 나타난 방식은 도 18에 나타나는 바와 같은 이하의 동작들을 수행할 수 있다. 도 17 및/또는 도 18에 나타난 실시 예들은 바이트, 워드, 니블 등과 같은 임의의 크기, 구성 등을 갖는 데이터 구성 요소들을 이용하여 구현될 수 있다. 도 17 및/또는 도 18에 나타난 실시 예들은 현재 청크 크기(c), 조기 종료 지시기(예를 들어, 조기 종료 비트)(e), 및 기록 델리미터 길이(l)를 사용할 수 있다.
(1) 제 1 동작(1879-1)에서, 방법은 도 17의 윗부분에 나타난 바와 같이 코딩 위치를 입력 데이터의 스트림의 첫 번째 데이터 구성 요소의 위치로 설정할 수 있다. 일부 실시 예들에서, 현재 청크 크기(c), 조기 종료 비트(e), 및/또는 기록 델리미터 길이(l)는 0으로 초기화될 수 있다.
(2) 제 2 동작(1879-2)에서, 방법은 도 17의 윗부분에 나타난 바와 같이 미리보기 버퍼(1774)의 하나 이상의 데이터 구성 요소들과, 윈도우(1773)의 하나 이상의 데이터 구성 요소들 사이의 길이 L을 갖는 가장 긴 매치를 찾기 위해 입력 데이터의 스트림을 스캔할 수 있다. 가장 긴 매치를 찾기 위해 입력 데이터의 스트림을 스캔하는 동안, 방법은 또한 기록의 델리미터에 대한 매치를 찾을 수 있다. 예를 들어 델리미터에 대한 매치가 찾아진 경우, 방법은 윈도우(1573)의 델리미터 매치의 첫 번째 인스턴스를 유지할 수 있고, 델리미터 길이(l)을 찾아진 델리미터 매치의 길이로 설정할 수 있다.
(3) 제 3 동작(1879-3)에서, 제 2 동작 (2)(1879-2)에서 가장 긴 매치를 찾지 못한 경우, 방법은 널 포인터(예를 들어, 오프셋 및/또는 길이 L이 0인 포인터) 및 미리보기 버퍼(1774)의 다음 데이터 구성 요소(리터럴)를 출력하여 압축 출력 데이터의 스트림을 생성할 수 있다. 방법은 코딩 위치 및 윈도우(1773)를 순방향으로 한 개의 데이터 구성 요소만큼 이동시킬 수 있다. 방법은 또한 미리보기 버퍼(1774)로부터의 한 개의 데이터 구성 요소 출력만큼 현재 청크 크기가 증가할 것임을 나타낼 수 있는 길이로 길이(L)을 설정할 수 있다.
(4) 제 4 동작(1879-4)에서, 현재 청크 크기(c+L)가 기본 청크 크기(N) 이상인 경우, 방법은 조기 종료 비트를 1(e=1)로 설정할 수 있다.
(5) 제 5 동작(1879-5)에서, 조기 종료 비트가 설정(e=1)되고, 델리미터 매치가 찾아진 경우(예를 들어, l!=0), 방법은 L을 l(1 이상인)과 동일하게 설정할 수 있고, 포인터 P를 처음 매칭된 델리미터로(예를 들어, 윈도우(1773)의 처음 매칭된 델리미터의 시작 위치를 나타내는 코딩 위치로부터의 오프셋과, 매칭된 델리미터의 길이를 나타내는 길이 l로) 업데이트할 수 있다.
(6) 제 6 동작(1879-6)에서, 매치(예를 들어, 가장 긴 매치 또는 델리미터 매치)가 찾아진 경우, 방법은 예컨대 도 17의 중간 부분에 나타난 바와 같이 가장 긴 매치(예를 들어, 정상 매치)의 위치 및 길이에 기반하여, 또는 도 17의 아랫부분에 나타난 바와 같이 두 번째 델리미터 매치(예를 들어, 조기 종료)의 위치 및 길이에 기반하여 포인터 P를 출력하여 압축 출력 데이터의 스트림을 생성할 수 있다.
(7) 제 7 동작(1879-7)에서, 방법은 코딩 위치 및 윈도우(1773)를 L개의 데이터 구성 요소들만큼 순방향으로 이동시킬 수 있는데, L은 도 17의 중간 부분의 정상 동작에 나타난 바와 같이 가장 긴 매치의 길이일 수 있거나, 또는 도 17의 아랫부분의 조기 종료 동작에 나타난 바와 같이 델리미터 매치의 길이 l일 수 있다. 제 7 동작 이후, 데이터의 스트림은 길이들 L 및 l에 기반하여, 하나 이상의 투명 부분들(1775A, 1775B, 및/또는 1775C)을 가질 수 있다.
(8) 제 8 동작(1879-8)에서, 조기 종료 비트가 설정되지 않고(e!=1) 미리보기 버퍼(1774)가 비어 있지 않은 경우, 방법은 제 2 동작 (2)(1879-2)로 돌아갈 수 있다. 그렇지 않으면, 청크의 끝은 도 17의 아랫부분의 코딩 위치에 나타난 바와 같이 델리미터의 끝에 의해 결정될 수 있다.
일부 실시 예들에서, 도 17에 나타난 방식 및/또는 도 18에 나타난 방법이 첫 번째 기록이 나타났을 때 청크 크기(최대 최소 청크)를 결정할 수 있기 때문에, 청크 크기는 도 17의 아랫부분에 나타난 바와 같은 조기 종료 동작에 나타난 첫 번째 델리미터 매치에 기반할 수 있다. 방법이 입력 데이터의 스트림을 스캔함에 따라, 도 17의 중간 및 아랫부분에 나타난 바와 같은 청크의 시작 지점은 점차 코딩 위치로부터 멀리 이동할 수 있다.
구현의 세부 사항들에 따라, 도 17 및/또는 도 18에 나타난 실시 예들은 또한 압축의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에 청킹 동작의 효율을 증가시킬 수 있다. 그러므로 일부 실시 예들에서, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
도 19는 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방법의 다른 예를 나타낸다. 예를 들어, 도 19에 나타난 실시 예는 도 15 및/또는 도 17에 나타난 실시 예들 중 하나 또는 모두와 함께 사용될 수 있다. 일부 실시 예들에서, 도 19에 나타난 방법은 최소 최대 청크 및/또는 최대 최소 청크를 구현할 수 있다. 예를 들어, 구현의 세부 사항들에 따라, 도 19에 나타난 실시 예는 가장 긴 매치가 델리미터를 포함하지 않는 경우 최소 최대 청크를 결정할 수 있고, 가장 긴 매치가 델리미터를 포함하는 경우 최대 최소 청크를 결정할 수 있다.
도 19를 참조하면, 방법은 동작(1979-1)에서 시작할 수 있다. 예를 들어 반복 시퀀스의 시작일 수 있는 동작(1979-2)에서, 방법은 청크 크기(c) 및/또는 조기 종료 비트(e)를 0으로 설정할 수 있다. 동작(1979-3)에서, 방법은 포인터 P 및 길이 L을 초기화할 수 있다. 동작(1979-4)에서, 방법은 미리보기 버퍼에서 가장 긴 매치 (c, L)을 찾을 수 있다.
동작(1979-5)에서, 가장 긴 매치가 찾아진 경우, 방법은 이하와 같이 도 19의 좌측의 제 1 주요 분기를 취할 수 있다. 동작(1979-6)에서, 방법은 포인터 P를 가장 긴 매치의 시작점으로 설정할 수 있고, 길이 L을 가장 긴 매치의 길이로 설정할 수 있다. 동작(1979-7)에서 방법은 현재 청크 크기가 기본 청크 크기(N) 이상인지(예를 들어, c+L≥N인지)를 결정할 수 있다. 현재 청크 크기가 기본 청크 크기(N) 이상이 아닌 경우, 방법은 이하에 설명되는 바와 같이 동작(1979-11)으로 진행할 수 있다. 그러나 현재 청크 크기가 기본 청크 크기 이상인 경우, 방법은 동작(1979-8)에서 기록 델리미터 길이(l)를 초기화할 수 있다. 동작(1979-9)에서, 방법이 미리보기 버퍼에서 첫 번째 델리미터 매치 (c, l)을 찾지 못한 경우, 방법은 이하에서 설명되는 바와 같이 동작(1979-11)으로 진행할 수 있다. 그러나, 동작(1979-9)에서 방법이 미리보기 버퍼에서 첫 번째 델리미터 매치 (c, l)을 찾은 경우, 방법은 동작(1979-10)으로 진행하여 조기 종료 비트를 1로 설정할 수 있고(e=1), 포인터 P를 슬라이딩 윈도우의 첫 번째 델리미터 매치의 시작점으로 설정할 수 있고, 및/또는 길이 L을 첫 번째 델리미터 매치의 길이로 설정할 수 있다. 동작(1979-11)에서, 방법은 포인터 P 및 길이 L을 출력할 수 있다. 방법은 동작(1979-18)으로 시작하는, 도 19의 우측의 공통 분기로 진행할 수 있다.
동작(1979-5)에서, 가장 긴 매치가 찾아지지 않은 경우, 방법은 이하와 같이 도 19의 중간의 두 번째 주요 분기를 취할 수 있다. 동작(1979-12)에서, 방법은 포인터 P를 널 포인터의 값으로 설정할 수 있고, 길이 L을 1로 설정할 수 있다. 동작(1979-13)에서, 방법은 널 포인터 P와 미리보기 버퍼의 첫 번째 바이트를 출력할 수 있다. 동작(1979-14)에서, 방법은 현재 청크 크기가 기본 청크 크기(N) 이상인지(예를 들어, c+L≥N인지)를 결정할 수 있다. 현재 청크 크기가 기본 청크 크기(N) 이상이 아닌 경우, 방법은 동작(1979-18)으로 시작하는 도 19의 우측의 공통 분기로 진행할 수 있다. 그러나, 동작(1979-14)에서, 현재 청크 크기가 기본 청크 크기 이상인 경우, 방법은 동작(1979-15)에서 기록 델리미터 길이(l)를 초기화할 수 있다. 동작(1979-16)에서, 방법이 미리보기 버퍼에서 첫 번째 델리미터 매치 (c, l)을 찾지 못한 경우, 방법은 동작(1979-18)으로 시작하는 도 19의 우측의 공통 분기로 진행할 수 있다. 그러나, 동작(1979-16)에서, 방법이 미리보기 버퍼에서 첫 번째 델리미터 매치 (c, l)을 찾은 경우, 방법은 동작(1979-17)으로 진행하여 조기 종료 비트를 1로 설정할 수 있다(e=1). 방법은 동작(1979-18)으로 시작하는 도 19의 우측의 공통 분기로 진행할 수 있다.
도 19의 우측의 공통 분기는 아래와 같이 진행할 수 있다. 동작(1979-18)에서, 청크 크기(c)는 길이(L)을 더함으로써 업데이트될 수 있다(예를 들어, c=c+L). 예를 들어, L은 가장 긴 매치의 길이, 첫 번째 델리미터 매치의 길이, 또는 1일 수 있다. 동작(1979-19)에서, 코딩 위치 및 윈도우는 거리 L(예를 들어, L 바이트)만큼 이동될 수 있다. 동작(1979-20)에서, 조기 종료 비트가 설정되지 않은 경우(e=0), 방법은 동작(1979-3)으로 돌아가 반복 시퀀스의 또 다른 반복을 시작할 수 있다. 그러나 조기 종료 비트가 설정된 것으로 결정된 경우(e=1), 방법은 동작(1979-21)에서 현재 청크의 끝이 찾아졌음을 나타낼 수 있다. 동작(1979-22)에서, 방법은 미리보기 버퍼가 비어 있는지 여부를 결정할 수 있다. 미리보기 버퍼가 비어 있지 않은 경우, 방법은 동작(1979-23)으로 진행하여 조기 종료 비트가 0으로 리셋될 수 있고, 방법은 동작(1979-3)으로 돌아가 반복 시퀀스의 또 다른 반복을 시작할 수 있다. 그러나, 동작(1979-22)에서 미리보기 버퍼가 비어 있는 경우, 방법은 동작(1979-24)에서 종료할 수 있다.
비록 도 13, 도 14, 도 15, 도 16, 도 17, 도 18, 및/또는 도 19에 나타난 실시 예들이 입력 데이터 스트림 및/또는 스트림 기반 압축 알고리즘들의 맥락에서 설명되었으나, 원리들은 또한 배치 기반(예를 들어, 파일 기반) 입력 데이터 및/또는 블록, 파일 등에 기반한 압축 알고리즘들과 같은 임의의 다른 유형의 입력 및/또는 압축 알고리즘들에 대해 적용될 수 있다.
표 2는 본 개시의 실시 예들에 따른 통합된 청킹 및 압축 방법에 대한 수도코드의 예를 나타낸다. 예를 들어, 표 2에 나타난 실시 예는 도 15 및/또는 도 17에 나타난 실시 예들 중 하나 또는 모두와 함께 사용될 수 있다. 일부 실시 예들에서, 표 2에 나타난 방법은 최소 최대 청크 및/또는 최대 최소 청크를 구현할 수 있다. 예를 들어, 구현의 세부 사항들에 따라, 표 2에 나타난 실시 예는 가장 긴 매치가 델리미터를 포함하지 않는 경우 최소 최대 청크를 결정할 수 있고, 가장 긴 매치가 델리미터를 포함하는 경우 최대 최소 청크를 결정할 수 있다.
1 Start {
2 Initialize c, e
3 Repeat {
4 Initialize P, L
5 Find longest match (c, L) in lookahead buffer
6 if longest match is found {
7 P = beginning of longest match in window
8 L = length of longest match
9 If c+L>=N {
10 Initialize l
11 Find the 1st delimiter match (c, l) in lookahead buffer
12 If 1st delimiter match is found {
13 Set e=1
14 P = beginning of 1st delimiter match in window
15 L = length of 1st delimiter match (l)
16 }
17 }
18 Output P of length L
19 }
20 Else {
21 Set L=1, P=NULL
22 Output null pointer and 1st byte of lookahead buffer
23 If c+L>=N {
24 Initialize l
25 Find the 1st delimiter match (c, l) in lookahead buffer
26 If 1st delimiter match is found {
27 Set e=1
28 }
29 }
30 }
31 c = c + L
32 Move coding position and window L bytes
33 If e = 1 {
34 End of chunk
35 If lookahead buffer empty
36 End
37 Else
38 Initialize e
39 }
40 } // end of repeat
41 } // end of start
도 20은 본 개시의 실시 예들에 따른 통합된 청킹 및 압축을 사용하는 시스템의 예를 나타낸다. 예를 들어, 도 20에 나타난 시스템은 도 13, 도 14, 도 15, 도 16, 도 17, 도 18, 및/또는 도 19에 관해 설명된 기술들 중 어느 하나를 구현하기 위해 사용될 수 있다.도 20을 참조하면, 시스템은 호스트(2024) 및 커넥션(2022)을 통해 통신할 수 있는 계산적 스토리지 장치(2008)를 포함할 수 있다. 호스트(2024)는 내용 인식 데이터 청킹 및 압축 로직(2090)(청킹 및 압축 로직, 통합 청킹 및 압축 로직, 또는 통합 로직이라고 지칭)을 포함할 수 있다. 청킹 및 압축 로직은 스토리지 장치(2008)로 하나 이상의 데이터 청크들을 제공하도록 구성될 수 있다. 예를 들어, 데이터 청킹 및 압축 로직(2090)은 스토리지 장치(2008)가 데이터 청크를 압축 해제하고 압축 해제된 데이터 청크에 대해 동작을 수행할 수 있도록, 압축 이전에 객체 또는 다른 원래 데이터를 하나 이상의 데이터 청크들로 분할할 수 있다.
일부 실시 예들에서, 청킹 및 압축 로직(2090)이 내용을 인식할 수 있기 때문에, 이는 기록들 사이의 경계들에 기반하여 데이터를 청크들로 분할할 수 있다. 예를 들어, 청킹 및 압축 로직(2090)은 청크가 기록 델리미터로 끝날 수 있고, 완전한 기록으로 끝날 수 있도록, 데이터의 기록 델리미터를 찾아 데이터를 가변 크기의 청크들로 분할할 수 있다.
일부 실시 예들에서, 청킹 및 압축 로직(2090)은 하나 이상의 미리보기 버퍼들, 윈도우 버퍼들 등을 포함할 수 있고, 도 13, 도 14, 도 15, 도 16, 도 17, 도 18, 및/또는 도 19에 관해 설명된 기술들 중 어느 하나를 구현할 수 있다.
계산적 스토리지 장치(2008)는 압축 해제 로직(2028), 하나 이상의 프로세싱 요소들(2029), 및 스토리지 매체(2030)를 포함할 수 있다. 압축 해제 로직(2028)은 하나 이상의 프로세싱 요소들(2029)이 동작을 수행할 수 있는 형태로 압축 데이터 청크를 압축 해제하도록 구성될 수 있다. 하나 이상의 프로세싱 요소들(2029)은 데이터 선택(예를 들어, 스캐닝, 필터링 등), 가속 계산, 그래프 프로세싱, 그래픽 프로세싱, 머신 러닝 등과 같은 임의의 유형의 동작을 수행하도록 구성될 수 있다. 스토리지 매체(2030)는 호스트(2024)에 의해 전송된 하나 이상의 변형된 데이터 청크를 포함하는 임의의 데이터를 저장하는 데 사용될 수 있다.
일부 실시 예들에서, 압축 해제 로직(2028) 및/또는 하나 이상의 프로세싱 요소들(2029)은 스토리지 장치(2008)에서 수신되는 쿼리(예를 들어, 표현)를 포함할 수 있는 요청에 응답하여, 스토리지 매체(2030)로부터 하나 이상의 데이터 청크들을 읽고 압축 해제하고, 복구된 데이터 청크에 대해 임의의 다른 동작을 수행하도록 구성될 수 있다.
일부 실시 예들에서, 계산적 스토리지 장치(2008)는 내용 인식 데이터 청킹 및 압축 로직(2090)으로 하나 이상의 지시들을 제공하도록 구성될 수 있는 지시 로직을 더 포함할 수 있다. 하나 이상의 지시들은 도 5에 나타난 실시 예에 관해 상술된 바와 같이 원래 데이터를 청크들로 어떻게 분할할 지 결정하기 위해 사용될 수 있다.
호스트(2024)는 도 4에 나타난 실시 예에 관해 상술된 바와 같은 임의의 구성 요소들 또는 구성 요소들의 결합을 이용하여 구현될 수 있다. 스토리지 장치(2008)는 도 4에 나타난 실시 예에 관해 상술된 바와 같이 임의의 커넥터 설정을 사용하고 임의의 폼 팩터를 갖는 임의의 스토리지 매체로서 구현될 수 있다. 호스트(2024) 및 스토리지 장치(2008)는 도 4에 나타난 실시 예에 관해 상술된 바와 같이 서버 섀시, 서버 랙, 데이터룸, 데이터센터, 엣지 데이터센터, 모바일 엣지 데이터센서, 및/또는 이들의 결합들을 전부 또는 부분적으로 이용하여 구현될 수 있거나, 및/또는 관련되어 사용될 수 있다. 통신 커넥션(2022)은 도 4에 나타난 실시 예에 관해 상술된 바와 같이 임의의 인터커넥터 및/또는 네트워크 인터페이스들 및/또는 프로토콜들을 이용하여 구현될 수 있다. 내용 인식 데이터 청킹 및 압축 로직(2090), 압축 해제 로직(2028), 하나 이상의 프로세싱 요소들(2029) 등과 같은 로직 중 어느 하나를 포함하는 기능 중 어느 하나는 도 4에 나타난 실시 예에 관해 상술된 하드웨어, 소프트웨어, 또는 이들의 결합을 이용하여 구현될 수 있다. 일부 실시 예들에서, 하나 이상의 압축 해제 로직(2028), 프로세싱 요소들(2029) 등은 스토리지 장치 컨트롤러, FTL 등과 같은 스토리지 장치의 하나 이상의 다른 구성 요소들과 통합될 수 있다. 내용 인식 데이터 청킹 및 압축 로직(2090) 및 압축 해제 로직(2028)은 LZ77, gzip, Snappy 등과 같은 임의의 압축 및/또는 압축 해제 기술들을 구현할 수 있다.
도 21은 본 개시의 실시 예들에 따른 데이터를 청크들로 분할하고 암호화하기 위한 내용 인식 방식의 예를 나타낸다. 도 21에 나타난 실시 예에서, 도 21의 윗부분에 나타난 암호화되지 않은 입력 데이터(2168)(버퍼에 저장될 수 있는)는, 각각 이 예에서 세미콜론일 수 있는 델리미터로 끝나는 하나 이상의 기록들을 포함할 수 있다. 그러나 다른 실시 예들에서, 대괄호, CR-LF 시퀀스 등과 같은 다른 델리미터들이 사용될 수 있다. 일부 실시 예들에서, 하나 이상의 기록들은 입력 데이터(2168) 내의 배열(예를 들어, JSON 배열), 문서(예를 들어, JSON 문서) 등에 포함될 수 있다. 기록이 배열, 문서 등의 끝에서 종료하는 경우, 서로 다른 델리미터들이 배열, 문서 등의 끝을 나타내기 위해 사용될 수 있으나, 도 21에 나타난 방법은 또한 기록의 끝으로서 서로 다른 델리미터를 해석할 수 있다.
제 1 경로(동작 1) 동안, 방법은 입력 데이터(2168)를 스캔할 수 있고, 기본 청크 크기 N에 도달할 때까지 데이터 청크를 생성하기 위해 사용할 수 있다. 청크(2169)의 마지막 데이터 구성 요소가 델리미터인 경우, 방법은 제 2 경로(동작 2)로 진행할 수 있다. 청크의 마지막 데이터 구성 요소가 델리미터가 아닌 경우, 방법은 청크의 크기를 변형하여 청크가 델리미터의 끝과 정렬하도록 할 수 있다. 예를 들어, 방법은 데이터(2168)를 보유하고 있는 버퍼의 위치 N+1에서 시작할 수 있고, 델리미터(2170)를 찾을 때까지 역방향으로 스캔할 수 있다. 방법은 델리미터(2170)가 청크의 마지막 데이터 구성 요소일 때까지 청크의 크기를 감소(예를 들어, 청크를 축소)시킬 수 있다. 그러므로, 청크의 크기는 축소 공간 S의 크기와 같아지도록 감소하여 오직 하나 이상의 완전한 기록들만 포함할 수 있다.
대안적으로, 방법은 데이터(2168)를 보유하고 있는 버퍼의 위치 N+1에서 시작할 수 있고, 델리미터(2171)를 찾을 때까지 순방향으로 스캔할 수 있다. 방법은 도 21의 중앙에 나타난 바와 같이 델리미터(2171)가 청크(2169)의 마지막 데이터 구성 요소일 때까지 청크의 크기를 확장시킬 수 있다. 그러므로, 청크의 크기는 확장 공간 E의 크기와 같아지도록 증가하여 오직 하나 이상의 완전한 기록들만 포함할 수 있다.
일부 실시 예들에서, 방법은 델리미터로 종료하고 오직 완전한 기록들만 포함할 수 있는 자체 포함된(self-contained) 청크(예를 들어, 청크(2169))가 하나 이상의 암호화 알고리즘들을 사용하여 암호화 데이터(2172)를 생성할 수 있는 제 2 경로(동작 2)로 진행할 수 있다.
일부 실시 예들에서, 암호화되지 않은 데이터의 청크의 크기가 감소 또는 확장될 수 있기 때문에, 암호화되지 않은 데이터 청크(1269)의 크기는 가변적일 수 있고, 그러므로 암호화 데이터 청크(1272)의 크기도 가변적일 수 있다.
방법이 청크의 길이를 감소시킬 지 확장시킬 지는, 청크가 전송될 수 있는 객체 또는 키-값 스토리지 장치에 대한 최대 및/또는 최적 데이터 크기, 또는 청크가 전송될 수 있는 블록 기반 스토리지 장치의 블록 크기와 같은 다양한 요인들에 기반할 수 있다. 객체 또는 키-값 스토리지 장치의 경우, 결과적인 암호화 자체-포함된 데이터 청크(2172)는 추가적인 변형 및/또는 프로세싱 없이 저장될 수 있다.
예를 들어 구현의 세부 사항들에 따라, 도 21에 나타난 내용 인식 데이터 청킹 방법은, 서로 다른 스토리지 장치들 상의 청크들 사이에 분할될 수 있는 기록들이 더 적거나 없음으로써, 스토리지 장치들, 스토리지 노드들, 스토리지 서버들 등 사이에 전송되는 기록들의 조각들도 더 적거나 없을 수 있기 때문에, 도 11에 나타난 것과 같은 스토리지 시스템의 동작을 향상시켜 구성 요소들이 완전한 기록들을 갖는 데이터 청크를 복구하거나, 및/또는 완전한 기록들 상에 동작들을 수행할 수 있도록 할 수 있다.
예를 들어, 도 21에 나타난 암호화 방식은, 청킹 로직(426, 526, 및/또는 826)이 암호화되지 않은 입력 데이터(2168)의 기록들 또는 데이터의 다른 유닛들의 경계들(예를 들어, 델리미터들)을 찾는 것에 기반하여 청크 크기를 결정하도록 구성되는 내용 인식 로직을 포함할 수 있는 도 4, 도 5, 및/또는 도 9에 나타난 시스템들 중 어느 하나를 이용하여 구현될 수 있다.
비록 도 21에 나타난 방법이 스토리지 시스템의 동작을 향상시킬 수 있으나, 일부 실시 예들에서 구현의 세부 사항들에 따라, 두 개의 경로들을 사용하는 것과 관련된 오버헤드는, 특히 비교적 큰 객체들을 스캐닝할 때 프로세싱 부담을 증가시킬 수 있다.
본 개시의 실시 예들에 따른 일부 추가적인 내용 인식 데이터 청킹 기술들은 청킹될 데이터를 스캔할 수 있는 데이터 암호화 동작과 같은 다른 동작과 청킹 동작을 통합할 수 있다. 구현의 세부 사항들에 따라, 이는 암호화의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에 청킹 동작의 효율을 증가시킬 수 있다. 그러므로 일부 실시 예들에서, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
도 22는 본 개시의 실시 예들에 따른 암호화 데이터 기술들에 대해 사용될 수 있는 블록 암호 방식의 예를 나타낸다. 예를 들어, 도 22에 나타난 실시 예는 AES 알고리즘에 기반할 수 있다. 암호화될 데이터는 플레인텍스트 입력 데이터(2291)의 블록들(예를 들어, 128비트 블록들)로서 수신될 수 있고, 프리-라운드 변형(2292), 키 확장 로직(2296)에 의해 생성되는 라운드 키들(K0, K1, …, KR)을 사용하는 하나 이상의 AES 암호화 라운드들(2293-1, …, 2293-Nr)을 포함하는 일련의 연결된 동작들로 처리될 수 있고, 그리고 암호텍스트 출력 데이터(2294)의 대응하는 블록들(예를 들어, 128비트 블록들)로서 출력될 수 있다. 예를 들어, 라운드 R의 수는 암호화 라운드들을 위해 사용되는 암호 키(2295)의 길이(예를 들어, 128비트, 192비트, 또는 256비트)에 의해 결정될 수 있다. 일부 실시 예들에서, 암호텍스트 출력 데이터(2294)의 블록들의 크기는 플레인텍스트 입력 데이터(2291)의 블록들과 동일한 크기일 수 있다.
일부 실시 예들에서, 플레인텍스트 및/또는 암호텍스트는 실제 텍스트뿐만 아니라, 이미지, 오디오, 비디오 등과 같은 임의의 형태의 임의의 데이터를 지칭할 수 있다.
입력 데이터가 도 22에 나타난 것과 같은 블록 암호 방식을 이용하는 암호화를 위해 스캐닝되기 때문에, 도 22에 나타난 실시 예는 본 개시의 실시 예들에 따른 내용 인식 데이터 청킹 기술과 통합될 수 있다. 구현의 세부 사항들에 따라, 이는 암호화의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에 청킹 동작의 효율을 증가시킬 수 있다. 그러므로 일부 실시 예들에서, 암호화를 위한 스캐닝과 델리미터를 위한 스캐닝이 동시에 수행될 수 있기 때문에, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
도 23은 본 개시의 실시 예들에 따른 통합된 데이터 청킹 및 암호화 방식의 예를 나타낸다. 도 24는 본 개시의 실시 예들에 따른 통합된 데이터 청킹 및 암호화 방법의 예를 나타낸다. 예를 들어, 도 24에 나타난 방법은 도 23에 나타난 방식과 함께 사용될 수 있다.
도 23에 나타난 방식에서, 도 23의 윗부분에 나타난 암호화되지 않은 입력 데이터의 스트림(2368)은, 각각 이 예에서 세미콜론일 수 있는 델리미터로 끝나는 하나 이상의 기록들을 포함할 수 있다. 그러나 다른 실시 예들에서, 대괄호, CR-LF 시퀀스 등과 같은 다른 델리미터들이 사용될 수 있다. 일부 실시 예들에서, 하나 이상의 기록들은 입력 데이터(2368) 내의 배열(예를 들어, JSON 배열), 문서(예를 들어, JSON 문서) 등에 포함될 수 있다. 기록이 배열, 문서 등의 끝에서 종료하는 경우, 서로 다른 델리미터들이 배열, 문서 등의 끝을 나타내기 위해 사용될 수 있으나, 도 23에 나타난 방법은 또한 기록의 끝으로서 서로 다른 델리미터를 해석할 수 있다.
도 23에 나타난 방식은 도 24에 나타나는 바와 같은 이하의 하나 이상의 동작들을 수행할 수 있다.
(1) 제 1 동작(2497-1)에서, 방법은 입력 데이터의 스트림(2368)을 스캔할 수 있고, 도 23에 나타난 바와 같은 입력 데이터의 스트림(2368)의 하나 이상의 부분들(또한 일부들로 지칭될 수도 있는)(2398)에 대해 도 22에 나타난 바와 같은 블록 암호를 적용할 수 있다. 블록 암호는 하나 이상의 부분들(2398)의 크기가 블록 암호에 의해 사용되는 블록 크기, 나아가 블록 암호에 의해 사용되는 키 길이에 대응할 수 있는 블록 단위 방식에 기반하여 입력 데이터의 스트림(2368)에 적용될 수 있다. 예를 들어, 입력 데이터의 스트림(2368)은 기본 청크 크기 N에 도달할 때까지 블록 암호를 사용하여 암호화될 수 있다. 일부 실시 예들에서, 기본 청크 크기 N은 블록 암호에 의해 사용되는 블록 크기(예를 들어, 키 길이)의 짝수배로 설정될 수 있다.
(2) 제 2 동작(2497-2)에서, 현재 데이터 청크의 마지막 데이터 구성 요소가 델리미터가 아닌 경우, 도 23의 윗부분에 나타난 바와 같이 방법은 델리미터(2399)를 찾기 위해 입력 데이터의 스트림(2368)을 계속 스캔할 수 있고, 델리미터(2399)가 청크의 마지막 데이터 구성 요소일 때까지 E만큼 데이터 청크를 확장시킬 수 있다.
(3) 제 3 동작(2497-3)에서, 데이터 청크의 끝이 블록 암호에 의해 사용되는 블록의 끝과 정렬하지 않는 경우, 방법은 도 23의 아랫부분에 나타난 바와 같이 청크의 끝이 블록의 끝과 정렬하도록 청크(23100)를 p만큼 더 확장하기 위해 데이터 청크를 패딩 구성 요소들 “p”로 패딩할 수 있다.
(4) 제 4 동작(2497-4)에서, 청크가 확장된 경우, 블록 암호는 부분들 E 및 P를 포함하는(있는 경우) 블록에 적용될 수 있다.
(5) 제 5 동작(2497-5)에서, 입력 데이터의 스트림의 델리미터(2399)의 위치에 기반하는 가변 길이를 가질 수 있는 결과적인 암호화 데이터 청크(23101)는 예를 들어 KV 드라이브에 저장될 수 있다.
예를 들어 일부 실시 예들에서, 도 23 및/또는 도 24에 나타난 실시 예들은 입력 데이터의 스트림의 사용자 객체의 끝에 도달할 때까지 계속될 수 있다. 객체는 암호화된 하나 이상의 데이터 청크들로 분할될 수 있고 암호화될 수 있다. (a) 플레인텍스트 입력 데이터의 크기가 가변적일 수 있고, (b) 서로 다른 기본 청크 크기들 N이 사용될 수 있고, 및/또는 (c) 청크가 델리미터 및/또는 하나 이상의 패딩 구성 요소들을 포함하도록 확장될 수 있기 때문에, 암호화 데이터 청크의 크기는 가변적일 수 있다. 객체 또는 키-값 스토리지 장치의 경우, 결과적인 암호화, 자체-포함된 데이터 청크는 추가적인 변형 및/또는 프로세싱 없이 저장될 수 있다.
예를 들어 구현의 세부 사항들에 따라, 도 23 및/또는 도 24에 나타난 내용 인식 데이터 청킹 기술들은, 서로 다른 스토리지 장치들 상의 청크들 사이에 분할될 수 있는 기록들이 더 적거나 없음으로써, 스토리지 장치들, 스토리지 노드들, 스토리지 서버들 등 사이에 전송되는 기록들의 조각들도 더 적거나 없을 수 있기 때문에, 도 11에 나타난 바와 같은 스토리지 시스템의 동작을 향상시켜 구성 요소들이 완전한 기록들을 갖는 데이터 청크를 복구하거나, 및/또는 완전한 기록들 상에 동작들을 수행할 수 있도록 할 수 있다. 나아가, 도 23 및/또는 도 24에 나타난 실시 예들은 암호화의 목적으로 이미 수행되고 있는 스캐닝 동작을 활용할 수 있기 때문에, 이는 두 개의 스캐닝 경로들과 관련된 오버헤드를 감소 또는 제거할 수 있다.
설명의 목적으로, 도 22, 도 23, 및/또는 도 24에 나타난 실시 예들은 AES와 같은 블록 암호의 맥락에서 설명될 수 있다. 그러나, 원리들은 또한 RC4와 같은 스트림 암호들을 사용하는 방식들에 대해 적용될 수도 있다.
도 25는 본 개시의 실시 예들에 따른 통합된 청킹 및 암호화를 이용하는 시스템의 예를 나타낸다. 예를 들어, 도 25에 나타난 시스템은 도 22, 도 23, 및/또는 도 24에 관해 설명된 기술들 중 어느 하나를 구현하기 위해 사용될 수 있다.
도 25를 참조하면, 시스템은 호스트(2524) 및 커넥션(2522)을 통해 통신할 수 있는 계산적 스토리지 장치(2508)를 포함할 수 있다. 호스트(2524)는 내용 인식 데이터 청킹 및 암호화 로직(25101)(청킹 및 암호화 로직, 통합 청킹 및 암호화 로직, 또는 통합 로직이라고 지칭)을 포함할 수 있다. 청킹 및 암호화 로직은 스토리지 장치(2508)로 하나 이상의 데이터 청크들을 제공하도록 구성될 수 있다. 예를 들어, 데이터 청킹 및 암호화 로직(25101)은 스토리지 장치(2508)가 데이터 청크를 복호화하고 복호화 데이터 청크에 대해 동작을 수행할 수 있도록, 암호화 이전에 객체 또는 다른 원래 데이터를 하나 이상의 데이터 청크들로 분할할 수 있다.
일부 실시 예들에서, 청킹 및 암호화 로직(25101)이 내용을 인식할 수 있기 때문에, 이는 기록들 사이의 경계들에 기반하여 데이터를 청크들로 분할할 수 있다. 예를 들어, 청킹 및 암호화 로직(25101)은 청크가 기록 델리미터로 끝날 수 있고, 완전한 기록으로 끝날 수 있도록, 데이터의 기록 델리미터를 찾아 데이터를 가변 크기의 청크들로 분할할 수 있다.
계산적 스토리지 장치(2508)는 복호화 로직(2528), 하나 이상의 프로세싱 요소들(2529), 및 스토리지 매체(2530)를 포함할 수 있다. 복호화 로직(2528)은 하나 이상의 프로세싱 요소들(2529)이 동작을 수행할 수 있는 형태로 암호화 데이터 청크를 복호화하도록 구성될 수 있다. 하나 이상의 프로세싱 요소들(2529)은 데이터 선택(예를 들어, 스캐닝, 필터링 등), 가속 계산, 그래프 프로세싱, 그래픽 프로세싱, 머신 러닝 등과 같은 임의의 유형의 동작을 수행하도록 구성될 수 있다. 스토리지 매체(2530)는 호스트(2524)에 의해 전송된 하나 이상의 변형된 데이터 청크를 포함하는 임의의 데이터를 저장하는 데 사용될 수 있다.
일부 실시 예들에서, 복호화 로직(2528) 및/또는 하나 이상의 프로세싱 요소들(2529)은 스토리지 장치(2508)에서 수신되는 쿼리(예를 들어, 표현)를 포함할 수 있는 요청에 응답하여, 스토리지 매체(2530)로부터 하나 이상의 데이터 청크들을 읽고 복호화하고, 복구된 데이터 청크에 대해 임의의 다른 동작을 수행하도록 구성될 수 있다.
일부 실시 예들에서, 계산적 스토리지 장치(2508)는 내용 인식 데이터 청킹 및 암호화 로직(25101)으로 하나 이상의 지시들을 제공하도록 구성될 수 있는 지시 로직을 더 포함할 수 있다. 하나 이상의 지시들은 도 5에 나타난 실시 예에 관해 상술된 바와 같이 원래 데이터를 청크들로 어떻게 분할할 지 결정하기 위해 사용될 수 있다.
호스트(2524)는 도 4에 나타난 실시 예에 관해 상술된 바와 같은 임의의 구성 요소들 또는 구성 요소들의 결합을 이용하여 구현될 수 있다. 스토리지 장치(2508)는 도 4에 나타난 실시 예에 관해 상술된 바와 같이 임의의 커넥터 설정을 사용하고 임의의 폼 팩터를 갖는 임의의 스토리지 매체로서 구현될 수 있다. 호스트(2524) 및 스토리지 장치(2508)는 도 4에 나타난 실시 예에 관해 상술된 바와 같이 서버 섀시, 서버 랙, 데이터룸, 데이터센터, 엣지 데이터센터, 모바일 엣지 데이터센서, 및/또는 이들의 결합들을 전부 또는 부분적으로 이용하여 구현될 수 있거나, 및/또는 관련되어 사용될 수 있다. 통신 커넥션(2522)은 도 4에 나타난 실시 예에 관해 상술된 바와 같이 임의의 인터커넥터 및/또는 네트워크 인터페이스들 및/또는 프로토콜들을 이용하여 구현될 수 있다. 내용 인식 데이터 청킹 및 암호화 로직(25101), 복호화 로직(2528), 하나 이상의 프로세싱 요소들(2529) 등과 같은 로직 중 어느 하나를 포함하는 기능 중 어느 하나는 도 4에 나타난 실시 예에 관해 상술된 하드웨어, 소프트웨어, 또는 이들의 결합을 이용하여 구현될 수 있다. 일부 실시 예들에서, 하나 이상의 복호화 로직(2528), 프로세싱 요소들(2029) 등은 스토리지 장치 컨트롤러, FTL 등과 같은 스토리지 장치의 하나 이상의 다른 구성 요소들과 통합될 수 있다. 내용 인식 데이터 청킹 및 암호화 로직(25101) 및 복호화 로직(2528)은 DES(Data Encryption Standard), AES 등과 같은 임의의 암호화 및/또는 복호화 기술들을 구현할 수 있다.
비록 일부 실시 예들이 계산적 스토리지 장치들에 의해 사용되기 위한 통합된 데이터 청킹, 압축, 암호화 등의 맥락에서 설명될 수 있으나, 원리들은 특정 애플리케이션에 한정되지 않고, 임의의 데이터 청킹 애플리케이션에 의해 사용되기 위해, 그리고 가속기, 네트워크 인터페이스 카드 등을 포함하는 임의의 유형의 장치들에 의해 사용되기 위해 적용될 수 있다.
설명의 목적으로, 통합된 청킹 및 압축 그리고 통합된 청킹 및 암호화를 구현할 수 있는 실시 예들이 개별적으로 나타났으나, 원리들은 통합된 데이터 청킹, 압축, 및 암호화를 구현할 수 있는 방식들을 구현하기 위해 본 개시의 실시 예들에 따라 통합될 수 있다.
본 명세서에 개시된 원리들은 데이터 청킹을 데이터 압축 및/또는 암호화 동작들뿐만 아니라, 예컨대 필터링, 삭제 코딩, 검색, 머신 러닝, 그래프 프로세싱 등을 포함하는 데이터를 스캔할 수 있는 임의의 유형의 동작들로 통합하기 위해 적용될 수 있다. 예를 들어, 도 20 및 도 25에 나타난 실시 예들에서, 데이터 청킹 및 압축 로직(2090) 및/또는 데이터 청킹 및 암호화 로직(25101)은 청킹 목적의 스캐닝과, 임의의 다른 동작을 위한 스캐닝을 통합하도록 변형될 수 있다. 그러므로, 일부 실시 예들에서, 방법은 입력 데이터를 스캔하는 단계, 스캔하는 단계에 기반하여 입력 데이터의 델리미터를 찾는 단계, 그리고 입력 데이터의 델리미터의 위치에 기반하여 처리된 데이터를 사용하여 데이터 청크를 생성하는 단계를 포함할 수 있다. 일부 실시 예들에서, 데이터는 입력 데이터의 스트림을 포함할 수 있고, 동작은 스트리밍 기반 동작일 수 있다. 일부 실시 예들에서, 동작은 블록 기반 동작일 수 있다. 일부 실시 예들에서, 시스템은 호스트를 포함할 수 있고, 호스트는 입력 데이터에 대해 스캐닝 동작을 수행하고, 스캐닝 동작에 기반하여 프로세싱 동작을 수행하여 입력 데이터를 사용하여 처리된 데이터를 생성하고, 스캐닝 동작에 기반하여 입력 데이터의 델리미터를 찾고, 델리미터에 기반하여 처리된 데이터를 사용하여 데이터 청크를 생성하도록 구성되는 호스트 로직을 포함할 수 있다. 일부 실시 예들에서, 시스템은 호스트로부터 데이터 청크를 수신하도록 구성되는 장치를 더 포함할 수 있고, 장치는 데이터 청크를 복구하여 복구된 데이터 청크를 생성하고, 그리고 복구된 데이터 청크에 대해 동작을 수행하도록 구성되는 장치 로직을 포함할 수 있다.
도 26은 본 개시의 실시 예들에 따른 데이터 청크 변형을 이용하는 스토리지 방식에 대한 호스트 장치의 예를 나타낸다. 도 26에 나타난 호스트(2600)는 본 명세서에 개시된 호스트 기능 중 어느 하나를 구현하기 위해 사용될 수 있다. 호스트(2600)는 하나 이상의 클라이언트들, 하나 이상의 객체 스토리지 서버들, 하나 이상의 스토리지 노드들 등 또는 이들의 결합과 같은 임의의 구성 요소 또는 구성 요소들의 결합을 이용하여 구현될 수 있다.
도 26에 나타난 호스트 장치(2600)는, 메모리 컨트롤러(2604), 시스템 메모리(2606), 호스트 컨트롤 로직(2608), 및/또는 통신 인터페이스(2610)를 포함할 수 있는 프로세서(2602)를 포함할 수 있다. 도 26에 나타난 임의의 또는 모든 구성 요소들은 하나 이상의 시스템 버스들(2612)을 통해 통신할 수 있다. 일부 실시 예들에서, 도 26에 나타난 하나 이상의 구성 요소들은 다른 구성 요소들을 사용하여 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트 컨트롤 로직(2608)은 시스템 메모리(2606) 또는 다른 메모리에 저장된 명령들을 실행하는 프로세서(2602)에 의해 구현될 수 있다.
호스트 컨트롤 로직(2608)은 데이터 청킹 로직(426, 526, 및/또는 826), 데이터 변형 로직(427 및/또는 527), 압축 로직(846), 암호화 로직(847), 삭제 코딩 로직(848), 데이터 선택 로직(849), 클러스터 관리 로직(850), 노드 및 장치 관리 로직(851), 프로세싱 유닛들(852), 내용 인식 데이터 청킹 및 압축 로직(2090), 내용 인식 데이터 청킹 및 암호화 로직(25101) 등을 포함하는, 본 명세서에 개시된 호스트 기능 중 어느 하나를 포함 및/또는 구현할 수 있다.
도 27은 본 개시의 실시 예들에 따른 데이터 청크 변형을 이용하는 스토리지 장치의 예를 나타낸다. 도 27에 나타난 스토리지 장치(2700)는 본 명세서에 개시된 스토리지 장치 기능 중 어느 하나를 구현하기 위해 사용될 수 있다. 스토리지 장치(2700)는 장치 컨트롤러(2702), 미디어 전환 레이어(2704), 스토리지 매체(2706), 계산적 리소스들(2708), 프로세싱 컨트롤 로직(2716), 및 통신 인터페이스(2710)를 포함할 수 있다. 도 27에 나타난 구성 요소들은 하나 이상의 장치 버스들(2712)을 통해 통신할 수 있다. 스토리지 매체(2706)의 일부 또는 전부를 위해 플래시 메모리를 사용할 수 있는 일부 실시 예들에서, 미디어 전환 레이어(2704)는 부분적 또는 전체적으로 FTL로서 구현될 수 있다.
일부 실시 예들에서, 프로세싱 컨트롤 로직(2716)은 데이터 복구 로직(428 및/또는 528), 프로세싱 요소들(429, 529, 및/또는 1429), 지시 로직(531), 데이터 선택 엔진(853), 복호화 로직(854), 압축 해제 로직(855), 데이터 선택 로직(856), 키-값 로직(857), 압축 해제 로직(2028), 하나 이상의 프로세싱 요소들(2029), 복호화 로직(2528), 하나 이상의 프로세싱 요소들(2529) 등을 포함하는 본 명세서에 개시된 스토리지 장치 기능 중 어느 하나를 구현하기 위해 사용될 수 있다.
상술한 바와 같이, 본 명세서에 개시된 호스트(예를 들어, 클라이언트, 스토리지 서버, 스토리지 노드 등) 기능, 스토리지 장치 기능 중 어느 하나를 포함하는 임의의 기능은, 결합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들, 상태 머신들, DRAM 및/또는 SRAM과 같은 휘발성 메모리들, 불휘발성 메모리 및/또는 이들의 결합, 임의의 유형의 메모리에 저장된 명령들을 실행하는 CPLD, FPGA, ASIC, x86 프로세서와 같은 CISC 프로세서 및/또는 ARM 프로세서와 같은 RISC 프로세서를 포함하는 CPU, GPU, NPU 등을 포함하는 하드웨어, 소프트웨어, 또는 이들의 결합을 이용하여 구현될 수 있다. 일부 실시 예들에서, 하나 이상의 구성 요소들은 시스템-온-칩으로서 구현될 수 있다.
도 28은 본 개시의 실시 예들에 따른 데이터 압축 방법의 예를 나타낸다. 방법은 동작 2802에서 시작할 수 있다. 동작 2804에서, 방법은 입력 데이터를 스캔할 수 있다. 일부 실시 예들에서, 입력 데이터는 입력 데이터의 스트림으로서 수신될 수 있다. 동작 2806에서, 방법은 스캔 결과에 기반하여 입력 데이터를 사용하여 압축 데이터를 생성하기 위해 압축 동작을 수행할 수 있다. 동작 2808에서, 방법은 스캔 결과에 기반하여 입력 데이터의 델리미터를 찾을 수 있다. 예를 들어, 입력 데이터는 하나 이상의 기록들을 포함할 수 있고, 델리미터는 기록의 경계를 나타낼 수 있다. 동작 2810에서, 방법은 입력 데이터의 델리미터의 위치에 기반하여, 압축 데이터를 사용하여 부분 데이터를 생성할 수 있다. 방법은 동작 2812에서 종료할 수 있다.
도 29는 본 개시의 실시 예들에 따른 데이터 암호화 방법의 예를 나타낸다. 방법은 동작 2902에서 시작할 수 있다. 동작 2904에서, 방법은 입력 데이터를 스캔할 수 있다. 일부 실시 예들에서, 입력 데이터는 입력 데이터의 스트림으로서 수신될 수 있다. 동작 2906에서, 방법은 스캔 결과에 기반하여 입력 데이터를 사용하여 암호화 데이터를 생성하기 위해 암호화 동작을 수행할 수 있다. 동작 2908에서, 방법은 스캔 결과에 기반하여 입력 데이터의 델리미터를 찾을 수 있다. 예를 들어, 입력 데이터는 하나 이상의 기록들을 포함할 수 있고, 델리미터는 기록의 경계를 나타낼 수 있다. 동작 2910에서, 방법은 입력 데이터의 델리미터의 위치에 기반하여, 암호화 데이터를 사용하여 부분 데이터를 생성할 수 있다. 방법은 동작 2912에서 종료할 수 있다.
도 30은 본 개시의 실시 예들에 따른 데이터를 하나 이상의 부분 데이터들로 분할하기 위한 방법의 예를 나타낸다. 방법은 동작 3002에서 시작할 수 있다. 동작 3004에서, 방법은 입력 데이터를 스캔할 수 있다. 일부 실시 예들에서, 입력 데이터는 입력 데이터의 스트림으로서 수신될 수 있다. 동작 3006에서, 방법은 스캔 결과에 기반하여 처리된 데이터를 생성하기 위해 입력 데이터에 대해 동작을 수행할 수 있다. 일부 실시 예들에서, 동작은 압축, 암호화, 필터링, 삭제 코딩, 검색, 머신 러닝, 그래프 프로세싱 등과 같이 데이터를 스캔할 수 있는 임의의 동작일 수 있다. 동작 3008에서, 방법은 스캔 결과에 기반하여 입력 데이터의 델리미터를 찾을 수 있다. 예를 들어, 입력 데이터는 하나 이상의 기록들을 포함할 수 있고, 델리미터는 기록의 경계를 나타낼 수 있다. 동작 3010에서, 방법은 입력 데이터의 델리미터의 위치에 기반하여, 처리된 데이터를 사용하여 부분 데이터를 생성할 수 있다. 방법은 동작 3012에서 종료할 수 있다.
도 28, 도 29, 및 도 30에 나타난 실시 예들뿐만 아니라 본 명세서에 개시된 모든 다른 실시 예들은 예시적인 동작들 및/또는 구성 요소들이다. 일부 실시 예들에서, 일부 동작들 및/또는 구성 요소들은 생략될 수 있고, 다른 동작들 및/또는 구성 요소들이 포함될 수 있다. 나아가, 일부 실시 예들에서, 동작들 및/또는 구성 요소들의 시간적 및/또는 공간적 순서는 변화할 수 있다. 비록 일부 구성 요소들 및/또는 동작들이 개별적인 구성 요소들로 나타날 수 있으나, 일부 실시 예들에서, 개별적으로 나타난 일부 구성 요소들 및/또는 동작들은 단일 구성 요소들 및/또는 동작들로 통합될 수 있고, 및/또는 단일 구성 요소들 및/또는 동작들로 나타난 일부 구성 요소들 및/또는 동작들은 다수의 구성 요소들 및/또는 동작들을 이용하여 구현될 수 있다.
상술된 일부 실시 예들은 다양한 구현의 세부 사항들의 맥락에서 설명되었지만, 본 개시의 원리들은 이들 또는 임의의 다른 특정 세부 사항들에 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성 요소들에 의해 구현되는 것으로 설명되었지만, 다른 실시 예들에서 기능은 서로 다른 위치들에 있고 다양한 사용자 인터페이스들을 갖는 상이한 시스템들 및 구성 요소들 사이에 분산될 수 있다. 특정 실시 예들은 특정 프로세스들, 동작들 등을 갖는 것으로 설명되었지만, 이러한 용어들은 또한 특정 프로세스, 동작 등이 다수의 프로세스들, 동작들 등으로 구현될 수 있거나, 다수의 프로세스들, 동작들 등이 단일 프로세스, 단계 등으로 통합되어 구현될 수 있는 실시 예들을 포함한다. 구성 요소 또는 요소에 대한 참조는 구성 요소 또는 요소의 일부만을 나타낼 수 있다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브 블록들을 참조할 수 있다. 본 개시 및 청구 범위에서 "제 1" 및 "제 2"와 같은 용어의 사용은 그들이 변형하는 것을 구별하기 위한 목적일 수 있으며, 문맥상 달리 명백하지 않는 한 공간적 또는 시간적 순서를 나타내지 않을 수 있다. 일부 실시 예들에서, 사물에 대한 언급은 사물의 적어도 일부를 지칭할 수 있고, 예를 들어 "~에 기반하는"은 "~에 적어도 부분적으로 기반하는" 등을 지칭할 수 있다. 첫 번째 요소에 대한 참조는 두 번째 요소의 존재를 의미하지 않을 수 있다. 본 명세서에 개시된 원리들은 독립적인 유용성을 가지고 개별적으로 구현될 수 있으며, 모든 실시 예들이 모든 원리를 활용할 수 있는 것은 아니다. 그러나, 원리들은 또한 다양한 조합들 상에서 구현될 수 있고, 이들 중 일부는 시너지를 이루어 개별적인 원리들의 이점들을 증폭시킬 수 있다.
상술된 다양한 세부 사항들 및 실시 예들은 본 개시의 원리에 따른 추가 실시 예들을 생성하기 위해 결합될 수 있다. 본 개시의 발명 원리는 본 개시의 개념을 벗어나지 않고 배열 및 세부 사항에서 수정될 수 있으므로, 이러한 변경 및 수정은 다음 청구 범위에 속하는 것으로 간주된다.

Claims (20)

  1. 데이터 압축을 위한 방법에 있어서,
    입력 데이터를 수신하는 단계;
    상기 입력 데이터의 델리미터를 찾는 단계;
    상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 입력 데이터의 일부를 사용하여 부분 데이터를 생성하는 단계; 및
    상기 부분 데이터를 압축하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 입력 데이터는 기록을 포함하고,
    상기 델리미터는 상기 기록의 경계를 나타내고, 그리고
    상기 부분 데이터는 상기 기록을 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 델리미터의 상기 위치는 상기 입력 데이터의 상기 일부 상에 있는 방법.
  4. 제 3 항에 있어서,
    상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 일부의 부분집합에 기반하여 상기 부분 데이터를 생성하는 단계를 포함하는 방법.
  5. 제 1 항에 있어서,
    상기 입력 데이터의 상기 일부는 상기 입력 데이터의 제 1 부분이고, 그리고
    상기 델리미터의 상기 위치는 상기 입력 데이터의 제 2 부분 상에 있는 방법.
  6. 제 5 항에 있어서,
    상기 부분 데이터를 생성하는 단계는 상기 입력 데이터의 상기 제 1 부분 및 상기 입력 데이터의 상기 제 2 부분에 기반하여 상기 부분 데이터를 생성하는 단계를 포함하는 방법.
  7. 제 1 항에 있어서,
    상기 입력 데이터의 상기 일부의 크기는 기본 부분 크기에 기반하는 방법.
  8. 제 1 항에 있어서,
    상기 델리미터의 상기 위치에 기반하여 상기 부분 데이터의 크기를 변형하는 단계를 더 포함하는 방법.
  9. 데이터 압축을 위한 방법에 있어서,
    입력 데이터를 스캔하는 단계;
    상기 스캔하는 단계에 기반하여, 상기 입력 데이터를 사용하여 압축 데이터를 생성하기 위한 압축 동작을 수행하는 단계;
    상기 스캔하는 단계에 기반하여, 상기 입력 데이터의 델리미터를 찾는 단계; 및
    상기 입력 데이터의 상기 델리미터의 위치에 기반하여, 상기 압축 데이터를 사용하여 부분 데이터를 생성하는 단계를 포함하는 방법.
  10. 제 9 항에 있어서,
    상기 입력 데이터는 기록을 포함하고,
    상기 델리미터는 상기 기록의 경계를 나타내고, 그리고
    상기 부분 데이터는 상기 기록을 포함하는 방법.
  11. 제 9 항에 있어서,
    상기 부분 데이터를 생성하는 단계는 부분 크기에 기반하여 상기 부분 데이터를 생성하는 단계를 포함하는 방법.
  12. 제 11 항에 있어서,
    상기 부분 크기는 기본 부분 크기인 방법.
  13. 제 11 항에 있어서,
    상기 부분 크기는 기본 부분 크기 및 상기 입력 데이터의 상기 델리미터의 길이에 기반하는 방법.
  14. 제 9 항에 있어서,
    상기 압축 데이터의 크기에 기반하여 지시를 설정하는 단계를 더 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 부분 데이터를 생성하는 단계는 상기 지시 및 상기 델리미터에 기반하여 상기 부분 데이터를 생성하는 단계를 포함하는 방법.
  16. 제 14 항에 있어서,
    상기 스캔하는 단계는 상기 지시에 기반하여 상기 입력 데이터를 스캔하는 단계를 포함하는 방법.
  17. 제 9 항에 있어서,
    상기 스캔하는 단계는 상기 델리미터에 기반하여 상기 입력 데이터를 스캔하는 단계를 포함하는 방법.
  18. 제 9 항에 있어서,
    상기 압축 동작을 수행하는 단계는 상기 델리미터에 기반하여 상기 압축 동작을 수행하는 단계를 포함하는 방법.
  19. 호스트를 포함하는 시스템에 있어서, 상기 호스트는:
    입력 데이터에 기반하여 스캔 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터를 사용하여 압축 데이터를 생성하기 위해 데이터 압축 동작을 수행하고, 상기 스캔 동작에 기반하여, 상기 입력 데이터의 델리미터를 찾고, 그리고 상기 델리미터에 기반하여, 상기 압축 데이터를 사용하여 부분 데이터를 생성하는 호스트 로직을 포함하는 시스템.
  20. 제 19 항에 있어서,
    상기 호스트로부터 상기 부분 데이터를 수신하는 장치를 더 포함하고,
    상기 장치는 압축 해제된 부분 데이터를 생성하기 위해 상기 부분 데이터를 압축 해제하고, 그리고 상기 압축 해제된 부분 데이터에 대해 연산을 수행하는 장치 로직을 포함하는 시스템.
KR1020220087186A 2021-08-10 2022-07-14 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치 KR20230023565A (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US202163231709P 2021-08-10 2021-08-10
US202163231711P 2021-08-10 2021-08-10
US202163231715P 2021-08-10 2021-08-10
US202163231710P 2021-08-10 2021-08-10
US63/231,715 2021-08-10
US63/231,711 2021-08-10
US63/231,710 2021-08-10
US63/231,709 2021-08-10
US17/677,989 2022-02-22
US17/677,989 US20230055535A1 (en) 2021-08-10 2022-02-22 Systems, methods, and apparatus for dividing and compressing data

Publications (1)

Publication Number Publication Date
KR20230023565A true KR20230023565A (ko) 2023-02-17

Family

ID=82656465

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220087186A KR20230023565A (ko) 2021-08-10 2022-07-14 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치

Country Status (5)

Country Link
US (1) US20230055535A1 (ko)
EP (1) EP4135200A1 (ko)
KR (1) KR20230023565A (ko)
CN (1) CN115705150A (ko)
TW (1) TW202311996A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116633808B (zh) * 2023-07-19 2023-10-03 成都成电光信科技股份有限公司 一种时间触发光纤通道网络下的数据监控系统及其方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5396595A (en) * 1992-04-24 1995-03-07 Spacelabs Medical, Inc. Method and system for compression and decompression of data
US6938204B1 (en) * 2000-08-31 2005-08-30 International Business Machines Corporation Array-based extensible document storage format
US9426219B1 (en) * 2013-12-06 2016-08-23 Amazon Technologies, Inc. Efficient multi-part upload for a data warehouse
US10540606B2 (en) * 2014-06-30 2020-01-21 Amazon Technologies, Inc. Consistent filtering of machine learning data
WO2020186081A1 (en) * 2019-03-12 2020-09-17 Intel Corporation Computational data storage systems

Also Published As

Publication number Publication date
US20230055535A1 (en) 2023-02-23
TW202311996A (zh) 2023-03-16
EP4135200A1 (en) 2023-02-15
CN115705150A (zh) 2023-02-17

Similar Documents

Publication Publication Date Title
US10642522B2 (en) Method and system for in-line deduplication in a storage drive based on a non-collision hash
CN101467148B (zh) 利用了数据段的相似度的高效数据存储
US10270468B2 (en) Method for file updating and version control for linear erasure coded and network coded storage
US11184021B2 (en) Using predicates in conditional transcoder for column store
US8516002B2 (en) Deflate file data optimization
US11755254B2 (en) Network storage gateway
KR20230023565A (ko) 데이터 분할 및 압축을 위한 시스템, 방법, 및 장치
EP4134818A1 (en) Systems, methods, and apparatus for dividing and encrypting data
EP4135203A1 (en) Systems, methods, and apparatus for processing data at a storage device
KR20230023584A (ko) 계산적 스토리지의 계층적 취합을 위한 시스템, 방법, 및 장치
KR20200121760A (ko) 인코딩된 데이터에 대한 조건부 트랜스코딩
KR20230023585A (ko) 계산적 스토리지의 데이터 리사이징을 위한 시스템, 방법, 및 장치
US20240094940A1 (en) Memory system
US11748307B2 (en) Selective data compression based on data similarity
US20200374370A1 (en) Binding a local data storage device to remote data storage
KR20240078422A (ko) 인코딩된 데이터에 대한 조건부 트랜스코딩
JP2024046000A (ja) 圧縮装置及び圧縮方法