[go: up one dir, main page]

KR102460568B1 - System and method for storing large key value objects - Google Patents

System and method for storing large key value objects Download PDF

Info

Publication number
KR102460568B1
KR102460568B1 KR1020180142144A KR20180142144A KR102460568B1 KR 102460568 B1 KR102460568 B1 KR 102460568B1 KR 1020180142144 A KR1020180142144 A KR 1020180142144A KR 20180142144 A KR20180142144 A KR 20180142144A KR 102460568 B1 KR102460568 B1 KR 102460568B1
Authority
KR
South Korea
Prior art keywords
data storage
chunks
storage devices
data
size
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020180142144A
Other languages
Korean (ko)
Other versions
KR20190088873A (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
Priority claimed from US15/876,028 external-priority patent/US10795760B2/en
Priority claimed from US15/967,302 external-priority patent/US10552062B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20190088873A publication Critical patent/KR20190088873A/en
Application granted granted Critical
Publication of KR102460568B1 publication Critical patent/KR102460568B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/0662Virtualisation aspects
    • G06F3/0667Virtualisation aspects at data level, e.g. file, record or object virtualisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/0662Virtualisation aspects
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

본 발명의 실시 예에 따른 데이터 스토리지 시스템은 키-값 쌍의 복수의 객체들을 저장하는 복수의 데이터 스토리지 장치들, 복수의 객체들의 객체 크기를 기반으로 데이터 복제 방식 및 소거 코딩 방식을 포함하는 다른 데이터 신뢰성 방식들을 적용하는 가상 스토리지 레이어를 포함한다. 복수의 객체들은 제1 크기를 갖는 제1 객체 및 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함한다. 가상 스토리지 레이어는 제1 객체를 소형 객체로 분류하고, 데이터 복제 방식을 적용하고, 소형 객체를 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상을 통해 저장한다. 가상 스토리지 레이어는 제2 객체를 거대 객체로 분류하고, 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 소거 코딩 방식을 적용하고, 복수의 데이터 저장 장치들을 통해 하나 또는 그 이상의 청크들을 분산하여 저장한다.A data storage system according to an embodiment of the present invention includes a plurality of data storage devices for storing a plurality of objects of a key-value pair, and other data including a data replication method and an erasure coding method based on the object size of the plurality of objects. Includes a virtual storage layer that applies reliability schemes. The plurality of objects includes a first object having a first size and a second object having a second size greater than the first size. The virtual storage layer classifies the first object as a small object, applies a data replication method, and stores the small object through one or more of a plurality of data storage devices. The virtual storage layer classifies the second object as a large object, divides the large object into one or more chunks of the same size, applies an erasure coding scheme, and stores the one or more chunks through a plurality of data storage devices. distributed and stored

Figure R1020180142144
Figure R1020180142144

Description

대형 키 밸류 객체들을 저장하는 시스템 및 방법{SYSTEM AND METHOD FOR STORING LARGE KEY VALUE OBJECTS}SYSTEM AND METHOD FOR STORING LARGE KEY VALUE OBJECTS

본 발명은 데이터 스토리지 시스템들에 관한 것으로서, 더욱 상세하게는 데이터 스토리지 시스템에서 대형 키 밸류 객체들을 저장하는 방법에 관한 것이다.The present invention relates to data storage systems, and more particularly, to a method of storing large key value objects in a data storage system.

데이터 신뢰성은 데이터 스토리지 시스템의 핵심적인 요구 사항이다. 종래의 블록 장치들을 사용하는 데이터 신뢰성은 소거 코딩(erasure coding) 및 RAID(Redundant Array of Independent Disks)과 같은 다양한 데이터 복제 기술들을 통해 구현되거나 연구됐다. RAID는 데이터 스토리지 장치들의 세트 상에서 데이터를 분산(또는 복제)하여 특정 드라이브의 영구적인 데이터 손실을 방지한다. RAID는 크게 2가지의 카테고리들로 분류된다. 데이터의 완전한 미러 이미지(mirror image)가 제2 드라이브에서 유지되거나 또는 패리티 블록들이 데이터로 추가되어 페일 상황에서 페일된 블록들을 복구할 수 있다. 소거 코딩은 높은 레벨의 페일을 용인할 수 있는 강력한 데이터 보호 및 복구를 제공하는 복잡한 알고리즘을 사용하여 패리티-같은 블록들의 뭉치를 추가한다. 예를 들어, 소거 코딩은 물리적 드라이브들을 가상화하여 물리적 드라이브들보다 더 많이 분산되어 빠른 복원을 달성할 수 있는 가상 드라이브를 생성할 수 있다. RAID를 사용한 데이터 복제는 대형 객체들을 복제하는데 과도한 비용이 소모되며, 소거 코딩은 소형 객체들에 대하여 스토리지 공간들이 낭비될 수 있다. Data reliability is a key requirement for data storage systems. Data reliability using conventional block devices has been implemented or studied through various data replication techniques such as erasure coding and RAID (Redundant Array of Independent Disks). RAID prevents permanent data loss on a particular drive by distributing (or duplicating) data over a set of data storage devices. RAID is largely classified into two categories. A complete mirror image of the data may be maintained on the second drive or parity blocks may be added as data to recover failed blocks in a fail situation. Erasure coding adds chunks of parity-like blocks using complex algorithms that provide robust data protection and recovery that can tolerate high levels of failing. For example, erasure coding can virtualize physical drives to create virtual drives that are more distributed than physical drives to achieve fast restores. Data replication using RAID is expensive to replicate large objects, and erasure coding can waste storage space for small objects.

키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)는 HDD(hard disk drives) 및 SSD(solid-state drives)과 같은 종래의 블록 장치들과 비교하여 다른 인터페이스들 및 시멘틱스(semantics)를 갖는 새로운 형태의 스토리지이다. KV SSD는 키-밸류 쌍들의 데이터 값들을 직접적으로 저장할 수 있다. KV SSD에 저장된 데이터 값들은 애플리케이션 및 데이터의 특성에 따라 거대하거나 또는 소형으로 나타날 수 있다. 성능 제한이나 공간 제약 없이 다른 크기를 갖는 객체들을 효율적으로 저장하는 효율적인 데이터 신뢰성 모델이 필요하다. Key-value solid-state drives (KV SSDs) have different interfaces and semantics ( It is a new form of storage with semantics. The KV SSD can directly store data values of key-value pairs. The data values stored in the KV SSD may appear large or small depending on the application and the characteristics of the data. There is a need for an efficient data reliability model that efficiently stores objects of different sizes without performance or space constraints.

일 실시 예에 따르면, 데이터 스토리지 시스템은: -값 쌍의 복수의 객체들을 저장하는 복수의 데이터 스토리지 장치들; 상기 복수의 객체들의 객체 크기를 기반으로 데이터 복제 방식 및 소거 코딩 방식을 포함하는 다른 데이터 신뢰성 방식들을 적용하는 가상 스토리지 레이어를 포함하고, 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고, 상기 가상 스토리지 레이어는 상기 제1 객체를 소형 객체로 분류하고, 상기 데이터 복제 방식을 적용하고, 상기 소형 객체를 상기 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상을 통해 저장하고, 상기 가상 스토리지 레이어는 상기 제2 객체를 거대 객체로 분류하고, 상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 복수의 데이터 저장 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산하여 저장한다.According to an embodiment, the data storage system includes: a plurality of data storage devices storing a plurality of objects of a -value pair; and a virtual storage layer that applies other data reliability methods including a data replication method and an erasure coding method based on the object sizes of the plurality of objects, wherein the plurality of objects include a first object having a first size and the second object. a second object having a second size greater than one size, wherein the virtual storage layer classifies the first object as a small object, applies the data replication method, and converts the small object to the plurality of data storage devices storing through one or more of the above, the virtual storage layer classifies the second object as a large object, divides the large object into one or more chunks of the same size, and applies the erasure coding scheme and distributes and stores the one or more chunks through the plurality of data storage devices.

다른 실시 예에 따르면, 키-밸류 쌍의 객체를 기입하는 방법은: 키-밸류 쌍의 복수의 객체들을 수신하는 단계, 단, 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고; 상기 제1 객체를 소형 객체로 분류하는 단계; 상기 소형 객체로 데이터 복제 방식을 적용하는 단계; 상기 소형 객체를 하나 또는 그 이상의 복수의 데이터 스토리지 장치들을 통해 저장하는 단계; 상기 제2 객체를 거대 객체로 분류하는 단계; 상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하는 단계; 상기 거대 객체로 소거 코딩 방식을 적용하는 단계; 및 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들을 통해 분산하여 저장하는 단계를 포함한다.According to another embodiment, a method of writing an object of a key-value pair includes: receiving a plurality of objects of a key-value pair, wherein the plurality of objects include a first object having a first size and the first object a second object having a second size greater than the size; classifying the first object as a small object; applying a data replication method to the small object; storing the small object through one or more plurality of data storage devices; classifying the second object as a giant object; dividing the large object into one or more chunks of the same size; applying an erasure coding scheme to the large object; and distributing and storing the one or more chunks through the plurality of data storage devices.

이벤트들의 구현 및 조합의 다양한 새로운 설명들을 포함하는 상술된 그리고 다른 적절한 특징들은 첨부된 도면들을 참조하여 더욱 상세하게 설명되고, 특허청구범위에서 지칭될 것이다. 본문에서 기재된 특정한 시스템들 및 방법들은 설명을 위해서만 도시되며, 본 발명은 이에 제한되지 않는다. 본문에 기재된 이론들 및 특징들이 본 발명의 사상으로부터의 벗어남 없이 다양한 실시 예들로 구현될 수 있음이 당업자에 의해 이해될 것이다.The foregoing and other suitable features, including various novel descriptions of implementations and combinations of events, will be described in greater detail with reference to the accompanying drawings and will be referred to in the claims. The specific systems and methods described herein are shown for illustrative purposes only, and the present invention is not so limited. It will be understood by those skilled in the art that the theories and features described herein may be embodied in various embodiments without departing from the spirit of the present invention.

본 발명의 상세한 설명의 일부로서 포함된 첨부된 도면들은 상술된 일반적인 설명 및 본문에 기재된 이론들을 교시하고 설명하기 위해 이하에서 제공되는 적절한 실시 예의 상세한 설명과 같이 본 발명의 적절한 실시 예들을 보여준다.
도 1은 일 실시 예에 따른 예시적인 데이터 스토리지 장치에 저장된 객체의 개념도를 보여준다.
도 2는 일 실시 예에 따른 사용자 키를 포함하는 예시적인 내부 키를 보여준다.
도 3은 일 실시 예에 따른, 그룹 특징을 사용하는 객체 회수의 실시 예를 보여준다.
도 4는 일 실시 예에 따른, 그룹 특징이 없는 객체 회수의 실시 예를 보여준다.
도 5는 일 실시 예에 따른 전용 패리티 장치가 없는 소거 코딩의 실시 예를 보여준다.
도 6은 일 실시 예에 따른 하나 또는 그 이상의 전용 패리티 장치들을 사용한 소거 코딩의 실시 예를 보여준다.
도 7은 일 실시 예에 따른, 패리티 장치 없이, 하나 또는 그 이상의 데이터 스토리지 장치들을 통한 소형 객체의 예시적인 복제 방식을 보여준다.
도 8은 일 실시 예에 따른 객체를 기입하는 예시적인 순서도를 보여준다.
도 9는 일 실시 예에 따른 객체를 읽는 예시적인 순서도를 보여준다.
도면들 전반에 걸쳐 도면의 간결성을 위하여, 도면들은 필수적으로 계측되지 않으며, 유사한 구조들 또는 기능들의 요소들은 일반적으로 유사한 참조번호로 지칭된다. 도면들은 본문에 기재된 다양한 실시 예들을 설명을 용이하게 하는 것으로만 의도된다. 도면들은 본문에 기재된 교시들의 모든 사상들을 도시하지 않으며, 특허청구범위를 제한하지 않는다.
BRIEF DESCRIPTION OF THE DRAWINGS The accompanying drawings, which are included as part of the detailed description of the present invention, show suitable embodiments of the invention, such as the detailed description of suitable embodiments provided below for teaching and explaining the principles set forth in the general description and text set forth above.
1 shows a conceptual diagram of an object stored in an exemplary data storage device according to an embodiment.
2 shows an exemplary internal key including a user key according to an embodiment.
3 illustrates an example of object retrieval using a group feature, according to an embodiment.
4 illustrates an example of retrieving an object without a group feature, according to an embodiment.
5 shows an embodiment of erasure coding without a dedicated parity device according to an embodiment.
6 shows an embodiment of erasure coding using one or more dedicated parity devices according to an embodiment.
7 illustrates an exemplary replication method of a small object through one or more data storage devices without a parity device, according to an embodiment.
8 shows an exemplary flowchart of writing an object according to an embodiment.
9 shows an exemplary flowchart of reading an object according to an embodiment.
Throughout the drawings, for the sake of brevity, the drawings are not necessarily to scale, and elements of similar structures or functions are generally referred to by like reference numerals. The drawings are only intended to facilitate the description of the various embodiments described herein. The drawings do not depict all the spirits of the teachings described herein and do not limit the scope of the claims.

본문에 기재된 특징들 및 교시들 각각은 다른 특징들 및 교시들과 함께 또는 개별적으로 사용되어 다른 크기들을 갖는 객체들을 효율적으로 저장하는 데이터 스토리지 시스템 및 데이터 스토리지 시스템에 객체를 저장하는 방법을 제공할 수 있다. 다양한 추가적인 특징들 및 교시들을 개별적으로 또는 조합하여 사용하는 대표적인 실시 예들은 첨부된 도면들을 참조하여 더욱 상세하게 설명된다. 상세한 설명은 단순히 당업자에게 본 발명의 사상을 실시할 수 있도록 설명하기 위한 것이며, 특허청구범위를 제한하는 것으로 의도되지 않는다. 그러므로, 상세한 설명에서 상술된 특징들의 조합들은 가장 넓은 의미에서 본 발명을 실시하는데 필수적이지 않을 수 있으며, 단지 본 발명의 특정한 대표적인 실시 예들을 설명하기 위해 설명된다.Each of the features and teachings described herein can be used individually or in conjunction with the other features and teachings to provide a data storage system that efficiently stores objects having different sizes and a method of storing objects in the data storage system. have. Representative embodiments using various additional features and teachings individually or in combination are described in greater detail with reference to the accompanying drawings. The detailed description is merely intended to enable those skilled in the art to practice the spirit of the present invention, and is not intended to limit the scope of the claims. Therefore, combinations of features described above in the detailed description may not be essential to the practice of the present invention in the broadest sense, but are described merely for describing specific representative embodiments of the present invention.

이하의 설명에서, 단순히 설명의 편의를 위하여, 특정한 명명법이 본 발명의 전반적인 이해를 돕기 위하여 사용된다. 그러나 이러한 상세한 설명들이 본 발명의 교시들을 구현하는데 필수적이지 않음은 당업자에게 이해될 것이다.In the following description, simply for convenience of description, specific nomenclature is used to help the general understanding of the present invention. However, it will be understood by those skilled in the art that these detailed descriptions are not essential to implementing the teachings of the present invention.

본문의 상세한 설명들의 일부는 컴퓨터 메모리내의 데이터 비트들에 대한 연산의 알고리즘들 및 심볼 표현들로 제공된다. 이러한 알고리즘적인 설명들 및 표현들은 데이터 처리 기술 분야의 당업자가 자신의 연구 내용을 동일한 기술 분야의 다른 당업자에게 용이하게 설명하기 위하여 사용된다. 알고리즘은, 본문에서, 그리고 일반적으로, 의도한 결과를 도출하는 일관성있는 일련의 단계들인 것으로 표현된다. 단계들은 물리량들을 물리적으로 조작하여야 하는 단계이다. 일반적으로, 비록 필수적이지는 않으나, 이러한 물리량들은 저장되고, 전송되고, 조합되고, 비교되고, 다르게 변형될 수 있는 전기 또는 자기 신호들의 형태를 갖는다. 공통적인 사용의 이유로 인하여, 이러한 신호들을 비트들, 값들, 요소들, 심볼들, 특징들, 용어들, 숫자들 등으로 지칭하는 것이 편리하다는 것이 입증되었다.Some of the detailed descriptions herein are presented as algorithms and symbolic representations of operations on bits of data within a computer memory. These algorithmic descriptions and representations are used by those skilled in the data processing arts to readily explain their work to others skilled in the art. An algorithm is expressed in the text and generally as a coherent sequence of steps leading to an intended result. Steps are steps in which physical quantities must be physically manipulated. Generally, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transmitted, combined, compared, and otherwise transformed. It has proven convenient, for reasons of common usage, to refer to these signals as bits, values, elements, symbols, features, terms, numbers, or the like.

그러나 이러한 모든 것들 및 유사한 용어들은 적절한 물리량들과 연관될 수 있고, 이러한 물리량들에 적용되는 편리한 라벨일 뿐이다. 이하의 설명에서 게시된 바와 같이, 특별히 다르게 언급되지 않는 한, 상세한 설명 전반에 걸쳐, "처리(processing)," "연산(computing)," "계산(calculating)," "판별(determining)," "표시(displaying)" 등과 같은 용어들을 사용하는 설명들은 컴퓨터 시스템 또는 컴퓨터 시스템의 레지스터들 및 메모리들 내에서 물리적(전자) 양들로서 표현된 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 정보 저장소 내에서 물리량으로 유사하게 표현되는 다른 데이터로 변형하고 전송하는 유사한 전자 컴퓨팅 장치들, 전송 또는 표시 장치들의 동작 및 처리들을 가리킨다. However, all these and similar terms may be associated with the appropriate physical quantities, and are merely convenient labels applied to these quantities. As published in the description below, unless specifically stated otherwise, throughout the detailed description, "processing," "computing," "calculating," "determining," Descriptions using terms such as "displaying" and the like refer to data represented as physical (electronic) quantities in a computer system or registers and memories of a computer system in computer system memories or registers or other information storage. Refers to the operations and processes of similar electronic computing devices, transmission or display devices that transform and transmit other data similarly expressed in physical quantities.

더욱이, 대표적인 실시 예들 및 종속한 청구범위에서의 다양한 특징들은 본 발명의 추가적인 유용한 실시 예들을 제공하기 위하여 특정하게 그리고 명시적으로 나열되지 않은 방식들로 조합될 수 있다. 객체들의 그룹들의 지칭들 또는 모든 값들의 범위들은 원래 기재된 것 뿐만 아니라, 청구범위를 제한하는 목적에 대해서 또한 모든 가능한 중간 값들 또는 중간 객체들을 게시한다. 도면들에 도시된 구성들의 형태들 및 면적들은 본 발명이 구현되는 방식의 이해를 돕기 위해 설계되었으며, 실시 예들에서 도시된 면적들 및 형태들을 제한하는 것으로 의도되지 않는다. Moreover, various features in the representative embodiments and the dependent claims may be combined in ways not specifically and explicitly listed to provide further useful embodiments of the invention. References to groups of objects or ranges of all values disclose all possible intermediate values or intermediate objects not only as originally described, but also for the purpose of limiting the claims. The shapes and areas of the configurations shown in the drawings are designed to aid understanding of how the present invention may be implemented, and are not intended to limit the areas and shapes shown in the embodiments.

본 발명은 대형 키-밸류 객체들을 데이터 스토리지 시스템에 저장하는 데이터 스토리지 시스템 및 방법을 보여준다. 본 발명의 데이터 스토리지 시스템은 하나 또는 그 이상의 데이터 스토리지 장치들에 높은 신뢰성을 갖는 데이터를 저장할 수 있다. 특히, 본 발명의 데이터 스토리지 시스템은 객체들의 크기들을 기반으로 객체들을 다르게 저장하여 비용 및 스토리지 공간을 감소시키고 높은 신뢰성을 달성할 수 있다. 대형 객체와 연관된 데이터는 소형 조각들(small pieces)로 분할될 수 있고, 하나 또는 그 이상의 데이터 스토리지 장치들에 저장될 수 있다. 여기에서, 데이터 스토리지 장치들에 저장된 데이터가 키-밸류 쌍들과 연관된 데이터 어레이인 경우, 데이터 스토리지 장치들은 키-밸류 솔리드 스테이트 드라이브들(KV SSDs; key-value solid state drives)로 지칭될 수 있다. The present invention shows a data storage system and method for storing large key-value objects in the data storage system. The data storage system of the present invention can store data having high reliability in one or more data storage devices. In particular, the data storage system of the present invention can store objects differently based on their sizes, thereby reducing cost and storage space and achieving high reliability. Data associated with a large object may be divided into small pieces and stored in one or more data storage devices. Here, when data stored in the data storage devices is a data array associated with key-value pairs, the data storage devices may be referred to as key-value solid state drives (KV SSDs).

객체(예를 들어, 키-밸류 쌍의 밸류)는 동일한 크기의 청크들(chunks) 또는 복수의 조각들(multiple pieces)로 분할(split)될 수 있다. 청크의 크기는 런-타임 도중에 동적으로 객체 단위로 결정될 수 있다. 그것의 크기에 따라, 객체는 다른 개수 및 크기의 청크들을 포함할 수 있다. An object (eg, a value of a key-value pair) may be split into chunks of the same size or multiple pieces. The size of the chunk may be dynamically determined in units of objects during run-time. Depending on its size, an object may contain chunks of different numbers and sizes.

그룹(group)은 목표 데이터 신뢰성(target data rliability)을 구현하기 위한 데이터 스토리지 장치의 세트로서 정의된다. 그룹은 박스(예를 들어, 섀시(chassis) 또는 랙(rack)) 내의 또는 박스들을 통한 하나 또는 그 이상의 데이터 스토리지 장치들을 포함할 수 있고, 계층적 또는 비-계층적 방식으로 구조화될 수 있다.A group is defined as a set of data storage devices for implementing target data rliability. A group may include one or more data storage devices in or through boxes (eg, a chassis or rack) and may be structured in a hierarchical or non-hierarchical manner.

본 발명의 데이터 스토리지 시스템은 하나 또는 그 이상의 데이터 스토리지 장치들의 그룹화를 관리하고 전체적으로 단일 가상 스토리지 유닛으로서 사용자 애플리케이션으로 그룹을 제공하는 가상 스토리지 레이어를 포함한다. 가상 스토리지 계층은 하나 또는 그 이상의 데이터 스토리지 장치들을 제어하는 복수의 드라이버들을 관리하는데 사용될 수 있다. 가상 스토리지 레이어가 관리하는 데이터 스토리지 장치들의 개수는 신뢰성 목표(reliability target)을 기반으로 구성될 수 있다. 소거 코딩(erasure coding)에 대하여, 데이터 스토리지 장치들의 전체 개수는 P개의 페일들을 용인하기 위한 데이터 장치들(D) 및 패리티 장치들(P)의 합일 수 있다. 복제(replication)에 대하여, P개의 페일들을 용인하는 데이터 스토리지 장치들의 전체 개수는 P+1일 수 있다. 데이터 스토리지 장치들의 스토리지 용량은 소거 코딩 또는 복제에서 거의 유사할 수 있다. 가상 스토리지의 스토리지 용량은 그룹 내의 전체 데이터 스토리지 장치들의 데이터 스토리지 공간의 합에 의해 결정될 수 있다. The data storage system of the present invention includes a virtual storage layer that manages the grouping of one or more data storage devices and provides the group to user applications as a whole as a single virtual storage unit. A virtual storage layer may be used to manage a plurality of drivers that control one or more data storage devices. The number of data storage devices managed by the virtual storage layer may be configured based on a reliability target. For erasure coding, the total number of data storage devices may be the sum of data devices D and parity devices P to tolerate P failes. For replication, the total number of data storage devices tolerating P failures may be P+1. The storage capacity of data storage devices may be nearly similar in erasure coding or duplication. The storage capacity of the virtual storage may be determined by the sum of data storage spaces of all data storage devices in the group.

일 실시 예에 따르면, 가상 스토리지 레이어는 하나 또는 그 이상의 데이터 스토리지 장치들의 그룹을 스테이트리스 방식(stateless manner)으로 관리할 수 있다. 즉, 가상 스토리지 레이어는 객체들 및 데이터 스토리지 장치들 사이의 어떤 맵핑 정보 또는 키 정보를 유지하지 않거나 또는 유지할 필요가 없다. 그러나 가상 스토리지 레이어는 객체들의 개수, 가용한 스토리지 용량 및/또는 그것들과 유사한 종류의 것들과 같은 하나 또는 그 이상의 데이터 스토리지 장치의 필수적인 메타데이터를 런타임에서 동적으로 유지하고 캐싱할 수 있다. According to an embodiment, the virtual storage layer may manage a group of one or more data storage devices in a stateless manner. That is, the virtual storage layer does not or does not need to maintain any mapping information or key information between objects and data storage devices. However, the virtual storage layer may dynamically maintain and cache, at runtime, essential metadata of one or more data storage devices, such as number of objects, available storage capacity, and/or the like.

KV SSD와 같은 데이터 스토리지 장치는 관리할 수 있는 객체들에 대한 동작 및 객체들에 대한 구현-특정 제한을 포함한다. 데이터 스토리지 시스템의 가상 스토리지 레이어는 각 데이터 스토리지 장치가 지원할 수 있는 최소 및 최대 밸류 크기들을 인식할 수 있고, 최소 및 최대 밸류 크기들을 판별할 수 있다. A data storage device, such as a KV SSD, includes implementation-specific restrictions on objects and operations on objects that can be managed. The virtual storage layer of the data storage system may recognize the minimum and maximum value sizes that each data storage device can support, and may determine the minimum and maximum value sizes.

예를 들어, VMINi는 제i KV SSD의 최소 밸류 크기이다. 가상 스토리지의 최소 밸류 크기(VMIN_VS)은 그룹 내의 개별적인 KV SSD들의 모든 최소 값 크기들 중 최대치에 의해 정의될 수 있다. For example, VMIN i is the minimum value size of the i-th KV SSD. The minimum value size (VMIN_VS) of the virtual storage may be defined by the maximum value among all the minimum value sizes of individual KV SSDs in the group.

Figure 112018114527070-pat00001
Figure 112018114527070-pat00001

유사하게, VMAXi는 제i KV SSD의 최대 밸류 크기이다. 가상 스토리지의 최대 밸류 크기(VMAX_VS)는 그룹 내의 개별적인 KV SSD의 모든 최대 밸류 크기들 중 최소치에 의해 정의될 수 있다.Similarly, VMAX i is the maximum value size of the i-th KV SSD. The maximum value size of the virtual array (VMAX_VS) may be defined by the smallest value among all the maximum value sizes of individual KV SSDs in the group.

Figure 112018114527070-pat00002
Figure 112018114527070-pat00002

일 실시 예에서, RS(Reed-Solomon) 코드와 같은 MDS(maximum distance separable) 알고리즘이 소거 코딩(erasure coding)을 위해 사용될 수 있다.In an embodiment, a maximum distance separable (MDS) algorithm such as a Reed-Solomon (RS) code may be used for erasure coding.

본 발명의 일 실시 예에 따르면, 본 발명의 시스템 및 방법은 객체의 크기를 기반으로 복제 및 소거 코딩 모두에 영향을 주는 하이브리드 데이터 신뢰성 메커니즘(hybrid data reliability mechanism)을 제공한다. 데이터 복제는 소형 객체들(small objects)에 대하여 빠르고, 가벼울 수 있다. 그러나 데이터 복제는 소거 코딩과 비교할 때, 대형 객체들(large objects)에 대하여 더욱 많은 스토리지 공간을 소모할 수 있다. 소거 코딩은 대형 객체들에 대하여 데이터 복제보다 더 적은 스토리지 공간을 소모할 수 있고, 복수의 데이터 스토리지 장치들에 영향을 줌으로써 이러한 대형 객체들을 복원할 수 있다. 그러나 복수의 데이터 스토리지 장치들로부터 복수의 청크들을 필요로 하기 때문에, 소거 코딩은 일반적으로 과도한 연산을 수반하고, 소형 객체들을 복원하는데 많은 시간이 소모될 수 있다. 이는 데이터에 대한 소거 코딩을 수행한 이후에 데이터를 복제하는 비-계층적 방식이다. 대신에, 본 발명의 시스템 및 방법은 객체의 크기를 기반으로 데이터 복제 및 소거 코딩 사이에 유연한 결정을 제공한다. 다시 말해서, 본 발명의 시스템 및 방법은 데이터 신뢰성 판단, 즉, 객체의 크기뿐만 아니라 객체를 저장하기 위한 전체 공간의 부담을 기반으로 런-타임에서 데이터 복제 또는 소거 코딩을 적용하는 것을 결정할 수 있다. According to an embodiment of the present invention, the system and method of the present invention provide a hybrid data reliability mechanism that affects both replication and erasure coding based on the size of an object. Data replication can be fast and lightweight for small objects. However, data replication may consume more storage space for large objects when compared to erasure coding. Erasure coding may consume less storage space than data duplication for large objects, and may restore these large objects by affecting multiple data storage devices. However, since it requires a plurality of chunks from a plurality of data storage devices, erasure coding generally involves excessive computation and can be time consuming to recover small objects. This is a non-hierarchical method of duplicating data after erasure coding is performed on the data. Instead, the systems and methods of the present invention provide a flexible decision between data replication and erasure coding based on the size of the object. In other words, the system and method of the present invention can determine to apply data duplication or erasure coding at run-time based on data reliability judgment, that is, not only the size of the object but also the burden of the total space to store the object.

일 실시 예에 따르면, 본 발명의 시스템 및 방법은 객체가 업데이트될 때, 읽기-변형-쓰기 부담(read-modify-write overhead)을 수반하지 않는다. 블록 장치들에 대한 종래의 소거 코딩 또는 데이터 복제는 부분적인 업데이트가 존재할 때 많은 부담을 수반한다. 만약 데이터의 작은 부분이 업데이트되는 경우, 소거 코딩에 대한 블록들 전부가 읽어지고 업데이트되어야 하고, 업데이트 이후에 패리티 블록들은 재연산되고 데이터 스토리지 장치들로 다시 기입되어야 한다. 다시 말해서, 블록이 복수의 객체들과 공유될 수 있기 때문에, 객체의 업데이트는 일련의 읽기-변형-쓰기 프로세스들을 필요로 한다. 대조적으로, 본 발명의 시스템 및 방법은 객체 및 그것의 특성, 예를 들어, 크기를 기반으로 신뢰성을 제공할 수 있다. 객체가 업데이트되는 경우, 읽기-변형-쓰기 부담이 발생하는 것 없이, 업데이트된 객체가 덮어쓰기 되는 것만을 필요로 한다. According to one embodiment, the systems and methods of the present invention do not involve read-modify-write overhead when an object is updated. Conventional erasure coding or data duplication for block devices involves a lot of overhead when there is a partial update. If a small piece of data is updated, all of the blocks for erasure coding must be read and updated, and after the update the parity blocks must be recomputed and written back to the data storage devices. In other words, since a block can be shared with multiple objects, updating of an object requires a series of read-transform-write processes. In contrast, the systems and methods of the present invention can provide reliability based on an object and its characteristics, such as size. When an object is updated, only the updated object needs to be overwritten, without incurring a read-transform-write burden.

본 발명의 일 실시 예에 따르면, 본 발명의 시스템 및 방법은 통합 프레임워크(unified framework)에서 광 범위한 객체 크기를 지원한다. 객체가 데이터 스토리지 장치의 스토리지 용량 한계를 초과하여 매우 큰(또는 거대한) 경우, 데이터 스토리지 장치는 객체를 전체로서 저장할 수 없을 수 있다. 이 경우, 객체는 소형 조각들(small pieces)(본문에서 청크들(chunks)로 지칭됨.)로 분할될 필요가 있다. 본 발명의 상세한 설명은 데이터 스토리지 장치들의 용량을 기반으로 객체들이 청크들로 분할되고, 분할된 청크들로부터 재복원(rebuilt)하는 방법을 설명한다. 예를 들어, 본 발명의 시스템 및 방법은 이하에서 더욱 상세하게 설명되는 바와 같이, 데이터 스토리지 장치들의 그룹 특징 지원(group feature support)에 기반된 다양한 분할 및 재복원 메커니즘들을 제공한다. According to an embodiment of the present invention, the system and method of the present invention support a wide range of object sizes in a unified framework. If the object is very large (or huge), exceeding the storage capacity limit of the data storage device, the data storage device may not be able to store the object as a whole. In this case, the object needs to be divided into small pieces (referred to in the text as chunks). The detailed description of the present invention describes a method in which objects are partitioned into chunks based on the capacity of data storage devices, and rebuilt from the partitioned chunks. For example, the system and method of the present invention provide various partitioning and restoration mechanisms based on group feature support of data storage devices, as described in more detail below.

본 발명의 시스템 및 방법은 고정된 블록에 기반되지 않은 객체들의 신뢰성을 제공한다. 데이터 복제 및 소거 코딩은 객체들의 크기를 기반으로 객체들을 분할함(bifurcating)으로써, 싱글 디스크 그룹에 대한 객체의 목표 신뢰성(target reliability)를 구현하기 위하여 조합될 수 있다. 이러한 방식은 계층적 구조(즉, 소거 코딩된 객체들에 대한 복제)를 포함하는 종래의 데이터 신뢰성 기법들과 다르다. 본 발명의 시스템 및 방법은 공간 효율성을 일차적 관심사로 가지며, 성능은 특정 객체에 적합한 신뢰성 메커니즘을 결정하기 위한 2차적 요소이다. 객체들의 스토리지는 스테이트리스(stateless)이다. 복제 또는 소거 코딩 중 어느 하나를 위하여 추가적인 정보가 저장되는 것이 필요하지 않다. 객체 크기와 무관하게 업데이트에 대하여 읽기-변형-쓰기 부담이 요구되지 않는다.The systems and methods of the present invention provide for the reliability of objects that are not based on fixed blocks. Data duplication and erasure coding can be combined to implement target reliability of an object for a single disk group by bifurcating the objects based on their size. This approach differs from conventional data reliability techniques that include a hierarchical structure (ie, replication over erasure coded objects). The systems and methods of the present invention have space efficiency as a primary concern, and performance is a secondary factor for determining the appropriate reliability mechanism for a particular object. The storage of objects is stateless. No additional information needs to be stored for either replication or erasure coding. No read-transform-write burden is required for updates regardless of object size.

본문에서, 객체는 입력 및 출력(I/O; input and output) 동작들 동안 고정된 밸류(fixed value)를 갖는 고정된 데이터(static data)를 지칭한다. 객체는 키-밸류 쌍의 키와 연관될 수 있다. 이러한 경우에서, 객체는 키-밸류 쌍의 밸류와 대응한다. 객체는 동일한 크기의 복수의 청크들로 분할될 수 있고, 청크들의 크기는 런-타임에서 동적인 단위 객체 기반으로 결정될 수 있다. 각 객체는, 하나 또는 그 이상의 데이터 스토리지 장치들로 저장될 때, 다른 개수 및 다른 크기의 청크들을 포함할 수 있다. In this context, an object refers to static data having a fixed value during input and output (I/O) operations. An object may be associated with a key of a key-value pair. In this case, the object corresponds to the value of a key-value pair. The object may be divided into a plurality of chunks of the same size, and the size of the chunks may be determined based on a dynamic unit object at run-time. Each object, when stored in one or more data storage devices, may contain different numbers and sizes of chunks.

데이터 신뢰성 없이 하나 또는 그 이상의 데이터 스토리지 장치들(예를 들어, KV SSD들)을 통해 한번에 모두 저장되는 객체의 데이터 청크들의 최소 세트는 본문에서 슬라이스(slice)라 칭한다. 예를 들어, 슬라이스는 하나 또는 그 이상의 데이터 스토리지 장치들로 분할된 객체의 청크들의 개수와 대응한다. 데이터 신뢰성(예를 들어, 복제 또는 소거 코딩)을 구현하는 객체의 데이터 청크들의 최소 세트는 "밴드(band)"라 칭한다. 밴드 내의 청크들의 개수는 패리티 청크로 인하여 슬라이스의 청크들의 개수보다 많을 수 있다. 그룹 내의 하나 또는 그 이상의 데이터 스토리지 장치들 중 하나의 데이터 스토리지 장치에 저장된 객체의 청크들의 세트는 스플릿(split)이라 칭할 수 있다.The minimal set of data chunks of an object that are all stored at once via one or more data storage devices (eg, KV SSDs) without data reliability is referred to herein as a slice. For example, a slice corresponds to the number of chunks of an object partitioned into one or more data storage devices. The minimum set of data chunks of an object that implements data reliability (eg, replication or erasure coding) is referred to as a "band." The number of chunks in a band may be greater than the number of chunks in a slice due to parity chunks. A set of chunks of an object stored on one of the one or more data storage devices in the group may be referred to as a split.

슬라이스는 데이터 복제(즉, 원본 객체의 복제된 사본)에 대하여 (목표 객체의) 하나의 청크만 포함할 수 있다. 소거 코딩에 대하여, 슬라이스는 목표 객체를 포함하는 D 청크들을 포함할 수 있다. 반면에, 밴드는 데이터 복제에 대한 P 복제 청크들 및 하나의 원본 청크, 또는 소거 코딩에 대한 P 패리티 청크들 및 D 데이터 청크들을 포함할 수 있다. 슬라이스들 또는 밴드들의 개수는 스플릿 내의 청크들의 전체 개수와 대응한다. 스플릿 크기(즉, 하나의 데이터 장치에 저장된 청크들의 개수) 및 밴드 크기(즉, 하나 또는 그 이상의 데이터 스토리지 장치들에 저장된 청크들의 개수)는 원본 객체 및 청크들의 크기에 따라 가변될 수 있다. 예를 들어, 스플릿 크기는 데이터 복제에 대하여 원본 크기일 수 있으나, 스플릿 크기는 소거 코딩에 대하여, 밴드 당 청크 개수만큼 곱해진 청크 크기이다. A slice can contain only one chunk (of the target object) for a data replica (ie, a duplicated copy of the original object). For erasure coding, a slice may contain D chunks containing a target object. On the other hand, a band may contain P replica chunks and one original chunk for data replication, or P parity chunks and D data chunks for erasure coding. The number of slices or bands corresponds to the total number of chunks in the split. The split size (ie, the number of chunks stored in one data device) and the band size (ie, the number of chunks stored in one or more data storage devices) may vary according to the size of the original object and the chunks. For example, the split size may be the original size for data duplication, but the split size is the chunk size multiplied by the number of chunks per band, for erasure coding.

도 1은 일 실시 예에 따른, 예시적인 데이터 스토리지 시스템에 저장된 객체의 개념도를 보여준다. 객체(110)는 복수의 청크들로 분할될 수 있다. 예를 들어, 객체(110)는 3S개의 청크들(Chunk 1~Chunk 3S)로 분할될 수 있다(단, S는 자연수). 청크들의 전체 개수(3S)는 예시적인 것이며, 객체(110)의 청크들의 전체 개수는 다른 수일 수 있고, 객체(110)는 3의 배수로 분할되지 않아도 된다. 객체(110)는 이하에서 상세하게 설명되는 바와 같이, 매우 큰(very large) 또는 거대(huge) 객체로서 분류될 수 있다. 분할된 청크들은 하나 또는 그 이상의 데이터 스토리지 장치들을 통해 가상 스토리지로 분산될 수 있다. 본 발명의 실시 예에서, 가상 스토리지 공간은 D 데이터 스토리지 장치들(Disk 1~Disk D) 및 P 패리티 장치들(Disk D+1 ~ Disk D+P)을 포함한다. 본 발명의 실시 예에서, S 및 D는 동일하다. 1 shows a conceptual diagram of an object stored in an exemplary data storage system, according to an embodiment. The object 110 may be divided into a plurality of chunks. For example, the object 110 may be divided into 3S chunks (Chunk 1 to Chunk 3S) (where S is a natural number). The total number of chunks 3S is exemplary, and the total number of chunks of the object 110 may be another number, and the object 110 does not need to be divided by a multiple of three. Objects 110 may be classified as very large or huge objects, as described in detail below. The partitioned chunks may be distributed to virtual storage through one or more data storage devices. In an embodiment of the present invention, the virtual storage space includes D data storage devices (Disk 1 to Disk D) and P parity devices (Disk D+1 to Disk D+P). In an embodiment of the present invention, S and D are the same.

일 실시 예에 따르면, 데이터 스토리지 시스템의 가상 스토리지 레이어는 스플릿-우선 방식(스플릿-우선 분산)으로 또는 밴드-우선 방식(밴드-우선 분산)으로 청크들을 분산시킬 수 있다. 스플릿-제1 방식에서, 가상 스토리지 레이어는 가상 스토리지(120)에서, 청크들(Chunk 1, Chunk 2, Chunk 3)을 제1 데이터 스토리지 장치(Disk 1)에 저장하고, 청크들(Chunk 4, Chunk 5, Chunk 6)을 제2 데이터 스토리지 장치(Disk 2)에 저장하고, 마찬가지로 청크들(Chunk 3D-2, Chunk 3D-1, Chunk 3D)을 제D 데이터 스토리지 장치(Disk D)에 저장한다. 밴드(150)는 청크들(Chunk 1, Chunk 4, …, Chunk 3D-2) 및 패리치 청크들(Parity 1~Parity P)를 포함한다. 밴드-우선 방식에서, 가상 스토리지 레이어는, 가상 스토리지(121)에서, 청크들(Chunk 1 ~ Chunk D)을 데이터 스토리지 장치들(Disk 1 ~ Disk D)에 각각 저장하고, 청크들(Chunk D+1~Chunk 2D)을 데이터 스토리지 장치들(Disk 1 ~ Disk D)에 각각 저장하고, 마찬가지로 청크들(Chunk 2D+1 ~ Chunk 3D)을 데이터 스토리지 장치들(Disk 1~Disk D)에 각각 저장한다. 스플릿(151)은 데이터 청크들(Chunk 1, Chunk D+1, Chunk 2D+1)을 포함한다. 패리티 청크들(Parity 1~Parity P)은 패리티 디스크들(Disk D+1~Disk D+P)에 저장된다. 비록, 설명의 편의를 위하여, 가상 스토리지(120) 및 가상 스토리지(121) 모두가 밴드-우선 방식으로 패리티 청크들을 저장하는 것으로 도시되나, 패리티 청크들의 저장은 본 발명의 사상으로부터의 벗어남 없이 스플릿-우선 방식에서 수행될 수 있음이 이해될 것이다. According to an embodiment, the virtual storage layer of the data storage system may distribute chunks in a split-first manner (split-first distribution) or in a band-first manner (band-first distribution). In the split-first scheme, the virtual storage layer stores chunks Chunk 1 , Chunk 2 , and Chunk 3 in the virtual storage 120 in the first data storage device Disk 1 , and stores chunks Chunk 4 , Chunks 5 and 6) are stored in the second data storage device (Disk 2), and similarly, chunks (Chunk 3D-2, Chunk 3D-1, and Chunk 3D) are stored in the D-th data storage device (Disk D). . The band 150 includes chunks (Chunk 1, Chunk 4, ..., Chunk 3D-2) and parity chunks (Parity 1 to Parity P). In the band-first method, the virtual storage layer stores chunks (Chunk 1 to Chunk D) in the data storage devices (Disk 1 to Disk D), respectively, in the virtual storage 121 , and chunks (Chunk D+). 1 to Chunk 2D) are stored in the data storage devices (Disk 1 to Disk D), respectively, and the chunks (Chunk 2D+1 to Chunk 3D) are respectively stored in the data storage devices (Disk 1 to Disk D), respectively. . The split 151 includes data chunks Chunk 1, Chunk D+1, and Chunk 2D+1. Parity chunks Parity 1 to Parity P are stored in parity disks Disk D+1 to Disk D+P. Although, for convenience of explanation, both virtual storage 120 and virtual storage 121 are shown as storing parity chunks in a band-first manner, the storage of parity chunks is split- It will be understood that this may be performed in a preferred manner.

I/O 동작들은 어떤 청크 분산 방식들이 사용되는 지와 무관하게 밴드-우선 방식으로 실행될 수 있다. 이러한 경우에서, 청크들(Chunk 1, Chunk 4, …, Parity P)에 대한 I/O 동작들은 스플릿-우선 방식에도 병렬로 저장된다. I/O operations may be performed in a band-first manner regardless of which chunk distribution schemes are used. In this case, I/O operations for chunks (Chunk 1, Chunk 4, ..., Parity P) are stored in parallel even in the split-first scheme.

일 실시 예에 따르면, 소거 코딩은 객체의 크기를 기반으로 객체에 적용된다. 크기(SZOi)를 갖는 제i 객체(Oi)에 대하여, 장치 당 청크들의 개수, 즉, 스플릿(NCOi)은 아래의 수학식 3에 의해 정의된다. 복제에 대하여, 장치당 청크들의 개수는 1일 수 있다(즉, NCOi = 1).According to an embodiment, erasure coding is applied to the object based on the size of the object. For an ith object O i having a size SZ Oi , the number of chunks per device, ie, a split NC Oi , is defined by Equation 3 below. For replication, the number of chunks per device may be 1 (ie, NC Oi = 1).

Figure 112018114527070-pat00003
Figure 112018114527070-pat00003

장치 당 청크들의 개수(NCOi)는 최대 청크 크기(VMAXVS)가 사용되는 경우, 데이터 디스크들(즉, Disk 1 내지 Disk D로 참조된 데이터 스토리지 장치들)을 통해 객체(Oi)를 저장하기 위한 스플릿 당 청크들의 최소 개수이다. 객체 크기가 데이터 스토리지 장치의 할당 또는 정렬 단위로 정렬되지 않는 경우, 밴드에서 객체를 위해 할당된 추가 공간이 0들(zeros)로 패딩(padded)될 수 있다.The number of chunks per device (NC Oi ) stores an object (O i ) through data disks (ie, data storage devices referenced as Disk 1 to Disk D) when the maximum chunk size (VMAX VS ) is used. The minimum number of chunks per split to When the object size is not aligned with the allocation or alignment unit of the data storage device, the additional space allocated for the object in the band may be padded with zeros.

최대 청크 크기가 사용되는 경우, 너무 많은 패딩을 사용하여 스토리지 공간이 낭비되는 경향이 있다. 그러므로, 객체(Oi)의 실제 청크 크기는 수학식 4에 의해 좀 더 엄중하게 결정된다. SZmeta는 추가적인 메타데이터가 청크당 데이터와 함께 저장되는 경우의 메타데이터 크기이다. 데이터 스토리지 장치가 그룹 특징을 지원하는 경우, 그룹 식별자(group ID; group identifier) 및 청크들의 전체 개수와 같은 일부 메타데이터가 각 청크에 저장될 수 있다. 데이터 스토리지 장치들이 그룹 특징을 지원하지 않는 경우, 저장되는 메타데이터는 없다(즉, SZmeta=0). 복제에 대하여, 실제 청크 크기는 그것의 원본 객체 크기와 같을 수 있다(즉, COi=SZOi)If the maximum chunk size is used, storage space tends to be wasted using too much padding. Therefore, the actual chunk size of the object O i is more strictly determined by Equation (4). SZ meta is the metadata size when additional metadata is stored along with the data per chunk. When the data storage device supports the group feature, some metadata such as a group identifier (group ID) and the total number of chunks may be stored in each chunk. If the data storage devices do not support the group feature, no metadata is stored (ie, SZ meta =0). For a clone, the actual chunk size may be equal to its original object size (ie C Oi =SZ Oi ).

Figure 112018114527070-pat00004
Figure 112018114527070-pat00004

수학식 4는 VMINVS 및 VMAXVS 사이의 범위인 그러나 VMAXVS에 가까운 청크 크기를 판별한다. 수학식 4에 의해 판별된 청크 크기는 I/O 대역폭을 최대화하면서 I/O 동작들의 횟수를 최소화할 수 있다. 각 데이터 스토리지 장치가 저장하는 데이터의 총량(즉, 스플릿 크기)는 수학식 5에 의해 정의된다. Equation 4 determines the chunk size that is in the range between VMIN VS and VMAX VS but close to VMAX VS . The chunk size determined by Equation 4 may minimize the number of I/O operations while maximizing I/O bandwidth. The total amount of data stored by each data storage device (ie, the split size) is defined by Equation (5).

Figure 112018114527070-pat00005
Figure 112018114527070-pat00005

최종적으로, 데이터 저장 장치들을 통해 한번에 기입되는 데이터의 전체 총량, 즉, 밴드 크기는 수학식 6에 의해 정의된다. 복제에 대하여 D는 1과 같다. Finally, the total amount of data written at one time through the data storage devices, ie, the band size, is defined by Equation (6). For replication, D equals 1.

Figure 112018114527070-pat00006
Figure 112018114527070-pat00006

상술된 바와 같이, 데이터 스토리지 장치들은 데이터 스토리지 장치들이 저장할 수 있는 객체의 크기에 대한 제한들을 갖는다. 일부 데이터 스토리지 장치들은 매우 큰 대형 객체들 또는 매우 작은 소형 객체들을 지원하지 못할 수 있다. 다른 크기들을 갖는 객체들의 신뢰성 있고 효율적인 저장을 달성하기 위하여, 본 발명의 데이터 스토리지 시스템은 저장될 객체의 크기를 기반으로 다른 데이터 신뢰성 방식들을 적용할 수 있다. 일 실시 예에 따르면, 본 발명의 데이터 스토리지 시스템의 가상 스토리지 레이어는 객체들의 크기를 기반으로 객체들을 4가지 타입들, 일명, 거대(huge), 대형(large), 중형(medium), 및 소형(small)으로 분류한다. 객체를 저장하는데 복수의 밴드들이 사용되는 경우, 객체가 거대인 것으로 분류된다. 객체를 저장하는데 하나의 밴드가 거의 전체적으로 사용되는 경우, 객체가 대형인 것으로 분류된다. 객체를 저장하는데 밴드의 작은 부분(small fraction)이 사용되는 경우, 객체가 소형인 것으로 분류된다. 마지막으로, 객체가 소형 또는 대형으로 분류될 수 있는 경우, 객체가 중형인 것으로 분류된다. 그러므로, 다른 크기들을 갖는 청크들이 동일한 가상 스토리지 뿐만 아니라 가상 스토리지를 형성하는 개별적인 데이터 스토리지 장치들에 공존할 수 있다. As mentioned above, data storage devices have limitations on the size of objects that data storage devices can store. Some data storage devices may not support very large large objects or very small small objects. In order to achieve reliable and efficient storage of objects having different sizes, the data storage system of the present invention may apply different data reliability schemes based on the size of objects to be stored. According to an embodiment, the virtual storage layer of the data storage system of the present invention divides objects into four types, aka, huge, large, medium, and small based on the size of the objects. small). When multiple bands are used to store an object, the object is classified as large. An object is classified as large if one band is used almost entirely to store the object. An object is classified as small if a small fraction of the band is used to store the object. Finally, if an object can be classified as small or large, the object is classified as medium-sized. Therefore, chunks of different sizes can coexist in the same virtual storage as well as individual data storage devices forming the virtual storage.

객체에 대한 복제의 공간 부담이 객체에 대한 소거 코딩의 공간 부담보다 작은 경우, 객체는 소형인 것으로 분류된다. 이 경우, 읽기에 대하여 좀 더 나은 성능이 제공되고, 복잡한 소거 코딩 방식보다 업데이트 관리가 용이하기 때문에, 복제가 적절하다. 애플리케이션 메타데이터가 작아지는 경향이 있는 상황에서 합리적이다. 일 실시 예에서, SZOi를 갖는 소형 객체(Oi)는 수학식 7을 만족한다. If the spatial burden of replication on the object is less than that of erasure coding on the object, the object is classified as small. In this case, replication is appropriate because better performance is provided for reads and update management is easier than complex erasure coding schemes. This makes sense in situations where application metadata tends to be small. In an embodiment, the small object Oi having SZ Oi satisfies Equation (7).

Figure 112018114527070-pat00007
Figure 112018114527070-pat00007

객체에 대한 소거 코딩의 공간 부담이 객체 대한 데이터 복제의 공간 부담보다 작은 경우, 객체는 대형인 것으로 분류된다. 이 경우, 좀 더 작은 공간을 갖기 때문에 소거 코딩이 적절하다. 특히, 대형 객체는 수학식 8을 만족한다. If the spatial burden of erasure coding on the object is less than the spatial burden of data replication on the object, the object is classified as large. In this case, erasure coding is appropriate because it has a smaller space. In particular, the large object satisfies Equation (8).

Figure 112018114527070-pat00008
Figure 112018114527070-pat00008

대형 객체는 도 1과 유사하게 구성될 수 있으나, 스플릿 내에 하나의 청크 또는 하나의 밴드만 포함할 수 있다. A large object may be configured similarly to FIG. 1 , but may include only one chunk or one band in a split.

객체가 스플릿 내에서 하나 이상의 청크들을 포함하는 경우, 객체는 거대인 것으로 분류된다. 이 경우, 소거 코딩이 적절하다. 특히, 거대 객체는 수학식 9를 만족한다. An object is classified as large if it contains one or more chunks within a split. In this case, erasure coding is appropriate. In particular, the giant object satisfies Equation (9).

Figure 112018114527070-pat00009
Figure 112018114527070-pat00009

거대 객체는 도 1과 유사하게 구성될 수 있으나, 스플릿 내에 복수의 청크들 또는 복수의 밴드들을 포함할 수 있다. The large object may be configured similarly to FIG. 1 , but may include a plurality of chunks or a plurality of bands in a split.

소형 또는 대형 중 어느 하나로 분류될 수 있는 객체 크기의 범위가 존재할 수 있다. 수학식 10을 만족하는 객체는 중형인 것으로 분류된다.There may be a range of object sizes that can be classified as either small or large. An object satisfying Equation 10 is classified as medium-sized.

Figure 112018114527070-pat00010
Figure 112018114527070-pat00010

이러한 경우, 데이터 복제 또는 소거 코딩 중 하나가 사용될 수 있다. 성능이 좀 더 중요하고, 객체들이 자주 업데이트되는 경우, 데이터 복제가 더 나은 선택일 수 있다. 이 경우, 중형 객체들은 소형인 것으로 분류될 수 있다. 공간 효율성이 좀 더 중요한 경우, 소거 코딩이 사용될 수 있다. 이러한 경우, 중형 객체들은 대형인 것으로 분류될 수 있다.In this case, either data duplication or erasure coding may be used. If performance is more important, and objects are updated frequently, data replication may be a better choice. In this case, medium-sized objects may be classified as small. When space efficiency is more important, erasure coding can be used. In this case, medium-sized objects may be classified as large.

가상 스토리지 레이어는 객체를 저장하고, 분할된 데이터 데이터 청크들을 사용하여 객체를 복원하여 거대 객체를 회수하기 위하여, 거대 객체를 소형 데이터 청크들로 분할하는 것을 필요로 할 수 있다. 이를 위하여, 사용자(예를 들어, 호스트 컴퓨터 상에서 구동하는 사용자 애플리케이션) 키으로부터 생성된 내부 키(internal key)가 가상 스토리지 레이어 스테리트리스를 생성하는데 사용될 수 있다. 일 실시 예에 따르면, 가상 스토리지 레이어는 청크들을 분산하는 내부 사용을 위하여 장치-지원된 키 공간(device-supported key space)의 수 바이트들을 예비로 두고, 키 공간의 나머지 부분을 사용자에게 표시한다. 이 경우에서, 사용자-특정 객체 키는 객체의 하나 또는 그 이상의 분할된 청크들을 위한 내부 키들의 그룹을 나타낸다. The virtual storage layer may require partitioning the large object into small data chunks in order to store the object and retrieve the large object by using the partitioned data data chunks to restore the object. To this end, an internal key generated from a user's (eg, a user application running on a host computer) key may be used to create a virtual storage layer steerless. According to one embodiment, the virtual storage layer reserves several bytes of device-supported key space for internal use of distributing chunks, and presents the remainder of the key space to the user. In this case, the user-specific object key represents a group of internal keys for one or more partitioned chunks of the object.

도 2는 일 실시 예에 따른, 사용자 키를 포함하는 예시적인 내부 키를 보여준다. 내부 키(200)는 제1 부분의 사용자 키(201) 및 제2 부분의 밴드 식별자(ID; identifier)(202)를 포함한다. 내부 키(200)는 대응하는 객체에 대한 청크들의 부분 또는 청크들의 전체 그룹을 식별하는데 사용될 수 있다. 이 경우에서, 객체는 키-밸류 쌍의 키로써 내부 키(200)를 포함하는 키-밸류 쌍의 밸류와 대응한다. 현재 실시 예에서, 가상 스토리지 레이어 및/또는 데이터 장치에서 지원하는 최대 키 길이(maximum key length)는 L이고, 그룹 설명(group specification)을 위해 예약된 바이트들의 개수는 G이다. 가상 스토리지 레이어는 사용자가 사용할 수 있는 최대 키 길이가 L-G임을 통지한다.2 shows an exemplary internal key including a user key, according to an embodiment. The inner key 200 includes a user key 201 of a first portion and a band identifier (ID) 202 of a second portion. The internal key 200 may be used to identify a portion of chunks or an entire group of chunks for a corresponding object. In this case, the object corresponds to the value of the key-value pair including the internal key 200 as the key of the key-value pair. In the current embodiment, the maximum key length supported by the virtual storage layer and/or data device is L, and the number of bytes reserved for group specification is G. The virtual storage layer advertises that the maximum key length the user can use is L-G.

소형 또는 대형 객체에 대하여, G 바이트의 밴드 ID(202)는 기본으로 0으로 패딩될 수 있다. 거대 객체에 대하여, 가상 스토리지 레이어는 객체에 대한 밴드들의 개수를 연산할 수 있다. 개별적인 밴드들은 내부 키(201)를 사용하여 식별될 수 있다. 밴드는 스플릿-우선 또는 밴드-우선 방식에 따라 하나씩 객체를 저장하기 위해 할당된 하나 또는 그 이상의 데이터 스토리지 장치들로 기입될 수 있다. For small or large objects, the band ID 202 of G bytes may be padded with zeros by default. For large objects, the virtual storage layer can compute the number of bands for the object. Individual bands can be identified using an internal key 201 . A band may be written to one or more data storage devices allocated to store objects one by one in a split-first or band-first manner.

일 실시 예에 따르면, 데이터 스토리지 장치는 그룹 특징(group feature)을 지원할 수 있다. 가상 스토리지 레이어는 사용자 키(201)를 기반으로 그룹을 특정함으로써 데이터 스토리지 장치에 저장된 스플릿을 식별할 수 있다. 이 경우에서, 추가적인 메타데이터가 요구되지 않을 수 있다(SZ_meate=0). 가상 스토리지 레이어는 "don't care" 비트들(임의의 데이터 비트들, 예를 들어, 0xFF)로 채워진 밴드 ID(202) 및 사용자 키(201)를 모든 데이터 스토리지 장치들로 알림으로써, 객체에 대한 모든 청크들을 회수할 수 있다. 밴드 ID가 "don't care"인 경우, 밴드 ID 필드는 무시된다. 데이터 스토리지 장치가 그룹 특징을 효율적으로 구현함이 가정될 수 있다. 예를 들어, 트라이 구조(trie structure)는 사용자 키(201)의 주어진 미리 정해진 번호(prefix)를 갖는 객체들을 용이하게 식별할 수 있는 반면에, 해시 테이블은 메타데이터 필드들이 고정된 경우에만 사용자 키를 사용하여 해시 버킷에서 객체들을 찾을 수 있다. 가상 스토리지 레이어는 장치마다 밴드 ID(202)를 기반으로 반환된 객체 청크들을 오름차순(ascending order)으로 정렬시키고, 밴드들 그리고 객체를 재구성하고, 사용자 키(201)와 함께 객체들을 반환한다. According to an embodiment, the data storage device may support a group feature. The virtual storage layer may identify the split stored in the data storage device by specifying a group based on the user key 201 . In this case, additional metadata may not be required (SZ_meate=0). The virtual storage layer notifies all data storage devices of the band ID 202 and user key 201 filled with "don't care" bits (any data bits, eg 0xFF), so that the object is You can retrieve all the chunks for If the band ID is "don't care", the band ID field is ignored. It can be assumed that the data storage device effectively implements the group feature. For example, a trie structure can easily identify objects with a given predetermined prefix of the user key 201, whereas a hash table can only identify the user key if the metadata fields are fixed. can be used to find objects in a hash bucket. The virtual storage layer sorts the returned object chunks in ascending order based on the band ID 202 per device, reorganizes the bands and objects, and returns the objects with the user key 201 .

도 3은 일 실시 예에 따른, 그룹 특징을 사용하는 객체 회수의 예를 보여준다. 객체를 저장하도록 할당된 데이터 스토리지 장치들(즉, Disk 1~Disk D, 및 Disk D+1~Disk P) 각각은 그룹 특징(group feature)을 지원한다. 이 경우에서, 밴드 ID(302)는 밴드 ID(302)를 무시하도록 지칭되는 "don't care"로 설정된다. 가상 스토리지 레이어는 사용자 키(301)를 사용하여 밴드(350)에 속하는 청크들(즉, 데이터 청크들 1, 2, …, 패리티 청크들 1~P)를 수집하고, 밴드(350)로부터 청크들(Chunk 1 ~ Chunk D)를 포함하는 제1 슬라이스를 재구성한다. 이후에, 가상 스토리지 레이어는 나머지 청크들을 수집하고, 나머지 슬라이스들을 순서대로 재구성한다. 모든 슬라이스들이 구성된 경우, 가상 스토리지 레이어는 슬라이스들로부터 데이터 청크들(Chunk 1~3D)을 포함하는 객체(310)를 재구성한다. 소거 코딩의 경우에서, 가상 스토리지 레이어는 패리티 청크들(parity chunk 1~P)로부터 패리티 블록(들)을 더 재구성한다. 현재 실시 예는 청크들을 분할하는 것에 대하여 밴드-우선 방식을 보여주나, 본 발명의 사상으로부터의 벗어남 없이, 스플릿-우선 방식이 청크 분할 및 객체 회수에 적용될 수 있음이 이해될 것이다. 3 shows an example of object retrieval using a group feature, according to an embodiment. Each of the data storage devices allocated to store an object (ie, Disk 1 to Disk D, and Disk D+1 to Disk P) supports a group feature. In this case, the band ID 302 is set to "don't care," which is referred to as disregarding the band ID 302 . The virtual storage layer uses the user key 301 to collect chunks belonging to the band 350 (ie, data chunks 1, 2, ..., parity chunks 1 to P), and chunks from the band 350 . The first slice including (Chunk 1 ~ Chunk D) is reconstructed. After that, the virtual storage layer collects the remaining chunks and reconstructs the remaining slices in order. When all slices are configured, the virtual storage layer reconstructs the object 310 including data chunks Chunks 1 to 3D from the slices. In the case of erasure coding, the virtual storage layer further reconstructs parity block(s) from parity chunks 1 to P. Although the present embodiment shows a band-first approach for splitting chunks, it will be understood that the split-first approach may be applied to chunking and object retrieval without departing from the spirit of the present invention.

도 4는 일 실시 예에 따른, 그룹 특징 없는 객체 회수의 예를 보여준다. 이 경우에서, 객체를 저장하기 위해 할당된 데이터 저장 장치들이 그룹 특징을 지원하지 않기 때문에, 가상 스토리지 레이어는 대형 또는 거대 객체로 추가적인 메타 데이터를 첨부한다(즉, SZ_meta ≠ 0). 각 청크는 1-바이트 길이를 갖는 밴드 ID(402)에 의해 식별될 수 있다. 현재 실시 예에서, 밴드들의 개수가 1-바이트 길이에 적합해 질 수 있도록, 3개의 밴드들(Band 1, Band 2, Band 3)이 존재할 수 있다. 가상 스토리지 레이어는 밴드 ID(402)를 사용하여 하나씩 슬라이스들을 구성할 수 있다. 먼저, 가상 스토리지 레이어는 0과 같은 밴드 ID(BID=0)와 함께 사용자 키(401)를 모든 데이터 스토리지 장치들로 전송한다. 가상 스토리지 레이어는 모든 데이터 스토리지 장치들로부터 밴드 0(Band 0)에 대한 청크들을 수신하고, 수신된 청크들 중 밴드 0(Band 0)에 속하는 청크들로부터 밴드 정보를 회수한다. 수신된 밴드 정보를 기반으로, 가상 스토리지 레이어는 밴드들의 개수를 인지하여 객체를 회수한다. 객체가 대형인 경우, 하나의 밴드만 존재할 수 있고, 가상 스토리지 레이어는 밴드에서 청크들로부터 전체 객체를 재구성할 수 있다. 거대 객체에 대하여 하나보다 많은 청크들이 존재하는 경우, 가상 스토리지 레이어는 더 많은 밴드들(예를 들어, Band 1 및 Band 2)을 하나씩 회수하는 것을 필요로 한다. 이 경우에서, 가상 스토리지 레이어는 모든 청크들이 회수될 때까지 밴드 ID를 조절함(예를 들어, BID=1 또는 BID=2)으로써, 회수 요청들을 전송한다. 가상 스토리지 레이어가 모든 슬라이스들을 구성한 경우, 가상 스토리지 레이어는 객체(410)를 재구성할 수 있다. 소형 객체는 장치들이 그룹 특징을 지원하는지와 무관하게 메타데이터를 포함하지 않을 수 있다. 청크 크기를 체크함으로써, 가상 스토리지 레이어는 수학식 7 및 수학식 10을 사용하여 객체(410)가 소형인지 또는 아닌지를 판별할 수 있다.4 shows an example of object retrieval without a group feature, according to an embodiment. In this case, since the data storage devices allocated to store the object do not support the group feature, the virtual storage layer attaches additional metadata as a large or large object (ie, SZ_meta ≠ 0). Each chunk may be identified by a band ID 402 having a 1-byte length. In the current embodiment, three bands (Band 1, Band 2, and Band 3) may exist so that the number of bands can fit a 1-byte length. The virtual storage layer may configure the slices one by one using the band ID 402 . First, the virtual storage layer sends the user key 401 with a band ID equal to 0 (BID=0) to all data storage devices. The virtual storage layer receives chunks for band 0 (Band 0) from all data storage devices, and recovers band information from chunks belonging to band 0 among the received chunks. Based on the received band information, the virtual storage layer recognizes the number of bands and retrieves the object. If the object is large, there can be only one band, and the virtual storage layer can reconstruct the entire object from chunks in the band. If there are more than one chunk for a large object, the virtual storage layer needs to reclaim more bands (eg, Band 1 and Band 2) one by one. In this case, the virtual storage layer sends redemption requests by adjusting the band ID (eg, BID=1 or BID=2) until all chunks are reclaimed. When the virtual storage layer configures all slices, the virtual storage layer may reconstruct the object 410 . A small object may contain no metadata regardless of whether the devices support the group feature. By checking the chunk size, the virtual storage layer can determine whether the object 410 is small or not using equations (7) and (10).

거대 객체를 하나 또는 그 이상의 데이터 스토리지 장치들에 기입하기 위하여, 거대 객체는 동일한 크기의 NCOi*D개의 청크들(즉, NCoi개의 슬라이스들)로 분할될 수 있다. 마지막 데이터 청크(예를 들어, 도 5에서 객체(510a)의 데이터(Data 4a) 및 객체(510b)의 데이터(4b))는 배열 요구들을 고려하여 0(zero)으로 패딩될 수 있고, P 패리티 청크들은 슬라이스 당 D 데이터 청크들로부터 생성될 수 있다.To write a large object to one or more data storage devices, the large object may be divided into NC Oi *D chunks of the same size (ie, NC oi slices). The last data chunk (eg, data 4a of object 510a in FIG. 5 and data 4b of object 510b in FIG. 5 ) may be padded with 0 (zero) in consideration of arrangement requirements, and P parity Chunks may be created from D data chunks per slice.

도 5는 일 실시 예에 따른, 전용 패리티 장치가 없는 소거 코딩의 예를 보여준다. 도 6은 일 실시 예에 따른, 하나 또는 그 이상의 전용 패리티 장치들을 사용한 소거 코딩의 예를 보여준다. 각 밴드 당 D개의 데이터 청크들 및 P개의 패리티 청크들을 포함하는 (D+P)개의 청크들 전체는 하나 또는 그 이상의 데이터 스토리지 장치들로 분산되어 NCOi 개의 밴드들 모두가 기입된다. 패리티 청크들은 D+P 개의 장치들(예를 들어, 도 5에서 SSD4 내지 SSD6)로 분산될 수 있거나 또는 P개의 전용 장치들(예를 들어, 도 6의 SSD5 및 SSD6)에 저장될 수 있다. 주 데이터 스토리지 장치는 데이터 스토리지 장치들 상에서 밴드 ID 없이 사용자 키의 해시 값(이하에서, "해시(Hash)(user key)"로 지칭됨)를 사용하여 선택될 수 있다. (D+P) 장치들 전부 또는 일부는 도 5의 실시 예에서 선택될 수 있고, D 장치들은 도 6의 실시 예에서 선택될 수 있다. 시작 장치는 전용 패리티 장치가 없는 경우 Hash(user key)%(D+P)에 의해 판별될 수 있거나 또는 전용 패리티 장치들이 존재하는 경우 Hash(user key)%D에 의해 판별될 수 있다. 후속 청크들은 다음 장치들(예를 들어, (Hash(user key) + 1)%(D+P), (Hash(user key)+2)%(D+P), …(Hash(user key)+D+P-1)%(D+P) 또는 (Hash(user key)+1)%D, (Hash(user key)+2)%D, …(Hash(user key)+D-1)%D)로 순차적으로 기입될 수 있다. 이러한 동작은 밴드당 동작이며, 가상 스토리지 레이어는 객체의 청크들을 기입하기 위하여 모든 NCOi개의 밴드들에 대하여 이러한 절차를 반복한다. 사용자 키의 해시 값은 각 객체마다 한번 연산되는 것을 필요로 한다. 5 shows an example of erasure coding without a dedicated parity device, according to an embodiment. 6 shows an example of erasure coding using one or more dedicated parity devices, according to an embodiment. All (D+P) chunks including D data chunks and P parity chunks for each band are distributed to one or more data storage devices to write all NC Oi bands. Parity chunks may be distributed across D+P devices (eg, SSD4 to SSD6 in FIG. 5 ) or may be stored in P dedicated devices (eg, SSD5 and SSD6 in FIG. 6 ). The primary data storage device may be selected using a hash value of the user key (hereinafter referred to as a “Hash (user key)”) without a band ID on the data storage devices. All or part of (D+P) devices may be selected in the embodiment of FIG. 5 , and D devices may be selected in the embodiment of FIG. 6 . The starting device may be determined by Hash(user key)%(D+P) when there is no dedicated parity device, or by Hash(user key)%D when dedicated parity devices exist. Subsequent chunks are the following devices (eg (Hash(user key) + 1)%(D+P), (Hash(user key)+2)%(D+P), …(Hash(user key) +D+P-1)%(D+P) or (Hash(user key)+1)%D, (Hash(user key)+2)%D, …(Hash(user key)+D-1) %D) can be written sequentially. This operation is a per-band operation, and the virtual storage layer repeats this procedure for all NC Oi bands to write chunks of the object. The hash value of the user key needs to be computed once for each object.

데이터 스토리지 장치들이 그룹 특징을 지원하지 않는 경우, 청크들은 도 4에 도시된 바와 같이, 밴드들의 전체 개수 및 밴드 ID에 대한 추가적인 메타데이터를 포함한다. 밴드들의 개수는 수학식 3에 의해 판별될 수 있다. 밴드의 청크들은 메타데이터로서 (band ID, NCOi)의 쌍을 포함할 수 있다. If the data storage devices do not support the group feature, the chunks contain additional metadata about the total number of bands and the band ID, as shown in FIG. 4 . The number of bands can be determined by Equation (3). Chunks of a band may include a pair of (band ID, NC Oi ) as metadata.

도 5를 참조하면, 가상 스토리지 레이어는 객체(510a)의 데이터 청크(Data 1a ~ Data 4a) 및 패치키 청크들(Parity 1a 및 Parity 2a)을 데이터 스토리 장치들(SSD1~SSD6)을 통해 저장한다. 가상 스토리지 레이어는 다른 객체(510b)의 데이터 청크(Data 1b ~ Data 4b) 및 패치키 청크들(Parity 1b 및 Parity 2b)을 데이터 스토리 장치들(SSD1~SSD6)을 통해 저장한다. 시작 장치(예를 들어, 객체(510a)에 대한 SSD1 및 객체(510b)에 대한 SSD6)은 상술된 바와 같이, 사용자 키의 해쉬 값에 의해 판별될 수 있다. 전용 패리티 장치가 없기 때문에, 가상 스토리지 레이어는 데이터 청크들 및 패리티 청크들을 구분하지 않고, 데이터 청크들 및 패리티 청크들을 데이터 스토리지 장치들(SSD1~SSD6)로 분산할 수 있다. 현재 실시 예에서, SSD4 및 SSD6은 데이터 청크 및 패리티 청크를 모두 포함한다. Referring to FIG. 5 , the virtual storage layer stores the data chunks Data 1a to Data 4a and the patch key chunks Parity 1a and Parity 2a of the object 510a through the data storage devices SSD1 to SSD6. . The virtual storage layer stores data chunks (Data 1b to Data 4b) and patch key chunks (Parity 1b and Parity 2b) of another object 510b through data storage devices SSD1 to SSD6. The initiating device (eg, SSD1 for object 510a and SSD6 for object 510b) may be determined by the hash value of the user key, as described above. Since there is no dedicated parity device, the virtual storage layer may distribute the data chunks and the parity chunks to the data storage devices SSD1 to SSD6 without distinguishing between the data chunks and the parity chunks. In the current embodiment, SSD4 and SSD6 contain both data chunks and parity chunks.

도 6을 참조하면, 가상 스토리지 레이어는 객체(610a)의 데이터 청크들(Data 1a ~ Data 4a) 및 패리티 청크들(Parity 1a 및 Parity 2a)을 데이터 스토리지 장치들(SSD1~SSD6)을 통해 저장한다. 유사하게, 가상 스토리지 레이어는 객체(610b)의 데이터 청크들(Data 1b ~ Data 4b) 및 패리티 청크들(Parity 1b 및 Parity 2b)을 데이터 스토리지 장치들(SSD1~SSD6)을 통해 저장한다. SSD5 및 SSD6은 패리티 장치들로 할당되었으므로, SSD5 및 SSD6은 패리티 청크들만 포함한다.Referring to FIG. 6 , the virtual storage layer stores data chunks Data 1a to Data 4a and parity chunks Parity 1a and Parity 2a of an object 610a through data storage devices SSD1 to SSD6. . Similarly, the virtual storage layer stores data chunks Data 1b to Data 4b and parity chunks Parity 1b and Parity 2b of the object 610b through the data storage devices SSD1 to SSD6. Since SSD5 and SSD6 are allocated as parity devices, SSD5 and SSD6 include only parity chunks.

대형 객체를 하나 또는 그 이상의 데이터 스토리지 장치들에 기입하기 위하여, 대형 객체는 동일한 크기의 NCOi*D 청크들로 분할될 수 있다. 대형 객체는, 객체에 대하여 하나의 밴드(즉, NCOi=1)일 수 있는 점만 제외하면, 거대 객체와 유사하게 관리된다. To write a large object to one or more data storage devices, the large object may be divided into NC Oi *D chunks of equal size. Large objects are managed similarly to large objects, except that there can be only one band for the object (ie, NC Oi =1).

소형 객체를 저장하기 위하여, (P+1) 복제 객체들이 객체에 대하여 생성될 수 있다. 패딩을 포함하는 정렬을 고려하면, 복제 객체는 (P+1) 장치들로 분산될 수 있다. 주 장치는 (D+P) 장치들 상에서, 사용자 키의 해시 값을 사용하여 선택될 수 있다. P 복제 객체들은 스토리지 조직, 성능 등과 같은 다양한 팩터들을 기반으로 결정론적으로 선택될 수 있다. 예를 들어, 복제 객체들은 (Hash(key)+1)%(D+P), (Hash(key)+2)%(D+P), …(Hash(key)+P)%(D+P)에 또는 전용 패리티 장치가 없는 지와 무관하게 다른 노드, 랙들에 단순히 저장될 수 있다. 전용 패리티 장치들 또는 노드들이 존재하는 경우, 복제 객체들은 (Hash(key)+1)%D, (Hash(key)+2)%D, …(Hash(key)+P)%D에 저장될 수 있다. 장치의 용량과 무관하게, 소형 객체들은 메타데이터를 포함하지 않는다.To store a small object, (P+1) duplicate objects can be created for the object. Considering alignment including padding, duplicate objects can be distributed among (P+1) devices. The primary device may be selected using the hash value of the user key, on (D+P) devices. P replica objects may be selected deterministically based on various factors such as storage organization, performance, etc. For example, duplicate objects are (Hash(key)+1)%(D+P), (Hash(key)+2)%(D+P), ... It can be simply stored in (Hash(key)+P)%(D+P) or in other nodes, racks, regardless of whether there is a dedicated parity device. If dedicated parity devices or nodes exist, duplicate objects are (Hash(key)+1)%D, (Hash(key)+2)%D, ... It can be stored in (Hash(key)+P)%D. Regardless of the device's capacity, small objects contain no metadata.

도 7은 일 실시 예에 따른, 패리티 장치 없이, 하나 또는 그 이상의 데이터 스토리지 장치들을 통한 소형 객체의 예시적인 복제 방식을 보여준다. 가상 스토리지 레이어는 데이터 스토리지 장치들(SSD1, SSD2, SSD3)을 통해 소형 객체(710a)(Object 1)를 저장할 수 있다. 가상 스토리지 레이어는 소형 객체(710b)(Object 2) 청크들을 데이터 스토리지 장치들(SSD3, SSD4, 및 SSD5)를 통해 저장할 수 있다. 소형 객체들(710a, 710b)은 더 작은 데이터 청크들로 분할되지 않는다. 객체들(710a, 710b)을 저장하기 위한 시작 장치는 대응하는 사용자 키의 해시 값에 의해 판별될 수 있다. 현재 실시 예에서, 객체(710a)에 대한 시작 장치는 SSD1이고, 객체(710b)에 대한 시작 장치는 SSD3이다. 현재 실시 예에서, 객체들(710a, 710b) 각각에 대한 복제 객체들의 전체 개수는 3이다(즉, P=2).7 illustrates an exemplary replication method of a small object through one or more data storage devices without a parity device, according to an embodiment. The virtual storage layer may store the small object 710a (Object 1) through the data storage devices SSD1 , SSD2 , and SSD3 . The virtual storage layer may store small object 710b (Object 2) chunks through data storage devices SSD3, SSD4, and SSD5. Small objects 710a and 710b are not divided into smaller data chunks. The starting device for storing the objects 710a and 710b may be determined by the hash value of the corresponding user key. In the current embodiment, the starting device for the object 710a is SSD1, and the starting device for the object 710b is SSD3. In the current embodiment, the total number of duplicate objects for each of the objects 710a and 710b is 3 (ie, P=2).

도 8은 일 실시 예에 따른, 객체를 기입하는 예시적인 순서도를 보여준다. 데이터 스토리지 시스템의 가상 스토리지 레이어는 객체를 기입하기 위한 쓰기 요청을 수신한다(801). 사용자(또는 호스트 컴퓨터 상에서 구동하는 사용자 애플리케이션)으로부터 수신된 쓰기 요청은 사용자 키를 포함할 수 있다. 가상 스토리지 레이어는 객체가 거대인지 또는 대형인지, 예를 들어, 수학식 8 및 수학 9를 사용하여 판별한다(802). 대형 또는 거대 객체에 대하여, 가상 스토리지 레이어는 스플릿 당 그리고 밴드 당 청크 크기 및 청크 개수를, 예를 들어, 수학식 3 및 수학식 4를 사용하여 판별하고(811), 데이터 스토리지 장치들을 통해 하나 또는 그 이상의 밴드들로 데이터를 기입하고(812), 쓰기 절차를 완료한다(815).8 shows an exemplary flowchart of writing an object, according to an embodiment. The virtual storage layer of the data storage system receives a write request to write an object ( 801 ). A write request received from a user (or a user application running on the host computer) may include a user key. The virtual storage layer determines (802) whether the object is large or large, eg, using equations (8) and (9). For large or large objects, the virtual storage layer determines (811) the chunk size and number of chunks per split and per band, e.g., using equations 3 and 4, one or Data is written ( 812 ) to the higher bands, and the write procedure is completed ( 815 ).

가상 스토리지 레이어가 객체들이 대형이 아니고, 거대가 아닌 것으로 판별한 경우, 가상 스토리지 레이어는 객체가 소형인지, 예를 들어, 수학식 7을 사용하여 판별한다(803). 소형 객체에 대하여, 가상 스토리지 레이어는 분산 정책(distribution policy)을 기반으로 원본 데이터 및 복제 데이터를 포함하는 데이터를 저장하기 위한 하나 또는 그 이상의 스토리지 장치들을 판별하고(813), 밴드의 하나 또는 그 이상의 장치들을 통해 데이터를 기입하고(814), 쓰기 절차를 완료한다(815). 예를 들어, 가상 스토리지 레이어가 밴드-우선 정책(복수의 데이터 스토리지 장치들을 통해 데이터를 분산하는 것)을 사용할 수 있다. 가상 스토리지 레이어는 사용자 키의 해시 값을 사용하여 시작 장치를 판별할 수 있다.When the virtual storage layer determines that the objects are not large and not large, the virtual storage layer determines whether the objects are small, for example, using Equation 7 (803). For the small object, the virtual storage layer determines ( 813 ) one or more storage devices for storing data including original data and duplicate data based on a distribution policy, and one or more of the bands. Writes data through the devices (814) and completes the write procedure (815). For example, the virtual storage layer may use a band-first policy (distributing data across multiple data storage devices). The virtual storage layer can use the hash value of the user key to determine the originating device.

가상 스토리지 레이어가, 객체가 거대가 아니고, 대형이 아니고, 소형이 아닌 것으로 판별한 경우, 가상 스토리지 레이어는 객체를 중형인 것으로 처리하고(804), 분산 정책을 기반으로 원본 데이터 및 복제 데이터를 포함하는 데이터를 저장하기 위한 하나 또는 그 이상의 데이터 스토리지 장치들을 판별하고(813), 밴드의 하나 또는 그 이상의 장치들로 데이터를 기입하고(814), 쓰기 절차를 완료한다(815).If the virtual storage layer determines that the object is not large, not large, and not small, the virtual storage layer treats the object as medium-sized (804) and includes original data and duplicate data based on the distribution policy. Determines one or more data storage devices for storing the data to be used (813), writes data to one or more devices of the band (814), and completes the write procedure (815).

데이터 스토리지 장치들을 통한 하나 또는 그 이상의 밴드들로의 데이터 기입의 절차(812)는 다양한 보조-절차들(sub-processes)을 포함할 수 있다. 먼저, 가상 스토리지 레이어는 기입을 위한 슬라이스가 존재하는지 판별한다(820). 기입을 위한 슬라이스가 존재하지 않는 경우, 가상 스토리지 레이어는 에러 로그를 저장하고, 동작을 종료하고, 객체를 기입하기 위한 요청을 전송한 호스트 컴퓨터 상에서 구동하는 사용자 애플리케이션 및/또는 호스트 컴퓨터의 운영 체제로 알린다. 가상 스토리지 레이어는 객체에 대한 슬라이스를 생성하고 슬라이스의 청크들에 대한 내부 키들을 생성한다(821). 가상 스토리지 레이어는 이것이 기입을 위한 마지막 슬라이스인지 체크한다(822). 마지막 슬라이스에 대하여, 가상 스토리지 레이어는, 슬라이스가 밴드를 가득 채울 수 없는 경우, 데이터 청크들로 패딩들(paddings)을 추가하고, 소거 코딩 알고리즘을 사용하여 밴드에 대한 P 패리티 청크들을 연산한다(824). 마지막 슬라이스와 다른 슬라이스들에 대하여, 가상 스토리지 레이어는 패딩 절차(823)를 생략한다. 가상 스토리지 레이어는 분산 정책을 기반으로 데이터 및 패리티 청크들에 대한 장치들을 더 판별한다(825). 예를 들어, 분산 정책은 스플릿-우선 또는 밴드-우선 정책 중 어느 하나일 수 있다. 가상 스토리지 레이어는 821에서 생성된 내부 키들과 함께 밴드로 데이터 및 패리티 청크들을 하나 또는 그 이상의 스토리지 장치들로 기입한다(826).The procedure 812 of writing data to one or more bands via data storage devices may include various sub-processes. First, the virtual storage layer determines whether a slice for writing exists ( 820 ). If the slice for writing does not exist, the virtual storage layer saves the error log, terminates the operation, and sends a request to write the object to the user application running on the host computer and/or the host computer's operating system. inform The virtual storage layer creates a slice for the object and generates internal keys for chunks of the slice ( 821 ). The virtual storage layer checks 822 if this is the last slice for writing. For the last slice, the virtual storage layer adds paddings to the data chunks if the slice cannot fill the band full, and computes P parity chunks for the band using an erasure coding algorithm (824). ). For slices other than the last slice, the virtual storage layer omits the padding procedure 823 . The virtual storage layer further determines devices for data and parity chunks based on the distribution policy (825). For example, the distribution policy may be either a split-first or a band-first policy. The virtual storage layer writes ( 826 ) data and parity chunks to one or more storage devices in a band along with the internal keys generated at 821 .

사용자 키 및 밸류 크기와 같은 객체 메타데이터가 유지되지 않기 때문에, 가상 스토리지 레이어는 읽어질 객체가 소형인지, 대형인지, 또는 거대인지 인식할 수 없다. 그러므로, 가상 스토리지 레이어는 객체의 사용자 키를 사용하여 가상 스토리지의 모든 데이터 스토리지 장치들(예를 들어, (D+P) 데이터 스토리지 장치들)로 읽기 요청을 전송하고, 객체 크기의 분류를 기반으로 객체를 재구성하는 적절한 방법을 판별한다. 데이터 스토리지 장치들에 의해 지원되는 그룹 특징에 따라, 가상 스토리지 레이어는 읽기 및 쓰기 동작들을 다르게 처리할 수 있다.Because object metadata such as user key and value size is not maintained, the virtual storage layer cannot know whether the object being read is small, large, or large. Therefore, the virtual storage layer sends a read request to all data storage devices in the virtual storage (eg (D+P) data storage devices) using the user key of the object, and based on the classification of the object size, Determine the appropriate way to reconstruct the object. Depending on the group characteristics supported by the data storage devices, the virtual storage layer may handle read and write operations differently.

거대 객체는 데이터 스토리지 장치들에 의한 그룹 특징의 지원을 기반으로 다르게 읽어질 수 있다. 가상 스토리지의 데이터 스토리지 장치들이 그룹 특징을 지원하는 경우, 가상 스토리지 레이어는 BID="don't care"과 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송한다. 이에 응답하여, 전송에 응답한 에러가 없는 경우, (D+P) 데이터 스토리지 장치들 각각은 그것의 스플릿의 NCOi 청크들을 반환한다. 이후에, 가상 스토리지 레이어는 수신된 청크들을 그것들의 밴드 ID 당 NCOi 밴드들의 전체로 분류하고, 밴드 ID의 오름차순으로 밴드들을 정렬시킨다. 가상 스토리지 레이어가 각 밴드 당 동일한 크기의 D 청크들을 수신하는 동안, 가상 스토리지 레이어는 밴드를 재구성할 수 있다. 밴드에 대하여 수신된 청크들의 전체 개수가 데이터 스토리지 장치들의 개수(D)보다 작거나 또는 청크들의 크기가 동일하지 않은 경우, 에러가 발생한다. 모든 스토리지 장치들이 NOT_EXIST 에러를 반환하는 경우의 존재하지 않는 객체의 읽기(a read of non-existing object) 또는 복구될 수 없는 에러(unrecoverable error)에 의해 에러가 발생될 수 있다. 가상 스토리지 레이어는 밴드들을 하나씩 재구성하고, 이후에, 밴드들로부터 객체를 재구성한다. A large object may be read differently based on the support of the group feature by the data storage devices. If the data storage devices of the virtual storage support the group feature, the virtual storage layer sends the user key with BID="don't care" to all data storage devices. In response, each of the (D+P) data storage devices returns NC Oi chunks of its split if there is no error responding to the transmission. Then, the virtual storage layer sorts the received chunks into total of NCOi bands per their band ID, and sorts the bands in ascending order of band ID. While the virtual storage layer receives D chunks of the same size for each band, the virtual storage layer can reconstruct the band. If the total number of received chunks for a band is less than the number D of data storage devices or the chunks are not the same size, an error occurs. When all storage devices return a NOT_EXIST error, an error may occur due to a read of non-existing object or an unrecoverable error. The virtual storage layer reconstructs the bands one by one, and then reconstructs the object from the bands.

가상 스토리지의 데이터 스토리지 장치들이 그룹 특징을 지원하지 않는 경우, 가상 스토리지 레이어는 BID=0과 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송하여 거대 객체를 읽는다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 제1 밴드(Band 0)에서 하나의 청크를 반환한다. 가상 스토리지 레이어는 수신된 청크들 중 일부와 함께 저장된 메타데이터를 체크함으로써, 객체에 대한 밴드들의 개수를 식별할 수 있다. 가상 스토리지 레이어는, 이후에, 밴드 ID의 오름차순으로 하나씩 모든 밴드들을 재구성하고, 밴드들을 사용하여 객체를 재구성한다. 일부 실시 예들에서, 가상 스토리지 레이어는 나머지 밴드들 전부를 비동기적으로 요청함으로써, 그룹 지원되는 경우와 유사하게 객체를 재구성할 수 있다. If the data storage devices of the virtual storage do not support the group feature, the virtual storage layer sends the user key with BID=0 to all data storage devices to read the large object. In response, each of the (D+P) data storage devices returns one chunk in the first band (Band 0). The virtual storage layer may identify the number of bands for an object by checking the metadata stored along with some of the received chunks. The virtual storage layer then reconstructs all bands one by one in ascending order of band ID, and reconstructs the object using the bands. In some embodiments, the virtual storage layer may asynchronously request all of the remaining bands to reconstruct the object similar to the group supported case.

대형 객체의 읽기 절차는 하나의 밴드에 대한 것만 제외하면, 거대 객체의 방식과 유사할 수 있다. 데이터 스토리지 장치들이 그룹 특징을 지원하는 경우, 가상 스토리지 레이어는 BID="don't care"와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송한다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 그것의 스플릿에서 하나의 청크를 반환한다. 가상 스토리지 레이어가 동일한 크기의 D 청크들을 수신하는 동안, 가상 스토리지 레이어는 객체를 재구성할 수 있다. 밴드에 대하여 수신된 청크들의 전체 개수가 데이터 청크들의 개수(D)보다 작거나 또는 청크들의 크기가 동일하지 않은 경우, 에러가 발생한다. 모든 데이터 스토리지 장치들이 NOT-EXIST 에러를 반환하는 경우의 존재하지 않는 객체(non-existing object)의 읽기 또는 복구될 수 없는 에러(unrecoverable error)에 의해 에러가 발생할 수 있다. The read procedure of a large object may be similar to that of a large object, except for one band. If the data storage devices support the group feature, the virtual storage layer sends the user key with BID="don't care" to all data storage devices. In response, each of the (D+P) data storage devices returns one chunk in its split. While the virtual storage layer receives D chunks of the same size, the virtual storage layer may reconstruct the object. If the total number of received chunks for a band is less than the number D of data chunks or the size of the chunks is not the same, an error occurs. When all data storage devices return a NOT-EXIST error, an error may occur due to an unrecoverable error or read of a non-existing object.

가상 스토리지 장치의 데이터 스토리지 장치들이 그룹 특징을 지원하지 않는 경우, 가상 스토리지 레이어는 BID=0와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송하여 대형 객체를 읽는다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 밴드(BID=0)에서 하나의 청크를 반환한다. 가상 스토리지 레이어는 수신된 청크들과 함께 저장된 메타데이터를 체크함으로써 대형 객체에 대하여 하나의 밴드만 존재함을 식별하고, 밴드를 재구성함으로써, 객체를 재구성할 수 있다.If the data storage devices of the virtual storage device do not support the group feature, the virtual storage layer sends the user key with BID=0 to all data storage devices to read the large object. In response, each of the (D+P) data storage devices returns one chunk in the band (BID=0). The virtual storage layer can identify that there is only one band for a large object by checking the metadata stored with the received chunks, and reconstruct the object by reconstructing the band.

소형 객체의 읽기의 절차는 복제에 의존한다는 점을 제외하면, 대형 객체의 읽기의 절차와 유사할 수 있다. 데이터 스토리지 장치들이 그룹 특징을 지원하는 경우, 가상 스토리지 레이어는 BID="don't care"와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송한다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 응답을 반환한다. 객체가 소형이기 때문에, 일부 데이터 스토리지 장치들은 NOT_EXIST의 에러를 반환할 수 있는 반면에, 다른 데이터 스토리지 장치들은 청크를 반환한다. 가상 스토리지 레이어는 하나 또는 그 이상의 데이터 스토리지 장치들로부터 수신된 청크들을 사용하여 객체를 재구성할 수 있는 유효 청크들을 수신한다. 모든 데이터 스토리지 장치들이 NOT_EXIST 에러를 반환하는 경우, 읽기 요청에 의해 식별되는 객체는 존재하지 않는 객체이거나 또는 복구될 수 없는 에러가 발생할 수 있다. The procedure for reading a small object may be similar to that of reading a large object, except that it relies on replication. If the data storage devices support the group feature, the virtual storage layer sends the user key with BID="don't care" to all data storage devices. In response, each of the (D+P) data storage devices returns a response. Because the object is small, some data storage devices may return an error of NOT_EXIST, while others return chunks. The virtual storage layer receives valid chunks that can reconstruct an object using chunks received from one or more data storage devices. When all data storage devices return a NOT_EXIST error, the object identified by the read request may not exist or an unrecoverable error may occur.

가상 스토리지의 데이터 스토리지 장치들이 그룹 특징을 제공하지 않는 경우, 가상 스토리지 레이어는 BID=0와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송하여 소형 객체를 읽는다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 응답을 반환한다. 가상 스토리지 레이어는 어떤 데이터 스토리지 장치로부터 수신된 어떤 유효한 청크들을 사용하여 객체가 소형인지를 식별할 수 있다. 소형 객체는 추가적인 메타데이터를 유지하지 않는다. If the data storage devices of the virtual storage do not provide the group feature, the virtual storage layer sends the user key with BID=0 to all data storage devices to read the small object. In response, each of the (D+P) data storage devices returns a response. The virtual storage layer may identify whether an object is small using any valid chunks received from which data storage device. Small objects do not maintain additional metadata.

도 9는 일 실시 예에 따른, 객체를 읽는 예시적인 순서도를 보여준다. 가상 스토리지 레이어는 객체에 대한 읽기 요청을 수신한다(901). 사용자(또는 호스트 컴퓨터 상에서 구동하는 사용자 애플리케이션)으로부터 수신된 읽기 요청은 사용자 키를 포함할 수 있다. 가상 스토리지 레이어는 객체의 하나 또는 그 이상의 청크들을 저장하는 하나 또는 그 이상의 데이터 스토리지 장치들에 의해 그룹 특징이 지원되는지 판별한다(902). 그룹 특징이 지원되는 경우, 가상 스토리지 레이어는 BID="don't care"를 갖는 내부 키와 함께 읽기 요청을 모든 데이터 장치들로 전송하고(903), 그렇지 않은 경우, BID=0을 모든 데이터 스토리지 장치들로 설정한다(904). 가상 스토리지 레이어는 데이터 스토리지 장치들 중 하나로부터 청크를 수신한다(905). 수신된 청크에 에러가 없는 경우(906), 가상 스토리지 레이어는 그룹 특징이 지원되는지 판별하고(907), 청크의 메타데이터를 회수하고(908), 그렇지 않은 경우, 가상 스토리지 레이어는 객체의 크기를 판별하는 것을 계속한다. 9 shows an exemplary flowchart of reading an object, according to an embodiment. The virtual storage layer receives a read request for the object ( 901 ). A read request received from a user (or a user application running on a host computer) may include a user key. The virtual storage layer determines ( 902 ) whether the group feature is supported by one or more data storage devices that store one or more chunks of the object. If the group feature is supported, the virtual storage layer sends a read request to all data devices (903) with an internal key with BID="don't care"; otherwise, BID=0 to all data storage Set to devices (904). The virtual storage layer receives 905 a chunk from one of the data storage devices. If there are no errors in the received chunk (906), the virtual storage layer determines if the group feature is supported (907), retrieves the chunk's metadata (908), otherwise the virtual storage layer determines the size of the object continue to determine

가상 스토리지 레이어가 객체가 거대 또는 대형인 것으로 판별한 경우(909), 가상 스토리지 레이어는 전체 객체가 재구성되었는지 더 체크하고(910), 하나 또는 그 이상의 데이터 스토리지 장치들로부터 수신된 청크들을 사용하여 전체 객체가 재구성될 때까지 슬라이스를 하나씩 재구성하는 것을 계속하고(912), 읽기 절차를 완료한다(913). 소형 객체에 대하여, 가상 스토리지 레이어는 하나 또는 그 이상의 데이터 스토리지 장치들로부터 수신된 청크들을 사용하여 객체를 재구성한다(911).When the virtual storage layer determines that the object is large or large ( 909 ), the virtual storage layer further checks whether the entire object has been reconstructed ( 910 ), and uses the chunks received from one or more data storage devices to It continues to reconstruct the slices one by one until the object is reconstructed (912), and the read procedure is completed (913). For a small object, the virtual storage layer reconstructs ( 911 ) the object using chunks received from one or more data storage devices.

소형 객체를 재구성하는 절차(911)는 복수의 보조-절차들을 포함할 수 있다. 가상 스토리지 레이어는 수신된 청크가 소형인지 우선 체크한다(921). 가상 스토리지 레이어는 소형 객체에 대한 소형 청크를 예상하나 대형 청크를 수신한 경우, 가상 스토리지 레이어는 에러를 발생한다(924). 가상 스토리지 레이어가 수신된 청크가 유효한 것으로 판별한 경우(922), 가상 스토리지 레이어는 수신된 청크(들)을 사용하여 소형 객체를 재구성하고(923), 그렇지 않은 경우, 가상 스토리지 레이어는 다른 데이터 스토리지 장치들로부터 청크를 수신한다(925).The procedure 911 for reconstructing the small object may include a plurality of sub-procedures. The virtual storage layer first checks whether the received chunk is small (921). If the virtual storage layer expects a small chunk for the small object but receives the large chunk, the virtual storage layer generates an error ( 924 ). If the virtual storage layer determines (922) that the received chunk is valid, then the virtual storage layer reconstructs the small object using the received chunk(s) (923); Receive a chunk from the devices (925).

슬라이스를 재구성하는 절차(912)는 복수의 보조 절차들을 포함할 수 있다. 가상 스토리지 레이어는 슬라이스를 재구성할 D 청크들이 모두 수신되었는지 체크한다(931). 만약 그렇다면, 가상 스토리지 레이어는 D 청크들과 함께 소거 코딩 알고리즘을 사용하여 슬라이스를 재구성한다(935). 만약 그렇지 않은 경우, 가상 스토리지 레이어는 현재 밴드의 모든 청크들이 수신되었는지 체크한다(932). 밴드의 모든 청크들이 수신된 경우, 수신된 청크들 중 적어도 하나가 유효하지 않을 수 있기 때문에, 가상 스토리지 레이어는 에러를 생성한다(936). 수신될 청크들이 더 존재한다면, 가상 스토리지 레이어는 다른 데이터 스토리지 장치로부터 그것들을 수신하는 것을 계속하고(933), 슬라이스를 재구성할 모든 D 청크들을 수신할 때까지 절차를 반복한다. 수신된 청크들이 대형이 아니고, 거대가 아닌 경우(예를 들어, 청크가 소형 객체에 대한 것인 경우), 가상 스토리지 레이어는 에러를 발생한다(936).The procedure 912 for reconstructing a slice may include a plurality of auxiliary procedures. The virtual storage layer checks whether all D chunks for reconstructing a slice have been received (931). If so, the virtual storage layer reconstructs 935 the slice using an erasure coding algorithm with the D chunks. If not, the virtual storage layer checks whether all chunks of the current band have been received (932). If all chunks of the band have been received, the virtual storage layer generates an error ( 936 ) because at least one of the received chunks may not be valid. If there are more chunks to be received, the virtual storage layer continues receiving them from the other data storage device (933) and repeats the procedure until it has received all D chunks to reconstruct the slice. If the received chunks are not large, and are not large (eg, if the chunk is for a small object), the virtual storage layer throws an error 936 .

일 실시 예에 따르면, 데이터 스토리지 시스템은: 키-값 쌍의 복수의 객체들을 저장하는 복수의 데이터 스토리지 장치들; 및 상기 복수의 객체들의 객체 크기를 기반으로 소거 코딩 방식 및 데이터 복제 방식을 포함하는 다른 데이터 신뢰성 방식들을 적용하는 가상 스토리지 레이어를 포함한다. 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함한다. 상기 가상 스토리지 레이어는 상기 제1 객체를 소형 객체로 분류하고, 상기 데이터 복제 방식을 적용하고, 상기 소형 객체를 상기 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상을 통해 저장한다. 상기 가상 스토리 레이어는 상기 제2 객체를 거대 객체로 분류하고, 상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들을 통해 분산하여 저장한다.According to an embodiment, a data storage system includes: a plurality of data storage devices for storing a plurality of objects of a key-value pair; and a virtual storage layer that applies other data reliability schemes including an erasure coding scheme and a data duplication scheme based on the object sizes of the plurality of objects. The plurality of objects include a first object having a first size and a second object having a second size greater than the first size. The virtual storage layer classifies the first object as a small object, applies the data replication method, and stores the small object through one or more of the plurality of data storage devices. The virtual story layer classifies the second object as a giant object, divides the giant object into one or more chunks of the same size, applies the erasure coding scheme, and divides the one or more chunks into the plurality of chunks. Distributed and stored through data storage devices of

상기 분산 방식은 상기 가상 스토리지 레이어가 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들로 분할하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들 각각에 상기 하나 이상의 청크들을 저장하는 스플릿-우선 분산이다.The distributed scheme is such that the virtual storage layer divides the one or more chunks of the giant object into the plurality of data storage devices, and stores the one or more chunks through the plurality of data storage devices. A split-first distribution that stores more chunks.

상기 분산 방식은 상기 가상 스토리지 레이어가 상기 거채 객체의 상기 하나 또는 그 이상의 청크들이 상기 하나 또는 그 이상의 데이터 스토리지 장치들로 완전히 저장될 때까지 상기 복수의 데이터 스토리지 장치들 각각으로 상기 거대 객체의 하나의 정크를 저장하는 밴드-우선 분산 방식이다.The distributed scheme is such that the virtual storage layer distributes one of the giant object to each of the plurality of data storage devices until the one or more chunks of the giant object are completely stored to the one or more data storage devices. It is a band-first distributed scheme that stores junk.

상기 가상 스토리지 레이어는 제3 크기를 갖는 제3 객체를 대형 객체로 더 분류할 수 있고, 상기 대형 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산하여 저장한다. 상기 제3 크기는 상기 제1 크기보다 크고, 상기 제2 크기보다 작다. 상기 대형 객체는 스플릿내에서 하나의 청크 또는 하나의 밴드만 포함한다. The virtual storage layer may further classify a third object having a third size into a large object, dividing the large object into one or more chunks of the same size, applying the erasure coding scheme, and The one or more chunks are distributed and stored through the data storage devices of The third size is larger than the first size and smaller than the second size. The large object contains only one chunk or one band in the split.

상기 가상 스토리지 레이어는 제4 크기를 갖는 제4 객체를 중형 객체로 더 분류할 수 있다. 상기 제4 크기는 상기 제1 크기보다 크고, 상기 제3 크기보다 작다. 상기 가상 스토리지 레이어는 상기 데이터 복제 방식 및 상기 소거 코딩 방식 중 하나를 적용한다. The virtual storage layer may further classify a fourth object having a fourth size as a medium object. The fourth size is larger than the first size and smaller than the third size. The virtual storage layer applies one of the data replication scheme and the erasure coding scheme.

상기 객체는 사용자 키를 사용하여 식별될 수 있다. 상기 가상 스토리지 레이어는 상기 거대 객체에 대한 밴드 식별자 및 상기 사용자 키를 포함하는 내부 키를 생성할 수 있다. 상기 밴드 식별자는 복수의 밴드들 중 밴드를 식별하는데 사용된다. 상기 복수의 밴드들 중 상기 밴드 각각은 상기 복수의 데이터 스토리지 장치들을 통해 분산된 하나 또는 그 이상의 청크들 중 하나의 청크를 포함한다. The object can be identified using a user key. The virtual storage layer may generate an internal key including a band identifier for the giant object and the user key. The band identifier is used to identify a band among a plurality of bands. Each of the bands of the plurality of bands includes one chunk of one or more chunks distributed through the plurality of data storage devices.

상기 가상 스토리지 레이어는 상기 사용자 키의 해시 값을 사용하여 상기 복수의 데이터 스토리지 장치들 중 상기 하나 또는 그 이상의 청크들의 첫번째 청크를 기입하거나 또는 읽기 위한 시작 데이터 스토리지 장치를 식별할 수 있다. The virtual storage layer may use the hash value of the user key to identify a starting data storage device for writing or reading a first chunk of the one or more chunks of the plurality of data storage devices.

상기 복수의 데이터 스토리지 장치들은 상기 거대 객체와 연관된 패리티 청크들을 저장하는 하나 또는 그 이상의 전용 패리티 데이터 스토리지 장치들을 포함할 수 있다. The plurality of data storage devices may include one or more dedicated parity data storage devices for storing parity chunks associated with the large object.

상기 복수의 데이터 스토리지 장치들은 그룹 특징을 지원할 수 있고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 밴드 식별자를 임의의 데이터 비트들로 설정하여 상기 복수의 데이터 스토리지 장치들로 전송할 수 있다.The plurality of data storage devices may support a group feature, and when reading the giant object, the virtual storage layer may set the band identifier to arbitrary data bits and transmit it to the plurality of data storage devices. .

상기 복수의 데이터 스토리지 장치들은 그룹 특징을 지원하지 않을 수 있고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 밴드 식별자를 유일한 밴드 식별자로 설정하여 상기 복수의 데이터 스토리지 장치들로 전송할 수 있다. The plurality of data storage devices may not support a group feature, and the virtual storage layer may set the band identifier as a unique band identifier and transmit it to the plurality of data storage devices when reading the large object. .

상기 복수의 데이터 스토리지 장치들 각각은 키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)일 수 있다.Each of the plurality of data storage devices may be a key-value solid-state drive (KV SSD).

다른 실시 예에 따르면, 키-밸류 쌍의 객체를 기입하는 방법은: 키-밸류 쌍의 복수의 객체들을 수신하는 단계, 단, 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고; 상기 제1 객체를 소형 객체로 분류하는 단계; 상기 소형 객체로 데이터 복제 방식을 적용하는 단계; 상기 소형 객체를 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상을 통해 저장하는 단계; 상기 제2 객체를 거대 객체로 분류하는 단계; 상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하는 단계; 상기 거대 객체로 소거 코딩을 적용하는 단계; 및 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산하여 저장하는 단계를 포함한다.According to another embodiment, a method of writing an object of a key-value pair includes: receiving a plurality of objects of a key-value pair, wherein the plurality of objects include a first object having a first size and the first object a second object having a second size greater than the size; classifying the first object as a small object; applying a data replication method to the small object; storing the small object via one or more of a plurality of data storage devices; classifying the second object as a giant object; dividing the large object into one or more chunks of the same size; applying erasure coding to the large object; and distributing and storing the one or more chunks through the plurality of data storage devices.

상기 방법은: 상기 객체에 대한 쓰기 요청을 수신하는 단계; 상기 객체가 상기 거대 객체인지 판별하는 단계; 상기 거대 객체에 대한 청크 크기 및 청크 개수를 판별하는 단계; 및 상기 청크 크기 및 상기 청크 개수를 기반으로 상기 복수의 데이터 스토리지 장치들로 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함할 수 있다. The method includes: receiving a write request for the object; determining whether the object is the giant object; determining a chunk size and the number of chunks for the giant object; and writing the one or more chunks of the giant object to the plurality of data storage devices based on the chunk size and the number of chunks.

상기 방법은: 상기 복수의 청크들 중 상기 복수의 데이터 스토리지 장치들 각각에 대한 하나의 청크를 포함하는 슬라이스를 생성하고, 상기 슬라이스에 포함된 상기 하나 이상의 청크들 각각에 대한 밴드 식별자가 첨부된 사용자 키를 사용하여 내부 키를 생성하는 단계; 상기 소거 코딩 방식을 사용하여 상기 슬라이스와 대응하는 상기 하나 또는 그 이상의 청크들 및 하나 또는 그 이상의 패리티 청크들을 포함하는 밴드를 생성하는 단계; 분산 방식을 기반으로 상기 밴드를 저장할 상기 복수의 데이터 스토리지 장치를 판별하는 단계; 및 상기 내부 키와 함께 상기 밴드에 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함할 수 있다.The method includes: creating a slice including one chunk for each of the plurality of data storage devices among the plurality of chunks, and a user having a band identifier attached to each of the one or more chunks included in the slice generating an internal key using the key; generating a band including the one or more chunks and one or more parity chunks corresponding to the slice using the erasure coding scheme; determining the plurality of data storage devices to store the band based on a distribution method; and writing the one or more chunks to the band together with the inner key.

상기 방법은: 상기 객체에 대한 쓰기 요청을 수신하는 단계; 상기 객체가 상기 소형 객체인지 판별하는 단계; 분산 방식을 기반으로 상기 복수의 데이터 스토리지 장치들 중 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 저장할 일부를 판별하는 단계; 및 상기 복수의 데이터 스토리지 장치들의 상기 일부로 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함할 수 있다. The method includes: receiving a write request for the object; determining whether the object is the small object; determining a portion of the plurality of data storage devices to store the one or more chunks of the small object based on a distribution method; and writing the one or more chunks of the small object to the portion of the plurality of data storage devices.

상기 방법은: 상기 사용자 키를 포함하는 상기 객체에 대한 읽기 요청을 수신하는 단계; 상기 복수의 데이터 스토리지 장치들이 그룹 특징을 지원하는지 판별하는 단계; 및 상기 내부 키와 함께 상기 읽기 요청을 상기 복수의 데이터 스토리지 장치들로 전송하는 단계를 더 포함할 수 있다.The method includes: receiving a read request for the object including the user key; determining whether the plurality of data storage devices support a group feature; and transmitting the read request together with the internal key to the plurality of data storage devices.

상기 그룹 특징이 지원되는 경우, 상기 내부 키의 상기 밴드 식별자는 임의의 데이터의 비트들로 설정될 수 있다.If the group feature is supported, the band identifier of the inner key may be set to bits of arbitrary data.

상기 그룹 특징이 지원되지 않는 경우, 상기 내부 키의 상기 밴드 식별자는 유일한 밴드 식별자로 설정될 수 있다.If the group feature is not supported, the band identifier of the inner key may be set as a unique band identifier.

상기 방법은 상기 복수의 데이터 스토리지 장치들 각각으로부터 적어도 하나의 청크를 수신하는 단계; 및 상기 소거 코딩 방식을 사용하여 상기 복수의 데이터 스토리지 장치들로부터 수신된 상기 적어도 하나의 청크들로부터 슬라이스를 재구성하는 단계를 더 포함할 수 있다.The method includes receiving at least one chunk from each of the plurality of data storage devices; and reconstructing a slice from the at least one chunk received from the plurality of data storage devices using the erasure coding scheme.

상기 복수의 데이터 스토리지 장치들 각각은 키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)일 수 있다. Each of the plurality of data storage devices may be a key-value solid-state drive (KV SSD).

상술된 예시적인 실시 예들은 다른 크기를 갖는 객체들을 효율적으로 저장할 수 있는 데이터 스토리지 시스템 및 데이터 스토리지 시스템에 객체들을 저장하는 방법을 구현하는 다양한 실시 예들을 설명하기 위한 것이다. 기재된 예시적인 실시 예들로부터의 다양한 변형들은 당업자에 의해 용이하게 행해질 수 있다. 본 발명의 기술적 사상에서 의도된 사항들은 이하의 특허청구범위에서 기재된다.The above-described exemplary embodiments are intended to describe various embodiments of implementing a data storage system capable of efficiently storing objects having different sizes and a method of storing objects in the data storage system. Various modifications from the described exemplary embodiments can be readily made by those skilled in the art. Matters intended in the technical spirit of the present invention are described in the claims below.

Claims (20)

데이터 스토리지 시스템에 있어서:
키-값 쌍의 복수의 객체들을 저장하는 복수의 데이터 스토리지 장치들;
상기 복수의 데이터 스토리지 장치들을 제어하고, 상기 복수의 객체들의 객체의 크기를 기반으로 데이터 복제 방식 및 소거 코딩 방식을 포함하는 다른 데이터 신뢰성 방식들을 적용하는 가상 스토리지 레이어를 포함하고,
상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고,
상기 가상 스토리지 레이어는 상기 제1 객체를 소형 객체로서 분류하고, 상기 데이터 복제 방식을 적용하고, 상기 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상을 통해 상기 소형 객체를 저장하고,
상기 가상 스토리지 레이어는 상기 제2 객체를 거대 객체로 분류하고, 상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산적으로 저장하고,
상기 가상 스토리지 레이어는 상기 복수의 객체들의 분류를 기반으로 상기 복수의 데이터 스토리지 장치들 중 하나 또는 그 이상의 데이터 스토리지 장치들을 그룹화함으로써, 호스트 컴퓨터 상에서 구동하는 애플리케이션으로 가상 스토리지 유닛을 제공하는 데이터 스토리지 시스템.
A data storage system comprising:
a plurality of data storage devices storing a plurality of objects of a key-value pair;
a virtual storage layer that controls the plurality of data storage devices and applies other data reliability methods including a data replication method and an erasure coding method based on the size of the objects of the plurality of objects,
The plurality of objects include a first object having a first size and a second object having a second size greater than the first size,
the virtual storage layer classifies the first object as a small object, applies the data replication method, stores the small object through one or more of the plurality of data storage devices,
The virtual storage layer classifies the second object as a large object, divides the large object into one or more chunks of the same size, applies the erasure coding scheme, and uses the plurality of data storage devices to Distributed storage of one or more chunks,
The virtual storage layer provides a virtual storage unit to an application running on a host computer by grouping one or more data storage devices among the plurality of data storage devices based on the classification of the plurality of objects.
제 1 항에 있어서,
상기 가상 스토리지 레이어는 스플릿-우선 방식에 따라 상기 복수의 데이터 스토리지 장치들을 통해 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 저장하고,
상기 스플릿-우선 방식은 상기 가상 스토리지 레이어가 상기 거대 객체의 상기 하나 또는 그 이상의 청크들 중 일부를 상기 복수의 스토리지 장치들 중 하나에 저장하고, 상기 거대 객체의 상기 하나 또는 그 이상의 청크들 중 나머지 일부를 상기 복수의 스토리지 장치들 중 다른 하나에 저장하는 방식인 데이터 스토리지 시스템.
The method of claim 1,
the virtual storage layer stores the one or more chunks of the giant object through the plurality of data storage devices in a split-first manner;
The split-first scheme is such that the virtual storage layer stores some of the one or more chunks of the giant object in one of the plurality of storage devices, and the other of the one or more chunks of the giant object. A data storage system, wherein a portion is stored in another one of the plurality of storage devices.
제 1 항에 있어서,
상기 가상 스토리지 레이어는 밴드-우선 방식에 따라 상기 복수의 데이터 스토리지 장치들을 통해 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 저장하고,
상기 밴드-우선 방식은 상기 가상 스토리지 레이어가, 상기 복수의 데이터 스토리지 장치들에 상기 거대 객체의 상기 하나 또는 그 이상의 청크들이 모두 저장될 때까지 상기 거대 객체의 하나의 청크를 상기 복수의 데이터 스토리지 장치들 각각에 저장하는 방식인 데이터 스토리지 시스템.
The method of claim 1,
the virtual storage layer stores the one or more chunks of the giant object through the plurality of data storage devices in a band-first manner;
In the band-first scheme, the virtual storage layer stores one chunk of the large object in the plurality of data storage devices until the one or more chunks of the large object are all stored in the plurality of data storage devices. A data storage system that stores each of them.
제 1 항에 있어서,
상기 가상 스토리지 레이어는 제3 크기를 갖는 제3 객체를 대형 객체로 더 분류하고, 상기 대형 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산적으로 저장하고,
상기 제3 크기는 상기 제1 크기보다 크고, 상기 제2 크기보다 작고,
상기 대형 객체는 스플릿 내의 하나의 청크만 또는 하나의 밴드만 포함하는 데이터 스토리지 시스템.
The method of claim 1,
The virtual storage layer further classifies a third object having a third size into a large object, divides the large object into one or more chunks of the same size, applies the erasure coding scheme, and the plurality of data distributedly store the one or more chunks through storage devices;
the third size is larger than the first size and smaller than the second size;
wherein the large object includes only one chunk or only one band in a split.
제 4 항에 있어서,
상기 가상 스토리지 레이어는 제4 크기를 갖는 제4 객체를 중간 객체로 분류하고,
상기 제4 크기는 상기 제1 크기보다 크고, 상기 제3 크기보다 작고,
상기 가상 스토리지 레이어는 상기 데이터 복제 방식 및 상기 소거 코딩 방식 중 하나를 적용하는 데이터 스토리지 시스템.
5. The method of claim 4,
The virtual storage layer classifies a fourth object having a fourth size as an intermediate object,
The fourth size is larger than the first size and smaller than the third size,
and the virtual storage layer applies one of the data replication method and the erasure coding method.
제 1 항에 있어서,
상기 객체는 사용자 키를 사용하여 식별되고, 상기 가상 스토리지 레이어는 상기 거대 객체에 대한 밴드 식별자 및 상기 사용자 키를 포함하는 내부 키를 생성하고,
상기 밴드 식별자는 복수의 밴드들 중 밴드를 식별하는데 사용되고, 상기 복수의 밴드들 중 상기 밴드의 각각은 상기 복수의 데이터 스토리지 장치들을 통해 분산된 상기 하나 또는 그 이상의 청크들 중 하나의 청크를 포함하는 데이터 스토리지 시스템.
The method of claim 1,
the object is identified using a user key, and the virtual storage layer generates an internal key including a band identifier for the large object and the user key;
wherein the band identifier is used to identify a band of a plurality of bands, each of the bands of the plurality of bands comprising a chunk of the one or more chunks distributed through the plurality of data storage devices data storage system.
제 6 항에 있어서,
상기 가상 스토리지 레이어는 상기 하나 또는 그 이상의 청크들 중 첫 번째 청크를 읽거나 또는 쓰기 위하여 상기 사용자 키의 해시 값을 사용하여 상기 복수의 데이터 스토리지 장치들 중 시작 데이터 스토리지 장치를 식별하는 데이터 스토리지 시스템.
7. The method of claim 6,
and the virtual storage layer identifies a starting data storage device of the plurality of data storage devices using the hash value of the user key to read or write a first chunk of the one or more chunks.
제 1 항에 있어서,
상기 복수의 데이터 스토리지 장치들은 상기 거대 객체와 연관된 패리티 청크들을 저장하는 하나 또는 그 이상의 전용 패리티 데이터 스토리지 장치들을 포함하는 데이터 스토리지 시스템.
The method of claim 1,
and the plurality of data storage devices includes one or more dedicated parity data storage devices for storing parity chunks associated with the large object.
제 6 항에 있어서,
상기 복수의 데이터 스토리지 장치들은 그룹 특징을 지원하고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 복수의 데이터 스토리지 장치들로 상기 밴드 식별자를 임의의 데이터 비트들로 설정하여 전송하는 데이터 스토리지 시스템.
7. The method of claim 6,
The plurality of data storage devices support a group feature, and the virtual storage layer transmits the band identifier to the plurality of data storage devices by setting arbitrary data bits when the large object is read. system.
제 6 항에 있어서,
상기 복수의 데이터 스토리지 장치들을 그룹 특징을 지원하지 않고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 복수의 데이터 스토리지 장치들로 상기 밴드 식별자를 유일한 밴드 식별자로 설정하여 전송하는 데이터 스토리지 시스템.
7. The method of claim 6,
A data storage system in which the plurality of data storage devices do not support the group feature, and the virtual storage layer transmits the band identifier as a unique band identifier to the plurality of data storage devices when the large object is read. .
제 1 항에 있어서,
상기 복수의 데이터 스토리지 장치들 각각은 키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)인 데이터 스토리지 시스템.
The method of claim 1,
Each of the plurality of data storage devices is a key-value solid-state drive (KV SSD) data storage system.
키-밸류 쌍의 객체를 기입하는 방법에 있어서,
키-밸류 쌍의 복수이 객체들을 수신하는 단계, 단, 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고;
상기 제1 객체를 소형 객체로 분류하는 단계;
상기 소형 객체로 데이터 복제 방식을 적용하는 단계;
상기 소형 객체를 하나 또는 그 이상의 복수의 데이터 스토리지 장치들을 통해 저장하는 단계;
상기 제2 객체를 거대 객체로 분류하는 단계;
상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하는 단계;
상기 거대 객체로 소거 코딩 방식을 적용하는 단계; 및
상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들을 통해 분산적으로 저장하는 단계를 포함하는 방법.
A method of writing an object of a key-value pair, comprising:
receiving a plurality of objects of a key-value pair, wherein the plurality of objects include a first object having a first size and a second object having a second size greater than the first size;
classifying the first object as a small object;
applying a data replication method to the small object;
storing the small object through one or more plurality of data storage devices;
classifying the second object as a giant object;
dividing the large object into one or more chunks of the same size;
applying an erasure coding scheme to the large object; and
and distributing the one or more chunks across the plurality of data storage devices.
제 12 항에 있어서,
상기 객체에 대한 쓰기 요청을 수신하는 단계;
상기 객체가 상기 거대 객체인지 판별하는 단계;
상기 거대 객체에 대한 청크 크기 및 청크 개수를 판별하는 단계; 및
상기 청크 크기 및 상기 청크 개수를 기반으로 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들로 기입하는 단계를 더 포함하는 방법.
13. The method of claim 12,
receiving a write request for the object;
determining whether the object is the giant object;
determining a chunk size and the number of chunks for the giant object; and
and writing the one or more chunks of the large object to the plurality of data storage devices based on the chunk size and the number of chunks.
제 13 항에 있어서,
상기 하나 또는 그 이상의 청크들 중 상기 복수의 데이터 스토리지 장치들 각각에 대한 하나의 청크를 포함하는 슬라이스를 생성하고, 상기 슬라이스에 포함된 상기 하나 이상의 청크들 각각에 대한 밴드 식별자가 첨부된 사용자 키를 사용하여 내부 키를 생성하는 단계;
상기 소거 코딩 방식을 사용하여 상기 슬라이스에 대응하는 상기 하나 또는 그 이상의 청크들 및 하나 또는 그 이상의 청??들을 포함하는 밴드를 생성하는 단계;
분산 방식을 기반으로 상기 밴드를 저장할 상기 복수의 데이터 스토리지 장치들을 판별하는 단계; 및
상기 내부 키를 갖는 상기 밴드에 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함하는 방법.
14. The method of claim 13,
A slice including one chunk for each of the plurality of data storage devices among the one or more chunks is generated, and a user key to which a band identifier for each of the one or more chunks included in the slice is attached. generating an internal key using;
generating a band including the one or more chunks and one or more chunks corresponding to the slice using the erasure coding scheme;
determining the plurality of data storage devices to store the band based on a distribution method; and
writing the one or more chunks to the band with the internal key.
제 12 항에 있어서,
상기 객체에 대한 쓰기 요청을 수신하는 단계;
상기 객체가 상기 소형 객체인지 판별하는 단계;
분산 방식을 기반으로 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 저장할 상기 복수의 데이터 스토리지 장치들 중 일부를 판별하는 단계; 및
상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 상기 데이터 스토리지 장치들 중 상기 일부로 기입하는 단계를 더 포함하는 방법.
13. The method of claim 12,
receiving a write request for the object;
determining whether the object is the small object;
determining a part of the plurality of data storage devices to store the one or more chunks of the small object based on a distribution method; and
and writing the one or more chunks of the small object to the some of the data storage devices.
제 14 항에 있어서,
상기 사용자 키를 포함하는 상기 객체에 대한 읽기 요청을 수신하는 단계;
상기 복수의 데이터 스토리지 장치들이 그룹 특징을 지원하는지 판별하는 단계; 및
상기 복수의 데이터 스토리지 장치들로 상기 내부 키와 함께 상기 읽기 요청을 전송하는 단계를 더 포함하는 방법.
15. The method of claim 14,
receiving a read request for the object including the user key;
determining whether the plurality of data storage devices support a group feature; and
and sending the read request along with the internal key to the plurality of data storage devices.
제 16 항에 있어서,
상기 그룹 특징이 지원되는 경우, 상기 내부 키의 상기 밴드 식별자는 임의의 데이터의 비트들로 설정되는 방법.
17. The method of claim 16,
If the group feature is supported, the band identifier of the inner key is set to bits of arbitrary data.
제 16 항에 있어서,
상기 그룹 특징이 지원되지 않는 경우, 상기 내부 키의 상기 밴드 식별자는 유일한 밴드 식별자로 설정되는 방법.
17. The method of claim 16,
If the group feature is not supported, the band identifier of the inner key is set as a unique band identifier.
제 16 항에 있어서,
상기 복수의 데이터 스토리지 장치들 각각으로부터 적어도 하나의 청크를 수신하는 단계; 및
상기 소거 코딩 방식을 사용하여, 상기 복수의 데이터 스토리지 장치들로부터 수신된 상기 적어도 하나의 청크로부터 슬라이스를 재구성하는 단계를 더 포함하는 방법.
17. The method of claim 16,
receiving at least one chunk from each of the plurality of data storage devices; and
and reconstructing a slice from the at least one chunk received from the plurality of data storage devices using the erasure coding scheme.
제 12 항에 있어서,
상기 복수의 데이터 스토리지 장치들 각각은 키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)인 방법.
13. The method of claim 12,
wherein each of the plurality of data storage devices is a key-value solid-state drive (KV SSD).
KR1020180142144A 2018-01-19 2018-11-16 System and method for storing large key value objects Active KR102460568B1 (en)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US15/876,028 US10795760B2 (en) 2017-03-20 2018-01-19 Key value SSD
US15/876,028 2018-01-19
US201862635311P 2018-02-26 2018-02-26
US62/635,311 2018-02-26
US15/967,302 2018-04-30
US15/967,302 US10552062B2 (en) 2017-03-20 2018-04-30 System and method for storing very large key value objects

Publications (2)

Publication Number Publication Date
KR20190088873A KR20190088873A (en) 2019-07-29
KR102460568B1 true KR102460568B1 (en) 2022-10-31

Family

ID=67315834

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180142144A Active KR102460568B1 (en) 2018-01-19 2018-11-16 System and method for storing large key value objects

Country Status (4)

Country Link
JP (1) JP7140688B2 (en)
KR (1) KR102460568B1 (en)
CN (1) CN110058804B (en)
TW (1) TWI750425B (en)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102752810B1 (en) * 2019-11-06 2025-01-10 주식회사 케이티 Apparatus for object based storage and data storage method using the same
CN111400290A (en) * 2020-02-24 2020-07-10 拉扎斯网络科技(上海)有限公司 Data structure anomaly detection method and device, storage medium, and computer equipment
CN112685334B (en) * 2020-12-21 2025-05-27 联想(北京)有限公司 A method, device and storage medium for caching data in blocks
CN113296697B (en) * 2021-03-17 2024-04-19 阿里巴巴创新公司 Data processing system, data processing method and device
CN116737612A (en) * 2022-03-02 2023-09-12 华为技术有限公司 Address management method and storage device
KR102712808B1 (en) * 2022-03-02 2024-10-02 인하대학교 산학협력단 Redundancy Selection Method and Apparatus to Minimize I/O Bandwidth for Degraded Reads in Video Storage Systems
CN114895856B (en) * 2022-07-12 2022-09-16 创云融达信息技术(天津)股份有限公司 Distributed storage system based on high-density storage hardware

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150149870A1 (en) 2012-06-08 2015-05-28 Ntt Docomo, Inc. Method and apparatus for low delay access to key-value based storage systems using fec techniques
JP2015519674A (en) 2012-06-13 2015-07-09 カリンゴ・インコーポレーテッドCaringo Incorporated Erasure code addition and replication in storage clusters

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4805660B2 (en) * 2005-02-08 2011-11-02 富士通株式会社 Disc light missing detection device
US8504535B1 (en) * 2010-12-20 2013-08-06 Amazon Technologies, Inc. Erasure coding and redundant replication
CN103631539B (en) * 2013-12-13 2016-08-24 百度在线网络技术(北京)有限公司 Distributed memory system based on erasure codes mechanism and storage method thereof
CN103646111B (en) * 2013-12-25 2017-02-15 普元信息技术股份有限公司 System and method for realizing real-time data association in big data environment
CN104902009B (en) * 2015-04-27 2018-02-02 浙江大学 A kind of distributed memory system based on erasable coding and chain type backup
JP2019514146A (en) * 2016-04-04 2019-05-30 フォーミュルス ブラック コーポレーション Fast system state cloning

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150149870A1 (en) 2012-06-08 2015-05-28 Ntt Docomo, Inc. Method and apparatus for low delay access to key-value based storage systems using fec techniques
JP2015519674A (en) 2012-06-13 2015-07-09 カリンゴ・インコーポレーテッドCaringo Incorporated Erasure code addition and replication in storage clusters

Also Published As

Publication number Publication date
KR20190088873A (en) 2019-07-29
CN110058804B (en) 2024-12-31
JP2019128960A (en) 2019-08-01
JP7140688B2 (en) 2022-09-21
TW201933121A (en) 2019-08-16
CN110058804A (en) 2019-07-26
TWI750425B (en) 2021-12-21

Similar Documents

Publication Publication Date Title
KR102460568B1 (en) System and method for storing large key value objects
US12067256B2 (en) Storage space optimization in a system with varying data redundancy schemes
EP3230870B1 (en) Elastic metadata and multiple tray allocation
US10552062B2 (en) System and method for storing very large key value objects
US20200117362A1 (en) Erasure coding content driven distribution of data blocks
JP6200886B2 (en) Logical sector mapping in flash storage arrays
US8904230B2 (en) Dynamically resizing a parity declustered group
US11151056B2 (en) Efficient virtualization layer structure for a data storage system
US20160246678A1 (en) Raid array systems and operations using mapping information
US11175989B1 (en) Pooling blocks for erasure coding write groups
US10261946B2 (en) Rebalancing distributed metadata
US10242021B2 (en) Storing data deduplication metadata in a grid of processors
US7346733B2 (en) Storage apparatus, system and method using a plurality of object-based storage devices
WO2017122101A1 (en) Distributed data deduplication in grid of processors
US7689877B2 (en) Method and system using checksums to repair data
US11281527B2 (en) Method and system for data integrity
US12072765B2 (en) Flexible RAID scheme allowing fast rebuild
JP2019128959A (en) Key-value data reliability system, data storage method therefor, and non-transitory computer-readable medium including computer code implementing that method
Zhou et al. Darm: A deduplication-aware redundancy management approach for reliable-enhanced storage systems

Legal Events

Date Code Title Description
PA0109 Patent application

St.27 status event code: A-0-1-A10-A12-nap-PA0109

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

PG1501 Laying open of application

St.27 status event code: A-1-1-Q10-Q12-nap-PG1501

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

PA0201 Request for examination

St.27 status event code: A-1-2-D10-D11-exm-PA0201

PA0302 Request for accelerated examination

St.27 status event code: A-1-2-D10-D17-exm-PA0302

St.27 status event code: A-1-2-D10-D16-exm-PA0302

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

St.27 status event code: A-1-2-D10-D21-exm-PE0902

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

St.27 status event code: A-1-2-D10-D22-exm-PE0701

GRNT Written decision to grant
PR0701 Registration of establishment

St.27 status event code: A-2-4-F10-F11-exm-PR0701

PR1002 Payment of registration fee

St.27 status event code: A-2-2-U10-U11-oth-PR1002

Fee payment year number: 1

PG1601 Publication of registration

St.27 status event code: A-4-4-Q10-Q13-nap-PG1601

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 4