KR20180120073A - 키 값 파일 시스템 - Google Patents

키 값 파일 시스템 Download PDF

Info

Publication number
KR20180120073A
KR20180120073A KR1020180026424A KR20180026424A KR20180120073A KR 20180120073 A KR20180120073 A KR 20180120073A KR 1020180026424 A KR1020180026424 A KR 1020180026424A KR 20180026424 A KR20180026424 A KR 20180026424A KR 20180120073 A KR20180120073 A KR 20180120073A
Authority
KR
South Korea
Prior art keywords
key
file
value
directory
data
Prior art date
Application number
KR1020180026424A
Other languages
English (en)
Other versions
KR102615616B1 (ko
Inventor
쿠마르 칸테티
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20180120073A publication Critical patent/KR20180120073A/ko
Application granted granted Critical
Publication of KR102615616B1 publication Critical patent/KR102615616B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • 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/061Improving I/O performance
    • G06F17/30091
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1724Details of de-fragmentation performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Abstract

파일 시스템은 호스트 컴퓨터에서 실행되는 응용에 파일 시스템 액세스를 제공하도록 구성되는 응용 프로그래밍 인터페이스(API, Application Programming Interface), 파일 또는 디렉토리를 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로 나타내도록 구성되는 키 값 파일 시스템, 응용으로부터의 파일 시스템 호를 키 값 파일 시스템에 전달하도록 구성되는 가상 파일 시스템, 그리고 데이터 저장 장치에 저장된 데이터에 파일 시스템 액세스를 제공하도록 구성되는 키 값 API를 포함한다. 아이노드에 포함된 각 키-값 쌍은 파일 또는 디렉토리의 명칭을 키로서 포함하고 그리고 파일 또는 디렉토리와 연관된 용기의 식별자를 값으로서 포함한다. 파일의 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 데이터 저장 장치에 저장되고, 파일의 데이터와 연관된 하나 또는 그보다 많은 데이터 블록들 각각은 하나 또는 그보다 많은 키-값 쌍들을 이용하여 키 값 파일 시스템 내에서 액세스 가능하다.

Description

키 값 파일 시스템{KEY VALUE FILE SYSTEM}
본 기재는 개괄적으로 데이터 스토리지 시스템을 위한 파일 시스템에 관한 것으로, 더 상세하게는 키-값 쌍들을 이용하여 파일들 및 디렉토리들을 나타내는 파일 시스템에 관한 것이다.
컴퓨터 시스템의 파일 시스템은 명칭 공간(namespace)을 이용하고 파일 시스템의 파일들 및 디렉토리들(directories)을 관리한다. 명칭 공간은 컴퓨터 시스템에서 실행되는 응용들이 디렉토리들을 가로질러 데이터 스토리지 장치에 저장된 원하는 파일에 도달함으로써 데이터를 액세스하는 것을 허용한다.
명칭 공간은 또한 캐시들을 유지하고 데이터 스토리지 장치에 저장된 데이터를 조직화하여 응용들이 데이터에 보다 빠르게 액세스하는 것을 허용한다. 예를 들어, 많은 파일들을 포함하는 큰 디렉토리는 데이터 스토리지 장치의 많은 데이터 블록들에 걸쳐 분산될 수 있다. 데이터 블록들을 관리하는 것은 메타데이터의 다중 레벨들을 필요로 한다. 큰 디렉토리 내의 엔트리(예를 들어, 파일 또는 디렉토리)를 검색하기 위하여, 명칭 공간은 큰 디렉토리의 메타데이터 모두를 횡단할 필요가 있다. 따라서, 큰 디렉토리를 횡단하는 것은 엔트리를 저장하는 데이터 스토리지 장치에 대한 다수의 입력/출력(I/O) 동작들의 실행을 포함한다.
파일 시스템은 또한 오염된 데이터를 유지한다. 파일 시스템은 통상적으로 데이터 스토리지 장치에 대해 몇몇 왕복(round trip)을 수행하여 캐시내의 오염된 데이터 및 연관된 메타데이터를 위한 데이터 블록들을 할당한다. 오염된 블록들은 호스트 컴퓨터에서 실행되는 동기 쓰레드들(synchronous threads)을 통해 주기적으로 데이터 스토리지 장치로 플러시된다. 호스트 컴퓨터는 다양한 알고리즘들을 채용하여 캐시로부터 데이터 스토리지 장치로 오염된 데이터를 최적으로 플러시할 수 있다. 파일 시스템은 또한 메타데이터와 함께 자유 및 사용된 데이터 블록들을 관리할 수 있다. 파일 시스템의 성능은 데이터 스토리지 장치로 기입되는 데이터의 효율에 의존한다. 파일 시스템은 데이터 스토리지 장치의 데이터 블록들을 효과적으로 할당 및 해제(free)하여 최적의 성능을 달성할 수 있다.
파일 시스템은 데이터가 데이터 스토리지 장치에 기입됨에 따라 조각날 수 있다. 조각난 파일 시스템은 데이터 스토리지 장치에 대한 랜덤 입력/출력 동작들을 실행하는 조각 모드에서 구동할 수 있다. 일부 파일 시스템들은 데이터 조각 모음(defragmentation) 및 인접한 데이터 블록들의 데이터를 재그룹(regroup)하는 것을 지원하여 입력/출력 성능을 향상할 수 있다. 그러나 통상적인 파일 시스템은 데이터 블록 관리 및 데이터 스토리지 장치에 저장된 데이터의 조각 모음을 수행하는 데에 심대한 호스트 중앙 처리부(CPU) 사이클들을 소비한다.
본 발명의 목적은 효율적인 파일 시스템 및 파일 시스템을 이용하여 파일 또는 디렉토리를 관리하는 방법을 제공하는 데에 있다.
일 실시 예에 따르면, 파일 시스템은 호스트 컴퓨터에서 실행되는 응용에 파일 시스템 액세스를 제공하도록 구성되는 응용 프로그래밍 인터페이스(API, Application Programming Interface); 파일 또는 디렉토리를 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로 나타내도록 구성되는 키 값 파일 시스템; 상기 응용으로부터 수신된 파일 시스템 호를 상기 키 값 파일 시스템에 전달하도록 구성되는 가상 파일 시스템; 그리고 데이터 저장 장치에 저장된 데이터에 상기 파일 시스템 액세스를 제공하도록 구성되는 키 값 API를 포함한다. 상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 상기 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함한다. 상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스 가능하다.
다른 실시 예에 따르면, 방법은 파일 또는 디렉토리를 키 값 파일 시스템에서 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로서 데이터 저장 장치에 저장하는 단계; 호스트 컴퓨터에서 실행되는 응용으로부터 파일 시스템 액세스 요청을 수신하는 단계; 상기 파일 시스템 액세스 요청을 상기 데이터 저장 장치에 대한 파일 시스템 호로 전달하는 단계; 그리고 상기 파일 시스템 액세스를 상기 데이터 저장 장치에 저장된 데이터에 제공하는 단계를 포함한다. 상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함한다. 상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 상기 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스 가능하다.
구현들 및 사건들의 조합의 다양한 신규한 상세들을 포함하는 상술된 그리고 다른 선호되는 특성들이 첨부된 도면들을 참조하여 구체적으로 더 설명되고 그리고 청구항들에서 지적된다. 여기에서 기술되는 구체적인 시스템들 및 방법들은 보여주는 용도로만 제시되며 한정되지 않는다. 이 분야에 숙련된 자들에게 이해될 바와 같이, 여기에서 설명되는 원리들 및 특성들은 본 기재의 범위로부터 멀어지지 않으면서 다양한 그리고 다수의 실시 예들에 채용될 수 있다.
본 발명에 따르면, 키 값 저장에 기반하여, 횡단의 수가 감소된 파일 시스템이 구현된다. 또한, 메타데이터 및 파일의 절단 및 삭제는 키 값 저장에 넘겨진다. 따라서, 효율적인 파일 시스템 및 파일 시스템을 이용하여 파일 또는 디렉토리를 관리하는 방법이 제공된다.
본 명세서의 일부로 포함되는 첨부된 도면들은 현재 선호되는 실시 예를 보여주며, 위에서 주어진 개괄적인 설명과 함께 아래에 주어진 선호되는 실시 예의 상세한 설명은 여기에 기재된 원리들을 설명하고 가르치는 것을 제공한다.
도 1은 일 실시 예에 따른 예시적인 키 값 파일 시스템의 계층들을 보여준다.
도 2는 일 실시 예에 따른 예시적인 키 값 저장의 블록도를 보여준다.
도 3은 일 실시 예에 따른 용기 디렉토리들을 위한 예시적인 키 값 저장을 보여준다.
도 4는 일 실시 예에 따른 인라인 디렉토리를 포함하는 예시적인 키 값 저장을 보여준다.
도 5는 일 실시 예에 따른 용기 파일을 포함하는 예시적인 키 값 저장을 보여준다.
도 6은 일 실시 예에 따른 인라인 파일을 포함하는 예시적인 키 값 저장을 보여준다.
도 7은 일 실시 예에 따른 예시적인 키-값 저장 내의 분산된 데이터 및 경로 횡단을 보여준다.
도면들은 비례하여 그려진 것이 아니며, 유사한 구조들 또는 기능들의 요소들은 일반적으로 도면들에 걸쳐 설명의 목적들을 위해 유사한 참조 번호들로 나타내어진다. 도면들은 여기에서 설명되는 다양한 실시 예들의 설명을 용이하게 하기 위한 용도일 뿐이다. 도면들은 여기에 기재된 가르침들의 모든 측면을 설명하지 않으며 청구항들의 범위를 제한하지 않는다.
여기에 기재되는 특성들 및 가르침들의 각각은 개별적으로 또는 다른 특성들 및 가르침들과 함께 활용되어 키 값 파일 시스템 그리고 키 값 파일 시스템을 이용하여 파일들 및 디렉토리들을 관리하는 방법을 제공할 수 있다. 이러한 추가적인 특성들 및 가르침들 중 많은 것들을 활용(개별적으로 또는 함께 모두)하는 대표적인 예들이 첨부된 도면들을 참조하여 더 상세히 설명된다. 이 상세한 설명은 이 분야에 숙련된 자에게 본 가르침들의 측면들을 실시하기 위한 추가적인 상세들을 가르치는 것만을 의도하며, 청구항들의 범위를 제한하는 것으로 의도되지 않는다. 따라서, 상세한 설명에서 아래에 기재된 특성들의 조합은 가장 넓은 의미의 가르침들을 실시하는 데에 필수적이지 않을 수 있으며, 대신 본 가르침들의 특별히 대표적인 예들을 설명하는 가르침에 불과하다.
아래의 설명에서, 설명의 목적만을 위하여, 구체적인 명명법이 정해져 본 기재의 철저한 이해를 제공한다. 그러나 이러한 구체적인 상세들은 본 기재의 가르침들을 실시하는 데에 필요하지 않음은 이 분야에 숙련된 자에게 명백할 것이다.
여기의 상세한 설명들의 일부 부분들은 알고리즘들 그리고 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 기호적 표현들로 제시된다. 이러한 알고리즘적 설명들 및 표현들은 데이터 처리 분야들에 숙련된 자들에 의해 사용되어 그들의 업무의 내용을 이 분야에 숙련된 다른 자들에게 효과적으로 전달할 수 있다. 여기에서, 개괄적으로, 알고리즘은 필요한 결과로 이끄는 단계들의 자기모순이 없는 시퀀스로 여겨진다. 단계들은 물리적 수량의 물리적 조작들을 필요로 한다. 통상적으로, 필요적이지는 않지만, 이러한 수량들은 저장, 전송, 조합, 비교, 그리고 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 갖는다. 주로 공통 사용의 이유로, 이러한 신호들을 때때로 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 수들, 등으로 나타내는 것이 편리함이 증명되어 왔다.
그러나 이러한 그리고 유사한 용어들 모두는 적절한 물리적 수량들과 연관되며 이러한 수량들에 적용되는 이름표에 불과함이 명심되어야 한다. 아래의 논의로부터 명백한 바와 같이, 구체적으로 다르게 언급되지 않으면, 설명에 걸쳐 "처리(processing)", "연산(computing)", "계산(calculating)", "판단(determining)", "표시(displaying)" 등과 같은 용어들을 이용한 논의들은 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리적(전자적) 수량들로 표현되는 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 스토리지, 전송 또는 표시 장치들 내의 물리적 수량들로 표현되는 다른 유사한 데이터로 조작 그리고 변환하는 컴퓨터 시스템 또는 유사한 전자 연산 장치의 활동 및 처리를 나타낸다.
게다가, 대표적인 예들 및 종속적인 청구항들의 다양한 특성들은 본 가르침들의 추가적인 유용한 실시 예들을 제공하기 위하여 구체적으로 그리고 명시적으로 열거되지 않은 방법들로 조합될 수 있다. 모든 값 범위들 또는 엔티티들의 그룹들의 표시들은 청구된 한정들을 제한하는 목적뿐 아니라 원 기재의 목적을 위해 모든 가능한 중간 값 또는 중간 엔티티를 드러냄 또한 명확히 유의된다. 도면들에 도시된 구성 요소들의 차원들 및 형태들은 본 가르침들이 어떻게 실시되는지를 이해하는 것을 돕기 위해 설계되며, 예들에 도시된 차원들 및 형태들을 제한하는 것으로 의도되지 않음 또한 명확히 유의된다.
본 기재는 데이터 스토리지 장치에서 동작하는 키-값 파일 시스템(KVFS, Key-Value File System)을 설명한다. 따라서, KVFS가 동작하는 데이터 스토리지 장치는 키-값(KV, Key-Value) 저장, KV 드라이브, 또는 KV 솔리드 스테이트 드라이브(SSD, Solid-State Drive)로 언급된다. 본 기재는 KV 명칭 공간(namespace)을 이용한 KV 저장에서 데이터를 조직화 및 관리하는 방법을 더 설명한다. 데이터 스토리지 공간은 하나 또는 그보다 많은 아이노드들(inodes)에 포함된 하나 또는 그보다 많은 키-값 쌍에 파일 및 디렉토리의 데이터를 저장하고, 그리고 키-값 쌍들을 이용하여 파일 시스템의 디렉토리들 및 파일들의 효율적인 관리를 제공한다.
본 KVFS는 호스트 CPU로부터 KV 저장으로 데이터 블록 관리를 넘길(offload) 수 있다. KV 저장에 저장된 데이터를 액세스하는 입력/출력 동작들은 본 KVFS에서 감소될 수 있다. 호스트 CPU는 KV 저장의 블록들을 할당 및 해제할 필요가 없다. 또한, KVFS는 KV 저장의 데이터 저장의 효율을 높이기 위하여 조각 모음을 명시적으로 수행할 필요가 없다.
본 KVFS는 KV 명칭 공간을 조직화하기 위하여 KV 저장에서 지속되는 계층적 데이터 구조들을 유지한다. KV 저장의 용기들(containers)을 이용함으로써, 본 KVFS는 단일 입력/출력 동작에서 디렉토리 내의 디렉토리 또는 파일의 검색을 수행할 수 있다. 통상적인 파일 시스템은 파일을 획득하기 위하여 메타데이터의 다중 레벨들을 횡단할 필요가 있으며 다수의 입력/출력 동작들을 유발한다.
통상적인 시스템은 큰 파일들을 지원하는 간접(indirect) 블록들의 형태로 메타데이터를 유지한다. 큰 파일들을 지원하는 것은 간접 블록들에 대한 캐시를 유지하는 것을 포함한다. 파일을 절단(truncate)하는 것은 이들을 해제하기 위하여 모든 간접 블록들을 횡단하는 것을 포함하며 호스트로부터 데이터 스토리지 장치로의 다수의 왕복(round trip)을 유발한다. 본 KVFS는 KV 저장에 용기들을 제공하고 그리고 절단 동작을 KV 저장에 완전히 넘긴다(offload). 본 KVFS는 단일 입력/출력 동작에서 절단 동작을 수행할 수 있다.
도 1은 일 실시 예에 따른 예시적인 키 값 파일 시스템(KVFS)의 계층들을 보여준다. KVFS 스택(110)은 유닉스용 휴대용 운영 체제 인터페이스(POSIX, Portable Operating System Interface for Unix) 응용 프로그래밍 인터페이스(API, Application programming 인터페이스)(111), 가상 파일 시스템(VFS, Virtual File System)(112), 키-값 파일 시스템(KVFS, Key-Value File System)(113), 그리고 키-값 API(KAPI)(114)를 포함한다. 본 예는 KVFS 스택(110)이 근원적인 운영 체제(OS)가 유닉스임을 암시하는 POSIX API(111)를 포함함을 보여주지만, 본 기재의 범위로부터 벗어나지 않으면서 유닉스가 아닌 다른 운영 체제가 본 KVFS(113)를 포함할 수 있음이 이해된다.
KVFS(113)는 KV 저장(120)과의 인터페이스들을 제공하는 KVAPI(114)를 이용하여 KV 저장(120)에 저장된 데이터를 액세스할 수 있다. KVAPI(114)는 KVFS 스택(110)에 저장된 각 디렉토리 및 파일에 대한 고유한 식별자를 생성하는 인터페이스를 지원한다. 고유한 식별자는 아이노드(inode) 이름 또는 아이노드 번호로 사용될 수 있다. 일 실시 예에서, KVAPI(114)는 KVFS(113) 내에서 실행되는 장치 드라이버로 구현되어 KV 저장(120)에 저장된 데이터를 액세스할 수 있다. KV 저장들(120)의 타입에 의존하여, 하나 또는 그보다 많은 KVAPI(114)가 KVFS 스택(110)에 의해 제공될 수 있다.
KVFS(113)는 운영 체제(예를 들어, 리눅스)에 의해 노출된 상이한 VFS 인터페이스들을 구현하고 그리고 운영 체제의 커널(예를 들어, 리눅스 커널)에서 구동한다. KVFS(113)는 현존하는 파일 시스템 스택에 통합되고 그리고 KVAPI(114)를 이용하여 KV 저장(120)을 액세스한다. POSIX-호환인 응용(130)은 POSIX API(111)를 통해 VFS(112) 위에서 구동할 수 있다. 응용(130)은 표준 VFS 호출들을 생성하여 KVAPI(114)를 통해 KV 저장(120)에 액세스할 수 있다. KVFS 스택(110)은 응용(130)이 표준 VFS 호출들을 이용하여 POSIX API(111)를 통해 KV 저장(120)을 액세스하는 것을 허용하고, 따라서 응용 인터페이스에 변경이 필요하지 않다. 응용(130)에 의해 KV 저장(120)으로 지정된 VFS 호출들은 KVFS(113) 및 KVAPI(114)로 안내될 수 있다.
일 실시 예에 따르면, KVFS(113)는 아이노드들을 생성 및 관리하여 KVFS 스택(110) 내의 파일들 또는 디렉토리들을 나타낼 수 있다. KVFS 스택(110) 내의 각 파일 또는 디렉토리는 대응하는 아이노드로 표현될 수 있다. 일 실시 예에 따르면, KVFS(113)는 키-값 쌍을 이용하여 아이노드를 나타낼 수 있다. 파일들의 경우에, 아이노드는 키 자체를 나타낼 수 있다. 아이노드에 대한 검색은 키에 대한 검색이다.
일 실시 예에 따르면, 아이노드의 속성들(attributes)은 또한 아이노드에 대응하는 키-값(key-value) 쌍의 키 값(key value)에 저장될 수 있다. 속성들의 사이즈는 아이노드가 생성될 때에 고정될 수 있다. 아이노드의 검색은 아이노드에 대응하는 키-값 쌍의 검색 및 키-값 쌍의 키 값의 읽기를 포함한다. 아이노드의 속성들이 키 값에 저장되면, 아이노드의 속성들은 키-값 쌍이 검색될 때에 또한 읽혀질 수 있다. 아이노드의 속성들 및 키 값을 동일한 키 값에 저장하는 것은 KVFS 스택(110)의 성능을 향상할 수 있다. 또는, 아이노드의 속성들은 아이노드에 대응하는 키 값이 아닌 다른 키 값에 저장될 수 있다. 이 경우에, 속성들의 검색은 아이노드 자체에 대응하는 제1 키-값 쌍 및 속성들을 저장하는 제2 키-값 쌍에 대한 별개의 두 액세스들을 포함할 수 있다.
일 실시 예에 따르면, 아이노드를 나타내는 키-값 쌍은 KVFS 스택(110)에 명칭 및 아이노드(즉, name, inode)를 포함시킬 수 있다. 명칭은 사용자가 생성하는 파일/디렉토리 명칭이고, 아이노드는 상술된 바와 같이 KVFS 스택(110)이 할당하는 키이다. 디렉토리 키-값 쌍의 명칭은 다양한 포맷들 및 필드들에 저장될 수 있다. 용이한 설명을 위하여, 단일 명칭 엔트리를 포함하는 디렉토리 엔트리가 아래의 예들에서 사용된다.
도 2는 일 실시 예에 따른 예시적인 키 값 저장의 블록도를 보여준다. KV 저장(220)은 다수의 용기들(250a, 250b)을 포함할 수 있다. 각 용기는 복수의 키-값 쌍들에 데이터를 저장할 수 있다. 일부 키-값 쌍들은 어느 용기에도 속하지 않는 전역 키-값 쌍들일 수 있다. 두 용기들(250a, 250b)은 동일한 키를 가질 수 있다.
KVFS 스택(110)은 명칭 공간을 포함하는 파일 시스템 메타데이터를 사용한다. 명칭 공간은 디렉토리들 및 파일들을 포함한다. KVFS 스택(110)은 자유 블록들의 관리를 포함하는 블록 메타데이터를 관리하고 그리고 메타데이터 블록 관리를 KV 저장(120)에 넘길(offload) 수 있다.
루트 디렉토리는 KVFS 스택(110) 내에서 알려진 키인 특수 디렉토리이다. 루트 디렉토리는 KVFS 스택(110)의 파일 또는 디렉토리를 횡단하는 경로의 시작점이다.
KVFS 스택(110)은 디렉토리를 키-값 쌍 또는 복수의 키-값 쌍들을 포함하는 용기 중 하나로 관리할 수 있다. 일 실시 예에 따르면, KVFS 스택(110)은 디렉토리들 내의 엔트리들의 수에 의존하여 인라인 디렉토리들 및 용기를 지원할 수 있다.
도 3은 일 실시 예에 따른 용기 디렉토리들을 위한 예시적인 키 값 저장을 보여준다. 본 예에서, KV 저장(320)은 세 개의 아이노드들(350a, 350b, 350c)을 포함한다. 아이노드들(350a, 350b, 350c)의 각각은 하나보다 많은 서브 디렉토리들을 포함하는 용기 디렉토리를 나타낸다. 본 기재의 범위로부터 멀어지지 않으면서 임의의 수의 용기 디렉토리들이 KV 저장(320)에 존재할 수 있음이 이해된다. 일부 실시 예들에서, KV 저장(320)은 도 4에 도시된 바와 같이 용기 디렉토리들 및 인라인 디렉토리들의 혼합을 포함할 수 있다.
용기 디렉토리에서, 디렉토리의 속성들은 특수한 키-값 쌍에 저장된다. 실제 속성들은 키-값 쌍의 값 부분에 저장된다. 용기 디렉토리의 속성 값들은 허가(permission), 소유자(owner), 그룹(group) 등과 같은 용기 디렉토리와 연관된 다양한 파라미터들을 포함할 수 있다.
일 실시 예에 따르면, 본 KVFS는 디렉토리가 다수의 엔트리들(예를 들어, 서브 디렉토리들 및 파일들)을 포함할 때 용기 디렉토리(예를 들어, 용기 디렉토리들(350a, 350b, 350c))를 사용한다. KVFS의 아이노드(예를 들어, 350a, 350b 또는 350c)로서 표현된 용기 디렉토리는 KV 저장(320)에 저장될 수 있다. 용기 디렉토리에 포함된 파일들 및 서브 디렉토리들은 키-값 쌍들로 저장될 수 있다. 키-값 쌍(키, 값)은 키 및 대응하는 값을 포함한다. 예를 들어, 키-값 쌍의 키는 파일 또는 디렉토리(또는 서브 디렉토리)의 명칭이고, 키-값 쌍의 값은 파일 또는 디렉토리와 연관된 용기의 식별자이다. KVFS 내의 파일을 액세스하기 위해, KVFS는 입력/출력 동작을 실행하여 액세스될 파일 또는 디렉토리의 명칭에 대응하는 용기를 검색할 수 있다. 파일을 액세스하는 데에 필요한 엔트리들의 수에 의존하여, 동일한 수의 입력/출력 동작들이 필요할 수 있다. 예를 들어, 파일이 KVFS 내의 "root/dirl/dirll"에 저장되어 있으면, 파일을 액세스하기 위하여 각 디렉토리(root, dirl, dirll)에 대한 입력/출력 동작들을 포함하는 세 개의 입력/출력 동작들이 필요하다. 목표 파일 또는 디렉토리에 도달하기 위한 검색 동작은 엔트리들의 수와 관계없이 KV 저장(320)에 넘겨질 수 있다.
KVFS는 명칭들을 이용하여 용기에 저장된 개별 키-값 쌍들을 노출한다. 키-값 쌍은 다른 용기(예를 들어, 서브 디렉토리의 용기)에 대한 엔트리일 수 있다. 키-값 쌍의 명칭은 KVFS의 명칭 공간에서 검색될 수 있는 키로 사용되고, 키-값 쌍의 값은 대응하는 키에 대한 정보를 저장하는 데에 사용된다. 값은 KVFS의 명칭 공간에서 식별 가능한 아이노드의 식별자일 수 있다. 디렉토리 속성들은 용기에 특별한 키-값 쌍으로 저장될 수 있다. 각 용기 디렉토리는 하나 또는 그보다 많은 특별한 키-값 쌍들을 포함하여 용기의 속성들을 저장할 수 있다.
도 3을 참조하면, 아이노드(350a)는 용기(C0)를 나타낸다. 용기(C0)는 KVFS의 명칭 공간에서 "Dir0"으로 식별된다. 디렉토리(Dir0)는 자신의 속성 키-값 및 디렉토리(Dir0)에 포함된 두 개의 서브 디렉토리들(Dir1, Dir2)에 대한 추가적인 두 개의 키-값 쌍들을 포함하는 복수의 키-값 쌍들을 포함한다. 서브 디렉토리(Dir1)에 대한 키-값 쌍은 키로서 명칭(Dir1)을 갖고 값으로서 용기(C1)를 갖는다. 용기(C1)는 KVFS 내의 다른 아이노드(350b)에 대응한다. 서브 디렉토리(Dir2)에 대한 키-값 쌍은 키로서 명칭(Dir2)을 갖고 그리고 값으로서 용기(C2)를 갖는다. 용기(C2)는 KVFS 내의 다른 아이노드(350c)에 대응한다.
용기(C1)는 KVFS의 명칭 공간에서 "Dir1"으로 식별된다. 용기(C1)는 자신의 속성 키-값 및 두 개의 서브 디렉토리들(Dir11, Dir12)에 대한 추가적인 두 개의 키-값 쌍들을 포함하는 복수의 키-값 쌍들을 포함한다. 서브 디렉토리(Dir11)에 대한 키-값 쌍은 키로서 명칭(Dir11)을 갖고 값으로서 용기(C11)를 갖는다. 서브 디렉토리(Dir12)에 대한 키-값 쌍은 키로서 명칭(Dir12)을 갖고 그리고 값으로서 용기(C12)를 갖는다. 용기들(C11, C12)은 KVFS 내의 다른 아이노드들(미도시)에 대응한다.
용기(C2)는 KVFS의 명칭 공간에서 "Dir2"으로 식별된다. 용기(C2)는 자신의 속성 키-값 및 두 개의 서브 디렉토리들(Dir21, Dir22)에 대한 추가적인 두 개의 키-값 쌍들을 포함하는 복수의 키-값 쌍들을 포함한다. 서브 디렉토리(Dir21)에 대한 키-값 쌍은 키로서 명칭(Dir21)을 갖고 값으로서 용기(C21)를 갖는다. 서브 디렉토리(Dir22)에 대한 키-값 쌍은 키로서 명칭(Dir22)을 갖고 그리고 값으로서 용기(C22)를 갖는다. 용기들(C21, C22)은 KVFS 내의 다른 아이노드들(미도시)에 대응한다.
도 4는 일 실시 예에 따른 인라인 디렉토리를 포함하는 예시적인 키 값 저장 보여준다. 본 예에서, KV 저장(420)은 단일 아이노드(450)를 포함한다. 아이노드(450)는 KVFS 명칭 공간에서 "Dir0"으로 식별되는 인라인 디렉토리를 나타낸다. 본 기재의 범위로부터 벗어나지 않으면서 KV 저장(420)에 임의의 수의 디렉토리 용기들이 존재할 수 있음이 이해된다. 일부 실시 예에서, KV 저장(420)은 인라인 디렉토리들 및 용기 디렉토리들의 혼합을 포함할 수 있다.
일 실시 예에 따르면, KVFS는 디렉토리 내의 엔트리들의 수가 적을 때에 인라인 디렉토리를 사용할 수 있다. 인라인 디렉토리는 단일 키-값 쌍에 저장된다. 키-값 쌍의 명칭은 KVFS의 명칭 공간에서 검색될 수 있는 인라인 디렉토리(Dir0)에 대한 키이다. 키-값 쌍의 값은 인라인 디렉토리(Dir0)의 속성들 및 다중의 키-값 쌍들을 포함하는 데이터(451)를 유지할 수 있다. 데이터(451)의 키-값 쌍은 인라인 디렉토리(Dir0)의 속성들 및 인라인 디렉토리(Dir0)에 포함된 서브 디렉토리들(예를 들어, Dir11, Dir12, Dir13) 각각에 대한 하나 또는 그보다 많은 키-값 쌍들을 포함할 수 있다. 예를 들어, 인라인 디렉토리(Dir0)의 속성들은 데이터(451)의 첫 512 바이트들에 저장될 수 있다. 키-값 쌍들의 값들은 서브 디렉토리들(Dir11, Dir12, Dir13)에 대한 용기들(C11, C12, C13)에 대응한다. 용기들(C11, C12, C13)은 KVFS 내의 다른 아이노드들(미도시)에 대응한다.
인라인 디렉토리(Dir0)에 포함될 수 있는 엔트리들의 최대 개수는 인라인 디렉토리가 생성될 때에 고정될 수 있다. KVFS는 키-값 쌍들의 값들을 검색함으로써 아이노드(예를 들어, 파일들 및 디렉토리들)의 명칭을 검색하여 명칭과 연관된 아이노드를 찾을 수 있다. 아이노드는 인라인 디렉토리(Dir0) 내의 파일 또는 서브 디렉토리에 대한 키일 수 있다. 파일 또는 서브 디렉토리의 타입을 판단하기 위해 파일 또는 서브 디렉토리의 속성들이 읽혀질 수 있다. 인라인 디렉토리 내의 엔트리들의 최대 개수가 고정되므로, 인라인 디렉토리(Dir0) 내의 명칭에 대한 검색은 한계를 가질 수 있다.
일 실시 예에 따르면, 엔트리들의 수가 문턱 사이즈를 초과할 때 인라인 디렉토리는 용기 디렉토리로 변환될 수 있다. 마찬가지로, 엔트리들의 수가 문턱 사이즈 밑으로 줄어들 때 용기 디렉토리는 인라인 디렉토리로 변환될 수 있다. 예를 들어, 문턱 사이즈는 64이다.
일 실시 예에 따르면, 본 KVFS는 파일의 사이즈에 따라 인라인 파일들 및 용기 파일들 모두를 지원한다. 큰 파일은 용기 파일로 저장되고, 그리고 작은 파일은 인라인 파일로 저장될 수 있다.
도 5는 일 실시 예에 따른 용기 파일을 포함하는 예시적인 키 값 저장을 보여준다. "File00"으로 명명된 용기 파일은 KVFS의 아이노드이다. 용기(560)는 속성과 데이터를 저장하는 하나 이상의 데이터 블록들을 포함하는 용기 파일(File00)과 연관된 모든 데이터를 보관할 수 있다. 용기 파일(FILE00)의 속성들은 용기 파일(560)의 시작에 특수 키로 저장된다. 용기 파일(FILE00)의 데이터는 하나 또는 그보다 많은 키-값 쌍들에 저장될 수 있다. 키-값 쌍들의 각각은 키로서 블록 번호를 그리고 값으로서 연관된 데이터를 포함한다. 예를 들어, 파일 시스템 블록 사이즈가 4kB이면, 블록0은 0~4kB의 데이터를 보관하고, 블록1은 4kB~8kB의 데이터를 보관할 수 있다. 용기 파일의 사이즈가 커질수록, 더 많은 블록들이 용기(560)에 추가될 수 있다. 일 실시 예에 따르면, 키-값 쌍들 각각의 값은 동일한 KV 저장(520) 또는 다른 KV 저장의 다른 용기 내의 다른 키를 가리킬 수 있다.
일 실시 예에 따르면, KV 저장(520)은 용기 파일(File00)의 키-값 쌍들에 대한 업데이트들을 지원할 수 있다. 용기 파일(File00)의 파일 절단은 KV 저장(520)에 완전히 넘겨질(offload) 수 있다. 파일 용기(File00)의 데이터를 절단할 때, KVFS는 용기 내의 데이터 및 연관된 블록들을 삭제할 수 있다. 이 경우에, 용기 파일(File00)을 절단 또는 삭제하기 위해 키들을 횡단할 필요가 없다. 다중의 파일 용기들 또는 다중의 KV 저장들 내의 용기들 내의 데이터 블록들을 포함하는 용기 파일의 데이터를 절단할 때, 절단된 데이터를 보관하는 데이터 블록들 각각을 액세스함으로써 절단된 데이터가 삭제될 수 있다. 데이터 블록을 삭제 또는 절단하기 위한 최대 횡단 횟수는 데이터 블록을 액세스하기 위한 입력 및 출력 동작들의 횟수에 의해 결정된다.
도 6은 일 실시 예에 따른 인라인 파일을 포함하는 예시적인 키 값 저장을 보여준다. 인라인 파일(File00)은 KV 저장(620)의 용기 파일(660)에 저장된다. 용기 파일(660)은 KVFS의 아이노드이다. 인라인 디렉토리와 유사하게, 인라인 파일(File00)은 단일 키-값 쌍에 저장될 수 있다. 키-값 쌍의 키는 아이노드 명칭(File00)이고, 키-값 쌍의 값은 인라인 파일과 연관된 데이터(661)를 보관한다. 노드의 속성들은 데이터(661)의 시작에 저장되고, 그리고 인라인 파일(File00)의 데이터는 고정된 사이즈의 하나 또는 그보다 많은 키-값 쌍들에 저장된다. 파일(File00)의 사이즈에 의존하여, 파일(File00)의 데이터는 다중의 데이터 블록들로 분할될 수 있다. 데이터(661)에 보관된 키-값 쌍들 각각은 키로서 데이터 블록의 명칭을 포함하고 그리고 값으로서 데이터 블록과 연관된 데이터를 포함할 수 있다. 예를 들어, 인라인 파일(File00)의 데이터는 두 개의 데이터 블록들(블록0, 블록1)로 분할될 수 있다. 블록0은 "kdata0"의 키와 함께 저장되고, 블록1은 "kdata1"의 키와 함께 저장된다. 인라인 파일 내의 데이터 블록들의 사이즈는 예를 들어 4kB로 고정될 수 있다. 이 경우에, 블록0은 0~4kB의 데이터를 보관하고 그리고 블록1은 4~8kB의 데이터를 보관할 수 있다.
일 실시 예에 따르면, 미리 정해진 사이즈, 예를 들어 1MB를 초과하는(또는 고정된 사이즈의 데이터 블록들의 엔트리들의 수가 문턱을 초과하는) 인라인 파일은 용기 파일로 변환될 수 있다. 마찬가지로, 미리 정해진 파일 사이즈보다 작은 파일 사이즈로 감소된 용기 파일은 인라인 파일로 변환될 수 있다.
도 7은 일 실시 예에 따른 예시적인 키-값 저장 내의 분산된 데이터 및 경로 횡단을 보여준다. 응용은 POSIX API(711)를 통해 KV 저장(720a)에 저장된 파일(File01)을 액세스하기 위한 파일 액세스 명령을 발행할 수 있다. 응용으로부터 발행된 파일 액세스 명령은 VFS(712)에서 포괄(generic) VFS 호(call)를 호출(invoke)할 수 있다. VFS(712)는 VFS 호를 KVFS(713) 내의 KVFS 호로 전달할 수 있다. KVFS(713)에서, 요청된 파일(File01)이 디렉토리(Root/Dir0)에 저장된다.
KVFS(713)는 아이노드들(750, 751, 752, 753)을 포함한다. 아이노드(750)는 두 개의 디렉토리들(Dir0, Dir1) 및 파일(File1)을 포함하는 세 개의 엔트리들을 보관하는 KVFS의 루트 디렉토리에 대응한다. 루트의 서브 디렉토리(Dir0)는 두 개의 디렉토리들(Dir01, Dir02) 및 파일(File01)을 포함하는 세 개의 엔트리들을 보관한다. 루트의 서브 디렉토리(Dir01)는 아이노드(753)에 대응하고 그리고 속성들을 보관하고 엔트리들을 보관하지 않는다. 요청된 파일(File01)은 아이노드(751)에 저장된다. 일 실시 예에 따르면, 아이노드(750)는 서브 디렉토리들(Dir0, Dir1)에 대한 키-값 쌍들을 포함하는 용기 디렉토리이다.
디렉토리 내부의 검색은 KV 저장(720)에 완전히 넘겨질(offload) 수 있다. 입력 및 출력 동작들의 횟수는 한계를 갖고 그리고 횡단 경로 내의 서브 디렉토리들의 개수와 동일하다. 본 예에서, 아이노드(750)에 대한 입력 및 출력 동작 그리고 아이노드(751)에 대한 다른 입력 및 출력 동작을 포함하는 두 개의 입력 및 출력 동작들이 요청된 파일(File01)에 도달할 수 있다. 반대로, 통상적인 파일 시스템의 경로 횡단은 몇몇 요인들, 예를 들어 경로 내의 각 서브 디렉토리 내의 엔트리들의 개수 및 메타데이터가 어떻게 관리되는지에 의존하여 다중의 입력 및 출력 동작들을 취할 수 있다. 경로 내의 다음 아이노드를 찾기 위한 아이노드 내의 엔트리들의 검색은 KV 저장(720)에 넘겨질 수 있다. KVFS의 성능은 KV 저장들에 저장된 키들의 효율적인 배열 및 관리에 의해 더 향상될 수 있다.
파일(File01)에 대한 응용의 파일 액세스 명령에 대응하는 KVFS 호는 파일(File01)의 실제 데이터를 저장하는 KV 저장(720a)에 대한 액세스를 가능하게 한다. KVAPI(714)는 KV 저장(720a)에 대한 파일 액세스 인터페이스를 제공한다.
일 실시 예에 따르면, 본 KVFS는 데이터 블록들을 관리하기 위한 메타데이터를 필요로 하지 않는다. 블록 관리는 키-값 쌍들을 이용하는 KV 저장에 완전히 넘겨진다. KV 저장은 파일에 대한 데이터를 동일한 용기 내의 하나 또는 그보다 많은 데이터 블록들에 저장함으로써 데이터 블록들을 효과적으로 관리할 수 있다. 일부 실시 예에서, 파일의 데이터 블록들은 하나보다 많은 용기들 또는 하나보다 많은 KV 저장들에 저장될 수 있다. 예를 들어, 원본 데이터를 저장하는 KV 저장으로부터 지리적으로 분리된 KV 저장에 복제 데이터가 저장될 수 있다. 이 경우에, 예를 들어 KVFS의 아이노드는 키-값 튜블(tuple)(KV 저장 식별자, 키, 용기 식별자)를 가질 수 있다. 이는 KVFS가 KV 저장 식별자에 의해 식별되는 다중의 KV 저장들을 포괄하는 것을 허용한다.
일 실시 예에 따르면, 파일 시스템은 호스트 컴퓨터에서 실행되는 응용에 파일 시스템 액세스를 제공하도록 구성되는 응용 프로그래밍 인터페이스(API, Application Programming Interface); 파일 또는 디렉토리를 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로 나타내도록 구성되는 키 값 파일 시스템; 상기 응용으로부터의 파일 시스템 호를 상기 키 값 파일 시스템에 전달하도록 구성되는 가상 파일 시스템; 그리고 데이터 저장 장치에 저장된 데이터에 상기 파일 시스템 액세스를 제공하도록 구성되는 키 값 API를 포함한다.
상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 상기 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함한다. 상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스 가능하다.
상기 API는 유닉스용 휴대용 운영 체제 인터페이스(POSIX, portable operating system interface for Unix) API이고, 상기 파일 시스템의 운영 체제는 리눅스(Linux)일 수 있다.
상기 아이노드의 속성들은 상기 하나 또는 그보다 많은 키-값 쌍들 중 하나의 키-값 쌍에 저장된다.
상기 디렉토리는 상기 디렉토리의 상기 용기에 보관된 키-값 쌍 엔트리들의 수에 의존하여 용기 디렉토리 또는 인라인 디렉토리로 표현된다.
상기 인라인 디렉토리의 상기 용기는 단일 키-값 쌍을 포함한다. 상기 단일 키-값 쌍의 상기 값은 상기 인라인 디렉토리의 속성들 및 상기 인라인 디렉토리의 하나 또는 그보다 많은 서브 디렉토리들 또는 상기 인라인 디렉토리에 저장된 하나 또는 그보다 많은 파일들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 디렉토리는 상기 엔트리들의 수가 미리 정해진 사이즈를 초과하면 상기 용기 디렉토리로 변환되고, 상기 용기 디렉토리는 상기 엔트리들의 수가 상기 미리 정해진 사이즈보다 작아지면 상기 인라인 디렉토리로 변환된다.
상기 파일은 상기 파일의 상기 용기에 포함된 키-값 쌍 엔트리들의 수에 의존하여 용기 파일 또는 인라인 파일로 표현된다.
상기 용기 파일의 상기 용기는 상기 용기 파일에 대한 상기 데이터의 상기 하나 또는 그보다 많은 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 파일의 상기 용기는 하나 또는 그보다 많은 키-값 쌍들을 포함하고, 상기 하나 또는 그보다 많은 키-값 쌍들 중 적어도 하나의 키-값 쌍은 상기 인라인 파일의 명칭 및 상기 인라인 파일과 연관된 데이터를 포함한다. 상기 적어도 하나의 키-값 쌍의 상기 데이터는 상기 인라인 파일의 데이터를 저장하는 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 파일의 상기 용기의 상기 엔트리들의 수가 미리 정해진 사이즈를 초과하면 상기 인라인 파일은 상기 용기 파일로 변환되고, 상기 엔트리들의 수가 상기 미리 정해진 사이즈보다 적어지면 상기 용기 파일은 상기 인라인 파일로 변환된다.
상기 파일은 복수의 데이터 저장 장치들에 저장되고, 상기 아이노드는 상기 데이터 저장 장치의 식별자, 상기 용기의 식별자, 그리고 상기 키를 포함하는 하나 또는 그보다 많은 키-값 튜플들(tuples)을 포함한다.
상기 파일은 상기 파일이 저장된 하나 또는 그보다 많은 디렉토리들에 대응하는 메타데이터의 계층들을 횡단하지 않고 상기 키 값 파일 시스템 내의 단일 입력 및 출력 동작으로 절단 또는 삭제될 수 있다.
다른 실시 예에 따르면, 방법은 파일 또는 디렉토리를 키 값 파일 시스템에서 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로서 데이터 저장 장치에 저장하는 단계; 호스트 컴퓨터에서 실행되는 응용으로부터 파일 시스템 액세스 요청을 수신하는 단계; 상기 파일 시스템 액세스 요청을 상기 데이터 저장 장치에 대한 파일 시스템 호로 전달하는 단계; 그리고 상기 파일 시스템 액세스를 상기 데이터 저장 장치에 저장된 데이터에 제공하는 단계를 포함한다. 상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함한다. 상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 상기 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스 가능하다.
상기 응용으로부터의 상기 파일 시스템 액세스 요청은 유닉스용 휴대용 운영 체제 인터페이스 응용 프로그래밍 인터페이스(POSIX API, portable operating system interface for Unix Application Programming Interface)를 통해 수신되고, 상기 키 값 파일 시스템의 운영 체제는 리눅스(Linux)이다.
상기 아이노드의 속성들은 상기 하나 또는 그보다 많은 키-값 쌍들 중 하나의 키-값 쌍에 저장된다.
상기 디렉토리는 상기 디렉토리의 상기 용기에 보관된 키-값 쌍 엔트리들의 수에 의존하여 용기 디렉토리 또는 인라인 디렉토리로 표현된다.
상기 인라인 디렉토리의 상기 용기는 단일 키-값 쌍을 포함한다. 상기 단일 키-값 쌍의 상기 값은 상기 인라인 디렉토리의 속성들 및 상기 인라인 디렉토리의 하나 또는 그보다 많은 서브 디렉토리들 또는 상기 인라인 디렉토리에 저장된 하나 또는 그보다 많은 파일들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 디렉토리는 상기 엔트리들의 수가 미리 정해진 사이즈를 초과하면 상기 용기 디렉토리로 변환되고, 상기 용기 디렉토리는 상기 엔트리들의 수가 상기 미리 정해진 사이즈보다 작아지면 상기 인라인 디렉토리로 변환된다.
상기 파일은 상기 파일의 상기 용기에 포함된 키-값 쌍 엔트리들의 수에 의존하여 용기 파일 또는 인라인 파일로 표현된다.
상기 용기 파일의 상기 용기는 상기 용기 파일에 대한 상기 데이터의 상기 하나 또는 그보다 많은 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 파일의 상기 용기는 하나 또는 그보다 많은 키-값 쌍들을 포함하고, 상기 하나 또는 그보다 많은 키-값 쌍들 중 적어도 하나의 키-값 쌍은 상기 인라인 파일의 명칭 및 상기 인라인 파일과 연관된 데이터를 포함한다. 적어도 하나의 키-값 쌍의 상기 데이터는 상기 인라인 파일의 데이터를 저장하는 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함한다.
상기 인라인 파일의 상기 용기의 상기 엔트리들의 수가 미리 정해진 사이즈를 초과하면 상기 인라인 파일은 상기 용기 파일로 변환되고, 상기 엔트리들의 수가 상기 미리 정해진 사이즈보다 적어지면 상기 용기 파일은 상기 인라인 파일로 변환된다.
상기 파일은 복수의 데이터 저장 장치들에 저장되고, 상기 아이노드는 상기 데이터 저장 장치의 식별자, 상기 용기의 식별자, 그리고 상기 키를 포함하는 하나 또는 그보다 많은 키-값 튜플들(tuples)을 포함한다.
상기 파일은 상기 파일이 저장된 하나 또는 그보다 많은 디렉토리들에 대응하는 메타데이터의 계층들을 횡단하지 않고 상기 키 값 파일 시스템 내의 단일 입력 및 출력 동작으로 절단 또는 삭제된다.
위의 예시적인 실시 예들은 키 값 파일 시스템 및 키 값 파일 시스템을 이용하여 파일들 및 디렉토리들을 관리하는 방법을 구현하는 다양한 실시 예들을 보여주기 위하여 위에서 설명되었다. 기술된 예시적인 실시 예들로부터의 다양한 수정들 및 변경들이 이 분야에 통상적인 기술을 가진 자들에게 발생할 것이다. 본 발명의 범위에 포함되는 것으로 의도되는 한정들은 다음의 청구항들에서 정해진다.
110: 키 값 파일 시스템 스택
111: 유닉스용 휴대용 운영 체제 인터페이스 응용 프로그래밍 인터페이스(POSIX API)
112: 가상 파일 시스템(VFS)
113: 키-값 파일 시스템(KVFS)
114: 키-값 응용 프로그래밍 인터페이스(KVAPI)
120: 키 값 저장
130: 응용

Claims (10)

  1. 호스트 컴퓨터에서 실행되는 응용에 파일 시스템 액세스를 제공하도록 구성되는 응용 프로그래밍 인터페이스(API, Application Programming Interface);
    파일 또는 디렉토리를 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로 나타내도록 구성되는 키 값 파일 시스템;
    상기 응용으로부터 수신된 파일 시스템 호를 상기 키 값 파일 시스템에 전달하도록 구성되는 가상 파일 시스템; 그리고
    데이터 저장 장치에 저장된 데이터에 상기 파일 시스템 액세스를 제공하도록 구성되는 키 값 API를 포함하고,
    상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 상기 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함하고, 그리고
    상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스되는 파일 시스템.
  2. 제1항에 있어서,
    상기 API는 유닉스용 휴대용 운영 체제 인터페이스(POSIX, portable operating system interface for Unix) API이고, 상기 파일 시스템의 운영 체제는 리눅스(Linux)인 파일 시스템.
  3. 제1항에 있어서,
    상기 아이노드의 속성들은 상기 하나 또는 그보다 많은 키-값 쌍들 중 하나의 키-값 쌍에 저장되는 파일 시스템.
  4. 제1항에 있어서,
    상기 디렉토리는 상기 디렉토리의 상기 용기에 포함된 키-값 쌍 엔트리들의 수에 의존하여 용기 디렉토리 또는 인라인 디렉토리로 표현되는 파일 시스템.
  5. 제4항에 있어서,
    상기 인라인 디렉토리의 상기 용기는 단일 키-값 쌍을 포함하고, 상기 단일 키-값 쌍의 상기 값은 상기 인라인 디렉토리의 속성들 및 상기 인라인 디렉토리의 하나 또는 그보다 많은 서브 디렉토리들 또는 상기 인라인 디렉토리에 저장된 하나 또는 그보다 많은 파일들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함하는 파일 시스템.
  6. 제4항에 있어서,
    상기 인라인 디렉토리는 상기 엔트리들의 수가 미리 정해진 사이즈를 초과하면 상기 용기 디렉토리로 변환되고, 상기 용기 디렉토리는 상기 엔트리들의 수가 상기 미리 정해진 사이즈보다 작아지면 상기 인라인 디렉토리로 변환되는 파일 시스템.
  7. 제1항에 있어서,
    상기 파일은 상기 파일의 상기 용기에 포함된 키-값 쌍 엔트리들의 수에 의존하여 용기 파일 또는 인라인 파일로 표현되는 파일 시스템.
  8. 제7항에 있어서,
    상기 용기 파일의 상기 용기는 상기 용기 파일에 대한 상기 데이터의 상기 하나 또는 그보다 많은 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함하는 파일 시스템.
  9. 제7항에 있어서,
    상기 인라인 파일의 상기 용기는 하나 또는 그보다 많은 키-값 쌍들을 포함하고, 상기 하나 또는 그보다 많은 키-값 쌍들 중 적어도 하나의 키-값 쌍은 상기 인라인 파일의 명칭 및 상기 인라인 파일과 연관된 데이터를 포함하고, 상기 적어도 하나의 키-값 쌍의 상기 데이터는 상기 인라인 파일의 데이터를 저장하는 데이터 블록들에 대응하는 하나 또는 그보다 많은 키-값 쌍들을 포함하는 파일 시스템.
  10. 파일 또는 디렉토리를 키 값 파일 시스템에서 하나 또는 그보다 많은 키-값 쌍들을 포함하는 아이노드로서 데이터 저장 장치에 저장하는 단계;
    호스트 컴퓨터에서 실행되는 응용으로부터 파일 시스템 액세스 요청을 수신하는 단계;
    상기 파일 시스템 액세스 요청을 상기 데이터 저장 장치에 대한 파일 시스템 호로 전달하는 단계; 그리고
    상기 파일 시스템 액세스를 상기 데이터 저장 장치에 저장된 데이터에 제공하는 단계를 포함하고,
    상기 아이노드에 포함된 각 키-값 쌍은 상기 파일 또는 디렉토리의 명칭을 키로서 포함하고 그리고 상기 파일 또는 상기 디렉토리와 연관된 용기의 식별자를 값으로서 포함하고, 그리고
    상기 파일의 상기 데이터는 고정된 사이즈의 하나 또는 그보다 많은 데이터 블록들로 분할되어 상기 데이터 저장 장치에 저장되고, 상기 파일의 상기 데이터와 연관된 상기 하나 또는 그보다 많은 데이터 블록들 각각은 상기 하나 또는 그보다 많은 키-값 쌍들을 이용하여 상기 키 값 파일 시스템 내에서 액세스되는 방법.
KR1020180026424A 2017-04-26 2018-03-06 키 값 파일 시스템 KR102615616B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762490297P 2017-04-26 2017-04-26
US62/490,297 2017-04-26
US15/645,916 US11030155B2 (en) 2017-04-26 2017-07-10 Key value file system
US15/645,916 2017-07-10

Publications (2)

Publication Number Publication Date
KR20180120073A true KR20180120073A (ko) 2018-11-05
KR102615616B1 KR102615616B1 (ko) 2023-12-19

Family

ID=61070908

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180026424A KR102615616B1 (ko) 2017-04-26 2018-03-06 키 값 파일 시스템

Country Status (3)

Country Link
US (1) US11030155B2 (ko)
KR (1) KR102615616B1 (ko)
CN (1) CN108804510B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9323775B2 (en) 2010-06-19 2016-04-26 Mapr Technologies, Inc. Map-reduce ready distributed file system
US11726955B2 (en) * 2010-06-19 2023-08-15 Hewlett Packard Enterprise Development Lp Methods and apparatus for efficient container location database snapshot operation
US11301422B2 (en) * 2016-02-23 2022-04-12 Samsung Electronics Co., Ltd. System and methods for providing fast cacheable access to a key-value device through a filesystem interface
US10579606B2 (en) * 2018-05-03 2020-03-03 Samsung Electronics Co., Ltd Apparatus and method of data analytics in key-value solid state device (KVSSD) including data and analytics containers
US10684958B1 (en) 2018-12-10 2020-06-16 International Business Machines Corporation Locating node of named data elements in coordination namespace
US11144231B2 (en) 2018-12-12 2021-10-12 International Business Machines Corporation Relocation and persistence of named data elements in coordination namespace
US10915460B2 (en) 2018-12-12 2021-02-09 International Business Machines Corporation Coordination namespace processing
US11288208B2 (en) 2018-12-12 2022-03-29 International Business Machines Corporation Access of named data elements in coordination namespace
CN109656886B (zh) * 2018-12-26 2021-11-09 百度在线网络技术(北京)有限公司 基于键值对的文件系统实现方法、装置、设备和存储介质
US11580162B2 (en) * 2019-04-18 2023-02-14 Samsung Electronics Co., Ltd. Key value append
CN110647568B (zh) * 2019-09-16 2023-12-12 金色熊猫有限公司 一种图数据库数据转化为编程语言数据方法及装置
CN111078139B (zh) * 2019-11-14 2023-10-20 北京迈格威科技有限公司 一种实现s3标准对象存储接口的方法及装置
US11204911B2 (en) * 2020-03-20 2021-12-21 Sap Se Efficient and non-disruptive online defragmentation with record locking
US20220092046A1 (en) * 2020-09-18 2022-03-24 Kioxia Corporation System and method for efficient expansion of key value hash table
CN113535857A (zh) * 2021-08-04 2021-10-22 阿波罗智联(北京)科技有限公司 数据同步方法及装置
CN115981570B (zh) * 2023-01-10 2023-12-29 创云融达信息技术(天津)股份有限公司 一种基于kv数据库的分布式对象存储方法和系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173293B1 (en) * 1998-03-13 2001-01-09 Digital Equipment Corporation Scalable distributed file system
US20100023524A1 (en) * 2007-10-09 2010-01-28 Gladwin S Christopher Block based access to a dispersed data storage network
US20120284317A1 (en) * 2011-04-26 2012-11-08 Dalton Michael W Scalable Distributed Metadata File System using Key-Value Stores
US20130103729A1 (en) * 2011-10-24 2013-04-25 Nokia Corporation Method and apparatus for providing a key-value based storage interface
US20150286657A1 (en) * 2008-04-28 2015-10-08 Vmware, Inc. Computer file system with path lookup tables

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2067633C (en) 1991-07-24 1996-10-01 Eric Jonathan Bauer Method and apparatus for accessing a computer-based file system
US8478799B2 (en) 2009-06-26 2013-07-02 Simplivity Corporation Namespace file system accessing an object store
US8806143B1 (en) 2009-10-09 2014-08-12 Netapp, Inc. Queuing received write blocks for reducing file fragmentation
US20110137966A1 (en) 2009-12-08 2011-06-09 Netapp, Inc. Methods and systems for providing a unified namespace for multiple network protocols
US9323775B2 (en) 2010-06-19 2016-04-26 Mapr Technologies, Inc. Map-reduce ready distributed file system
CN102375853A (zh) * 2010-08-24 2012-03-14 中国移动通信集团公司 分布式数据库系统、在其中建立索引的方法和查询方法
US8595267B2 (en) 2011-06-27 2013-11-26 Amazon Technologies, Inc. System and method for implementing a scalable data storage service
CN102725755B (zh) * 2011-12-31 2014-07-09 华为技术有限公司 文件访问方法及系统
US9037556B2 (en) 2012-12-03 2015-05-19 Vmware, Inc. Distributed, transactional key-value store
US9268834B2 (en) * 2012-12-13 2016-02-23 Microsoft Technology Licensing, Llc Distributed SQL query processing using key-value storage system
CN103902632B (zh) 2012-12-31 2018-01-02 华为技术有限公司 键值存储系统中构建文件系统的方法、装置及电子设备
US9378067B1 (en) 2014-05-08 2016-06-28 Springpath, Inc. Automated load balancing across the distributed system of hybrid storage and compute nodes
US9767104B2 (en) 2014-09-02 2017-09-19 Netapp, Inc. File system for efficient object fragment access
US9438426B2 (en) 2014-10-03 2016-09-06 Seagate Technology Llc Key-value data storage device with hybrid architecture

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173293B1 (en) * 1998-03-13 2001-01-09 Digital Equipment Corporation Scalable distributed file system
US20100023524A1 (en) * 2007-10-09 2010-01-28 Gladwin S Christopher Block based access to a dispersed data storage network
US20150286657A1 (en) * 2008-04-28 2015-10-08 Vmware, Inc. Computer file system with path lookup tables
US20120284317A1 (en) * 2011-04-26 2012-11-08 Dalton Michael W Scalable Distributed Metadata File System using Key-Value Stores
US20130103729A1 (en) * 2011-10-24 2013-04-25 Nokia Corporation Method and apparatus for providing a key-value based storage interface

Also Published As

Publication number Publication date
US11030155B2 (en) 2021-06-08
CN108804510B (zh) 2023-09-12
KR102615616B1 (ko) 2023-12-19
CN108804510A (zh) 2018-11-13
US20180039650A9 (en) 2018-02-08
US20170316028A1 (en) 2017-11-02

Similar Documents

Publication Publication Date Title
KR102615616B1 (ko) 키 값 파일 시스템
US10635643B2 (en) Tiering data blocks to cloud storage systems
US10346363B2 (en) Deduplicated file system
US9342528B2 (en) Method and apparatus for tiered storage
TWI778157B (zh) 固態驅動器、分散式資料儲存系統和利用鍵值儲存的方法
US9047301B2 (en) Method for optimizing the memory usage and performance of data deduplication storage systems
US8266114B2 (en) Log structured content addressable deduplicating storage
US8793466B2 (en) Efficient data object storage and retrieval
US9141621B2 (en) Copying a differential data store into temporary storage media in response to a request
CN108628753B (zh) 内存空间管理方法和装置
KR101977575B1 (ko) 디렉토리 엔트리 조회 장치, 그 방법 및 디렉토리 엔트리 조회 프로그램이 기록된 기록 매체
US9086820B2 (en) System and methods for managing storage space allocation
KR20200053512A (ko) Kvs 트리 데이터베이스
US20160283501A1 (en) Posix-compatible file system, method of creating a file list and storage device
KR102440128B1 (ko) 통합된 객체 인터페이스를 위한 메모리 관리 장치, 시스템 및 그 방법
CN106682110B (zh) 一种基于哈希格网索引的影像文件存储和管理系统及方法
KR20200122994A (ko) 키 값 첨부
CN107817946B (zh) 用于混合存储设备读写数据的方法以及装置
US20180107404A1 (en) Garbage collection system and process
CN113986826A (zh) 存储系统容量使用率估计
EP3436973A1 (en) File system support for file-level ghosting
US8200723B1 (en) Metadata file system backed by database
US9063656B2 (en) System and methods for digest-based storage
KR20190089420A (ko) 서브 인덱스 저장 방식의 데이터 구축 및 관리 시스템
JP2001056775A (ja) 計算機システム及びプログラム記録媒体

Legal Events

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