KR20230023564A - 저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치 - Google Patents

저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치 Download PDF

Info

Publication number
KR20230023564A
KR20230023564A KR1020220086559A KR20220086559A KR20230023564A KR 20230023564 A KR20230023564 A KR 20230023564A KR 1020220086559 A KR1020220086559 A KR 1020220086559A KR 20220086559 A KR20220086559 A KR 20220086559A KR 20230023564 A KR20230023564 A KR 20230023564A
Authority
KR
South Korea
Prior art keywords
data
storage
storage device
chunks
logic
Prior art date
Application number
KR1020220086559A
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 KR20230023564A publication Critical patent/KR20230023564A/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/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • 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/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • 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/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • 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/6005Decoder aspects
    • 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/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Image Processing (AREA)

Abstract

연산 저장(computational storage)에 대한 방법은 저장 장치(storage device)에서 데이터의 일 부분의 수정된 버전(modified version)을 수신하는 단계, 상기 저장 장치에서 상기 데이터의 일 부분의 상기 수정된 버전으로부터 데이터의 복원된(restored) 부분을 생성하는 단계 및 상기 저장 장치에서 상기 데이터의 복원된 부분에서 동작을 수행하는 단계를 포함할 수 있다. 상기 방법은 상기 저장 장치에서 상기 데이터의 일 부분에 서 상기 동작을 수행하도록 하는 요청을 수신하는 단계를 더 포함할 수 있다. 상기 생성하는 단계는, 상기 데이터의 일 부분의 상기 수정된 버전을 압축 해제(decompressing)하는 단계를 포함할 수 있다. 상기 생성하는 단계는 상기 데이터의 일 부분의 상기 수정된 버전을 해독(decrypting)하는 단계를 포함할 수 있다. 상기 연산 저장에 대한 방법은 상기 저장 장치로부터 상기 데이터의 복원된 부분에서 상기 동작의 결과를 송신하는 단계를 더 포함할 수 있다. 상기 연산 저장에 대한 방법은 상기 동작은 필터링 동작(filtering operation)을 포함할 수 있다. 상기 동작은 스캐닝 동작을 포함할 수 있다. 상기 연산 저장에 대한 방법은 상기 데이터의 일 부분을 생성하기 위해 데이터를 나누는 단계를 포함할 수 있다.

Description

저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치 {SYSTEMS, METHODS, AND APPARATUS FOR PROCESSING DATA AT A STORAGE DEVICE}
본 개시는 일반적으로 저장 시스템에 관한 것으로, 보다 구체적으로 저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치에 관한 것이다.
본 개시는 2021년 8월 10일에 출원된 미국 가출원 제63/231,709호 및의 제 63/231,711호의 이익을 주장하며, 전문이 참조로 통합된다.
연산 저장 장치는 장치에 저장된 데이터에 대해 동작할 수 있는 하나 이상의 처리 리소스를 포함할 수 있다. 호스트는 예를 들어 장치에 저장된 데이터에 대해 수행할 동작을 나타내는 명령을 저장 장치에 전송함으로써 처리 작업을 저장 장치로 오프로드할 수 있다. 저장 장치는 명령을 실행하기 위해 하나 이상의 처리 리소스를 사용할 수 있습니다. 저장 장치는 작업의 결과를 호스트에 보내고/하거나 장치에 결과를 저장할 수 있다.
본 배경 섹션에 공개된 상기 정보는 발명 원칙의 배경에 대한 이해를 높이기 위한 것일 뿐이므로 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시의 기술적 사상은, 전술된 문제들 및 단점들을 해소하기 위한 장치, 방법 및 시스템을 제공한다.
본 개시의 기술적 사상은, 전술된 문제들 및 단점들을 해소하기 위한 장치, 방법 및 시스템을 제공한다.
연산 저장(computational storage) 방법은, 저장 장치(storage device)에서 데이터의 일 부분의 수정된 버전(modified version)을 수신하는 단계, 상기 저장 장치에서 상기 데이터의 일 부분의 상기 수정된 버전으로부터 데이터의 복원된(restored) 부분을 생성하는 단계 및 상기 저장 장치에서 상기 데이터의 복원된 부분에서 동작을 수행하는 단계를 포함할 수 있다. 연산 저장 방법은, 상기 데이터의 일 부분에 대해 동작을 수행하는 요청을 수신하는 단계를 더 포함할 수 있다. 상기 생성하는 단계는, 상기 데이터의 일 부분의 상기 수정된 버전을 압축 해제(decompressing)하는 단계를 포함할 수 있다. 상기 생성하는 단계는, 상기 데이터의 일 부분의 상기 수정된 버전을 복호(decrypting)하는 단계를 포함할 수 있다. 상기 방법은 상기 저장 장치로부터 상기 데이터의 복원된 부분에서 상기 동작의 결과를 송신하는 단계를 더 포함할 수 있다. 상기 동작은 필터링 동작(filtering operation)을 포함할 수 있다. 상기 동작은 스캐닝 동작을 포함할 수 있다. 상기 방법은 상기 데이터의 일 부분을 생성하기 위해 데이터를 나누는 단계를 더 포함할 수 있다. 상기 데이터를 나누는 단계는, 클라이언트(client)가 상기 데이터를 나누는 단계를 포함할 수 있다. 상기 데이터를 나누는 단계는, 인디케이션(indication)에 기초하여 상기 데이터를 나누는 단계를 포함할 수 있다. 상기 데이터를 나누는 단계는, 상기 저장 장치가 상기 인디케이션에 기초하여 상기 데이터를 나누는 단계를 포함할 수 있다. 상기 인디케이션은 압축 방식(compression scheme)을 포함할 수 있다. 상기 인디케이션은 부분 크기(portion size)를 포함할 수 있다. 상기 인디케이션은 상기 저장 장치에 의해서 공급될 수 있다. 상기 인디케이션은 저장 서버(storage server)에 의해서 공급될 수 있다. 상기 방법은 상기 데이터의 일 부분의 상기 수정된 버전을 생성하기 위해서 상기 데이터의 일 부분을 수정하는 단계를 더 포함할 수 있다. 상기 데이터의 일 부분을 수정하는 단계는, 상기 데이터의 일 부분을 압축하는 단계를 포함할 수 있다. 상기 데이터의 일 부분을 수정하는 단계는, 클라이언트가 상기 데이터의 일 부분을 수정하는 단계를 포함할 수 있다. 상기 데이터의 일 부분을 수정하는 단계는, 서버가 상기 데이터의 일 부분을 수정하는 단계를 포함할 수 있다. 상기 방법은 상기 수정된 데이터의 일 부분에 소거 코딩(erasure coding)하는 단계를 더 포함할 수 있다. 상기 저장 장치는 제1 저장 장치일 수 있고, 상기 동작은 제1 동작일 수 있고, 상기 데이터의 복원된 부분은 제1 데이터의 복원된 부분일 수 있고, 상기 제1 저장 장치에 의한 상기 제1 데이터의 복원된 부분에서 상기 제1 동작의 제1 결과 및 제2 저장 장치에 의한 제2 데이터의 복원된 부분에서 제2 동작의 제2 결과를 합치는(aggregating) 단계를 더 포함할 수 있다. 상기 데이터의 일 부분은 객체(object)를 포함할 수 있다. 상기 저장 장치는 key-value 인터페이스(interface)를 사용하여 상기 데이터의 일 부분의 상기 수정된 버전을 수신하도록 구성될 수 있다. 상기 방법은 상기 저장 장치에 대해 key-value 인터페이스를 에물레이팅(emulating)하는 단계를 더 포함할 수 있다.
저장 장치는 저장 매체(storage medium), 데이터의 수정된 부분으로부터 데이터의 복원된 부분을 생성하도록 구성된 데이터 복원 로직(data restoration logic) 및 상기 데이터의 복원된 부분에서 동작을 수행하도록 구성된 데이터 처리 요소(data processing element)를 포함할 수 있다. 상기 데이터 복원 로직은 요청을 수신하고 상기 요청에 기반하여 상기 데이터의 복원된 부분을 생성하도록 구성될 수 있다. 상기 요청은 쿼리(query)를 포함할 수 있고, 상기 데이터 처리 요소는 상기 쿼리에 기반하여 동작을 수행하도록 구성될 수 있다. 상기 데이터 복원 로직은 복호 로직(decryption logic)을 포함할 수 있다. 상기 데이터 복원 로직은 압축 해제(decompression) 로직을 포함할 수 있다. 상기 동작은 데이터 선택 동작을 포함할 수 있다. 상기 저장 장치는 저장 장치에 대한 인디케이션을 송신하도록 설정된 인디케이션 로직(indication logic)을 포함할 수 있다. 인디케이션은 부분 크기(portion size)를 포함할 수 있다.
시스템은 저장 장치(storage device), 상기 호스트는 데이터를 데이터의 하나 이상의 부분들로 나누도록 구성된 데이터 분할 로직(data dividing logic)을 포함하는 호스트 및 상기 하나 이상의 부분들 중 하나를 수정함으로써 데이터의 수정된 일 부분을 생성하도록 구성된 데이터 수정 로직(data modification logic)을 포함할 수 있다. 상기 호스트는 상기 데이터의 수정된 일 부분을 상기 저장 장치에게 송신하도록 구성될 수 있다. 상기 저장 장치는 상기 데이터의 수정된 일 부분으로부터 데이터의 복원된 부분을 생성하도록 구성된 데이터 복원 로직(data restoration logic) 및 상기 데이터의 복원된 일 부분에서 동작을 수행하도록 구성된 데이터 처리 요소(data processing element)를 포함할 수 있다. 상기 저장 장치는 상기 호스트에게 인디케이션을 송신하도록 구성된 인디케이션 로직(indication logic)을 더 포함할 수 있고, 상기 데이터 분할 로직은 상기 인디케이션에 기초하여 데이터를 하나 이상의 부분들로 나누도록 구성될 수 있다. 상기 호스트는 상기 저장 장치에게 요청을 송신하도록 구성될 수 있다. 그리고, 데이터 처리 요소는 그러한 요청에 기반하여 동작을 수행하도록 설정될 수 있다. 상기 쿼리는 표현식(expression)을 포함할 수 있다. 상기 동작은 데이터 선택 동작을 포함할 수 있고, 상기 데이터 처리 요소는 상기 표현식에 기반하여 데이터 선태 동작을 수행할 수 있다.
본 개시의 예시적 실시 예는 저장 장치에서 데이터를 처리하는 방법을 제공할 수 있다.
본 개시의 예시적 실시 예에 따른 장치는 데이터 압축 및 암호화 방법을 제공한다.
본 개시의 예시적 실시 예에 따른 장치는 데이터 압축 해제 및 복호화 방법을 제공한다.
도면은 반드시 일정한 비율로 그려진 것은 아니며 유사한 구조 또는 기능의 요소는 일반적으로 도면 전체에 걸쳐 예시 목적으로 유사한 참조 번호 또는 그 부분으로 표시될 수 있습니다. 도면은 여기에 설명된 다양한 실시예의 설명을 용이하게 하기 위한 것일 뿐입니다. 도면은 여기에 개시된 교시의 모든 측면을 설명하지 않으며 청구범위의 범위를 제한하지 않습니다. 도면이 흐려지는 것을 방지하기 위해 모든 구성 요소, 연결 등이 표시되지 않을 수 있으며 모든 구성 요소에 참조 번호가 표시되지 않을 수 있습니다. 그러나 구성 요소 구성의 패턴은 도면에서 쉽게 알 수 있습니다. 첨부된 도면은 본 명세서와 함께 본 발명의 실시 예를 도시한 것으로, 상세한 설명과 함께 본 발명의 원리를 설명하기 위한 것이다.
도 1a는 본 개시의 예시적인 실시 예에 따른 서버측 암호화를 갖는 객체 저장 방식의 실시 예를 도시한다.
도 1b는 본 개시의 예시적인 실시 예에 따른 클라이언트측 암호화를 갖는 객체 저장 방식의 실시 예를 도시한다.
도 2a는 본 개시의 예시적인 실시 예에 따라 사용자에게 객체를 반환할 수 있는 객체 저장 방식의 실시 예를 도시한다.
도 2b는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징을 갖는 객체 저장 방식의 실시 예를 예시한다.
도 3a는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징을 갖는 객체 저장 방식의 쓰기 동작의 실시 예를 예시한다.
도 3b는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징을 갖는 객체 저장 방식의 읽기 동작의 실시 예를 예시한다.
도 4는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 시스템의 실시 예를 도시한다.
도 5는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 시스템의 다른 실시 예를 도시한다.
도 6a는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원 및 서버측 암호화를 갖는 저장 방식에 대한 기록 동작의 예시적인 실시 예를 예시한다.
도 6b는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원 및 클라이언트측 암호화를 갖는 저장 방식에 대한 기록 동작의 예시적인 실시 예를 도시한다.
도 7a는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 방식에 대한 기록 동작의 예시적인 실시 예를 예시한다.
도 7b는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 방식에 대한 데이터 선택에 의한 읽기 동작의 예시적인 실시 예를 예시한다.
도 8은 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 객체 저장 방식을 위한 시스템 아키텍처의 예시적인 실시 예를 예시한다.
도 9a는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 방식에 대한 판독 및 기록 동작의 예시적인 실시 예를 예시한다.
도 9b는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원 및 데이터 선택 동작을 갖는 저장 방식에 대한 읽기 동작의 예시적인 실시 예를 예시한다.
도 10은 본 개시의 예시적인 실시 예에 따른 3개의 계산 저장 장치에서 3개의 데이터 청크에 걸친 데이터 분포의 실시 예를 도시한다.
도 11은 본 개시의 예시적인 실시 예에 따라 서버가 상이한 저장 장치에서 데이터 청크 사이에서 분할된 레코드를 재구성할 수 있는 저장 시스템의 예시적인 실시 예를 예시한다.
도 12는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 방식을 위한 호스트 장치의 예시적인 실시 예를 도시한다.
도 13은 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원을 갖는 저장 장치의 예시적인 실시 예를 예시한다.
도 14는 본 개시의 예시적인 실시 예에 따른 계산 저장을 위한 방법의 실시예를 예시한다.
이하, 첨부된 도면을 참조하여 본 개시의 실시 예를 상세히 설명한다. 동일한 구성요소에 대해서는 다른 도면으로 나타내더라도 동일한 참조 부호가 사용될 수 있다. 이하의 설명에서, 구체적인 구성들 및 구성요소들과 같은 구체적인 내용은 본 개시의 실시 예에 대한 전체적인 이해를 돕기 위한 것일 뿐이다. 따라서, 본 개시의 범위를 벗어나지 않으면서 본 명세서에 기재된 실시 예에 대한 다양한 변경 및 수정이 가능함은 당업자에게 자명하다. 또한, 명료함과 간결함을 위해 잘 알려진 기능 및 구성에 대한 설명은 생략될 수 있다. 후술되는 용어들은 본 개시의 실시예의 기능을 고려하여 정의된 용어들로, 사용자, 사용자의 의도 또는 관습에 따라 달라질 수 있다. 따라서 용어의 정의는 본 명세서 전반에 걸친 내용을 토대로 정해야 한다.
본 개시는 다양한 변형 및 다양한 실시 예가 있을 수 있으며, 그 중 실시예를 첨부된 도면을 참조하여 후술한다. 그러나, 본 개시는 실시예에 한정되지 않고, 본 개시의 범위 내의 모든 변형, 균등물 및 대안을 포함하는 것으로 이해되어야 한다.
제1, 제2 등의 서수를 포함하는 용어는 다양한 구성요소를 설명하기 위해 사용될 수 있으나, 구조적 구성요소는 용어에 의해 제한되지 않는다. 용어는 한 구성요소를 다른 구성요소와 구별하는 데만 사용될 수 있다. 예를 들어, 본 개시의 권리 범위를 벗어나지 않으면서 제1 구성 요소는 제2 구성 요소로 명명될 수 있다. 유사하게, 제2 구조적 요소는 또한 제1 구조적 요소로 지칭될 수 있다. 본 명세서에 사용된 바와 같이, "및/또는"이라는 용어는 하나 이상의 연관된 항목의 임의의 및 모든 조합을 포함한다.
본 명세서에서 사용된 용어는 단지 본 개시의 다양한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수형은 문맥상 명백하게 달리 지시하지 않는 한 복수형을 포함하도록 의도된다. 본 명세서에서 "포함하다" 또는 "가지다"라는 용어는 특징, 숫자, 단계, 동작, 구조적 요소, 부분 또는 이들의 조합의 존재를 의미하는 것으로 이해되어야 하며, 하나 이상의 다른 특징, 숫자, 단계, 작업, 구조적 요소, 부품 또는 이들의 조합의 존재나 추가될 가능성을 배제하지 아니하는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 여기에서 사용되는 모든 용어는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 이해하는 것과 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어는 해당 분야의 문맥상의 의미와 동일한 의미로 해석되어야 하며, 본 명세서에서 명확히 정의되지 않는 한 이상적이거나 과도하게 형식적인 의미로 해석되어서는 아니된다. .
일 실시예에 따른 전자 장치는 다양한 형태의 전자 장치 중 하나일 수 있다. 전자 장치는, 예를 들면, 휴대용 통신 장치(예컨대, 스마트 폰), 컴퓨터, 휴대용 멀티미디어 장치, 휴대용 의료 장치, 카메라, 웨어러블 장치 또는 가전 제품을 포함할 수 있다. 본 발명의 일 실시예에 따르면, 전자 장치는 상술한 것들에 한정되지 아니한다.
본 개시에서 사용된 용어는 본 개시를 한정하려는 의도가 아니며, 해당 실시예에 대한 다양한 변경, 균등물 또는 대체물을 포함하기 위한 것이다. 첨부된 도면의 설명과 관련하여, 유사하거나 관련된 구성요소에 대해서는 유사한 참조번호가 사용될 수 있다. 항목에 해당하는 명사의 단수형은 관련 문맥에서 명확하게 달리 지시하지 않는 한 사물 중 하나 이상을 포함할 수 있다. 본 명세서에 사용된 바와 같이, "A 또는 B", "A 및 B 중 적어도 하나", "A 또는 B 중 적어도 하나", "A, B 또는 C", "A, B 및 C 중 적어도 하나" 그리고 "A, B, 또는 C 중 적어도 하나"와 같은 문구 각각은, 해당 문구에 함께 열거된 항목들의 가능한 모든 조합을 포함할 수 있다. 본 명세서에서 사용된 "제1", "제2", "제1", "제2" 등의 용어는 해당 구성 요소를 다른 구성 요소와 구별하기 위해 사용될 수 있으나, 다른 측면(예컨대, 중요도 또는 순서)에서 구성 요소를 제한하려는 의도가 아니다. 요소(예컨대, 제1 구성요소)가 "작동적으로(operatively)" 또는 "통신적으로(communicatively)"라는 용어와 함께 또는 없이, 다른 구성요소(예컨대, 제2 구성요소) "~와 결합된", "~에 결합된", "~와 연결된" 또는 "연결된"으로 언급되는 경우, 이는 해당 구성요소가 다른 구성요소와 직접(예컨대, 유선), 무선으로, 또는 제3 구성요소를 통해 연결될 수 있음을 나타낸다.
본 문서에서 "모듈"이라는 용어는 하드웨어, 소프트웨어 또는 펌웨어로 구현된 단위를 포함할 수 있으며, 다른 용어, 예를 들면, "로직", "로직 블록", "일부", "회로" 등과 혼용될 수 있다. 모듈은 하나 이상의 기능을 수행하도록 구성된 단일 통합 구성 요소 또는 최소 단위 또는 그 일부일 수 있다. 예를 들면, 일 실시예에 따르면, 모듈은 ASIC(application-specific integrated circuit)의 형태로 구현될 수 있다.
객체 저장 시스템(object storage system)은 사용자가 저장된 객체로부터 검색할 데이터의 특정 서브세트를 요청할 수 있는 데이터 선택 기능을 구현할 수 있습니다. 그러한 요청을 처리하기 위해, 저장 서버는 하나 이상의 저장 장치에 저장된 데이터의 하나 이상의 부분으로부터 객체를 재구성할 수 있다. 또한 저장 서버는 암호화된 개체의 암호를 해독하고 개체를 원래 형식으로 복원하기 위해 압축된 개체의 압축을 풀 수 있습니다. 그 다음, 저장 서버는 사용자에 의해 요청된 데이터의 지정된 서브세트(subset)를 찾기 위해 복원된 객체에 대해 필터링, 스캐닝 등과 같은 하나 이상의 선택 작업을 수행할 수 있습니다. 그러면 저장 서버는 요청된 데이터 서브세트를 사용자에게 반환할 수 있습니다.
일부 측면에서, 계산 저장 장치는 장치에 저장된 객체에 대해 필터링, 스캐닝 등과 같은 하나 이상의 선택 작업을 수행할 수 있습니다. 그러나 개체의 일부만 장치에 저장되고 데이터를 부분으로 나누기 전에 개체가 수정(예: 압축, 암호화 등)된 경우 장치에 저장된 부분은 다음을 포함할 수 있습니다. 저장 장치가 원래 데이터로 복원(예: 압축 해제 및/또는 암호 해독)할 수 없는 임의의 (장치에 대한) 정보. 따라서 저장 장치는 장치에 저장된 데이터의 일부에 대해 로컬에서 의미 있는 작업을 수행하지 못할 수 있습니다.
본 개시의 예시적인 실시예에 따른 계산 저장 방식에서, 객체 또는 다른 원본 데이터는 데이터에 대한 압축 및/또는 암호화와 같은 수정을 수행하기 전에 데이터의 부분으로 분할될 수 있다. 데이터 부분 중 하나 이상이 개별적으로 수정될 수 있고(예: 데이터의 개별 부분에 대해 압축 및/또는 암호화가 수행될 수 있음) 데이터 부분의 수정된 버전은 저장 및/또는 처리. 저장 디바이스는, 예를 들어, 데이터의 수정된 부분을 해독 및/또는 압축해제함으로써 데이터의 수정된 부분으로부터 데이터의 일부의 복원된 버전을 생성할 수 있다. 그 다음, 저장 장치는 데이터의 복원된 부분에 대해 국부적으로 동작(예를 들어, 선택 동작)을 수행할 수 있다.
일부 실시 예에서, 데이터의 일부는 또한 데이터의 청크(chunk of data)로 지칭될 수 있고, 데이터를 데이터의 부분 또는 청크로 나누는 것은 청킹 데이터(chunking data)로 지칭될 수 있다. 일부 실시 예에서, 데이터의 일부 또는 청크는 예를 들어 하나 이상의 저장 장치에 저장하기 위해 데이터를 분할함으로써 획득될 수 있는 데이터의 임의의 단위를 나타낼 수 있습니다. 어떤 상황에서는 오리지널 데이터(original data)의 양이 부분 또는 청크 크기보다 작거나 같은 경우(예: 기본 부분 또는 청크 크기) 분할 또는 청크 작업에 의해 생성된 오리지널 데이터의 단위는 원본 데이터의 양과 같은 크기일지라도 여전히 데이터 부분 또는 청크로 지칭될 수 있다.
구현 세부사항에 따라 전산 저장 장치에서 로컬로 선택 작업을 수행하면 하나 이상의 저장 장치에서 서버로 전송될 수 있는 데이터의 양이 감소할 수 있다. 더욱이, 구현 세부 사항에 따라, 전산 저장 장치는 서버보다 더 효율적으로 선택 동작과 같은 동작을 수행할 수 있다. 일부 실시 예에서, 이것은 데이터가 압축될 수 있기 때문에 대역폭 및/또는 공간 효율의 감소가 거의 또는 전혀 없이 달성될 수 있다. 구현 세부 사항에 따라 데이터가 암호화될 수 있기 때문에 보안을 거의 또는 전혀 줄이지 않고 이 작업을 수행할 수도 있다. 더욱이, 일부 실시 예들에서, 로컬 연산은 사용자, 클라이언트 및/또는 이와 유사한 사람들에게 투명하게 구현될 수 있다.
본 개시에 따른 일부 실시 예에서, 저장 장치, 저장 서버 등은 원본 데이터를 청크로 분할하는 방법 및/또는 하나 이상의 계산 저장 장치에 의한 저장 및/또는 처리를 용이하게 하기 위해 청크를 수정하는 방법에 대한 하나 이상의 지시를 제공할 수 있다. 예를 들어, 일부 실시 예에서, 표시는 저장 장치에 의해 지원될 수 있는 하나 이상의 청크 크기, 압축 알고리즘, 암호화 알고리즘 등의 정보를 포함할 수 있다. 일부 실시 예에서, 하나 이상의 표시는 필수, 선택(예: 제안으로서 제공), 사용자 구성 가능 및/또는 이들의 조합일 수 있다. 예를 들어, 특정 저장 장치 상의 저장을 위한 최적의 청크 크기 표시가 제안으로 제공될 수 있는 반면, 지원되는 압축 알고리즘의 표시는 저장 장치가 로컬 처리를 위해 데이터 청크를 압축 해제할 수 있도록 하기 위해 필수적일 수 있다.
청킹 데이터, 데이터 수정(예: 데이터 압축 및/또는 암호화), 소거 코딩 데이터, 데이터 저장, 처리 데이터, 데이터 선택 등을 포함하여 본 개시에 서술된 모든 동작은, 본 개시의 실시 예에 따라, 다양한 장치들 사이에 무제한적인 구성으로 배포(예: 매핑)될 수 있다. 예를 들어, 일부 실시 예에서 클라이언트는 원본 데이터(예: 객체)를 청크(chunk)하고, 데이터 청크(chunks of data)를 압축하고, 압축된 데이터 청크(compressed chunks of data)를 서버로 전송할 수 있다. 서버는 압축된 데이터 청크를 암호화하고, 하나 이상의 저장 장치에 압축 및 암호화된 데이터 청크를 저장할 수 있다. 다른 예로, 일부 실시 예에서 클라이언트는 원본 데이터(예: 객체)를 청크하고, 데이터 청크를 압축 및 암호화하며, 압축 및 암호화된 데이터 청크를 하나 이상의 저장 장치에 걸쳐 저장하기 위해 서버로 전송할 수 있다. 추가적인 예로서, 클라이언트는 오리지널 데이터(예: 객체)를 데이터를 청크할 수 있는 서버로 보내고, 데이터 청크를 압축, 암호화 및/또는 소거 코딩(erasure coding)을 수행하며, 개별적으로 수정된 데이터 청크를 하나 이상의 저장 장치에 저장할 수 있다.
예를 들어, 일부 실시 예들은 데이터 선택 기능을 구현하거나 하나 이상의 키 값(Key-Value, KV) 저장 장치에 데이터를 저장할 수 있는 객체 저장 시스템의 맥락에서 설명될 수 있다. 다만, 본 발명에 기재된 원리는 특정 데이터 포맷, 데이터 처리 특징, 저장 장치 인터페이스 등에 한정되는 것은 아니다. 예를 들어, 본 개시의 예시적인 실시 예에 따른 시스템, 방법, 및/또는 장치는 또한 파일 저장, 데이터베이스 저장, 블록 저장 등을 제공할 수 있는 저장 시스템으로 구현될 수 있고, 임의의 유형의 처리를 구현할 수 있다. 가속, 그래프 처리, 그래픽 처리, 기계 학습 등과 같은 기능을 포함하고 KV 저장 장치, 블록 저장 장치 등을 포함한 모든 유형의 저장 장치와 함께 작동할 수 있다.
객체 저장 시스템은 사용자가 객체의 형태로 데이터를 저장하는 것을 가능하게 할 수 있다. 객체의 데이터는 저장되기 전에 다양한 방식으로 수정될 수 있다. 예를 들어, 데이터는 저장 매체에서 차지하는 공간의 양을 줄이기 위해 및/또는 클라이언트에서 하나 이상의 저장 장치(storage)로 데이터를 전송하는 데 필요한 시간, 대역폭, 전력 등을 줄이기 위해 압축될 수 있습니다. 장치(예: 네트워크를 통해). 다른 예로서, 객체의 데이터는 데이터의 전송 및/또는 저장 동안 데이터에 대한 무단 액세스를 방지하기 위해 암호화될 수 있습니다.
객체는 비교적 많은 양의 데이터를 포함할 수 있으며, 따라서 신뢰성, 접근성 등을 위해 객체는 여러 저장 장치에 걸쳐 저장될 수 있는 청크로 분할될 수 있다. (데이터를 청크로 나누는 것을 데이터 청크라고 칭할 수 있다.) 예를 들어, 압축 및/또는 암호화 후, 객체는 저장 시스템의 하나 이상의 블록 기반 저장 장치에 의해 사용되는 블록 크기에 맞도록 고정 크기 청크로 분할될 수 있다. 일부 실시 예에서, 삭제 코딩 방식은 데이터를 데이터 청크로 분할하고 저장 시스템이 손실되거나 손상된 데이터 청크를 복구할 수 있는 하나 이상의 패리티 청크를 생성하는 데 사용될 수 있다
도 1a는 본 개시 내용의 예시적 실시 예에 다른 서버측 암호화(server-side encryption)를 갖는 객체 저장 방식(object storage scheme)의 실시 예를 도시한다. 도1a의 좌측은 읽기(read) 및/또는 쓰기(write) 동작 동안 시스템의 구성요소들 간의 데이터 플로우를 도시한다. 도1A의 우측은 쓰기 동작 동안 데이터에 대한 동작을 도시한다.
도 1a의 좌측에 도시된 시스템은 클라이언트(client, 102), 하나 이상의 서버들(server, 104)(하나 이상의 서버들은 집합적으로 하나의 서버로 지칭될 수 있다.) 및 하나 이상의 저장 장치들(storage devices, 108)(하나 이상의 저장 장치들은 집합적으로 스토리지(storage)로 지칭될 수 있다.)을 포함할 수 있다. 도 1a의 우측에 도시된 동작들은 클라이언트(102)에 의해 수행되는 제1 그룹(110A) 및 서버(104)에 의해서 수행되는 제2 그룹(112A)에 나타난다.
쓰기(write) 동작 동안, 클라이언트(102)는 오리지널 데이터(original data, 114)(예를 들어, 오리지널 데이터는 하나의 객체(objecit)일 수 있다.)와 함께 시작할 수 있다. 클라이언트(102)는 압축된 데이터(compressed data, 116)을 생성하기 위하여 오리지널 데이터(114)에 대하여 하나 이상의 압축(compression) 동작들을 수행할 수 있다. 클라이언트(102)는 암호화된 데이터(118)를 생성하기 위해 압축된 데이터(116)를 암호화할 수 있는 서버(104)에 압축된 데이터(116)를 보낼 수 있다. 서버(104)는 압축 및 암호화된 데이터(118)를 하나 이상의 데이터 청크(chunks, 120)로 분할하고 하나 이상의 데이터 청크(120)를 하나 이상의 저장 장치(108)로 전송할 수 있다. 일부 실시 예에서, 서버(104)는 하나 이상의 저장 장치들(108)에 저장될 수 있는 하나 이상의 패리티(parity) 청크(121)를 생성하기 위해 하나 이상의 데이터 청크(120)에 대해 소거 코딩(erasure coding)을 수행할 수 있다.
읽기(read) 동작 동안, 도 1a에 도시된 동작들은 역으로 수행될 수 있다. 예를 들어, 서버(104)는 하나 이상의 저장 장치들(108)로부터 하나 이상의 데이터 청크(120)를 읽을 수 있다. 데이터 청크 중 하나가 누락되거나 손상된 경우(예를 들어, 저장 장치가 고장난 경우) 서버(104)는 하나 이상의 패리티 청크(121)를 사용하여 누락되거나 손상된 데이터 청크를 복구할 수 있습니다. 서버(104)는 데이터 청크(120)로부터 압축 및 암호화된 데이터(118)를 재구성(reconstruct)할 수 있다. 서버(104)는 압축 및 암호화된 데이터(118)를 복호화하고 압축 및 복호화된 데이터(116)를 클라이언트(102)에게 보낼 수 있다. 클라이언트(102)는 오리지널 데이터(114)(예를 들어, 오리지널 데이터(114)는 하나의 객체(object)일 수 있다.)를 복원하기 위해 압축 및 복호화된 데이터의 압축을 해제(decompress)할 수 있다.
도 1b는 본 개시의 예시적인 실시 예에 따른 클라이언트측 암호화(client-side encryption)를 갖는 객체 저장 방식(object storage scheme)의 실시 예를 도시한다. 도 1b의 좌측은 읽기 및/또는 쓰기 동작 동안 시스템의 구성요소들 간의 데이터 흐름을 도시하고, 도 1b의 우측은 쓰기 동작 동안 데이터에 대한 동작을 도시한다.
도 1b의 좌측에 도시된 시스템 및 도 1b의 우측에 도시된 동작은 도 1a에 예시된 것과 유사할 수 있는 동작들 및/또는 구성요소들을 포함할 수 있고, 동일하거나 유사한 참조 번호로 지시될 수 있다. 그러나, 도 1b에 도시된 실시 예에서, 클라이언트(102)에 의해 수행되는 제1 동작 그룹(110B)에 도시된 바와 같이, 클라이언트(102)는 압축 및 암호화된 데이터(118)를 생성하기 위해 압축 데이터(116)를 암호화할 수 있다. 그 다음, 클라이언트(102)는 압축 및 암호화된 데이터(118)를 서버(104)에게 보낼 수 있다. 서버(104)에 의해 수행되는 제2 동작 그룹(112B)에 의해 도시된 바와 같이, 서버(104)는 압축 및 암호화된 데이터(118)를 하나 이상의 데이터 청크(120)로 분할할 수 있다. 그 다음, 서버(104)는 하나 이상의 데이터 청크(120)를 하나 이상의 저장 장치들(108)로 전송할 수 있다. 일부 실시 예에서, 서버(104)는 하나 이상의 패리티 청크(121)를 생성하기 위해 하나 이상의 데이터 청크(120)에 대해 소거 코딩(erasure coding)을 수행할 수 있다. 하나 이상의 패리티 청크(121)는 하나 이상의 저장 장치들(108)에 저장될 수 있다.
읽기 동작 동안, 도 1b에 도시된 동작은 역으로 수행될 수 있다. 예를 들어, 서버(104)는 데이터 청크(120)로부터 압축 및 암호화된 데이터(118)를 재구성할 수 있고(필요한 경우, 서버(104)는 하나 이상의 패리티 청크(121)를 사용하여 임의의 누락되거나 손상된 데이터 청크를 복구할 수 있다.) 압축 및 암호화된 데이터(118)를 클라이언트(102)에게 보낼 수 있다. 클라이언트(102)는 압축 및 복호화된 데이터(116)를 생성하기 위해 압축 및 암호화된 데이터(118)를 복호화할 수 있다. 그 다음, 클라이언트(102)는 오리지널 데이터(114)(예를 들어, 하나의 객체(object)일 수 있는)를 복원하기 위해 압축 및 복호화된 데이터(116)를 압축 해제(decompress)할 수 있다.
도 1a 및 도 1b에 도시된 실시 예는 예시적인 실시 예일 뿐이며, 구성요소 및/또는 동작의 수, 순서 및/또는 배열은 변경될 수 있다. 예를 들어, 일부 실시 예에서, 원래 데이터(114)는 압축 및/또는 암호화 없이 저장될 수 있다. 일부 실시 예에서, 하나 이상의 서버(104)는 하나 이상의 저장 장치(108)를 관리하기 위해 객체 저장 서버(object storage server)로 구성될 수 있는 제1 서버 및 저장 서버(storage server, 저장 노드(storage node)로도 지칭될 수 있다)로 구성될 수 있는 제2 서버로 실시될 수 있다. 따라서, 제1 및 제2 서버는 객체 저장 서비스(object storage service)를 실시할 수 있다. 오리지널 데이터(114) 중 일부 또는 전부가 암호화된 경우, 암호화 열쇠들(encryption keys)이 저장 서비스(storage service) 및/또는 서비스 사용자에 의해 생성될 수 있다. 일부 실시 예들에서, 쓰기 동작의 마지막 또는 그 근처에서 청크 동작을 수행하는 것은 서버(104)가 하나 이상의 저장 장치들(108)의 하나 이상의 블록 크기들에 대응할 수 있는 크기들을 갖는 청크로 데이터를 분할하는 것을 가능하게 할 수 있다.
일부 상황에서, 사용자 장치와 관련된 사용자는 객체에 저장된 데이터의 서브세트(subset)만을 검색(retrieve)할 필요가 있을 수 있습니다. 일부 객체 저장 시스템(object storage system)은 사용자가 전체 객체를 검색한 다음 데이터의 하위 집합을 찾기 위해 객체를 처리하도록 요구할 수 있다. 이는 상대적으로 많은 양의 불필요한 데이터가 사용자의 장치로 전송되는 결과를 초래할 수 있으며, 이는 차례로 시간, 대역폭, 전력 등과 같은 불필요한 리소스를 소비할 수 있습니다.
불필요한 데이터의 전송을 감소 및/또는 방지하기 위해, 일부 객체 저장 시스템들은 사용자가 저장된 객체로부터 검색하기 위하여 데이터의 특정 서브세트를 요청할 수 있도록 하는 데이터 선택 특징(data selection feature)을 제공할 수 있습니다. 전체 객체를 사용자의 장치로 보내기 보다 객체 스토리지 시스템은 특정 데이터 서브세트를 찾기 위해 객체에 대해 스캐닝, 필터링 및/또는 기타 데이터 선택 작업을 수행할 수 있습니다. 그리고, 객체 스토리지 시스템은 지정된 데이터 서브세트만 사용자의 장치에 반환할 수 있습니다.
도 2a는 본 개시의 예시적인 실시 예에 따라 사용자의 디바이스에게 객체를 반환할 수 있는 객체 저장 방식(object storage scheme)의 실시 예를 도시한다. 도 2b는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징(data selection feature)을 갖는 객체 저장 방식의 실시 예를 도시한다.
도 2a를 참조하면, 객체 저장 서비스(201)는 사용자에 대한 객체(203A, 203B, 203C)를 데이터 버킷 또는 컨테이너(205)에 저장할 수 있다. 사용자가 객체(203A) 중 하나로부터 데이터의 서브세트(예를 들어, 하나 이상의 레코드)를 검색해야 하는 경우, 객체 저장 서비스(201)는 네트워크를 통해 클라이언트 컴퓨팅 동작(client compute operation, 207)에 전송될 수 있는 전체 객체(entire object, 203A)를 사용자가 요청하도록 요구할 수 있다. 그리고, 클라이언트 컴퓨팅 동작(207)은 데이터의 서브세트를 찾기 위해 객체(203A)에 대해 스캐닝, 필터링, 및/또는 이와 유사한 것과 같은 데이터 선택 동작(data selection operation, 209)을 수행할 수 있다. 클라이언트 계산 동작(207)은 그 다음 추가 동작(further operation, 211)을 위해 데이터의 서브세트를 사용할 수 있다.
도 2b를 참조하면, 데이터 선택 특징(data selection feature)을 갖는 객체 저장 서비스(213)는 사용자가 저장된 객체(203A)로부터 데이터의 서브세트를 요청할 수 있게 할 수 있다. 예를 들어, 일부 실시 예에서 객체 저장 서비스 (213)는 사용자가 요청을 제출할 수 있도록 할 수 있으며, 예를 들어, 저장될 수 있는 객체(203A)에서 동작할 수 쿼리(예를 들어, SQL(Structured Query Language)을 사용하는 표현식(expression))를 송신할 수 있고, 예를 들어, CSV(comma separated variables), JSON(JavaScript Object Notation), Parquet 등과 같은 형식으로 송신할 수 있다. 쿼리는, 예를 들어, API(application programming interface), SDK(software development kit) 등을 사용하여 객체 저장 서비스(213)로 전송될 수 있다.
전체 객체(203A)를 전송하는 대신, 객체 저장 서비스(213)는 사용자의 요청에 의해 특정된(specified) 데이터의 서브세트를 찾기 위해 객체(203A)에 대한 스캐닝, 필터링 등과 같은 데이터 선택 작업(209)을 수행할 수 있다. 객체 저장 서비스(213)는 그 다음 추가 동작(211)을 위해 데이터의 서브세트(subset, 203a)만을 클라이언트 컴퓨팅 작업(217)에 보낼 수 있다. 실시 예의 세부사항에 따라, 객체 저장 서비스(213)는 객체(203A)가 저장(store)되었을 때 객체(203A)에 대해 수행된 압축 동작, 암호화 동작 등을 되돌리기 위해 압축 해제, 복호화 등과 같은 객체(203A)에 대한 하나 이상의 복원 동작들(restore operations, 219)을 수행할 수 있다.
도 3a는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징을 갖는 객체 저장 방식의 쓰기 동작(write operation)의 실시 예를 도시한다. 도 3b는 본 개시의 예시적인 실시 예에 따른 데이터 선택 특징을 갖는 객체 저장 방식의 읽기 동작(read operation)의 실시 예를 도시한다. 도 3a 및 도 3b에 예시된 실시 예는 예를 들어 도 2b에 예시된 객체 저장 방식을 실시하기 위해 사용될 수 있다.
도 3a의 좌측은 읽기 및/또는 쓰기 동작 동안 객체 저장 시스템의 구성요소들 사이의 데이터 흐름을 도시하고, 도 3a의 우측은 쓰기 동작 동안 데이터에 대한 동작을 예시한다.
도 3a의 왼쪽에 예시된 시스템은 클라이언트(client, 302), 하나 이상의 서버(server, 304)(집합적으로 서버라고 칭할 수 있다.), 및 하나 이상의 저장 장치(storage, 308)(집합적으로 저장 장치라고 칭할 수 있다.)를 포함할 수 있다. 도 3a의 우측에 예시된 동작은 클라이언트(302)에 의해 수행되는 제1 그룹(310A) 및 서버(304)에 의해 수행되는 제2 그룹(312A)에 도시되어 있다. 도 3a에 예시된 데이터에 대한 구성요소 및/또는 동작 간의 데이터 흐름은 도 1a에 예시된 서버측 암호화 실시 예 또는 도 1b에 예시된 클라이언트측 암호화 실시 예와 유사할 수 있다. 도 3a와 도 1a 및 도 1b에서, 마지막 자리의 도면 부호가 동일한 요소들은 유사할 수 있다. 따라서, 도 3a에서, 압축 및 암호화된 데이터(318)는 클라이언트측 암호화를 사용한 실시 예를 위한 그룹(310A)의 일부이거나 서버측 암호화를 사용한 실시 예를 위한 그룹(312A)의 일부일 수 있다.
도 3b를 참조하면, 사용자는 하나 이상의 저장 장치(308)에 저장된 객체 또는 다른 오리지널 데이터로부터 데이터의 서브세트를 요청할 수 있다. 이러한 요청을 처리하기 위해, 서버(304)는 하나 이상의 저장 장치(308)로부터 하나 이상의 데이터 청크(320)를 읽을 수 있다. 데이터 청크 중 하나가 누락되거나 손상된 경우 서버(304)는 하나 이상의 패리티 청크(321)를 사용하여 누락되거나 손상된 데이터 청크를 복구할 수 있다. 서버(304)는 이터 청크(320)로부터 압축 및 암호화된 데이터(318)를 재구성할 수 있다.
서버(304)는 압축 및 암호화된 데이터(318)를 복호화하여 압축 및 복호화된 데이터(316)를 생성할 수 있다. 그리고, 압축 및 복호화된 데이터(316)는 오리지널 데이터(314)(예를 들어, 객체)를 복원하기 위해 압축 해제(decompressed)될 수 있다. 서버(304)는 요청된 데이터의 서브세트(323)를 획득하기 위해 오리지널 데이터(314)에 대한 데이터 선택 동작(예를 들어, 스캐닝, 필터링 등)을 수행할 수 있다. 그 다음, 서버(304)는 데이터의 서브세트(323)를 클라이언트(302)에게 송신할 수 있다. 클라이언트의 압축 해제 작업은 우회(bypass)될 수 있으므로 얇은 선으로 표시된다. 도 3b의 우측에 예시된 동작은 서버(304)에 의해 수행되는 그룹(312B)에 도시된다.
도 1a 및 도 1b에 예시된 실시 예에서와 같이, 도 3a 및 도 3b에 예시된 서버(304)는 객체 저장 서버로 구성될 수 있는 제1 서버 및 하나 이상의 저장 장치들(308)을 관리하는 저장 서버(storage server)로 구성될 수 있는 제2 서버로 구현될 수 있다. 따라서, 일부 실시 예에서, 저장 서버는 하나 이상의 데이터 청크(320)로부터 압축 및 암호화된 데이터(318)를 재구성할 수 있고, 객체 저장 서버는 복호화, 압축해제 및/또는 데이터 선택 동작을 수행할 수 있다. 더욱이, 도 3a 및 도 3b에 예시된 실시 예가 서버측 암호화를 구현할 수 있지만, 다른 실시 예는 클라이언트측 암호화를 구현할 수 있다.
구현 세부사항에 따라, 도 3a 및 도 3b에 예시된 실시 예는 네트워크 트래픽을 감소시킬 수 있다. 예를 들어, 도 3a 및 도 3b에 예시된 실시 예는 저장 시스템(storage system)과 클라이언트(client) 사이에서 전송되는 데이터의 양을 감소시킴으로써 네트워크 트래픽을 감소시킬 수 있다. 그러나 도 3a 및 도 3b에 예시된 아키텍처(architecture)에 대한 데이터 처리 흐름(data processing flow)은 저장 시스템(storage system)이 구현 세부 사항에 따라 서버(304)에 의해 수행되는 동작의 일부 또는 전체를 수행하는 데 적합할 수 있는 계산 저장 장치(computational storage devices)를 활용하는 것을 방지할 수 있습니다. 예를 들어, 일부 실시 예에서, 연산 저장 장치는 서버에 존재할 수 있는 범용 처리 리소스보다 더 효율적으로 데이터 선택 동작과 같은 압축해제, 복호화 및/또는 다른 동작을 수행할 수 있는 처리 리소스(processing resource)를 포함할 수 있다. 그러나, 오리지널 데이터(314)는 청크(chunking) 전에 수정(예: 압축, 암호화 등)될 수 있기 때문에 데이터 청크가 저장된 개별 저장 장치(308)는 복호화, 압축 해제할 수 없거나, 데이터 청크를 장치에서 국부적으로 의미 있는 작업이 수행될 수 있는 형태로 복원할 수 없다.
도 4는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원(local data restoration)을 갖는 저장 시스템의 실시 예를 도시한다. 도 4에 예시된 시스템은 호스트(424) 및 커넥션(connection, 422)을 통해 통신할 수 있는 연산 저장 장치(408)를 포함할 수 있다. 호스트(424)는 데이터 청킹 로직(data chunking logic, 426)(데이터 분할 로직(data dividing logic)으로도 지칭될 수 있다.) 및 데이터 수정 로직(data modification logic, 427)을 포함할 수 있으며, 이는 저장 장치(408)에 하나 이상의 데이터 청크를 저장 장치(408)가 데이터 청크를 복원할 수 있는 형태로 제공하도록 구성될 수 있다. 저장 장치(408)는 저장 장치가 동작을 수행할 수 있는 형태로 데이터 청크를 복원할 수 있다. 예를 들어, 데이터 청킹 로직(data chunking logic, 426)은 데이터 수정 로직(data modification logic, 427)에 의한 수정 이전에 객체 또는 다른 오리지널 데이터를 하나 이상의 데이터 청크(data chunk)로 분할할 수 있다. 데이터 수정 로직(427)은 압축, 암호화, 소거 코딩(erasure coding) 등과 같은 하나 이상의 데이터 수정 동작들(data modification operations)을 하나 이상의 청크들(chunks)에 대해 오리지널 데이터의 하나 이상의 수정된 청크를 생성하기 위하여 개별적으로 수행할 수 있다. 호스트(424)는 오리지널 데이터의 수정된 청크 중 하나 이상을 연산 저장 장치(computational storage device, 408) 및/또는 저장 및/또는 처리를 위한 하나 이상의 추가 연산 저장 장치로 보낼 수 있습니다.
연산 저장 장치(408)는 데이터 복원 로직(data restoration logic, 428), 하나 이상의 처리 요소(processing element, 429), 및 저장 매체(storage media, 430)를 포함할 수 있다. 데이터 복원 로직(428)은 수정된 데이터 청크(modified chunk of data)를 하나 이상의 처리 요소(429)가 작업을 수행할 수 있는 형태로 복원할 수 있도록 구성될 수 있다. 예를 들어, 데이터 복원 로직(428)은 수정된 데이터 청크(modified chunk of data)가 암호화된 경우, 이를 복호하고, 수정된 데이터 청크가 압축된 경우, 수정된 데이터 청크의 압축을 해제하는 등의 작업을 수행할 수 있다. 하나 이상의 처리 요소(429)는 데이터 선택(예를 들어, 스캐닝, 필터링 등), 계산 가속(compute acceleration), 그래프 처리(graph processing), 그래픽 처리(graphics processing), 기계 학습(machine learning) 및 이와 유사한 모든 임의의 유형의 작업을 수행하도록 구성될 수 있다. 저장 매체(430)는 호스트(424)에 의해 전송된 하나 이상의 수정된 데이터 청크를 포함하는 임의의 데이터를 저장하는 데 사용될 수 있다.
일부 실시 예에서, 데이터 복원 로직(428) 및/또는 하나 이상의 처리 요소(429)는, 저장 장치(408)에서 수신된 쿼리(query)(예를 들어, 표현(expression))를 포함할 수 있는 요청에 대한 응답으로서, 저장 매체(430)로부터 하나 이상의 데이터 청크를 판독 및 복원하고 지정된 데이터의 서브세트를 반환하거나 복원된 데이터 청크에 대한 임의의 다른 작업들을 수행하도록 구성될 수 있다.
일부 실시 예에서, 복원된 데이터 청크는 청킹 이전의 오리지널 데이터와 정확히 동일하거나 동일하지 않을 수 있다. 예를 들어, 저장 장치(424)에 저장된 데이터 청크가 은행 계좌 거래, 잔액 등과 같은 금융 정보를 포함하고 사용자가 계좌 잔액만을 요청하는 경우, 복원 로직(428) 및/또는 하나 이상의 처리 요소(429)는 정확한 계정 잔액을 찾아 사용자의 장치로 보내기 위해 데이터 청크를 원래 형식으로 복원해야 할 수 있다. 그러나, 저장 장치(424)에 저장된 데이터 청크가 사진 이미지를 포함하고 사용자가 이미지의 특징 목록을 요청하는 경우, 복원 로직(428) 및/또는 하나 이상의 처리 요소(429)는 하나 이상의 처리 요소(429)가 사용자에 의해 요청된 특징을 식별할 수 있는 정도까지 이미지의 압축을 해제하기만 하면 된다.
호스트(424)는 저장 장치(408)가 복원(restoration) 및/또는 동작(operation)을 수행할 수 있는 형태로 하나 이상의 데이터 청크를 저장 장치(408)에 제공할 수 있는 임의의 구성요소 또는 구성요소의 조합으로 구현될 수 있다. 예를 들어, 일부 실시예에서 호스트(424)는 클라이언트, 객체 저장 서버, 및/또는 저장 노드를 포함할 수 있다. 데이터 청킹 로직(426) 및/또는 데이터 수정 로직(427)은 임의의 방식으로 호스트(424)의 임의의 구성요소들 사이에 분산될 수 있다. 예를 들어, 일부 실시 예에서, 데이터 청킹 로직(426)은 클라이언트에서 구현될 수 있는 반면, 데이터 수정 로직(427)은 객체 저장 서버 및/또는 저장 노드에서 구현될 수 있다. 다른 예로서, 데이터 청킹 로직(426) 및 압축 로직(compression logic)을 포함하는 데이터 수정 로직(427)의 일부는 클라이언트에서 구현될 수 있는 반면, 암호화 및/또는 소거 코딩 로직을 포함하는 데이터 수정 로직(427)의 일부는 서버에서 구현될 수 있다. 따라서 클라이언트는 원본 데이터를 청크로 분할할 수 있고, 개별적으로 데이터 청크를 압축하고 압축된 데이터 청크를 서버로 보낼 수 있다. 그런 다음 서버는 압축된 데이터 청크를 개별적으로 암호화하고, 데이터 청크에 대해 삭제 코딩을 수행하여 하나 이상의 패리티 청크를 생성한 다음, 데이터 청크 및/또는 패리티 청크를 계산 저장 장치(computational storage device, 408)를 포함하는 하나 이상의 저장 장치에 저장할 수 있다.
저장 장치(408) 및/또는 여기에 개시된 임의의 다른 저장 장치는 SATA(Serial ATA), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), M.2, U.2, U.3 등과 같은 커넥터 구성(connector configuration)을 사용하여 3.5인치, 2.5인치, 1.8인치, M.2, EDSFF(Enterprise and Data Center SSD Form Factor) 및/또는 NF1 등과 같은 임의의 폼 팩터로 구현될 수 있다.
저장 장치(408), 및/또는 본 개시의 임의의 다른 저장 장치는 고체 상태 매체, 자기 매체, 광학 매체 등, 또는 이들의 임의의 조합을 포함하는 임의의 저장 매체(430)로 구현될 수 있다. 고체 상태 미디어의 예들은 NAND(not-AND) 플래시 메모리와 같은 플래시 메모리(flash memory), 저지연(low-latency) NAND 플래시 메모리, 크로스 그리드 비휘발성 메모리(cross-gridded nonvolatile memory) 와 같은 영구 메모리(persistent memory, PMEM), 벌크 저항(bulk resistance) 변화가 있는 메모리, 상변화 메모리(phase change memory, PCM), 및/또는 이와 유사한 것, 또는 이들의 임의의 조합을 포함할 수 있다.
저장 장치(408), 및/또는 본 개시의 임의의 다른 저장 장치는 PCIe(Peripheral Component Interconnect Express), NVMe, NVMe- oF(NVMe-over-fabric), NVMe-KV(NVMe Key-Value), SATA, SCSI 등 또는 이들의 임의의 조합과 같은 임의의 유형의 저장 인터페이스 및/또는 프로토콜을 사용하여 통신할 수 있습니다. 일부 실시 예에서, 저장 장치(408), 및/또는 본 개시의 임의의 다른 저장 장치는 코히런트(coherent)(예를 들어, 메모리 코히런트(memory coherent), 캐시 코히런트(cache coherent) 등) 또는 CXL(Compute Express Link과) 같은 메모리 시맨틱 인터페이스(memory semantic interface) 및/또는 CXL.mem, CXL.cache, 및/또는 CXL.IO과 같은 코히런트 프로토콜(coherent protocol)을 구현할 수 있습니다. 코히런트 및/또는 메모리 시맨틱 인터페이스 및/또는 프로토콜의 다른 예는 Gen-Z, 코히런트 가속기 프로세서 인터페이스(Coherent Accelerator Processor Interface, CAPI), 가속기를 위한 캐시 코히런트 상호 연결(Cache Coherent Interconnect for Accelerators, CCIX) 등을 포함할 수 있습니다.
호스트(424)의 임의의 구성요소(예를 들어, 클라이언트, 객체 저장 서버, 저장 노드 등)뿐만 아니라 저장 장치(408) 및/또는 본 개시의 임의의 다른 저장 장치들은 서버 섀시(server chassis), 서버 랙(server rack), 데이터룸(dataroom), 데이터 센터(datacenter), 에지 데이터 센터(edge datacenter), 모바일 에지 데이터 센터(mobile edge datacenter) 및/또는 이들의 조합과 함께 전체적으로 또는 부분적으로 구현되거나 이와 관련하여 사용될 수 있다.
클라이언트, 서버, 저장 장치 등과 같은 구성요소 간의 연결을 포함하는 본 개시의 통신 연결(communication connection, 422) 및/또는 기타 연결은 PCIe, 이더넷(Ethernet), TCP/IP(Transmission Control Protocol/Internet Protocol), RDMA(remote direct memory access), ROCE(RDMA over Converged Ethernet), FibreChannel, InfiniBand, Iwarp 및/또는 이와 유사한 기능 또는 이들의 조합을 포함하는 임의의 상호 연결 및/또는 네트워크 인터페이스(network interfaces) 및/또는 프로토콜(protocols)에 의해 실현될 수 있다.
데이터 청킹 로직(data chunking logic, 426), 데이터 수정 로직(data modification logic, 427), 데이터 복원 로직(data restoration logic, 428), 하나 이상의 처리 요소(processing elements, 429), 표시 로직(indication logic, 531) 등의 로직을 포함하는 본 개시에서 개시된 기능(functionality) 중 어느 하나는 조합 논리(combinational logic), 순차 논리(sequential logic), 하나 이상의 타이머, 카운터, 레지스터 및/또는 상태 기계(state machines), 하나 이상의 CPLD(complex programmable logic devices), FPGA(field programmable gate arrays), ASIC(application specific integrated circuits), x86 프로세서와 같은 CISC(complex instruction set computer) 프로세서와 같은 CPUs(central processing units) 및/또는 ARM 프로세서와 같은 RISC(reduced instruction set computer) 프로세서, GPUs(graphics processing units), NPUs(neural processing units), TPUs(tensor processing units) 및/또는 이와 유사한 것, 모든 유형의 메모리에 저장된 실행 명령(executing instructions) 및 이들의 조합을 포함하는 하드웨어, 소프트웨어 또는 이들의 조합에 의해 실행될 수 있다. 일부 실시 예에서, 하나 이상의 데이터 복원 로직(data restoration logic, 428), 처리 요소(429) 등은 압축 및/또는 압축 해제, 암호화 및/또는 복호화, 마이크로서비스(microservices), 소거 코딩, 비디오 인코딩 및/또는 디코딩, 데이터베이스 가속(database acceleration), 검색, 기계 학습, 그래프 처리 등과 같은 임의의 기능들(functions)을 수행하기 위한 고정(fixed) 및/또는 프로그래밍 가능한 기능(functionality)을 포함할 수 있다. 일부 실시 예에서, 하나 이상의 컴포넌트는 SOC(system-on-chip)으로서 구현될 수 있다.
일부 실시 예에서, 데이터 복원 로직(428), 처리 요소(429) 등 중 하나 이상은 저장 장치 컨트롤러(storage device controller), 플래시 변환 계층(flash translation layer, FTL)과 같은 저장 장치의 하나 이상의 다른 구성요소와 통합될 수 있다.
압축, 암호화, 및/또는 이와 유사한 것(또는 이들의 역동작)과 같은 본 명세서에 개시된 임의의 데이터 수정 동작은 임의의 적합한 기술로 구현될 수 있다. 예를 들어, 데이터 압축 및/또는 압축 해제는 LZ77, gzip, Snappy 등으로 구현될 수 있다. 암호화 및/또는 복호화는 AES-256, RSA(Rivest-Shamir-Adleman) 등과 같은 고급 암호화 표준(Advanced Encryption Standard, AES)으로 구현될 수 있다.
도 5는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원(local data restoration)을 갖는 저장 시스템의 다른 실시 예를 도시한다. 도 5에 도시된 시스템은 동일한 숫자로 끝나는 참조 번호를 갖는 요소가 유사할 수 있는 도 4에 도시된 실시 예와 관련하여 설명된 것과 유사한 구성요소 및/또는 구현 동작을 포함할 수 있다. 그러나, 도 5에 예시된 실시 예에서, 연산 저장 장치(computational storage device, 508)는 호스트(524)에서 데이터 청킹 로직(526) 및/또는 데이터 수정 로직(modification logic, 527)에 하나 이상의 표시(532)를 제공하도록 구성될 수 있는 표시 로직(indication logic, 531)을 더 포함할 수 있다.
하나 이상의 표시(532)는 오리지널 데이터를 청크로 분할하는 방법을 결정하기 위해 데이터 청킹 로직(526)에 의해 사용될 수 있는 정보를 포함할 수 있다. 예를 들어, 하나 이상의 표시(indications, 532)는 스토리지 이용률(storage utilization), 처리 효율(예를 들면, 청크 압축 해제, 복호화, 데이터 선택 및/또는 기타 동작), 대역폭 이용률(bandwidth utilization) 등을 위한 최소 청크 크기, 최대 청크 크기, 최적 청크 크기 등의 하나 이상의 저장 하이퍼 파라미터들(storage hyper-parameters)을 포함할 수 있다.
하나 이상의 표시들(532)(예를 들어, 저장 하이퍼 파라미터)은 데이터 수정 로직(527)이 데이터 청킹 로직(526)에 의해 제공되는 개별 데이터 청크를 수정하는 방법을 결정하기 위해 사용할 수 있는 정보를 포함할 수 있다. 예를 들면, 하나 이상의 표시(532)는 기억 장치(508)에서 데이터 복원 로직(528)에 의해 지원되는 압축 알고리즘, 암호화 알고리즘 등의 종류의 리스트를 포함할 수 있다.
일부 실시 예에서, 하나 이상의 표시는 필수, 선택(예를 들어, 권고) 또는 이들의 조합일 수 있다. 예를 들어, 저장 장치(508)에 저장하기 위한 최적의 청크 사이즈의 표시는 권고적인 반면, 데이터 복원 로직(528)에 의해 지원되는 하나 이상의 압축 알고리즘, 암호화 알고리즘 등의 표시는 저장 장치(508)에서의 하나 이상의 처리 요소(529)에 의한 로컬 처리(local processing)에 대해 저장 장치(508)가 데이터 청크의 압축 및/또는 복호화를 가능하게 하도록 의무적일 수 있다.
일부 실시 예에서, 표시 로직(indication logic, 531)은 전적으로 계산 저장 장치(508)에 위치할 수 있다. 그러나, 일부 다른 실시예에서, 표시 로직(531)은 호스트(524)에 위치할 수 있고, 호스트(524)와 저장 장치(508) 사이 또는 다수의 저장 장치, 또는 완전히 다른 장치(예: 시스템의 저장 장치 특성 목록 또는 데이터베이스를 유지할 수 있는 별도의 서버, 관리 컨트롤러 등)에 위치할 수 있다. 예를 들어, 일부 실시예들에서, 하나 이상의 저장 노드는 저장 노드에 설치된 각 저장 장치에 대한 표시들의 목록 또는 데이터베이스를 유지하고, 하나 이상의 클라이언트들, 객체 저장 서버들 등에 이러한 표시들을 제공할 수 있는 표시 논리 (531)를 포함할 수 있다. 추가적인 예로서, 하나 이상의 저장 노드는 저장 노드에 설치된 각 저장 장치에 대한 표시를 유지할 수 있는 표시 로직(531)의 일부를 포함할 수 있고, 객체 저장 서버는 하나 이상의 저장 노드로부터 표시를 집계(aggregate)하고 하나 이상의 클라이언트에 표시를 제공할 수 있는 표시 로직(531)의 일부를 포함할 수 있다.
어느 하나의 표시(532)는, 예를 들어, 쿼리(query), 명령 등에 대한 응답(예를 들어 NVMe 명령, API를 통한 쿼리, SDK 등)에 의해 클라이언트, 객체 저장 서버, 저장 노드 등의 임의의 장치에 제공될 수 있다. 일부 실시예들에서, 하나 이상의 표시들(532, 예를 들어, 하나 이상의 저장 하이퍼 파라미터)은 클라이언트 라이브러리(client library)를 통해 사용자(예를 들어, 클라이언트에 의해)에게 제공될 수 있다.
도 6a는 본 개시의 실시 예에 따른 로컬 데이터 복원 및 서버측 암호화를 갖는 저장 방식에 대한 쓰기 동작의 실시 예를 도시한 것이다. 도 6a에 도시된 실시 예는, 예를 들어, 도 4 및 도 5에 도시된 저장 방식 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 6a의 좌측은 저장 시스템의 구성 요소들 간의 데이터 흐름을 나타내며, 도 6a의 우측은 쓰기 동작 시 데이터에 대한 동작을 나타낸다.
도 6a의 좌측에 도시된 시스템은 클라이언트(602), 하나 이상의 서버(604, 서버를 통칭할 수 있음) 및 하나 이상의 저장 장치(608, 스토리지를 통칭할 수 있음)를 포함할 수 있다. 도 6a의 우측에 도시된 동작은 클라이언트(602)에 의해 수행되는 제1 그룹(610A)와 서버(604)에 의해 수행되는 제2 그룹(612A)에 나타난다.
쓰기 동작은 저장 장치(608) 및/또는 서버(604)가 데이터 청크 크기(data chunk size), 압축 알고리즘(compression algorithm) 등을 나타내는 하나 이상의 표시(632)를 클라이언트(602)에 제공할 때 시작될 수 있다. 예를 들어, 클라이언트(602)는 오리지널 데이터(614)를 하나 이상의 표시(632)에 기초하여 하나 이상의 청크(633)으로 분할할 수 있다.
다시 도 3a 및 도 3b를 참조하면, 데이터 청크들(320)은 본질적으로 동일한 크기일 수 있으며, 예를 들어, 하나 이상의 블록 기반 저장 장치(block-based storage devices)로 저장 장치(storage, 308)을 구현하는 경우, 이러한 크기가 요구될 수 있다. 단, 도 6a에 도시된 실시 형태에서 데이터 청크(633)는, 예를 들어, KV 인터페이스로 구현될 수 있는 저장 장치(608) 중 하나 이상을 이용하기 위해 서로 다른 크기를 가질 수 있다. 추가적으로, 또는 대안적으로, 서버(604)는 하나 이상의 블록 기반 저장 장치(608) 위에 키-값 인터페이스(key-value interface)(예: RocksDB, LevelDB, 및/또는 이와 유사한 것)의 소프트웨어 에뮬레이션(software emulation)을 구현할 수 있다. 도 6a 및 도 6b에 도시된 데이터 청크는 서로 다른 크기로 도시되어 있으나, 이러한 원리는 가변 크기 청크의 서브셋으로 간주될 수 있는 블록 기반 인터페이스를 갖는 시스템에도 적용될 수 있다.
몇몇 실시예들에서 권고(advisory) 및/또는 의무(mandatory) 청크 크기는 예를 들어 특정 저장 장치에 대해 가장 잘 알려진 크기일 수 있는 청크 크기에 기초하여 결정될 수 있다. 예를 들어 일부 SSD(Solid State Drive)의 경우 128KB 청크 크기가 SSD 대역폭을 완전히 활용할 수 있다. 추가적으로, 또는 대안적으로, 저장 서버는 라이브러리를 통해 클라이언트(602)에게 최적의 청크 크기를 제공할 수 있고, 클라이언트(602)는 사용자가 객체나 다른 원본 데이터를 저장할 때 내부적으로 객체나 다른 오리지널 데이터를 더 작은 청크로 분할할 수 있다. 추가적으로, 또는 대안적으로, 클라이언트(602)는 내용을 분석하고 청크 크기를 동적으로 결정할 수 있다.
오리지널 데이터(original data, 614)를 청킹한 후, 클라이언트는 하나 이상의 데이터 청크(data chunks. 633)을 개별적으로 압축하여 하나 이상의 압축 청크(compressed chunks, 634)를 생성할 수 있다. 클라이언트(602)는 서버(604)에게 압축 청크(634)를 보낼 수 있다. 서버(604)는 하나 이상의 압축 청크(634)를 암호화하여 하나 이상의 압축 및 암호화된 데이터 청크(compressed and encrypted data chunks, 635)를 생성할 수 있다. 그 후, 서버(604)는 하나 이상의 압축되고 암호화된 데이터 청크(635)에 대해 소거 코딩(erasure coding)을 수행하여 하나 이상의 패리티 청크(parity chunks, 636)를 생성하고 하나 이상의 데이터 청크(635)와 하나 이상의 패리티 청크(636)을 하나 이상의 저장 장치(608)에 걸쳐 저장할 수 있다.
도 6b는 본 개시의 실시 예에 따른 로컬 데이터 복원 및 클라이언트 측 암호화를 갖는 저장 방식(storage scheme)에 대한 쓰기 동작의 실시 예를 도시한 것이다. 도 6b에 도시된 실시 예는, 예를 들어, 도 4 및 도 5에 도시된 저장 방식 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 6b의 좌측은 스토리지 시스템의 구성 요소들 간의 데이터 흐름을 나타내며, 도 6b의 우측은 쓰기 동작 시 데이터에 대한 동작을 나타낸다.
도 6b에 도시된 데이터에 대한 구성요소들 간의 데이터 흐름 및/또는 동작은 도 6a에 도시된 서버측 암호화와 유사할 수 있으며, 동일한 숫자로 끝나는 참조 번호를 갖는 요소들도 유사할 수 있다. 그러나, 도 6b에 도시된 실시 형태에서는 클라이언트(602)는 제1 동작 그룹(610B)에 나타난 바와 같이 하나 이상의 압축된 데이터 청크(634)를 암호화하여 하나 이상의 압축되고 암호화된 데이터 청크(635)를 생성할 수 있다. 그 후 클라이언트(602)는 하나 이상의 압축 및 암호화된 데이터 청크(635)를 서버(604)로 보낼 수 있으며, 서버(604)는 하나 이상의 패리티 청크(636)를 생성하기 위해 하나 이상의 압축 및 암호화된 데이터 청크(635)를 소거 코딩할 수 있고, 하나 이상의 데이터 청크(635) 및 하나 이상의 패리티 청크(636)를 제2 동작 그룹(612B)에 나타난 것과 같이 하나 이상의 저장 장치들(608)에 걸쳐 저장할 수 있다.
하나 이상의 데이터 청크(633)가 개별적으로 수정되고(예: 압축, 암호화 및/또는 이와 유사한 것) 하나 이상의 저장 장치들(608)에 걸쳐 수정된 데이터 청크들(636)으로 저장된 후, 각 저장 장치는 하나 이상의 데이터 청크(예: 하나 이상의 데이터 청크를 복호화 및/또는 압축 해제함으로써)를 복원할 수 있으며, 복원된 데이터 청크(restored data chunk)에 대해 동작을 수행할 수 있다. 예를 들어, 사용자, 클라이언트(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)에서 국부적으로(locally) 동작들의 그룹(group of operations, 737)을 수행할 수 있다. 세 개의 서로 다른 저장 장치 각각은 각 장치에 저장된 해당 데이터 청크에 대해 각각 데이터 복원 및 데이터 선택 작업 그룹 737-1, 737-2 및 737-3을 수행할 수 있다. 그러나, 일부 실시 예에서, 단일 저장 장치는 장치에 저장된 임의의 수의 데이터 청크에 대해 데이터 복원 및 데이터 선택 또는 기타 작업을 수행할 수 있다.
각 저장 장치(708)는 개별적으로 압축되고 암호화된 데이터 청크(735)를 저장 매체(storage media)로부터 읽을 수 있다. 각 저장 장치는 해당 데이터 청크를 복호화하여 압축 및 복호화된 데이터 청크(734)를 생성할 수 있다. 각 저장 장치는 복원된 데이터 청크(738)를 생성하기 위해 해당 데이터 청크를 압축 해제할 수 있다. 일부 실시 예에서, 각 복원된 데이터 청크(738)는 오리지널 데이터(714)의 대응하는 부분과 동일할 수 있다. 그러나, 일부 실시 예들에서, 복원된 데이터 청크(738)는 저장 장치(708)가 복원된 데이터에 대해 의미 있는 동작을 수행하도록 할 수 있는 형태로만 복원될 수 있다(예를 들어, 일부 실시 예들은 완전히 압축 해제되지 않은 데이터 청크에 대해 하나 이상의 동작을 수행할 수 있다).
데이터 청크가 복원된 후, 각 기억 장치(708)은, 예를 들면, 요청과 함께 제공된 식에 근거해 데이터 선택 동작(예를 들면, 스캔, 필터링 등)을 실시해, 하나 이상의 대응하는 결과(739)를 얻을 수 있다. 그 후, 하나 이상의 저장 장치(708)는 오리지널 데이터(714)의 하나 이상의 요청 부분 집합(740)으로서 결과 (739)를 클라이언트에 전송할 수 있다. 클라이언트의 압축 해제 및/또는 암호 해독 작업이 무시될 수 있으므로 얇은 선으로 표시된다.
몇몇 실시예들에서, 패리티 청크(736)가 저장 장치에 저장된다면, 하나 이상의 저장 장치(708)들은 하나 이상의 누락된 데이터 청크(735)를 복구할 수 있다. 또는 추가적으로, 서버(704)는 하나 이상의 다른 저장 장치에 저장된 하나 이상의 패리티 청크(736)을 사용하여 하나 이상의 누락된 데이터 청크(735)를 복원할 수 있다.
구현 세부 사항에 따라, 저장 장치에서 데이터 복구(data recovery) 및/또는 데이터 선택 작업(a data selection operation)을 수행하면 하나 이상의 저장 장치에서 하나 이상의 청크에 저장된 오리지널 데이터의 서브세트(예: 객체의 서브세트(a subset of object))을 읽는 것과 관련된 시간, 대역폭, 전력, 지연 시간 등을 줄일 수 있다.
도 8에는 본 개시의 실시 예에 따른 로컬 데이터 복원이 있는 객체 저장 방식에 대한 시스템 아키텍처의 실시 예가 도시되어 있다. 도 8에 도시된 시스템은, 예를 들어, 도 4, 도 5, 도 6a, 도 6b, 도 7a, 도 7b, 도 9a 및/또는 도 9b와 관련하여 설명된 방식 중 어느 하나를 구현하기 위해 사용될 수 있다.
도 8에 도시된 시스템은 클라이언트(802) 및 네트워크 연결(842)를 통해 연결된 객체 저장 서버 클러스터(804)를 포함할 수 있다. 시스템은 또한 저장 네트워크(storage network, 844)를 통해 객체 저장 서버 클러스터(object storage server cluster, 804)에 연결된 하나 이상의 저장 노드(storage node, 806)를 포함할 수 있다.
클라이언트(802)는 데이터 청킹 로직(data chunking logic, 826) 및/또는 압축 로직(compression logic, 846)을 포함할 수 있으며, 이 압축 로직(846)은 개별 데이터 청크(individual chunks of data)를 압축하기 전에 오리지널 데이터(예를 들어, 하나 이상의 객체)의 데이터 청크(data chunking)를 수행하도록 구성될 수 있다. 하나 이상의 연산(computational) 저장 장치(storage devices, 808)는 복원된 데이터 청크에 대한 작업을 수행하기 위해 데이터 청크를 복원할 수 있다.
객체 저장 서버 클러스터(804)는 암호화 로직(encryption logic, 847), 소거 코딩 로직(erasure coding logic, 848), 데이터 선택 로직(data selection logic, 849), 클러스터 관리 로직(cluster management logic, 850) 및/또는 노드 및 저장 장치 관리 로직(node and storage device management logic, 851)을 포함할 수 있다. 암호화 로직(847)은 클라이언트(802)로부터 수신된 데이터 청크(예: 압축된 데이터)를 개별적으로 암호화하기 위해 사용될 수 있다. 소거 코딩 로직(848)은 저장 노드(806) 및/또는 저장 장치(808)에 걸쳐 데이터 청크의 소거 코딩(erasure coding)을 수행할 수 있다. 데이터 선택 로직(849)는 개별 저장 장치(808)에 의해 수행되는 데이터 복원, 데이터 선택 및/또는 기타 처리 동작과 관련된 다양한 동작을 수행할 수 있다. 예를 들어, 데이터 선택 로직(849)은 하나 이상의 저장 장치(808)에 걸쳐 청크로 저장될 수 있는 데이터의 하나 이상의 서브세트를 읽기 위한 요청을 클라이언트(802)로부터 수신할 수 있다. 데이터 선택 논리 (849)는 요청들을 대응하는 저장 노드들(806) 및/또는 저장 장치들(808)로 포워드(forward)하고, 대응하는 저장 노드들(806) 및/또는 저장 장치들(808)로부터 결과를 수신 및/또는 집계(aggregate)하고, 집계된 결과들을 클라이언트(802)로 전송할 수 있다. 클러스터 관리 로직(850)은 저장 서버 클러스터(804)의 유지와 관련된 하우스키핑(housekeeping) 및/또는 관리 기능을 수행할 수 있다. 노드 및 저장 장치 관리 로직(851)은 하나 이상의 저장 노드(806) 및/또는 저장 장치(808)의 유지와 관련된 하우스키핑 및/또는 관리 기능을 수행할 수 있다.
각각의 저장 노드(806)는 처리부(processing unit, 852)(예를 들어, 데이터 처리부(data processing unit, DPU), CPU 등)와 하나 이상의 연산 저장 장치(808)을 포함할 수 있다. DPU(852)는 하나 이상의 저장 장치(808)에 걸쳐 청크로 저장될 수 있는 하나 이상의 데이터의 서브세트를 읽기 위한 요청을 클라이언트(802)로부터 수신하고 분배하는 것과 같은 다양한 기능을 수행할 수 있다. 일부 실시 예에서, DPU(852)는 객체 저장 서버 클러스터(804)로부터 수신되어 하나 이상의 연산 저장 장치(808)에 저장된 데이터의 청크에 대해 데이터 압축, 데이터 암호화, 소거 코딩 등을 수행할 수 있다. 일부 실시 예에서, DPU(852)는 하나 이상의 연산 저장 장치(808)에 의해 수행되는 하나 이상의 데이터 선택 동작의 결과를 집계하고 집계된 결과를 객체 저장 서버 클러스터(804) 및/또는 클라이언트(802)에 전달할 수 있다.
연산 저장 장치(808a)는 하나 이상의 연산 저장 장치(808)에 포함될 수 있는 구성요소들의 예를 나타낸다. 연산 저장 장치(808a)는 데이터 선택 엔진(data selection engine, 853)과 저장 매체(storage media, 830)를 포함할 수 있다. 데이터 선택 엔진(853)은 동작할 수 있는 형태로 데이터 청크를 복원하기 위해 각각 개별적으로 암호화 및/또는 압축된 데이터 청크를 복호화 및/또는 압축 해제하는 데 사용될 수 있는 복호화 로직(decryption logic, 854) 및 압축 해제 로직(decompression logic, 855)를 포함할 수 있다. 데이터 선택 엔진(853)은 또한 복원된 데이터 청크에 대한 데이터 선택 또는 다른 작업을 수행하는데 사용될 수 있는 데이터 선택 로직(data selection logic, 856)을 포함할 수 있다. 데이터 선택 엔진(853)은 또한 저장 장치(808a)를 위한 KV 인터페이스를 구현하기 위해 사용될 수 있는 KV 로직(Key-Value logic, 857)을 포함할 수 있다.
일부 실시 예에서, 도 8에 도시된 시스템은 저장 장치(808)의 일부 또는 전부를 위한 KV 인터페이스로 구현될 수 있다. 구현 세부 사항에 따라 데이터 청크가 가변 청크 크기(variable chunk size)로 구현되도록 할 수 있다. 도 8에 도시된 실시 예는 하나의 저장 장치(808) 중 하나 이상에서 국부적으로 복원된 데이터 청크를 갖는 데이터 선택 기능을 구현하는 것으로 설명될 수 있으나, 이러한 원칙들은 복원된 데이터 청크에 대해 수행될 수 있는 모든 종류의 처리에 적용될 수 있다.
도 9a는 본 개시의 실시 예에 따른 로컬 데이터 복원이 있는 저장 방식에 대한 읽기 및 쓰기 동작의 실시 예를 도시하고 있다. 도 9a에 도시된 동작들은, 예를 들어, 도 8에 도시된 시스템을 이용하여 구현될 수 있다. 도 8에 도시된 클라이언트(802) 및 객체 저장 서버 클러스터(804)에 의해 제1 동작 그룹(958A)가 수행되는 것으로 가정할 수 있다. 도 8에 도시된 하나 이상의 저장 노드(806) 및/또는 저장 장치(808)에 의해 제2 동작 그룹(959A)가 수행되는 것으로 가정될 수 있다. 다만, 다른 실시 예에서, 도 9a에 도시된 동작들은 다른 임의의 구성 요소들에 의해 수행될 수 있다.
도 9a를 참조하면, 쓰기 동작(예를 들어, 풋 동작(put operation)) 동안 오리지널 데이터(914)(예를 들어, 하나 이상의 객체)는 하나 이상의 데이터 청크(933)를 생성하기 위해 클라이언트에 의해 청크될 수 있다. 하나 이상의 데이터 청크 (933)은 클라이언트에 의해 개별적으로 압축되어 하나 이상의 압축된 데이터 청크(934)를 생성할 수 있으며, 이후 객체 저장 서버에 의해 전송되고 개별적으로 암호화되어 하나 이상의 압축 및/또는 암호화된 데이터 청크(935)를 생성할 수 있다. 객체 저장 서버는 하나 이상의 압축 및/또는 암호화된 데이터 청크(935)에 대해 소거 코딩을 수행하여 하나 이상의 패리티 청크(936)을 생성할 수 있다.
객체 스토리지 서버는 하나 이상의 압축 및 암호화된 청크(935)와 하나 이상의 패리티 청크(936)(예를 들어, 풋 동작 960을 통해)를 하나 이상의 저장 장치에 대한 저장을 위해 하나 이상의 저장 노드에 전송할 수 있다. 따라서, 쓰기 동작 후에, 오리지널 데이터(914)(예: 객체)는 개별적으로 수정(예: 압축 및/또는 암호화)되었을 수 있는 하나 이상의 청크(935)로 하나 이상의 저장 장치에 저장될 수 있다.
읽기 동작(예를 들어, 겟(get) 동작) 동안, 예를 들어 저장 장치가 데이터 청크에 대한 동작을 복구 및/또는 수행할 수 없는 구현에서, 개별적으로 수정된 데이터의 하나 이상의 청크(935)가 하나 이상의 저장 장치에서 읽힐 수 있습니다. 데이터 청크(935) 중 하나 이상이 누락되거나 손상된 경우, 누락 및/또는 손상된 청크는 하나 이상의 패리티 청크(936)를 사용하여 (예를 들어, 저장 장치 및/또는 저장 노드에 의해) 복구될 수 있다.
하나 이상의 압축 및/또는 암호화된 청크(935)는 하나 이상의 압축 및/또는 암호화된 청크(935)를 복호화하여 하나 이상의 압축 및/또는 복호화 청크 (934)를 생성할 수 있는 객체 저장 서버(예: 겟 동작, 962)로 전송될 수 있다. 하나 이상의 압축 및 복호화 된 청크(934)는 클라이언트로 보내질 수 있으며, 클라이언트는 하나 이상의 데이터 청크(934)를 압축 해제하여 압축 해제 및 복호화 된 데이터 청크(933)를 생성하고, 다시 이들을 오리지널 데이터(914)로 조립할 수 있다.
도 9b는 본 개시의 예시적인 실시 예에 따른 로컬 데이터 복원 및 데이터 선택 동작을 갖는 저장 방식에 대한 읽기 동작의 예시적인 실시 예를 예시한다. 도 9b에 예시된 동작은 예를 들어, 도 8에 예시된 시스템을 사용하여 구현될 수 있다. 예를 들어, 제1 동작 그룹(958B)은 클라이언트(802) 및/또는 객체 저장 서버에 의해 수행되는 것으로 가정될 수 있다. 제2 동작 그룹(959B)은 도 8에 예시된 클러스터(804) 및 도 8에 예시된 하나 이상의 저장 노드(806) 및/또는 저장 장치(808)에 의해 수행되는 것으로 가정될 수 있다. 다른 실시 예에서, 도9b에 예시된 동작은 임의의 다른 구성요소에 의해 수행될 수 있다.
읽기 동작(예: 겟 동작, 963)을 시작하기 위해, 하나 이상의 컴퓨터 저장 장치는 하나 이상의 저장 장치에 저장된 하나 이상의 데이터 청크(935)로부터 하나 이상의 데이터 서브세트를 읽기 위한 데이터 선택 동작을 수행하기 위한 하나 이상의 요청을 수신할 수 있다. 하나 이상의 요청은 예를 들어, 요청된 데이터의 서브세트를 지정하기 위한 하나 이상의 표현식(expressions)을 포함할 수 있다.
하나 이상의 요청을 처리하기 위해 하나 이상의 저장 장치에서 하나 이상의 개별적으로 수정된 데이터 청크(935)를 읽을 수 있다. 그 후, 하나 이상의 저장 장치는 하나 이상의 데이터 청크(935)를 개별적으로 복호화하여 하나 이상의 압축 및 복호화된 데이터 청크(one or more chunks of compressed and decrypted data, 934)를 생성할 수 있다. 하나 이상의 저장 장치는 하나 이상의 압축되고 복호화된 데이터 청크(934)를 개별적으로 압축 해제하여 하나 이상의 복원된 데이터 청크(one or more chunks of restored data, 938)를 생성할 수 있다. 일부 실시 예들에서, 복원된 데이터의 각각의 청크(938)는 오리지널 데이터(914)의 대응하는 부분과 동일할 수 있다. 그러나 일부 실시예들에서, 복원된 데이터 청크(938)는 저장 장치가 복원된 데이터에 대해 의미 있는 동작을 수행할 수 있는 형태로만 복원될 수 있다(예를 들어, 일부 실시 예들은 완전히 압축 해제되지 않은 데이터 청크에서 하나 이상의 동작을 수행할 수 있다).
저장 장치는 복원된 데이터의 하나 이상의 청크(938)에 대해 데이터 선택 동작(예: 스캔, 필터링 등)을 수행하여 하나 이상의 요청에 의해 지정된 하나 이상의 데이터의 서브세트(one or more subsets of data, 939)(결과 R로 표시됨)를 찾을 수 있다. 저장 장치가 둘 이상의 데이터 청크에 대해 복원 및 데이터 선택 작업을 수행한 경우, 저장 장치는 객체 저장 서버로 전송된 다음에 요청을 보낸 클라이언트로 전송될 수 있는 집계 결과(aggregated result, 940)를 생성하기 위해 데이터 선택 작업의 결과를 집계할 수 있다. 추가적으로, 또는 대안적으로, 여러 저장 장치들에 의한 데이터 선택 동작들에 의해 발견된 결과 R(939)(예를 들어, 데이터의 서브세트)은 저장 노드에 의해 집계되어 객체 저장 서버로 전송된 다음 요청을 전송한 클라이언트로 전송될 수 있다.
표 1에는 본 발명의 실시 예에 따라 저장 시스템에 저장될 수 있는 일부 예시 데이터가 도시되어 있다. 예를 들어, 표 1에 표시된 데이터는 부동산 상장을 위한 것이지만, 원칙은 모든 유형의 데이터에 적용될 수 있다. 표 1의 각 행은 레코드 인덱스(index), 평방 피트 단위의 거주 공간(living space), 침실 수(Bedrooms), 욕실 수(Bathrooms), 우편 번호(Zip code), 지은 연도(Year Built) 및 정가(List price) 등 7개의 항목이 포함된 레코드에 해당할 수 있다. 따라서, 예를 들어, 처음 8개의 레코드는 각각 색인 1-8로 식별될 수 있다.
[표 1]
Figure pat00001
도 10에는 본 개시의 실시 예에 따른 3개의 전산 저장 장치에서 3개의 데이터 청크에 걸친 데이터(예를 들어, 표 1의 데이터)의 분포의 실시 예가 도시되어 있다. 도 10에 도시된 실시예에서는 개별 레코드(표 1에 도시된 행에 해당될 수 있음)간의 구분자로 세미콜론을 사용하지만, 다른 실시 예에서는 다른 구분 기법이 사용될 수 있다.
도 10을 참조하면, 제1 저장 장치(1008A)에 저장된 제1 데이터 청크(1064A)에 제1 두 레코드(인덱스 1 및 2)가 전체적으로 들어갈 수 있다. 제3 레코드(인덱스 3으로 식별되고 단일 밑줄이 있는 항목으로 표시됨)는 제1 및 제2 저장 장치 1008A 및 1008B에 각각 저장된 데이터 청크 1064A 및 1064B로 분할(예: 단편화됨)될 수 있다. 네 번째와 다섯 번째 레코드(인덱스 4와 5로 식별됨)는 제2 저장 장치(1008B)에 저장된 제2 데이터 청크(1064B)에 완전히 들어맞을 수 있다. 여섯 번째 레코드(인덱스 6으로 식별되고 단일 밑줄이 있는 항목으로 표시됨)는 제2 저장 장치(1008B)에 저장된 제2 데이터 청크 1064B 및 제3 저장 장치(1008C)에 저장된 제3 데이터 청크 1064C로 분할될 수 있다. 일곱 번째와 여덟 번째 레코드(인덱스 7과 8로 식별됨)는 제3 저장 장치(1008C)에 저장된 제3 데이터 청크(1064C)에 완전히 들어맞을 수 있다. 9번째 레코드(인덱스 9로 식별되고 단일 밑줄이 있는 항목으로 표시됨)는 3번째 저장 장치(1008C)에 저장된 제3 데이터 청크(1064C)와 다른 저장 장치 상의 다른 청크로 분할될 수 있다.
예를 들어, 연산 저장 장치 1008A, 1008B 및 1008C는 위에서 설명한 바와 같이 데이터 복원 로직 및/또는 처리 요소로 구현되어 있으며, 이를 통해 저장 장치들이 복호화(복호화된 청크를 생성)를 통해 개별적으로 수정된 데이터 청크(1035)를 복원할 수 있다. 예를 들어, 데이터 청크의 하나 이상의 레코드들로부터 지정된 데이터 서브셋(1039)를 획득하기 위해 복호화(복호화된 데이터 청크(1034)를 생성하기 위해), 복원된 데이터 청크(1038)를 생성하기 위한 압축 해제 및/또는 복원된 데이터 청크(1038)에 대한 데이터 선택 동작과 같은 동작을 수행할 수 있다. 그러나, 원칙들은 이러한 구현 세부 사항들에 제한되지 않으며, 모든 유형의 컴퓨터 저장 장치에 저장된 모든 유형의 데이터 청크에 수행될 수 있는 모든 유형의 작업에 적용될 수 있다. 예를 들어, 본 명세서에 설명된 일부 실시 예들은 고정 크기 데이터 청크(예: 블록 기반 저장 장치에 사용될 수 있음)를 구현할 수 있지만, 이러한 원칙들은 가변 크기 데이터 청크(예: KV 저장 장치에 사용될 수 있음)를 구현할 수 있는 실시예들에도 적용될 수 있다.
일부 실시예들에서, 레코드는 객체에 대응할 수 있다. 여기에 설명된 일부 실시예들에서, 레코드(예: JSON 객체)는 구현 세부사항에 따라 객체가 2 청크 이하에 걸쳐질 수 있도록 보장하는 청크보다 작다고 가정할 수 있다. 일부 실시예들에서 구분자는 세미콜론과 같은 간단한 문자로 구현될 수 있다. 예를 들어 CSV 객체의 경우 구분 기호가 캐리지 리턴(carriage return)으로 구현될 수 있습니다. 추가적으로, 또는 대안적으로, 하나 이상의 구분 기호는 계층에 의해 결정될 수 있다. 따라서, 구분자를 검출하는 것은 단순한 비교보다 더 복잡할 수 있다. 예를 들어, JSON 객체의 경우 한 쌍의 중괄호("{...}")가 JSON 객체를 정의할 수 있다. 게다가, 몇몇 실시예들에서, JSON 객체들은 중첩된 JSON 배열을 가질 수 있기 때문에, 가장 바깥쪽의 중괄호(curly braces) 쌍은 단일 레코드를 정의할 수 있다. 따라서 구분 기호는 가장 바깥쪽 오른쪽 중괄호("}")에 의해 정의될 수 있다.
다시 도 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)는 하나 이상의 집계 버퍼(aggregate buffer, 1166)에서 분할된 레코드를 재구성할 수 있다. 일부 실시 예들에서, 각각의 집계 버퍼(1166A, 1166B, 1166C)은 i번째 장치와 (i+1)번째 장치 사이의 분할 레코드를 재구성할 수 있다. 예를 들어, 저장 장치(1108A)는 데이터 청크(1164A)에 위치한 레코드 3의 첫 번째 부분(예: 인덱스, 생활 공간, 침실, 욕실, 우편 번호 및 지어진 연도)(프래그먼트(fragement)로 지칭될 수 있음)을 데이터 청크(1164B)에 위치하고 저장 장치(1108B)에 의해 전송된 레코드 3의 두 번째 부분(정가)과 함께 첫 번째 버퍼(1166A)에서 집계되도록 객체 저장 서버(1104)로 보낼 수 있다. 일부 실시 예에서, 객체 저장 서버(1104)는 N개의 집합 버퍼를 포함할 수 있으며, 여기서 N은 객체 저장 서버(1104)에 연결된 저장 장치의 수일 수 있다.
그 다음, 객체 저장 서버(1104)는 결과(Results, 1167)를 생성하기 위해 집계 버퍼(1166A, 1166B, 1166C)에서 재구성된 레코드 3, 6 및 9에 대해 선택 동작을 수행할 수 있다. 개별 저장 장치, 및 집합 버퍼(1166A, 1166B 및 1166C)로부터 생성된 결과(1167)에 대해, 객체 저장 서버(1104)는 요청에 의해 지정된 데이터의 일부 또는 전체의 서브세트를 획득하고 서브 세트을 클라이언트에 반환할 수 있습니다.
도 12에는 본 개시의 실시 예에 따른 로컬 데이터 복원을 갖는 저장 방식용 호스트 장치의 실시 예가 도시되어 있다. 도 12에 도시된 호스트(Host, 1200)는 본 개시에 개시된 호스트 기능 중 어느 하나를 구현하기 위해 사용될 수 있다. 호스트(1200)는 하나 이상의 클라이언트, 하나 이상의 객체 스토리지 서버, 하나 이상의 스토리지 노드 등과 같은 임의의 구성요소 또는 구성요소의 조합으로 구현될 수 있다.
도 12에 도시된 호스트(1200) 장치는 메모리 컨트롤러(Memory controller, 1204)를 포함하는 프로세서(1202), 시스템 메모리(System Memory, 1206), 호스트 제어 로직(Host control logic, 1208) 및/또는 통신 인터페이스(Communication interface, 1210)를 포함할 수 있다. 도 12에 도시된 구성 요소들 중 일부 또는 전부가 하나 이상의 시스템 버스(1212)를 통해 통신될 수 있다. 일부 실시 예에서, 도 12에 도시된 구성요소 중 하나 이상은 다른 구성요소를 이용하여 구현될 수 있다. 예를 들어, 몇몇 실시예들에서, 호스트 제어 로직(1208)은 시스템 메모리(1206) 또는 다른 메모리에 저장된 명령들을 실행하는 프로세서(1202)에 의해 구현될 수 있다.
호스트 제어 로직(1208)은 데이터 청킹 로직(data chunking logic, 426, 526, 및/또는 826), 데이터 수정 로직(data modification logic, 427 및/또는 527), 압축 로직(compression logic, 846), 암호화 로직(encryption logic, 847), 소거 코딩 로직(erasure coding logic, 848), 데이터 선택 로직(data selection logic, 849), 클러스터 관리 로직(cluster management logic, 850), 노드 및 장치 관리 로직(node and device management logic, 851), 처리 유닛(processing units, 852) 등 을 포함하는 본 명세서에 개시된 임의의 호스트 기능을 포함 및/또는 구현할 수 있다.
도 13에는 본 개시의 실시 예에 따른 로컬 데이터 복원을 갖는 저장 장치의 실시 예가 도시되어 있다. 도 13에 도시된 저장 장치(1300)는 본 명세서에 개시된 저장 장치 기능 중 어느 하나를 구현하기 위해 사용될 수 있다. 저장 장치 (1300)는 장치 제어 장치(device controller, 1302), 미디어 변환층(a media translation layer, 1304), 저장 매체(a storage media, 1306), 계산 자원(computational resources, 1308), 처리 제어 논리(processing control logic, 1316) 및 통신 인터페이스(communication interface, 1310)을 포함할 수 있다. 도 13에 도시된 구성요소들은 하나 이상의 디바이스 버스(1312)를 통해 연통될 수 있다. 저장 미디어(1306)의 일부 또는 전부를 위해 플래시 메모리를 사용할 수 있는 일부 실시예에서, 미디어 번역층(1304)은 부분적으로 또는 전체적으로 플래시 번역층(flash translation layer, FTL)으로 구현될 수 있다.
일부 실시 예에서, 처리 제어 로직(processing control logic 1316)은 데이터 복원 로직(428 및/또는 528), 처리 요소(processing elements, 429 및/또는 529), 표시 로직(indication logic, 531), 데이터 선택 엔진(data selection engine, 853), 복호화 로직(decryption logic, 854), 압축해제 로직(decompression logic, 855), 데이터 선택 로직(data selection logic, 856), 키-값 로직(key-value logic, 857) 등을 포함하는 본 명세서에 개시된 임의의 저장 장치 기능을 구현하는 데 사용될 수 있다.
위에서 언급한 바와 같이, 여기에 설명된 임의의 호스트(예를 들어, 클라이언트, 저장 서버, 저장 노드 등) 기능(functionality), 저장 장치 기능(storage device functionality) 등을 포함하여 여기에 설명된 데이터 청킹 로직(426, 526 및/또는 826), 데이터 수정 로직(427 및/또는 527), 압축 로직(846), 암호화 로직(847), 소거 코딩 로직(848), 데이터 선택 로직(849), 클러스터 관리 로직(850), 노드 및 장치와 같은 관리 로직(851), 처리 유닛(852), 복원 로직(428 및/또는 528), 처리 요소(429 및/또는 529), 표시 로직(531), 데이터 선택 엔진(853), 복호화 로직(854), 압축 해제 로직(855), 데이터 선택 로직(856), 키-값 로직(857), 호스트 제어 로직(1208), 처리 제어 로직(1316), 계산 자원(1308) 등은 하드웨어, 소프트웨어 또는 조합 논리, 순차 논리, 하나 이상의 타이머, 카운터, 레지스터, 상태 머신, DRAM 및/또는 SRAM과 같은 휘발성 메모리, 비휘발성 메모리 및/또는 이들의 조합, CPLDs, FPGAs, ASICs, x86 프로세서와 같은 CISC 프로세서 및/또는 ARM 프로세서와 같은 RISC 프로세서를 포함하는 CPUs, GPUs, NPUs, 등과 같이 메모리에 저장되어 명령을 실행하는 것들에 의해 구현될 수 있다.
도 14는 본 개시의 예시적인 실시 예에 따른 계산 저장을 위한 방법의 실시 예를 도시한다. 방법은 동작 1402에서 시작할 수 있다. 동작 1404에서, 저장 장치(storage device)에서 데이터의 일 부분의 수정된 버전(modified version)을 수신할 수 있다. 예를 들어, 데이터의 일부는 압축, 암호화 등에 의해 수정될 수 있다. 동작(1406)에서, 저장 장치에서 데이터의 일 부분의 수정된 버전으로부터 데이터의 복원된 부분을 생성할 수 있다. 예를 들어, 데이터의 일부는 압축 해제, 암호 해독 등에 의해 복원될 수 있습니다. 동작(1408)에서, 저장 장치에서 데이터의 복원된 부분에 대해 동작을 수행할 수 있다. 예를 들어, 동작은 데이터 선택 동작일 수 있다. 방법은 동작 1410에서 종료될 수 있다.
도 14에 도시된 실시 예는 물론 여기에 설명된 다른 모든 실시 예는 예시적인 동작 및/또는 구성요소이다. 일부 실시 예에서, 일부 동작 및/또는 구성요소는 생략될 수 있고/있거나 다른 동작 및/또는 구성요소가 포함될 수 있다. 더욱이, 일부 실시 예에서, 동작 및/또는 구성요소의 시간적 및/또는 공간적 순서는 변경될 수 있다. 일부 구성요소 및/또는 동작은 개별 구성요소로 예시될 수 있지만, 일부 실시 예에서, 개별적으로 도시된 일부 구성요소 및/또는 동작은 단일 구성요소 및/또는 동작, 및/또는 일부 구성요소 및/또는 단일 구성요소로 도시된 동작으로 통합될 수 있다. 및/또는 동작은 다수의 구성요소 및/또는 동작으로 구현될 수 있다.
위에 개시된 일부 실시 예는 다양한 구현 세부사항의 맥락에서 설명되었지만, 본 개시의 원리는 이들 또는 임의의 다른 특정 세부사항으로 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성요소에 의해 구현되는 것으로 설명되었지만, 다른 실시 예에서 기능은 상이한 위치에 있고 다양한 사용자 인터페이스를 갖는 상이한 시스템 및 구성요소 사이에 분산될 수 있다. 특정 실시 예는 특정 프로세스, 동작 등을 갖는 것으로 설명되었지만, 이러한 용어는 또한 특정 프로세스, 동작 등이 다수의 프로세스, 동작 등으로 구현될 수 있거나 다수의 프로세스, 동작이 구현되는 실시 예를 포함한다. 등은 단일 프로세스, 단계 등으로 통합될 수 있습니다. 구성 요소 또는 요소에 대한 참조는 구성 요소 또는 요소의 일부만을 나타낼 수 있습니다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브블록을 참조할 수 있다. 본 개시 및 청구범위에서 "제1" 및 "제2"와 같은 용어의 사용은 그들이 수정하는 것을 구별하기 위한 목적일 수 있으며 문맥상 달리 명백하지 않는 한 공간적 또는 시간적 순서를 나타내지 않을 수 있다. 일부 실시예들에서, 사물에 대한 언급은 사물의 적어도 일부를 지칭할 수 있고, 예를 들어 "~에 기초한"은 "~에 적어도 부분적으로 기반하는" 등을 지칭할 수 있다. 예를 들어, 일부 실시 예에서, 데이터 청크를 수정, 암호화, 복호화, 압축 및/또는 압축 해제하는 것은 데이터 청크의 적어도 일부를 수정, 암호화, 복호화, 압축 및/또는 압축해제하는 것을 지칭할 수 있다.
제1 요소에 대한 참조는 제2 요소의 존재를 의미하지 않을 수 있다. 여기에 개시된 원리는 독립적인 유용성을 가지며 개별적으로 구현될 수 있으며, 모든 실시예가 모든 원리를 활용할 수 있는 것은 아니다. 그러나 원칙은 또한 다양한 조합으로 구현될 수 있으며, 그 중 일부는 개별 원칙의 이점을 시너지 방식으로 증폭할 수 있다.
위에서 설명된 다양한 세부사항 및 실시 예는 본 발명의 원리에 따른 추가 실시 예를 생성하기 위해 결합될 수 있다. 본 발명의 발명 원리는 본 발명의 개념을 벗어나지 않으면서 배열 및 세부 사항에서 수정될 수 있으므로, 이러한 변경 및 수정은 다음 특허청구범위에 속하는 것으로 간주된다.

Claims (20)

  1. 연산 저장(computational storage) 방법에 있어서,
    저장 장치(storage device)에서 데이터의 일 부분의 수정된 버전(modified version)을 수신하는 단계;
    상기 저장 장치에서 상기 데이터의 일 부분의 상기 수정된 버전으로부터 데이터의 복원된(restored) 부분을 생성하는 단계; 및
    상기 저장 장치에서 상기 데이터의 복원된 부분에서 동작을 수행하는 단계를 포함하는, 연산 저장 방법.
  2. 제1항에 있어서,
    상기 생성하는 단계는,
    상기 데이터의 일 부분의 상기 수정된 버전을 압축 해제(decompressing)하는 단계를 포함하는 연산 저장 방법.
  3. 제1항에 있어서,
    상기 생성하는 단계는,
    상기 데이터의 일 부분의 상기 수정된 버전을 해독(decrypting)하는 단계를 포함하는 연산 저장 방법.
  4. 제1항에 있어서,
    상기 저장 장치로부터 상기 데이터의 복원된 부분에서 상기 동작의 결과를 송신하는 단계;를 더 포함하는 연산 저장 방법.
  5. 제1항에 있어서,
    상기 동작은 필터링 동작(filtering operation)을 포함하는 연산 저장 방법.
  6. 제1항에 있어서,
    상기 데이터의 일 부분을 생성하기 위해 데이터를 나누는 단계를 더 포함하는 연산 저장 방법.
  7. 제6항에 있어서,
    상기 데이터를 나누는 단계는,
    클라이언트(client)가 상기 데이터를 나누는 단계를 포함하는 연산 저장 방법.
  8. 제7항에 있어서,
    상기 데이터를 나누는 단계는,
    인디케이션(indication)에 기초하여 상기 데이터를 나누는 단계를 포함하는 연산 저장 방법.
  9. 제8항에 있어서,
    상기 데이터를 나누는 단계는,
    상기 저장 장치가 상기 인디케이션에 기초하여 상기 데이터를 나누는 단계를 포함하는 연산 저장 방법.
  10. 제8항에 있어서,
    상기 인디케이션은 압축 방식(compression scheme)을 포함하는 연산 저장 방법.
  11. 제8항에 있어서,
    상기 인디케이션은 부분 크기(portion size)를 포함하는 연산 저장 방법.
  12. 제8항에 있어서,
    상기 인디케이션은 상기 저장 장치에 의해서 공급되는 연산 저장 방법.
  13. 제1항에 있어서,
    상기 데이터의 일 부분의 상기 수정된 버전을 생성하기 위해서 상기 데이터의 일 부분을 수정하는 단계를 더 포함하는 연산 저장 방법.
  14. 제13항에 있어서,
    상기 데이터의 일 부분을 수정하는 단계는,
    상기 데이터의 일 부분을 압축하는 단계를 포함하는 연산 저장 방법.
  15. 제13항에 있어서,
    상기 데이터의 일 부분을 수정하는 단계는,
    클라이언트가 상기 데이터의 일 부분을 수정하는 단계를 포함하는 연산 저장 방법.
  16. 제1항에 있어서,
    상기 저장 장치는 제1 저장 장치이고,
    상기 동작은 제1 동작이고,
    상기 데이터의 복원된 부분은 제1 데이터의 복원된 부분이고,
    상기 제1 저장 장치에 의한 상기 제1 데이터의 복원된 부분에서 상기 제1 동작의 제1 결과 및 제2 저장 장치에 의한 제2 데이터의 복원된 부분에서 제2 동작의 제2 결과를 합치는(aggregating) 단계를 더 포함하는 연산 저장 방법.
  17. 저장 장치에 있어서,
    저장 매체(storage medium);
    데이터의 수정된 부분으로부터 데이터의 복원된 부분을 생성하도록 구성된 데이터 복원 로직(data restoration logic); 및
    상기 데이터의 복원된 부분에서 동작을 수행하도록 구성된 데이터 프로세싱 요소(data processing element)를 포함하는 저장 장치.
  18. 제17항에 있어서,
    상기 데이터 복원 로직은 압축 해제(decompression) 로직을 포함하는 저장 장치.
  19. 저장 장치(storage device); 및
    호스트;를 포함하고,
    상기 호스트는 데이터를 데이터의 하나 이상의 부분들로 나누도록 구성된 데이터 디바이딩 로직(data dividing logic); 및
    상기 하나 이상의 부분들 중 하나를 수정함으로써 데이터의 수정된 일 부분을 생성하도록 구성된 데이터 수정 로직(data modification logic);을 포함하고,
    상기 호스트는 상기 데이터의 수정된 일 부분을 상기 저장 장치에게 송신하도록 구성되고,
    상기 저장 장치는 상기 데이터의 수정된 일 부분으로부터 데이터의 복원된 부분을 생성하도록 수성된 데이터 복원 로직(data restoration logic); 및
    상기 데이터의 복원된 일 부분에서 동작을 수행하도록 구성된 데이터 프로세싱 요소(data processing element)를 포함하는 시스템.
  20. 상기 저장 장치는 상기 호스트에게 인디케이션을 송신하도록 구성된 인디케이션 로직(indication logic)을 포함하고,
    상기 데이터 디바이딩 로직은 상기 인디케이션에 기초하여 데이터를 하나 이상의 부분들로 나누도록 구성된 시스템.
KR1020220086559A 2021-08-10 2022-07-13 저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치 KR20230023564A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US202163231711P 2021-08-10 2021-08-10
US202163231709P 2021-08-10 2021-08-10
US63/231,711 2021-08-10
US63/231,709 2021-08-10
US17/572,621 US20230049329A1 (en) 2021-08-10 2022-01-10 Systems, methods, and apparatus for processing data at a storage device
US17/572,621 2022-01-10

Publications (1)

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

Family

ID=82701910

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220086559A KR20230023564A (ko) 2021-08-10 2022-07-13 저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치

Country Status (5)

Country Link
US (1) US20230049329A1 (ko)
EP (1) EP4135203A1 (ko)
KR (1) KR20230023564A (ko)
CN (1) CN115878028A (ko)
TW (1) TW202311988A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116991338B (zh) * 2023-09-28 2023-12-22 北京超弦存储器研究院 访问数据的方法及控制器、cxl内存模组和存储系统

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4254178B2 (ja) * 2002-09-11 2009-04-15 富士ゼロックス株式会社 分散格納制御装置及び方法
US9841925B2 (en) * 2014-06-30 2017-12-12 International Business Machines Corporation Adjusting timing of storing data in a dispersed storage network
WO2017096532A1 (zh) * 2015-12-08 2017-06-15 华为技术有限公司 一种数据保存方法和装置
US11030156B2 (en) * 2015-12-28 2021-06-08 Sandisk Technologies Llc Key-value store with partial data access
WO2017119091A1 (ja) * 2016-01-07 2017-07-13 株式会社日立製作所 分散型ストレージシステム、データ格納方法、およびソフトウェアプログラム
US10027984B2 (en) * 2016-11-30 2018-07-17 Hewlett Packard Enterprise Development Lp Methods and systems for efficiently reading a data block from a data seglet with compressed data blocks
US10594790B2 (en) * 2017-06-28 2020-03-17 International Business Machines Corporation Data compression in a dispersed storage network
US20200042500A1 (en) * 2018-08-02 2020-02-06 Alibaba Group Holding Limited Collaborative compression in a distributed storage system
US20190196907A1 (en) * 2019-03-05 2019-06-27 Intel Corporation Compression techniques for distributed data
US20220188028A1 (en) * 2019-03-12 2022-06-16 Intel Corporation Computational data storage systems
JP7343536B2 (ja) * 2021-03-01 2023-09-12 株式会社日立製作所 リモートコピーシステム及び方法

Also Published As

Publication number Publication date
US20230049329A1 (en) 2023-02-16
EP4135203A1 (en) 2023-02-15
CN115878028A (zh) 2023-03-31
TW202311988A (zh) 2023-03-16

Similar Documents

Publication Publication Date Title
US11762781B2 (en) Providing end-to-end encryption for data stored in a storage system
US10235064B1 (en) Optimized data replication using special NVME protocol and running in a friendly zone of storage array
US9767070B2 (en) Storage system with a memory blade that generates a computational result for a storage device
US20230107685A1 (en) Replicating A Storage System
US20210383878A1 (en) Conserving bandwidth using efficient relocation of data between storage devices
US10915247B2 (en) Efficient data management through compressed data interfaces
US9225691B1 (en) Deduplication of encrypted dataset on datadomain backup appliance
CN111868676A (zh) 在基于云的存储系统中服务i/o操作
US11113409B2 (en) Efficient rekey in a transparent decrypting storage array
WO2020256796A1 (en) Efficient non-uniform object processing
US11755254B2 (en) Network storage gateway
KR20230023564A (ko) 저장 장치에서 데이터를 처리하기 위한 시스템, 방법 및 장치
EP4135201A1 (en) Systems, methods, and apparatus for hierarchical aggregation for computational storage
US20140279967A1 (en) Data compression using compression blocks and partitions
US20230055535A1 (en) Systems, methods, and apparatus for dividing and compressing data
US11093176B2 (en) FaaS-based global object compression
US11403043B2 (en) Efficient data compression by grouping similar data within a data segment
US20230046030A1 (en) Systems, methods, and apparatus for data resizing for computational storage
US20230057517A1 (en) Systems, methods, and apparatus for dividing and encrypting data
US10394481B2 (en) Reducing application input/output operations from a server having data stored on de-duped storage
CN113302584A (zh) 基于云的存储系统的存储管理