KR20190088873A - 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
KR20190088873A
KR20190088873A KR1020180142144A KR20180142144A KR20190088873A KR 20190088873 A KR20190088873 A KR 20190088873A KR 1020180142144 A KR1020180142144 A KR 1020180142144A KR 20180142144 A KR20180142144 A KR 20180142144A KR 20190088873 A KR20190088873 A KR 20190088873A
Authority
KR
South Korea
Prior art keywords
data storage
chunks
storage devices
data
size
Prior art date
Application number
KR1020180142144A
Other languages
Korean (ko)
Other versions
KR102460568B1 (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

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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; CALCULATING OR 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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/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

The present invention relates to a system for storing large key value objects, which is capable of decreasing cost and a storage space and attaching high reliability, and a method thereof. According to one embodiment of the present invention, a data storage system comprises: a plurality of data storage devices storing a plurality of key-value paired objects; and a virtual storage layer applying different data reliability types including a data duplication type and an erase coding type based on the size of the objects. The objects comprise a first object having a first size and a second object having a second size larger than the first size. The virtual storage layer classifies the first object into a small object, applies the data duplication type, and stores the small object in one or more of the data storage devices. Moreover, the virtual storage layer classifies the second object into a large object, divides the large object into one or more chunks with the same size, applies the erase coding type, and stores the one or more chunks in the data storage devices.

Description

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

본 발명은 데이터 스토리지 시스템들에 관한 것으로서, 더욱 상세하게는 데이터 스토리지 시스템에서 대형 키 밸류 객체들을 저장하는 방법에 관한 것이다.The present invention relates to data storage systems, and more particularly, to a method for 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 of data storage systems. Data reliability using conventional block devices has been implemented or studied through various data replication techniques such as erasure coding and Redundant Array of Independent Disks (RAID). RAID distributes (or replicates) data on a set of data storage devices to prevent permanent data loss of a particular drive. RAID is divided into two categories. A complete mirror image of the data may be maintained in the second drive or specific blocks may be added as data to recover the failed blocks in a fail situation. Erase coding adds a bundle of parity-like blocks using complex algorithms that provide robust data protection and recovery that can tolerate high levels of failures. For example, erasure coding can virtualize physical drives to create a virtual drive that is more distributed than physical drives and can achieve fast recovery. Data replication using RAID is costly to copy large objects, and erase 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에 저장된 데이터 값들은 애플리케이션 및 데이터의 특성에 따라 거대하거나 또는 소형으로 나타날 수 있다. 성능 제한이나 공간 제약 없이 다른 크기를 갖는 객체들을 효율적으로 저장하는 효율적인 데이터 신뢰성 모델이 필요하다. A key-value solid-state drive (KV SSD) is a key-value solid-state drive (SSD) that compares different interfaces and semantics with respect to conventional block devices such as hard disk drives (HDD) and solid- semantics. The KV SSD can directly store the data values of the key-value pairs. The data values stored in the KV SSD may appear large or small depending on the nature of the application and data. There is a need for an efficient data reliability model that efficiently stores objects of different sizes without performance constraints or space constraints.

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

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

이벤트들의 구현 및 조합의 다양한 새로운 설명들을 포함하는 상술된 그리고 다른 적절한 특징들은 첨부된 도면들을 참조하여 더욱 상세하게 설명되고, 특허청구범위에서 지칭될 것이다. 본문에서 기재된 특정한 시스템들 및 방법들은 설명을 위해서만 도시되며, 본 발명은 이에 제한되지 않는다. 본문에 기재된 이론들 및 특징들이 본 발명의 사상으로부터의 벗어남 없이 다양한 실시 예들로 구현될 수 있음이 당업자에 의해 이해될 것이다.BRIEF DESCRIPTION OF THE DRAWINGS The above and other appropriate features, which include various novel descriptions of implementations and combinations of events, will be more fully described 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 invention is not so limited. It will be understood by those skilled in the art that the theories and features described herein may be implemented in various embodiments without departing from the spirit of the invention.

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

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

이하의 설명에서, 단순히 설명의 편의를 위하여, 특정한 명명법이 본 발명의 전반적인 이해를 돕기 위하여 사용된다. 그러나 이러한 상세한 설명들이 본 발명의 교시들을 구현하는데 필수적이지 않음은 당업자에게 이해될 것이다.In the following description, for purposes of brevity only, specific nomenclature is used to aid in the overall 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 of the text are provided in terms of algorithms and symbolic representations of operations on data bits in a computer memory. These algorithmic descriptions and representations are used by those skilled in the data processing arts to facilitate describing their study to others skilled in the art. Algorithms are expressed in the text, and generally, as a series of consistent steps leading to the intended outcome. Steps are physical manipulations of physical quantities. Generally, though not necessarily, such physical quantities have the form of electrical or magnetic signals that can be stored, transmitted, combined, compared, and otherwise modified. It has proven convenient to refer to these signals as bits, values, elements, symbols, features, terms, numbers, etc., for reasons of common usage.

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

더욱이, 대표적인 실시 예들 및 종속한 청구범위에서의 다양한 특징들은 본 발명의 추가적인 유용한 실시 예들을 제공하기 위하여 특정하게 그리고 명시적으로 나열되지 않은 방식들로 조합될 수 있다. 객체들의 그룹들의 지칭들 또는 모든 값들의 범위들은 원래 기재된 것 뿐만 아니라, 청구범위를 제한하는 목적에 대해서 또한 모든 가능한 중간 값들 또는 중간 객체들을 게시한다. 도면들에 도시된 구성들의 형태들 및 면적들은 본 발명이 구현되는 방식의 이해를 돕기 위해 설계되었으며, 실시 예들에서 도시된 면적들 및 형태들을 제한하는 것으로 의도되지 않는다. Moreover, various features in the exemplary embodiments and the dependent claims may be combined in ways not specifically and explicitly listed in order to provide additional useful embodiments of the present invention. The designations of the groups of objects or ranges of all values post not only the original description but also all possible intermediate values or intermediate objects for purposes of limiting the claims. The shapes and areas of the arrangements shown in the drawings are designed to facilitate understanding of the manner in which the present invention is 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 a data storage system. The data storage system of the present invention may store data with 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 sizes of objects to reduce cost and storage space and achieve high reliability. The data associated with the large object may be divided into small pieces and stored in one or more data storage devices. Here, if the 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 (e.g., a value of a key-value pair) may be split into chunks of equal size or multiple pieces. The size of the chunk can be dynamically determined on an object-by-object basis 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 reliability. A group may include one or more data storage devices in a box (e.g., a chassis or rack) or through boxes 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 as a user application as a whole as a single virtual storage unit. The virtual storage layer may be used to manage a plurality of drivers controlling 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 failures. For replication, the total number of data storage devices that tolerate P failures may be P + 1. The storage capacity of data storage devices may be similar in erase coding or replication. The storage capacity of the virtual storage may be determined by the sum of the data storage spaces of all the data storage devices in the group.

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

KV SSD와 같은 데이터 스토리지 장치는 관리할 수 있는 객체들에 대한 동작 및 객체들에 대한 구현-특정 제한을 포함한다. 데이터 스토리지 시스템의 가상 스토리지 레이어는 각 데이터 스토리지 장치가 지원할 수 있는 최소 및 최대 밸류 크기들을 인식할 수 있고, 최소 및 최대 밸류 크기들을 판별할 수 있다. Data storage devices, such as KV SSDs, include implementation-specific constraints on operations and objects for manageable objects. The virtual storage layer of the data storage system can recognize the minimum and maximum value sizes that each data storage device can support, and can 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 of virtual storage (VMIN_VS) may be defined by the maximum of all the minimum value sizes of the individual KV SSDs in the group.

Figure pat00001
Figure 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 (VMAX_VS) of the virtual storage can be defined by the smallest of all the maximum value sizes of the individual KV SSDs in the group.

Figure pat00002
Figure pat00002

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

본 발명의 일 실시 예에 따르면, 본 발명의 시스템 및 방법은 객체의 크기를 기반으로 복제 및 소거 코딩 모두에 영향을 주는 하이브리드 데이터 신뢰성 메커니즘(hybrid data reliability mechanism)을 제공한다. 데이터 복제는 소형 객체들(small objects)에 대하여 빠르고, 가벼울 수 있다. 그러나 데이터 복제는 소거 코딩과 비교할 때, 대형 객체들(large objects)에 대하여 더욱 많은 스토리지 공간을 소모할 수 있다. 소거 코딩은 대형 객체들에 대하여 데이터 복제보다 더 적은 스토리지 공간을 소모할 수 있고, 복수의 데이터 스토리지 장치들에 영향을 줌으로써 이러한 대형 객체들을 복원할 수 있다. 그러나 복수의 데이터 스토리지 장치들로부터 복수의 청크들을 필요로 하기 때문에, 소거 코딩은 일반적으로 과도한 연산을 수반하고, 소형 객체들을 복원하는데 많은 시간이 소모될 수 있다. 이는 데이터에 대한 소거 코딩을 수행한 이후에 데이터를 복제하는 비-계층적 방식이다. 대신에, 본 발명의 시스템 및 방법은 객체의 크기를 기반으로 데이터 복제 및 소거 코딩 사이에 유연한 결정을 제공한다. 다시 말해서, 본 발명의 시스템 및 방법은 데이터 신뢰성 판단, 즉, 객체의 크기뿐만 아니라 객체를 저장하기 위한 전체 공간의 부담을 기반으로 런-타임에서 데이터 복제 또는 소거 코딩을 적용하는 것을 결정할 수 있다. In accordance with one embodiment of the present invention, the system and method of the present invention provides a hybrid data reliability mechanism that affects both copy and erase coding based on the size of the object. Data replication can be fast and lightweight for small objects. However, data replication can consume more storage space for large objects when compared to erasure coding. Erasure coding can consume less storage space than large objects for data replication and can 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, erase coding generally involves excessive computation and can be time consuming to restore small objects. This is a non-hierarchical approach to replicating data after performing erasure coding 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 may decide to apply data replication or erasure coding at run-time based on data reliability determination, i.e., the size of the object as well as the burden of the total space to store the object.

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

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

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

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

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

슬라이스는 데이터 복제(즉, 원본 객체의 복제된 사본)에 대하여 (목표 객체의) 하나의 청크만 포함할 수 있다. 소거 코딩에 대하여, 슬라이스는 목표 객체를 포함하는 D 청크들을 포함할 수 있다. 반면에, 밴드는 데이터 복제에 대한 P 복제 청크들 및 하나의 원본 청크, 또는 소거 코딩에 대한 P 패리티 청크들 및 D 데이터 청크들을 포함할 수 있다. 슬라이스들 또는 밴드들의 개수는 스플릿 내의 청크들의 전체 개수와 대응한다. 스플릿 크기(즉, 하나의 데이터 장치에 저장된 청크들의 개수) 및 밴드 크기(즉, 하나 또는 그 이상의 데이터 스토리지 장치들에 저장된 청크들의 개수)는 원본 객체 및 청크들의 크기에 따라 가변될 수 있다. 예를 들어, 스플릿 크기는 데이터 복제에 대하여 원본 크기일 수 있으나, 스플릿 크기는 소거 코딩에 대하여, 밴드 당 청크 개수만큼 곱해진 청크 크기이다. A slice may contain only one chunk (of the target object) for data replication (i.e., a duplicate copy of the original object). For erasure coding, the slice may contain D chunks containing the target object. On the other hand, the band may include P duplicate chunks for data replication and one original chunk, or P parity chunks for erasure coding and D data chunks. The number of slices or bands corresponds to the total number of chunks in the split. The split size (i.e., the number of chunks stored in one data device) and the band size (i.e., the number of chunks stored in one or more data storage devices) may vary depending on the size of the original objects and chunks. For example, the split size may be the original size for data replication, 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 one 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 different and the object 110 need not be divided by a multiple of three. The object 110 may be classified as a very large or huge object, as will be described in detail below. The partitioned chunks may be distributed as 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 one embodiment, the virtual storage layer of the data storage system may distribute chunks in a split-first manner (split-first spread) or in a band-first manner (band-first spread). In the split-first scheme, the virtual storage layer stores chunks (Chunk 1, Chunk 2, Chunk 3) in the first data storage device (Disk 1) in the virtual storage 120, (Chunk 5, Chunk 6) are stored in the second data storage device (Disk 2), and chunks (Chunk 3D-2, Chunk 3D-1, Chunk 3D) . Band 150 includes chunks (Chunk 1, Chunk 4, ..., Chunk 3D-2) and parity chunks (Parity 1 to Parity P). In the band-first scheme, the virtual storage layer stores the chunks (Chunk 1 to Chunk D) in the data storage devices (Disk 1 to Disk D) and the chunks (Chunk D + 1 to Chunk 2D) are respectively stored in the data storage devices (Disk 1 to Disk D), and similarly, chunks (Chunk 2D + 1 to Chunk 3D) are stored in the data storage devices (Disk 1 to Disk D) . Split 151 includes data chunks (Chunk 1, Chunk D + 1, Chunk 2D + 1). The parity chunks (Parity 1 to Parity P) are stored in the parity disks (Disk D + 1 to Disk D + P). Although both virtual storage 120 and virtual storage 121 are shown storing parity chunks in a band-first manner, for convenience of illustration, the storage of parity chunks may be stored in a split- It will be appreciated that it may be performed in a preferred manner.

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

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

Figure pat00003
Figure pat00003

장치 당 청크들의 개수(NCOi)는 최대 청크 크기(VMAXVS)가 사용되는 경우, 데이터 디스크들(즉, Disk 1 내지 Disk D로 참조된 데이터 스토리지 장치들)을 통해 객체(Oi)를 저장하기 위한 스플릿 당 청크들의 최소 개수이다. 객체 크기가 데이터 스토리지 장치의 할당 또는 정렬 단위로 정렬되지 않는 경우, 밴드에서 객체를 위해 할당된 추가 공간이 0들(zeros)로 패딩(padded)될 수 있다.The number of chunks per device NC Oi stores the object O i through data disks (i.e., data storage devices referenced from Disk 1 to Disk D) when a maximum chunk size (VMAX VS ) Lt; / RTI > is the minimum number of chunks per split. If the object size is not aligned in 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)When the maximum chunk size is used, too much padding is used and storage space tends to be wasted. Therefore, the actual chunk size of the object O i is determined more strikingly by the equation (4). The SZ meta is the metadata size when additional metadata is stored with the data per chunk. If the data storage device supports a group feature, some metadata such as a group identifier (group identifier) and the total number of chunks may be stored in each chunk. If the data storage devices do not support the group feature, there is no metadata to be stored (i.e., SZ meta = 0). For cloning, the actual chunk size may be equal to its original object size (ie, C Oi = SZ Oi )

Figure pat00004
Figure pat00004

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

Figure pat00005
Figure pat00005

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

Figure pat00006
Figure pat00006

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

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

Figure pat00007
Figure pat00007

객체에 대한 소거 코딩의 공간 부담이 객체 대한 데이터 복제의 공간 부담보다 작은 경우, 객체는 대형인 것으로 분류된다. 이 경우, 좀 더 작은 공간을 갖기 때문에 소거 코딩이 적절하다. 특히, 대형 객체는 수학식 8을 만족한다. If the space burden of erase coding on an object is less than the space 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 pat00008
Figure pat00008

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

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

Figure pat00009
Figure pat00009

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

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

Figure pat00010
Figure pat00010

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

가상 스토리지 레이어는 객체를 저장하고, 분할된 데이터 데이터 청크들을 사용하여 객체를 복원하여 거대 객체를 회수하기 위하여, 거대 객체를 소형 데이터 청크들로 분할하는 것을 필요로 할 수 있다. 이를 위하여, 사용자(예를 들어, 호스트 컴퓨터 상에서 구동하는 사용자 애플리케이션) 키으로부터 생성된 내부 키(internal key)가 가상 스토리지 레이어 스테리트리스를 생성하는데 사용될 수 있다. 일 실시 예에 따르면, 가상 스토리지 레이어는 청크들을 분산하는 내부 사용을 위하여 장치-지원된 키 공간(device-supported key space)의 수 바이트들을 예비로 두고, 키 공간의 나머지 부분을 사용자에게 표시한다. 이 경우에서, 사용자-특정 객체 키는 객체의 하나 또는 그 이상의 분할된 청크들을 위한 내부 키들의 그룹을 나타낸다. The virtual storage layer may need to divide a large object into small data chunks in order to store the object and recover the object using the partitioned data chunks to recover the large object. To this end, an internal key generated from a user (e.g., a user application running on a host computer) key may be used to create a virtual storage layer stateless. According to one embodiment, the virtual storage layer reserves a number of bytes of device-supported key space for internal use to distribute chunks and displays 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 illustrates an exemplary internal key including a user key, according to one embodiment. The internal key 200 includes a user key 201 of a first part and a band identifier (ID) 202 of a second part. The internal key 200 may be used to identify a whole group of chunks or portions 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 the group specification is G. [ The virtual storage layer notifies the user that the maximum available key length is L-G.

소형 또는 대형 객체에 대하여, G 바이트의 밴드 ID(202)는 기본으로 0으로 패딩될 수 있다. 거대 객체에 대하여, 가상 스토리지 레이어는 객체에 대한 밴드들의 개수를 연산할 수 있다. 개별적인 밴드들은 내부 키(201)를 사용하여 식별될 수 있다. 밴드는 스플릿-우선 또는 밴드-우선 방식에 따라 하나씩 객체를 저장하기 위해 할당된 하나 또는 그 이상의 데이터 스토리지 장치들로 기입될 수 있다. For a small or large object, the band ID 202 of G bytes may be padded by default to zero. For large objects, the virtual storage layer can calculate the number of bands for the object. Individual bands can be identified using the internal key 201. The bands may be written to one or more data storage devices assigned to store the 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 one embodiment, the data storage device may support a group feature. The virtual storage layer can identify the split stored in the data storage device by specifying the 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 the user key 201 populated with "do not care" bits (arbitrary data bits, e.g., 0xFF) All of the chunks can be retrieved. If the band ID is "do not care ", the band ID field is ignored. It can be assumed that the data storage device efficiently implements the group feature. For example, a trie structure can easily identify objects having a given prefix of a user key 201, while a hash table can only identify a user key 201 if the metadata fields are fixed Can be used to find objects in a hash bucket. The virtual storage layer arranges the object chunks returned in ascending order based on the band ID 202 for each device, reconfigures bands and objects, and returns objects together 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)로부터 패리티 블록(들)을 더 재구성한다. 현재 실시 예는 청크들을 분할하는 것에 대하여 밴드-우선 방식을 보여주나, 본 발명의 사상으로부터의 벗어남 없이, 스플릿-우선 방식이 청크 분할 및 객체 회수에 적용될 수 있음이 이해될 것이다. Figure 3 shows an example of object retrieval using group features, according to one embodiment. Each of the data storage devices (i.e., Disk 1 to Disk D, and Disk D + 1 to Disk P) allocated to store an object supports a group feature. In this case, the band ID 302 is set to "do not care " referred to as ignoring the band ID 302. The virtual storage layer collects chunks (i. E., Data chunks 1, 2, ..., parity chunks 1-P) belonging to band 350 using user key 301, (Chunk 1 to Chunk D). Thereafter, the virtual storage layer collects the remaining chunks and reorders the remaining slices in order. If all slices are configured, the virtual storage layer reconstructs the object 310 containing the data chunks (Chunks 1 - 3D) from the slices. In the case of erasure coding, the virtual storage layer further reconstructs the parity block (s) from the parity chunks (P). Although the current embodiment shows a band-first approach to partitioning chunks, it will be appreciated that the split-first approach can be applied to chunk splitting and object recovery 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)가 소형인지 또는 아닌지를 판별할 수 있다.Figure 4 shows an example of object collection without grouping, according to one embodiment. In this case, because the data storage devices allocated to store the object do not support the group feature, the virtual storage layer attaches additional metadata to the large or large object (i.e., SZ_meta ≠ 0). Each chunk can be identified by a band ID 402 having a 1-byte length. In the current embodiment, there may be three bands (Band 1, Band 2, Band 3) so that the number of bands can fit into 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 transmits the user key 401 to all data storage devices along with a band ID (BID = 0) equal to zero. The virtual storage layer receives chunks for Band 0 from all data storage devices and retrieves band information from chunks belonging to Band 0 of 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 the chunks in the band. If there are more than one chunk for a large object, then the virtual storage layer needs to reclaim more bands (e.g. Band 1 and Band 2) one by one. In this case, the virtual storage layer sends recovery requests by adjusting the band ID (e.g., BID = 1 or BID = 2) until all chunks have been recovered. If the virtual storage layer constitutes all the slices, the virtual storage layer can reconstruct the object 410. [ Small objects may not contain metadata regardless of whether the devices support group features. By checking the chunk size, the virtual storage layer can use Equation 7 and Equation 10 to determine if object 410 is compact or not.

거대 객체를 하나 또는 그 이상의 데이터 스토리지 장치들에 기입하기 위하여, 거대 객체는 동일한 크기의 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 partitioned into NC Oi * D chunks of the same size (i.e. NC oi slices). The last data chunk (e.g., data 510a data (Data 4a) and object 510b data (4b) in FIG. 5) may be padded with zero considering array requirements, and P parity Chunks can be generated 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개의 밴드들에 대하여 이러한 절차를 반복한다. 사용자 키의 해시 값은 각 객체마다 한번 연산되는 것을 필요로 한다. Figure 5 shows an example of erasure coding without dedicated parity devices, according to one embodiment. 6 shows an example of erasure coding using one or more dedicated parity devices, according to one embodiment. The entire (D + P) chunks containing D data chunks and P parity chunks per band are distributed to one or more data storage devices so that all of the NC Oi bands are written. The parity chunks may be distributed to D + P devices (e.g., SSD4 to SSD6 in FIG. 5) or may be stored in P dedicated devices (e.g., SSD5 and SSD6 of FIG. 6). The primary data storage device may be selected using the hash value of the user key (hereinafter referred to as a "user key") without the band ID on the data storage devices. All or some of the (D + P) devices may be selected in the embodiment of FIG. 5, and the D devices may be selected in the embodiment of FIG. The initiating device may be determined by Hash (user key)% (D + P) if there is no dedicated parity device or by Hash (user key)% D if dedicated parity devices are present. The subsequent chunks are used for the following devices: (Hash (user key) + 1)% (D + P), (Hash (user key) (Hash (user key) + D-1)% (D + P) or (Hash % D). ≪ / RTI > This operation is a per-band operation, and the virtual storage layer repeats this procedure for all NC Oi bands to write the 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 include additional metadata for the total number of bands and band ID, as shown in FIG. The number of bands can be determined by Equation (3). The chunks of the band may contain pairs 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은 데이터 청크 및 패리티 청크를 모두 포함한다. 5, the virtual storage layer stores data chunks (Data 1a to Data 4a) and patch key chunks (Parity 1a and Parity 2a) of the object 510a through the data story 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 story devices SSD1 to SSD6. The initiating device (e.g., SSD1 for object 510a and SSD6 for object 510b) may be determined by the hash value of the user key, as described above. Because there is no dedicated parity device, the virtual storage layer can distribute data chunks and parity chunks to data storage devices (SSD1-SSD6) without distinguishing between data chunks and parity chunks. In the current embodiment, SSD4 and SSD6 include 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은 패리티 청크들만 포함한다.6, the virtual storage layer stores data chunks (Data 1a to Data 4a) and parity chunks (Parity 1a and Parity 2a) of the object 610a through the 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 object 610b through data storage devices SSD1 to SSD6. Since SSD5 and SSD6 are allocated as parity devices, SSD5 and SSD6 contain only parity chunks.

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

소형 객체를 저장하기 위하여, (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 an arrangement involving padding, the duplicate object may be distributed to (P + 1) devices. The main device may be selected on the (D + P) devices, using the hash value of the user key. P replication objects can be deterministically selected based on various factors such as storage organization, performance, and the like. For example, duplicate objects (Hash (key) +1)% (D + P), (Hash (key) +2)% (Hash (key) + P)% (D + P), or whether there is a dedicated parity device. If there are dedicated parity devices or nodes, the duplicate objects (Hash (key) +1)% D, (Hash (key) + 2)% D, ... (Hash (key) + P)% D. Regardless of the capacity of the device, small objects do not contain 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).Figure 7 illustrates an exemplary replication of a compact object through one or more data storage devices, without a parity device, in accordance with one embodiment. The virtual storage layer may store the small object 710a (Object 1) through the data storage devices (SSD1, SSD2, SSD3). The virtual storage layer may store the small objects 710b (Object 2) chunks via the data storage devices SSD3, SSD4, and SSD5. Small objects 710a, 710b are not partitioned into smaller data chunks. The starting device for storing the objects 710a, 710b may be determined by the hash value of the corresponding user key. In the current embodiment, the starting device for object 710a is SSD1, and the starting device for object 710b is SSD3. In the current embodiment, the total number of duplicate objects for each of objects 710a, 710b is 3 (i.e., P = 2).

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

가상 스토리지 레이어가 객체들이 대형이 아니고, 거대가 아닌 것으로 판별한 경우, 가상 스토리지 레이어는 객체가 소형인지, 예를 들어, 수학식 7을 사용하여 판별한다(803). 소형 객체에 대하여, 가상 스토리지 레이어는 분산 정책(distribution policy)을 기반으로 원본 데이터 및 복제 데이터를 포함하는 데이터를 저장하기 위한 하나 또는 그 이상의 스토리지 장치들을 판별하고(813), 밴드의 하나 또는 그 이상의 장치들을 통해 데이터를 기입하고(814), 쓰기 절차를 완료한다(815). 예를 들어, 가상 스토리지 레이어가 밴드-우선 정책(복수의 데이터 스토리지 장치들을 통해 데이터를 분산하는 것)을 사용할 수 있다. 가상 스토리지 레이어는 사용자 키의 해시 값을 사용하여 시작 장치를 판별할 수 있다.If the virtual storage layer determines that the objects are not large and not large, the virtual storage layer determines whether the objects are compact, e.g., using Equation 7 (803). For a small object, the virtual storage layer may determine (813) one or more storage devices for storing data including original data and replicated data based on a distribution policy, and determine one or more storage devices Writes the data through the devices (814), and completes the writing procedure (815). For example, a virtual storage layer can use band-priority policies (distributing data across multiple data storage devices). The virtual storage layer can use the hash value of the user key to determine the initiating 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 (804) and includes the source data and the replicated data based on the distributed policy (813) one or more data storage devices to store data (814), write data (814) to one or more devices of the band, and complete 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 through data storage devices may include various sub-processes. First, the virtual storage layer determines whether a slice for writing exists (820). If there is no slice for writing, the virtual storage layer stores the error log, terminates the operation, and sends the request to the user application running on the host computer and / or the operating system of the host computer It informs. The virtual storage layer creates a slice for the object and generates internal keys for the chunks of the slice (821). The virtual storage layer checks if this is the last slice for writing (822). For the last slice, the virtual storage layer adds paddings to the data chunks if the slice can not fill the band, and computes P parity chunks for the band using the erasure coding algorithm (824 ). For the last slice and other slices, the virtual storage layer skips the padding procedure 823. The virtual storage layer further determines 825 devices for data and parity chunks based on the distribution policy. For example, the distribution policy may be either split-first or band-first policy. The virtual storage layer writes 826 the data and parity chunks into one or more storage devices in bands along with the internal keys generated at 821.

사용자 키 및 밸류 크기와 같은 객체 메타데이터가 유지되지 않기 때문에, 가상 스토리지 레이어는 읽어질 객체가 소형인지, 대형인지, 또는 거대인지 인식할 수 없다. 그러므로, 가상 스토리지 레이어는 객체의 사용자 키를 사용하여 가상 스토리지의 모든 데이터 스토리지 장치들(예를 들어, (D+P) 데이터 스토리지 장치들)로 읽기 요청을 전송하고, 객체 크기의 분류를 기반으로 객체를 재구성하는 적절한 방법을 판별한다. 데이터 스토리지 장치들에 의해 지원되는 그룹 특징에 따라, 가상 스토리지 레이어는 읽기 및 쓰기 동작들을 다르게 처리할 수 있다.Because object metadata such as user keys and value sizes are not maintained, the virtual storage layer can not recognize whether the objects to be read are small, large, or large. Therefore, the virtual storage layer uses the object's user key to send a read request to all data storage devices (e.g., (D + P) data storage devices) of the virtual storage, and based on the classification of the object size Determine the appropriate method 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)에 의해 에러가 발생될 수 있다. 가상 스토리지 레이어는 밴드들을 하나씩 재구성하고, 이후에, 밴드들로부터 객체를 재구성한다. Large objects may be read differently based on the support of group features by data storage devices. If the data storage devices of the virtual storage support the group feature, the virtual storage layer transmits the user key to all data storage devices with BID = "do not care". In response, (D + P) data storage devices each return NC Oi chunks of its split if there is no error in response to the transmission. Thereafter, the virtual storage layer classifies the received chunks into the entire NCOi bands per their band ID, and aligns the bands in ascending order of band ID. While the virtual storage layer receives D chunks of the same size per band, the virtual storage layer can reconfigure the bands. If the total number of received chunks for a band is less than the number of data storage devices (D) or the size of the chunks is not the same, an error occurs. An error may be caused by a read of a non-existing object or an unrecoverable error when all storage devices return a NOT_EXIST error. The virtual storage layer reconstructs the bands one by one, and then reconstructs the objects 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 transmits the user key to all data storage devices with BID = 0 to read the large object. In response, each of the (D + P) data storage devices returns a chunk in the first band (Band 0). The virtual storage layer can identify the number of bands for the object by checking the metadata stored 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 bands. In some embodiments, the virtual storage layer may asynchronously request all of the remaining bands, thereby reconfiguring the object as if the group was supported.

대형 객체의 읽기 절차는 하나의 밴드에 대한 것만 제외하면, 거대 객체의 방식과 유사할 수 있다. 데이터 스토리지 장치들이 그룹 특징을 지원하는 경우, 가상 스토리지 레이어는 BID="don't care"와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송한다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 그것의 스플릿에서 하나의 청크를 반환한다. 가상 스토리지 레이어가 동일한 크기의 D 청크들을 수신하는 동안, 가상 스토리지 레이어는 객체를 재구성할 수 있다. 밴드에 대하여 수신된 청크들의 전체 개수가 데이터 청크들의 개수(D)보다 작거나 또는 청크들의 크기가 동일하지 않은 경우, 에러가 발생한다. 모든 데이터 스토리지 장치들이 NOT-EXIST 에러를 반환하는 경우의 존재하지 않는 객체(non-existing object)의 읽기 또는 복구될 수 없는 에러(unrecoverable error)에 의해 에러가 발생할 수 있다. The reading 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 to all data storage devices with BID = "do not care ". 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 can reconstruct the object. If the total number of received chunks for the band is less than the number of data chunks (D) or the size of the chunks is not the same, an error occurs. An error may occur due to an unrecoverable error in reading or non-existing objects in which all data storage devices return a NOT-EXIST error.

가상 스토리지 장치의 데이터 스토리지 장치들이 그룹 특징을 지원하지 않는 경우, 가상 스토리지 레이어는 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 transmits the user key to all data storage devices with BID = 0 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 reconfigure the object by identifying the presence of only one band for the large object and reconfiguring the band by checking the stored metadata along with the received chunks.

소형 객체의 읽기의 절차는 복제에 의존한다는 점을 제외하면, 대형 객체의 읽기의 절차와 유사할 수 있다. 데이터 스토리지 장치들이 그룹 특징을 지원하는 경우, 가상 스토리지 레이어는 BID="don't care"와 함께 사용자 키를 모든 데이터 스토리지 장치들로 전송한다. 이에 응답하여, (D+P) 데이터 스토리지 장치들 각각은 응답을 반환한다. 객체가 소형이기 때문에, 일부 데이터 스토리지 장치들은 NOT_EXIST의 에러를 반환할 수 있는 반면에, 다른 데이터 스토리지 장치들은 청크를 반환한다. 가상 스토리지 레이어는 하나 또는 그 이상의 데이터 스토리지 장치들로부터 수신된 청크들을 사용하여 객체를 재구성할 수 있는 유효 청크들을 수신한다. 모든 데이터 스토리지 장치들이 NOT_EXIST 에러를 반환하는 경우, 읽기 요청에 의해 식별되는 객체는 존재하지 않는 객체이거나 또는 복구될 수 없는 에러가 발생할 수 있다. The procedure of reading a small object may be similar to the procedure 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 to all data storage devices with BID = "do not care ". In response, each of the (D + P) data storage devices returns a response. Since the objects are small, some data storage devices may return an error of NOT_EXIST, while other data storage devices return a chunk. The virtual storage layer receives valid chunks that can reconstruct the object using chunks received from one or more data storage devices. If all data storage devices return a NOT_EXIST error, the object identified by the read request may be an object that does not exist or an error that can not be recovered 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 transmits the user key to all data storage devices with BID = 0 to read the small object. In response, each of the (D + P) data storage devices returns a response. The virtual storage layer can use any valid chunks received from any data storage device to identify which objects are compact. 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 for reading an object, in accordance with one 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 = "do not care", otherwise BID = 0 to all data storage (904). The virtual storage layer receives a chunk from one of the data storage devices (905). If there is no error in the received chunk (906), the virtual storage layer determines (907) if the group feature is supported (908) and retrieves the chunk's metadata (908) Continue to discriminate.

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

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

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

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

상기 분산 방식은 상기 가상 스토리지 레이어가 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들로 분할하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들 각각에 상기 하나 이상의 청크들을 저장하는 스플릿-우선 분산이다.Wherein the virtual storage layer divides the one or more chunks of the large object into the plurality of data storage devices and distributes the one or more chunks to each of the one or more chunks via the plurality of data storage devices, Split-priority distribution that stores more chunks.

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

상기 가상 스토리지 레이어는 제3 크기를 갖는 제3 객체를 대형 객체로 더 분류할 수 있고, 상기 대형 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 복수의 데이터 스토리지 장치들을 통해 상기 하나 또는 그 이상의 청크들을 분산하여 저장한다. 상기 제3 크기는 상기 제1 크기보다 크고, 상기 제2 크기보다 작다. 상기 대형 객체는 스플릿내에서 하나의 청크 또는 하나의 밴드만 포함한다. The virtual storage layer may further classify a third object having a third size as a large object, divide the large object into one or more chunks of the same size, apply the erasure coding scheme, Lt; RTI ID = 0.0 > and / or < / RTI > 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 method and the erasure coding method.

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

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

상기 복수의 데이터 스토리지 장치들은 그룹 특징을 지원하지 않을 수 있고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 밴드 식별자를 유일한 밴드 식별자로 설정하여 상기 복수의 데이터 스토리지 장치들로 전송할 수 있다. The plurality of data storage devices may not support a group feature and the virtual storage layer may set the band identifier to a unique band identifier and transmit the band identifier 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 for writing an object of a key-value pair comprises: receiving a plurality of objects of a key-value pair, wherein the plurality of objects comprise a first object having a first size and a second object having a first size, A second object having a second size greater than the size; Classifying the first object as a small object; Applying a data replication scheme to the small object; Storing the small object through one or more of a plurality of data storage devices; Classifying the second object into a large object; Dividing the large object into one or more chunks of equal 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 comprising: receiving a write request for the object; Determining whether the object is the large object; Determining a chunk size and a number of chunks for the large object; 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.

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

상기 방법은: 상기 객체에 대한 쓰기 요청을 수신하는 단계; 상기 객체가 상기 소형 객체인지 판별하는 단계; 분산 방식을 기반으로 상기 복수의 데이터 스토리지 장치들 중 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 저장할 일부를 판별하는 단계; 및 상기 복수의 데이터 스토리지 장치들의 상기 일부로 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함할 수 있다. The method comprising: 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 distributed scheme; And writing the one or more chunks of the small object to the portion of the plurality of data storage devices.

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

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

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

상기 방법은 상기 복수의 데이터 스토리지 장치들 각각으로부터 적어도 하나의 청크를 수신하는 단계; 및 상기 소거 코딩 방식을 사용하여 상기 복수의 데이터 스토리지 장치들로부터 수신된 상기 적어도 하나의 청크들로부터 슬라이스를 재구성하는 단계를 더 포함할 수 있다.The method comprising: receiving at least one chunk from each of the plurality of data storage devices; And reconstructing the slice from the at least one chunks 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 illustrate various embodiments that implement a data storage system capable of efficiently storing objects of different sizes and a method of storing objects in a data storage system. Various modifications from the described exemplary embodiments can be readily made by those skilled in the art. BRIEF DESCRIPTION OF THE DRAWINGS The features contemplated by the technical spirit of the invention are set forth in the following claims.

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 key-value pairs;
And a virtual storage layer for applying other data reliability schemes including a data replication scheme and an erasure coding scheme based on an object size of the plurality of objects,
The plurality of objects including a first object having a first size and a second object having a second size larger than the first size,
Wherein the virtual storage layer classifies the first object as a small object, applies the data replication scheme, stores the small object through one or more of the plurality of data storage devices,
Wherein the virtual storage layer classifies the second object into a large object, divides the large object into one or more chunks of the same size, applies the erasure coding scheme, A data storage system that distributes and stores one or more chunks.
제 1 항에 있어서,
상기 가상 스토리지 레이어는 스플릿-우선 방식에 따라 상기 복수의 데이터 스토리지 장치들을 통해 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 저장하고,
상기 스플릿-우선 방식은 상기 가상 스토리지 장치가 상기 거대 객체의 상기 하나 또는 그 이상의 청크들 중 일부를 상기 복수의 스토리지 장치들 중 하나에 저장하고, 상기 거대 객체의 상기 하나 또는 그 이상의 청크들 중 나머지 일부를 상기 복수의 스토리지 장치들 중 다른 하나에 저장하는 방식인 데이터 스토리지 시스템.
The method according to claim 1,
Wherein the virtual storage layer stores the one or more chunks of the large object through the plurality of data storage devices according to a split-
The split-priority scheme is characterized in that the virtual storage device stores some of the one or more chunks of the macroscopic object in one of the plurality of storage devices, and the rest of the one or more chunks of the macroscopic object And a portion of the data is stored in the other of the plurality of storage devices.
제 1 항에 있어서,
상기 가상 스토리지 레이어는 밴드-우선 방식에 따라 상기 복수의 데이터 스토리지 장치들을 통해 상기 거대 객체의 상기 하나 또는 그 이상의 청크들을 저장하고,
상기 밴드-우선 방식은 상기 가상 스토리지 레이어가, 상기 복수의 데이터 스토리지 장치들에 상기 거대 객체의 상기 하나 또는 그 이상의 청크들이 모두 저장될 때까지 상기 거대 객체의 하나의 청크를 상기 복수의 데이터 스토리지 장치들 각각에 저장하는 방식인 데이터 스토리지 시스템.
The method according to claim 1,
Wherein the virtual storage layer stores the one or more chunks of the large object through the plurality of data storage devices according to a band-
The band-first scheme is such that the virtual storage layer stores one chunk of the macroscopic object in the plurality of data storage devices until the one or more chunks of the macroscopic object are all stored in the plurality of data storage devices Quot; data storage system "
제 1 항에 있어서,
상기 가상 스토리지 레이어는 제3 크기를 갖는 제3 객체를 대형 객체로 더 분류하고, 상기 대형 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하고, 상기 소거 코딩 방식을 적용하고, 상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 데이터 스토리지 장치들을 통해 분산하여 저장하고,
상기 제3 크기는 상기 제1 크기보다 크고 상기 제2 크기보다 작고, 상기 대형 객체는 스플릿 내의 하나의 청크만 또는 하나의 밴드만 포함하는 데이터 스토리지 시스템.
The method according to 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, Wherein the chunks are distributed and stored through the plurality of data data storage devices,
Wherein the third size is greater than the first size and smaller than the second size, and the large object includes only one chunk or one band in the split.
제 4 항에 있어서,
상기 가상 스토리지 레이어는 제4 크기를 갖는 제4 객체를 중형 객체로 더 분류하고,
상기 제4 크기는 상기 제1 크기보다 크고, 상기 제3 크기보다 작고,
상기 가상 스토리지 레이어는 상기 데이터 복제 방식 및 상기 소거 코딩 방식 중 하나를 적용하는 데이터 스토리지 시스템.
5. The method of claim 4,
The virtual storage layer further classifies a fourth object having a fourth size as a medium object,
Wherein the fourth size is larger than the first size, smaller than the third size,
Wherein the virtual storage layer applies one of the data replication method and the erasure coding method.
제 1 항에 있어서,
상기 객체는 사용자 키를 사용하여 식별되고, 상기 가상 스토리지 레이어는 상기 거대 객체에 대한 밴드 식별자 및 상기 사용자 키를 포함하는 내부 키를 생성하고,
상기 밴드 식별자는 복수의 밴드들 중 밴드를 식별하는데 사용되고, 상기 복수의 밴드들 중 상기 밴드의 각각은 상기 복수의 데이터 스토리지 장치들을 통해 분산된 상기 하나 또는 그 이상의 청크들 중 하나의 청크를 포함하는 데이터 스토리지 시스템.
The method according to claim 1,
Wherein the object is identified using a user key, the virtual storage layer generates an internal key including a band identifier for the giant object and the user key,
Wherein the band identifier is used to identify a band among a plurality of bands and wherein each of the bands of the plurality of bands includes one of the one or more chunks distributed through the plurality of data storage devices Data storage system.
제 6 항에 있어서,
상기 가상 스토리지 레이어는 상기 하나 또는 그 이상의 청크들 중 첫 번째 청크를 읽거나 또는 쓰기 위하여 상기 사용자 키의 해시 값을 사용하여 상기 복수의 데이터 스토리지 장치들 중 시작 데이터 스토리지 장치를 식별하는 데이터 스토리지 시스템.
The method according to claim 6,
Wherein the virtual storage layer identifies a starting data storage device of the plurality of data storage devices using a hash value of the user key to read or write the first chunk of the one or more chunks.
제 1 항에 있어서,
상기 복수의 데이터 스토리지 장치들은 상기 거대 객체와 연관된 패리티 청크들을 저장하는 하나 또는 그 이상의 전용 패리티 데이터 스토리지 장치들을 포함하는 데이터 스토리지 시스템.
The method according to claim 1,
Wherein the plurality of data storage devices comprise one or more dedicated parity data storage devices for storing parity chunks associated with the macroscopic object.
제 6 항에 있어서,
상기 복수의 데이터 스토리지 장치들은 그룹 특징을 지원하고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 복수의 데이터 스토리지 장치들로 상기 밴드 식별자를 임의의 데이터 비트들로 설정하여 전송하는 데이터 스토리지 시스템.
The method according to claim 6,
Wherein the plurality of data storage devices support a group feature and the virtual storage layer includes a data storage device for transmitting the data by setting the band identifier to arbitrary data bits in the plurality of data storage devices when reading the large object, system.
제 6 항에 있어서,
상기 복수의 데이터 스토리지 장치들을 그룹 특징을 지원하지 않고, 상기 가상 스토리지 레이어는, 상기 거대 객체를 읽을 때, 상기 복수의 데이터 스토리지 장치들로 상기 밴드 식별자를 유일한 밴드 식별자로 설정하여 전송하는 데이터 스토리지 시스템.
The method according to claim 6,
Wherein the plurality of data storage devices do not support a group feature, and the virtual storage layer, when reading the large object, sets the band identifier as a unique band identifier to the plurality of data storage devices, .
제 1 항에 있어서,
상기 복수의 데이터 스토리지 장치들 각각은 키-밸류 솔리드-스테이트 드라이브(KV SSD; key-value solid-state drive)인 데이터 스토리지 시스템.
The method according to claim 1,
Wherein each of the plurality of data storage devices is a key-value solid-state drive (KV SSD).
키-밸류 쌍의 객체를 기입하는 방법에 있어서:
키-밸류 쌍의 복수의 객체들을 수신하는 단계, 단, 상기 복수의 객체들은 제1 크기를 갖는 제1 객체 및 상기 제1 크기보다 큰 제2 크기를 갖는 제2 객체를 포함하고;
상기 제1 객체를 소형 객체로 분류하는 단계;
상기 소형 객체로 데이터 복제 방식을 적용하는 단계;
상기 소형 객체를 하나 또는 그 이상의 복수의 데이터 스토리지 장치들을 통해 저장하는 단계;
상기 제2 객체를 거대 객체로 분류하는 단계;
상기 거대 객체를 동일한 크기의 하나 또는 그 이상의 청크들로 분할하는 단계;
상기 거대 객체로 소거 코딩 방식을 적용하는 단계; 및
상기 하나 또는 그 이상의 청크들을 상기 복수의 데이터 스토리지 장치들을 통해 분산하여 저장하는 단계를 포함하는 방법.
A method for 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 larger than the first size;
Classifying the first object as a small object;
Applying a data replication scheme to the small object;
Storing the small object through one or more data storage devices;
Classifying the second object into a large object;
Dividing the large object into one or more chunks of equal size;
Applying an erasure coding scheme to the large object; And
Distributing and storing 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 large object;
Determining a chunk size and a number of chunks for the large object; And
Further comprising writing the one or more chunks of the macroblock to the plurality of data storage devices based on the chunk size and the number of chunks.
제 13 항에 있어서,
상기 하나 또는 그 이상의 청크들 중 상기 복수의 데이터 스토리지 장치들 각각에 대한 하나의 청크를 포함하는 슬라이스를 생성하고, 상기 슬라이스에 포함된 상기 하나 이상의 청크들 각각에 대한 밴드 식별자가 첨부된 사용자 키를 사용하여 내부 내부 키를 생성하는 단계;
소거 코딩을 사용하여 상기 슬라이스와 대응하는 상기 하나 또는 그 이상의 청크들 및 하나 또는 그 이상의 패리티 청크들을 포함하는 밴드를 생성하는 단계;
분산 방식을 기반으로 상기 밴드를 저장할 복수의 데이터 장치들을 판별하는 단계; 및
상기 내부 키를 갖는 상기 밴드에 상기 하나 또는 그 이상의 청크들을 기입하는 단계를 더 포함하는 방법.
14. The method of claim 13,
Generating a slice containing one chunk for each of the plurality of data storage devices of the one or more chunks, and generating a user key having a band identifier for each of the one or more chunks included in the slice Generating an internal internal key using the method;
Using the erasure coding to generate a band comprising the one or more chunks and one or more parity chunks corresponding to the slice;
Determining a plurality of data devices to store the band based on a distributed scheme; And
Further comprising writing the one or more chunks to the band having the internal key.
상기 객체에 대한 쓰기 요청을 수신하는 단계;
상기 객체가 상기 소형 객체인지 판별하는 단계;
분산 방식을 기반으로 상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 저장할 상기 복수의 데이터 스토리지 장치들 중 일부를 판별하는 단계; 및
상기 소형 객체의 상기 하나 또는 그 이상의 청크들을 상기 데이터 스토리지 장치들 중 상기 일부로 기입하는 단계를 더 포함하는 방법.
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 distributed scheme; And
Writing the one or more chunks of the small object to the portion of the data storage devices.
제 14 항에 있어서,
상기 사용자 키를 포함하는 상기 객체에 대한 읽기 요청을 수신하는 단계;
상기 복수의 데이터 스토리지 장치들이 그룹 특징을 지원하는지 판별하는 단계; 및
상기 복수의 데이터 스토리지 장치들로 상기 내부 키와 함께 상기 읽기 요청을 전송하는 단계를 더 포함하는 방법.
15. The method of claim 14,
Receiving a read request for the object including the user key;
Determining if the plurality of data storage devices support a group feature; And
And sending the read request 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 internal key is set to bits of any data.
제 16 항에 있어서,
상기 그룹 특징이 지원되지 않는 경우, 상기 내부 키의 상기 밴드 식별자는 유일한 밴드 식별자로 설정되는 방법.
17. The method of claim 16,
And if the group feature is not supported, the band identifier of the internal key is set to 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
Further comprising reconstructing a slice from 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 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 true KR20190088873A (en) 2019-07-29
KR102460568B1 KR102460568B1 (en) 2022-10-31

Family

ID=67315834

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180142144A 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) CN110058804A (en)
TW (1) TWI750425B (en)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111400290A (en) * 2020-02-24 2020-07-10 拉扎斯网络科技(上海)有限公司 Data structure abnormity detection method and device, storage medium and computer equipment
CN112685334A (en) * 2020-12-21 2021-04-20 联想(北京)有限公司 Method, device and storage medium for block caching of data
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
CN114895856B (en) * 2022-07-12 2022-09-16 创云融达信息技术(天津)股份有限公司 Distributed storage system based on high-density storage hardware

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7487289B2 (en) * 2005-02-08 2009-02-03 Fujitsu Limited Apparatus and method for detecting disk write omissions
US8504535B1 (en) * 2010-12-20 2013-08-06 Amazon Technologies, Inc. Erasure coding and redundant replication
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7487289B2 (en) * 2005-02-08 2009-02-03 Fujitsu Limited Apparatus and method for detecting disk write omissions
US8504535B1 (en) * 2010-12-20 2013-08-06 Amazon Technologies, Inc. Erasure coding and redundant replication
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
TWI750425B (en) 2021-12-21
JP7140688B2 (en) 2022-09-21
CN110058804A (en) 2019-07-26
TW201933121A (en) 2019-08-16
KR102460568B1 (en) 2022-10-31
JP2019128960A (en) 2019-08-01

Similar Documents

Publication Publication Date Title
US11379142B2 (en) Snapshot-enabled storage system implementing algorithm for efficient reclamation of snapshot storage space
US11386042B2 (en) Snapshot-enabled storage system implementing algorithm for efficient reading of data from stored snapshots
KR102460568B1 (en) System and method for storing large key value objects
US10678751B2 (en) Data protection and long term retention
US11461015B2 (en) Available storage space in a system with varying data redundancy schemes
US10552062B2 (en) System and method for storing very large key value objects
EP3230870B1 (en) Elastic metadata and multiple tray allocation
US10977124B2 (en) Distributed storage system, data storage method, and software program
CN102405460B (en) Virtual storage system and operation method thereof
US8904230B2 (en) Dynamically resizing a parity declustered group
US10248623B1 (en) Data deduplication techniques
US11314724B2 (en) Data deduplication acceleration
US20200042219A1 (en) Managing deduplication characteristics in a storage system
US10613755B1 (en) Efficient repurposing of application data in storage environments
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
US10963177B2 (en) Deduplication using fingerprint tries
US11803527B2 (en) Techniques for efficient data deduplication
US10628379B1 (en) Efficient local data protection of application data in storage environments
US11874795B2 (en) Targetless snapshot virtual replication data pointer table
US11449237B2 (en) Targetless snapshot system replication data pointer table
US11704062B2 (en) Method for processing input/output (I/O) requests of a RAID system having a protection pool of storage units
WO2004036424A2 (en) Efficient expansion of highly reliable storage arrays and clusters
US11544005B2 (en) Storage system and processing method
JP2018109804A (en) Storage management apparatus, storage system, method and program

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant