KR20060094458A - 파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는시스템 및 방법 - Google Patents

파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는시스템 및 방법 Download PDF

Info

Publication number
KR20060094458A
KR20060094458A KR1020060001344A KR20060001344A KR20060094458A KR 20060094458 A KR20060094458 A KR 20060094458A KR 1020060001344 A KR1020060001344 A KR 1020060001344A KR 20060001344 A KR20060001344 A KR 20060001344A KR 20060094458 A KR20060094458 A KR 20060094458A
Authority
KR
South Korea
Prior art keywords
item
serialization
file
entity
header
Prior art date
Application number
KR1020060001344A
Other languages
English (en)
Inventor
하누만타 라오 코다발라
마틴 제이. 슬리만
로빈 드하난제이 드하만카르
비샬 카스리아
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060094458A publication Critical patent/KR20060094458A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

파일 시스템 항목(들) 및 연관된 엔티티(들)의 직렬화 및 역직렬화 시스템 및 방법이 제공된다. 파일 시스템 "항목"은 프로퍼티(들)를 포함할 수 있는 코어 클래스를 포함한다. 항목은 단순 항목 또는 복합 항목(예를 들어, 그 안에 내포된 다른 항목(들)을 포함함)일 수 있다. 다른 항목(들) 및/또는 확장(들)을 갖는 프래그먼트(들), 링크(들) 등의 엔티티(들)가 항목에 연관될 수 있다. 직렬화를 통해, 항목 및 연관된 엔티티(들)의 일관성있는 복사본이 있는 경우, 이는 (예를 들어, 항목을 전송하여 목적지 시스템 상에 그 항목을 재구축하기 위해) 캡처될 수 있다.
직렬화 시스템은 항목에 연관된 엔티티(들)를 식별하는 식별 컴포넌트 및 항목 및 연관된 엔티티(들)를 직렬화하는 직렬화 컴포넌트를 포함한다. 직렬화 컴포넌트는 항목 및 연관된 엔티티(들)에 연관되어 있는 정보를 포함하는 헤더를 추가로 직렬화할 수 있다. 헤더는 항목 및 연관된 엔티티(들)에의 랜덤 액세스를 용이하게 해준다(예를 들어, 판독자(reader)가 관심을 두고 있는 부분만을 해석/파싱할 수 있게 해준다). 직렬화 시스템은 항목 및 그의 연관된 엔티티(들)의 한 장소로부터 다른 장소로의 복사, 이동 및/또는 전송을 용이하게 해주는 애플리케이션 프로그램 인터페이스(들)(API)를 노출시킬 수 있다.
직렬화, 역직렬화, 파일 시스템, 배킹 파일,

Description

파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는 시스템 및 방법{SERIALIZATION OF FILE SYSTEM(S) AND ASSOCIATED ENTITY(IES)}
도 1은 본 발명의 한 측면에 따른 직렬화 시스템의 블록도.
도 2는 본 발명의 한 측면에 따른 예시적인 항목 구조를 나타낸 도면.
도 3은 본 발명의 한 측면에 따른 예시적인 직렬화 구조를 나타낸 도면.
도 4는 본 발명의 한 측면에 따른 직렬화 시스템의 블록도.
도 5는 본 발명의 한 측면에 따른 직렬화 환경의 블록도.
도 6은 본 발명의 한 측면에 따른 역직렬화 시스템의 블록도
도 7은 본 발명의 한 측면에 따른 역직렬화 환경의 블록도.
도 8은 본 발명의 한 측면에 따른 항목의 직렬화를 용이하게 해주는 방법의 플로우차트.
도 9는 도 8의 방법을 더 설명하는 플로우차트.
도 10은 본 발명의 한 측면에 따른 항목의 역직렬화를 용이하게 해주는 방법의 플로우차트.
도 11은 도 10의 방법을 더 설명하는 플로우차트.
도 12는 본 발명이 기능할 수 있는 예시적인 오퍼레이팅 환경을 나타낸 도면.
<도면의 주요 부분에 대한 부호의 설명>
110: 식별 컴포넌트
120: 파일 시스템 스토어
130: 직렬화 컴포넌트
400: 직렬화 시스템
410: 애플리케이션 프로그램 인터페이스(들)
420: 애플리케이션(들)
510: 파일 저장 시스템 메타데이터
520: 시스템 메타데이터
530: 파일 시스템 뷰
[문헌 1] US 제60/656,118호, "파일 시스템 항목(들) 및 연관된 엔티티(들)의 직렬화(SERIALIZATION OF FILE SYSTEM ITEM(S) AND ASSOCIATED ENTITY(IES))", 2005. 02. 24
본 발명은 일반적으로 객체 저장 시스템(들)에 관한 것으로서, 보다 상세하게는 항목(들) 및 연관된 엔티티(들)의 직렬화 및/또는 역직렬화에 관한 것이다.
전형적으로, 컴퓨터 파일 시스템에서, 파일은 데이터 저장의 기본 단위이다. 일반적으로, 파일 시스템에서의 파일은 이하의 특성을 갖는다. 파일은 단일의 바이트 시퀀스이다. 파일은 유한 길이를 가지며 또 일반적으로 비휘발성 저장 매체에 저장된다. 파일은 디렉토리 내에서 생성되고, 파일 동작 시, 아마도 그의 경로와 함께 참조하는 데 사용될 수 있는 이름을 갖는다. 게다가, 파일 시스템은 퍼미션 비트(permission bit) 또는 다른 파일 속성(file attribute) - 파일 생성, 마지막 수정, 및 마지막 액세스등에 대한 타임스탬프 - 의 다른 정보를 파일에 연관시킬 수 있다. 특정의 애플리케이션은 또한 도메인-특유 프로퍼티를 파일의 바이트 스트림에 저장할 수 있다. 예를 들어, 워드 프로세싱 애플리케이션에 의해 사용되고 따라서 "문서"로서 간주되는 파일들은 문서의 제목 및 저작자 등의 프로퍼티를 저장할 수 있다. 이들 프로퍼티는 파일의 바이트 스트림 내에 그 파일을 생성하는 애플리케이션에 특유한 포맷으로 저장된다. 프로퍼티는 객체로서 구조화되어 있지 않으며 또한 표준화된 이름을 갖지도 않는다. 바이트 스트림은 비구조화된 값(unstructured value)이다.
게다가, 종래의 컴퓨터 파일 시스템은 사용자가 이용가능한 제한된 파일 구성 기술을 제공하였다. 예를 들어, 기존의 애플리케이션은 대체로 여러가지 유형의 파일을 조직(organize) 및 디스플레이하기 위해 트리 구조 폴더 포맷을 채택하였다. 폴더, 하위 폴더 및 파일 간의 어떤 관계를 볼 수는 있지만, 이러한 관계는 범위가 제한되어 있으며 또 명시적인 사용자 입력에 주로 의존한다. 예를 들어, 파일들은 사용자에 의해 표시된 바와 같이 그의 공통 폴더 또는 하위 폴더에 따라 관련될 수 있다.
이하에서는 본 발명의 어떤 측면들의 기본적인 이해를 제공하기 위해 본 발명의 간략화된 요약을 제시한다. 이 요약은 본 발명의 전체적인 개요는 아니다. 이 요약은 본 발명의 주요/중요 구성요소를 식별해주거나 본 발명의 범위를 정의하기 위한 것도 아니다. 이의 유일한 목적은 이후에 제시되는 보다 상세한 설명에 대한 전제로서 본 발명의 어떤 개념들을 간략화된 형태로 제공하는 데 있다.
본 발명은 파일 시스템 항목(들) 및 연관된 엔티티(들)의 직렬화 및/또는 역직렬화를 제공한다. 파일 시스템 "항목"은 프로퍼티(들)를 포함할 수 있는 코어 클래스(core class), 예를 들어 연락처(contact)를 포함한다. 항목은 단순 항목(simple item) 또는 복합 항목(compound item)(예를 들어, 그 안에 내포된 다른 항목(들)을 포함함)일 수 있다. 다른 항목(들) 및/또는 확장(들)을 갖는 프래그먼트(들), 링크(들) 등의 엔티티(들)가 항목에 연관될 수 있다. 직렬화를 통해, 항목 및 연관된 엔티티(들)의 일관성있는 복사본이 있는 경우, 이는 (예를 들어, 항목을 전송하여 목적지 시스템 상에 그 항목을 재구축하기 위해) 캡처될 수 있다.
본 발명의 한 측면에 따르면, 직렬화 시스템이 제공된다. 이 직렬화 시스템은 항목에 연관된 엔티티(들)를 식별하는 식별 컴포넌트, 및 항목 및 연관된 엔티티(들)를 직렬화하는 직렬화 컴포넌트를 포함한다. 직렬화 컴포넌트는 항목 및 연관된 엔티티(들)에 연관되어 있는 정보를 포함하는 헤더를 추가로 직렬화할 수 있다. 헤더는 항목 및 연관된 엔티티(들)에의 랜덤 액세스를 용이하게 해준다(예를 들어, 판독자(reader)가 관심을 두고 있는 부분만을 해석/파싱할 수 있게 해준다). 선택적으로, 직렬화 시스템은 항목 및 그의 연관된 엔티티(들)의 한 장소로부터 다른 장소로의 복사, 이동 및/또는 전송을 용이하게 해주는 애플리케이션 프로그램 인터페이스(들)(API)를 노출시킬 수 있다.
본 발명의 다른 측면은 항목 및 그의 연관된 엔티티(들)를 역직렬화하는 데 이용될 수 있는 항목 역직렬화 시스템을 제공한다. 이 역직렬화 시스템은 항목 및 연관된 엔티티(들)에의 랜덤 액세스를 달성하기 위해 헤더를 이용할 수 있다(예를 들어, 관심을 두고 있는 부분만을 해석/파싱할 수 있다). 역직렬화 시스템은 파일 시스템 스토어에 항목 구조를 재생성할 수 있다.
상기한 목적 및 관련 목적을 달성하기 위해, 본 발명의 어떤 예시적인 측면에 대해 이하의 설명 및 첨부 도면에 관련하여 본 명세서에 기술되어 있다. 그렇지만, 이들 측면은 본 발명의 원리들이 이용될 수 있는 여러자기 방법 중 단지 몇개만을 나타낸 것이고, 본 발명은 이러한 측면 및 그의 등가물 모두를 포함하는 것으로 보아야 한다. 본 발명의 다른 이점 및 새로운 특징은 도면에 관련하여 살펴볼 때 본 발명의 이하의 상세한 설명으로부터 명백하게 될 수 있다.
이제부터, 도면 전체에 걸쳐 유사한 참조 번호가 유사한 구성요소를 언급하는 데 사용되는 도면을 참조하여 본 발명에 대해 기술한다. 이하의 설명에서, 설명의 목적상, 본 발명의 철저한 이해를 제공하기 위해 여러가지 구체적인 상세가 제시된다. 그렇지만, 본 발명이 이들 구체적인 상세 없이도 실시될 수 있다는 것은 명백할 수 있다. 다른 예에서, 본 발명의 설명을 용이하게 해주기 위해 공지의 구조 및 장치가 블록도 형태로 도시되어 있다.
본 출원에서 사용되는 바와 같이, 용어 "컴포넌트", "핸들러", "모델", "시스템", 및 기타 등등은 컴퓨터 관련 엔티티, 즉 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어를 언급하기 위한 것이다. 예를 들어, 컴포넌트는 프로세서 상에서 실행되는 프로세스, 프로세서, 객체, 실행 파일, 실행 쓰레드, 프로그램, 및/또는 컴퓨터일 수 있지만, 이에 한정되는 것은 아니다. 예로서, 서버 상에서 실행 중인 애플리케이션 및 서버 둘다는 컴포넌트일 수 있다. 하나 이상의 컴포넌트가 프로세스 및/또는 실행 쓰레드 내에 존재할 수 있으며, 컴포넌트는 하나의 컴퓨터 상에 로컬화되어 있거나 및/또는 2개 이상의 컴퓨터 간에 분산되어 있을 수 있다. 또한, 이들 컴포넌트는 여러가지 데이터 구조를 그 위에 저장하고 있는 여러가지 컴퓨터 판독가능 매체로부터 실행될 수 있다. 컴포넌트들은 하나 이상의 데이터 패킷을 갖는 신호 등에 따라 로컬 및/또는 원격 프로세스를 통해 통신할 수 있다(예를 들어, 데이터는 그 신호를 통해 로컬 시스템, 분산 시스템 내에서 또하나의 컴포넌트와 상호작용 및/또는 인터넷 등의 네트워크를 통해 다른 시스템과 상호작용하는 한 컴포넌트로부터 온 것임). 본 발명에 따르면, 컴퓨터 컴포넌트는 예를 들어 ASIC(application specific integrated circuit, 주문형 반도체), CD(compact disc, 콤팩트 디스크), DVD(digital video disk, 디지털 비디오 디스크), ROM(read only memory, 판독 전용 메모리), 플로피 디스크, 하드 디스크, EEPROM(electrically erasable programmable read only memory, 전기적 소거가능 프로그램가능 판독 전용 메모리), 및 메모리 스틱(이에 한정되는 것은 아님)을 비롯한 컴퓨터 판독가능 매체 상에 저장될 수 있다.
본 발명은 파일 시스템 항목(들) 및 연관된 엔티티(들)의 직렬화 및/또는 역직렬화를 제공한다. 이 출원에서 사용되는 바와 같이, 파일 시스템 "항목"은 프로퍼티(들)(예를 들어, 이름, 주소, 전화 번호)를 포함할 수 있는 코어 클래스(core class), 예를 들어 연락처(contact)를 포함한다. 항목은 단순 항목(simple item) 또는 복합 항목(compound item)(예를 들어, 그 안에 내포된 다른 항목(들)을 포함함)일 수 있다. 다른 항목(들)(예를 들어, 관계(들)) 및/또는 확장(들)(예를 들어, 부가의 프로퍼티(들))을 갖는 프래그먼트(들), 링크(들) 등의 엔티티(들)가 항목에 연관될 수 있다.
도 1을 참조하면, 본 발명의 한 측면에 따른 직렬화 시스템(100)이 도시되어 있다. 시스템(100)은 항목(예를 들어, 코어 항목) 및 이 항목에 연관된 엔티티(들)를 직렬화하는 데 이용될 수 있다. 시스템(100)은 또한 항목 및 연관된 엔티티(들)에 연관되어 있는 정보를 포함하는 헤더를 발생 및 직렬화할 수 있다.
직렬화 시스템(100)은 항목에 연관된 엔티티(들)를 식별하는 식별 컴포넌트(110)를 포함한다. 식별 컴포넌트(110)는 파일 시스템 스토어(120)로부터 항목에 관한 정보를 획득할 수 있다. 이하에서 논의하는 바와 같이, 정보는 예를 들어 항목 프래그먼트(들), 확장(들), 나가는 링크(들), 들어오는 링크(들), 및/또는 내포된 항목(들)을 포함할 수 있다.
직렬화 시스템(100)은 항목 및 연관된 엔티티(들)를 직렬화하는 직렬화 컴포넌트(130)를 더 포함한다. 직렬화 컴포넌트(130)는 또한 항목 및 연관된 엔티티( 들)에 연관된 정보를 포함하는 헤더를 발생 및 직렬화할 수 있다. 헤더는 항목 및 연관된 엔티티(들)에의 랜덤 액세스를 용이하게 해준다(예를 들어, 판독자(reader)가 관심을 두고 있는 부분만을 해석/파싱할 수 있게 해준다).
도 2를 간략히 참조하면, 본 발명의 한 측면에 따른 예시적인 항목 구조 다이어그램(200)이 도시되어 있다. 이 예에서, 코어 항목(210)은 프로퍼티(들)를 포함할 수 있다. 예를 들어, 코어 항목(210)은 "이름" 및 "집 전화 번호"의 프로퍼티를 갖는 "연락처"일 수 있다.
코어 항목(210)은 코어 항목(210)을 추가의 프로퍼티(들)로 확장하기 위해 특정의 애플리케이션(들)에 의해 부가된 확장(들)(220)을 가질 수 있다. 계속하여 "연락처" 코어 항목(210) 예에서, 이메일 애플리케이션은 확장 프로퍼티들 "이메일 주소" 및 "회사 전화 번호"를 부가함으로써 코어 항목(210)의 프로퍼티(들)를 확장할 수 있다.
그 다음에, 코어 항목(210)은 0개 이상의 다른 항목(들)(230)에 링크될 수 있다. 이 링크는 나가는 링크(들)(240) 및/또는 들어오는 링크(들)(250)일 수 있다. 나가는 링크(들)(240)는 코어 항목(210)과 코어 항목(210)을 소스로서 갖는 다른 항목(들)(230) 간의 연결을 말한다. 들어오는 링크(들)(250)는 코어 항목(210)과 다른 항목(들)(230)을 소스로서 갖는 항목(들)(230) 간의 연결을 말한다. 나가는 링크(들)(240) 및/또는 들어오는 링크(들)(250)는 유형이 지정될 수 있다. 링크(240, 250)는 따라서 항목들의 결합을 위한 관계적 힘(relational power)을 제공한다. 예를 들어, 링크(240, 250)는 "친구로 삼은 날짜(date of friendship)" 및 "등급(rating)"의 연관된 프로퍼티들을 갖는 유형 "친구"를 가질 수 있다. 게다가, 링크(240, 250)는 항목들 간의 연결을 일의적으로 식별할 수 있다(예를 들어, 전역적으로 고유한 식별자를 사용함).
코어 항목(210)은 내포된 항목(들)(260)을 더 포함하며, 때로는 본 명세서에서 이를 합하여 복합 항목(compound item)이라고 한다. 예를 들어, 유형 "연락처"의 코어 항목(210)은 이미지(예를 들어, 사진)를 포함하는 내포된 항목(260)을 포함할 수 있다. 본 발명의 한 측면에 따르면, 복합 항목은 항목 레벨 동작(예를 들어, 백업, 복원, 복사 및/또는 내보내기)에 의해 단일의 일관성 단위로서 간주될 수 있다.
코어 항목(210)은 항목 유형 및 항목 확장에 큰 컬랙션의 선언을 할 수 있게 해주는 엔티티 유형인 프래그먼트(들)(270)를 가질 수 있다. 컬렉션의 요소들은 키(key)를 갖는 엔티티들이다. 이것은 애플리케이션이 소유측 항목(owning item)과 독립적으로 컬렉션 내의 요소들에 액세스하여 이를 수정할 수 있게 해준다. 소유측 항목은 컬렉션이 수정되도록 하기 위해 검색될 필요가 없다. 게다가, 시스템은 중첩된 범위(nested extent)에서 각 요소의 변화를 추적할 수 있다.
코어 항목(210)은 파일에 의해 백업될 수 있거나 FileStream 프로퍼티를 가질 수 있다. 파일 배킹된 항목(file backed item)은 항목의 일부가 배킹 파일(backing file)(280) 밖으로 승격된 항목이다.
확장(들)(220), 나가는 링크(들)(240), 들어오는 링크(들)(250)에 연관된 정보(예를 들어, 링크 식별자(들)), 내포된 항목(들)(260), 프래그먼트(들)(270) 및/ 또는 배킹 파일(280)은 모두 합하여 코어 항목(210)의 "연관된 엔티티(들)"이라고 지칭할 수 있다. 코어 항목(210)을 직렬화하라는 요청이 수신될 때, 코어 항목(210) 및 연관된 엔티티(들)가 있는 경우, 이들은 코어 항목(210)의 구조적 무결성을 보존하기 위해 복사된다. 연관된 엔티티(들)를 포함함으로써, 직렬화 스트림을 수신하는 시스템(도시 생략)은 코어 항목(210) 및 연관된 엔티티(들)을 이들의 적절한 컨텍스트로 재구성할 수 있다.
다이어그램(200)은 직렬화 시스템(100)에서 이용될 수 있는 예시적인 항목 구조의 요소들을 나타낸 것이다. 당업자라면 본 발명이 도 2에 제시된 항목 구조에 한정되지 않음을 잘 알 것이다. 본 발명을 수행하는 임의의 적당한 항목 구조가 이용될 수 있으며 이러한 항목 구조 모두는 본 명세서에 첨부된 청구항의 범위 내에 속하는 것으로 보아야 한다.
도 1 및 도 2를 참조하면, 시스템(100)은 코어 항목(210) 및 코어 항목(210)의 연관된 엔티티(들)(예를 들어, 확장(들)(220), 나가는 링크(들)(240), 들어오는 링크(들)(250)에 연관된 정보(예를 들어, 링크 식별자(들)), 내포된 항목(들)(260), 및/또는 프래그먼트(들)(270))를 직렬화하는 데 이용될 수 있다. 식별 컴포넌트(110)는 파일 시스템 스토어(120) 내의 코어 항목(210)을 식별하고 식별 정보를 직렬화 컴포넌트(130)에 제공한다. 식별 컴포넌트(110)는 또한 코어 항목(210)에 연관된 엔티티(들)를 식별하고 연관된 엔티티(들)에 관련되어 있는 식별 정보를 직렬화 컴포넌트(130)에 제공한다.
직렬화 컴포넌트(130)는 직렬화 동안에 채워지는 헤더를 위한 공간을 (예를 들어, 일시적으로) 할당할 수 있다. 이 예에서, 직렬화 컴포넌트(130)는 이하의 일을 수행한다.
1. 헤더를 위한 공간을 할당한다.
2. 코어 항목(210)을 직렬화한다.
3. 있는 경우, 항목 프래그먼트(들)(270)를 직렬화한다.
4. 있는 경우, 나가는 링크(들)(240)를 직렬화한다.
5. 있는 경우, 헤더를 들어오는 링크 식별자(들)로 채운다.
6. 있는 경우, 확장(들)(220)을 직렬화한다.
7. 각각의 내포된 항목(260)에 대해, 코어 항목(210)으로서 기능하는 특정의 내포된 항목에 대해 동작 1 내지 8이 재귀적으로 반복된다.
8. 있는 경우, 배킹 파일을 직렬화한다.
9. 직렬화 길이, 헤더 오프셋 및 헤더 자체를 수행한다.
도 3을 참조하면, 본 발명의 한 측면에 따른 예시적인 직렬화 구조(300)가 도시되어 있다. 예를 들어, 이 구조(300)는 예를 들어 직렬화 컴포넌트(130)에 의해 발생될 수 있다.
[표 1]
public class UdtSerialization
{
BinaryUdtSerialization bin;
}
구조(300)는 예를 들어 직렬화 길이(320) 및 헤더 오프셋(330)을 포함한다.
[표 2]
public class BinaryUdtSerialization
{
// 스트림에서의 직렬화의 오프셋
long serializationOffset;
// 직렬화의 길이
long serializationLength;
}
표 2에 제시된 클래스는 사용자 정의 유형(UDT)의 이진 직렬화를 해석하는 데 사용되는 메타데이터를 지원하는 데 사용된다.
그 다음에, 구조(300)는 코어 항목 섹션(340)을 포함한다.
[표 3]
public class CoreItem : UdtSerialization
{
//루트 항목의 항목 id
SqlGuid itemId;
//컨테이너의 항목 id
SqlGuid containerId;
// 항목의 이름공간 이름
SqlString namespaceName;
//이것이 파일 배킹된 항목인가?
bool isFileBacked;
//배킹 파일이 인라인(inlined)되어 있는 경우, 배킹 파일의 오프셋
long backingFileOffset;
//배킹 파일의 길이
long backingFileLength;
//파일 배킹된 항목의 속성을 저장함
System.IO.FileAttributes fatFileAttributes;
//배킹 파일의 생성 시각
DateTime fileCreation Time;
//배킹 파일의 마지막 기입 시각
DateTime fileLastWriteTime;
//배킹 파일의 마지막 액세스 시각
DateTime fileLastAccessTime;
//직렬화에서 보안 기술자의 오프셋
long sdOffset;
//직렬화에서 보안 기술자의 길이
long sdLength;
//항목 프래그먼트의 직렬화의 시작의 오프셋
long itemFragmentOffset;
//직렬화에 포함된 항목 프래그먼트의 수
long itemFragmentCount;
}
구조(300)는 예를 들어, 항목 프래그먼트(들)(350)를 더 포함한다.
[표 4]
public class ItemFragmentHeader : UdtSerialization
{
//항목 프래그먼트의 프래그먼트 Id
private SqlGuid fragId;
//프래그먼트의 id를 설정함
private SqlGuid setId;
}
그 다음에, 구조(300)는 예를 들어 나가는 링크(들) 섹션(360)을 포함할 수 있다.
[표 5]
public class LinkHeader : UdtSerialization
{
SqlGuid sourceItemId;
SqlGuid targetItemId;
SqlGuid linkId;
private bool excludesSchemaMetadata;
}
링크 객체가 일반적으로 소스 및 타겟 항목 식별자 등의 정보를 갖지만, 타겟에서 링크 유형의 스키마가 없고 링크가 역직렬화될 수 없는 경우 이 정보는 LinkHeader에 복사된다.
계속하여, 구조(300)는 항목 확장(들) 섹션(370)을 포함할 수 있다.
[표 6]
public class ItemExtensionHeader : UdtSerialization
{
}
구조(300)는 내포된 항목(들) 섹션(380)을 포함할 수 있다.
[표 7]
public class EmbeddedItem
{
//내포된 항목의 헤더
ItemHeader itemHeader;
}
[표 8]
public class ItemHeader
{
//코어 항목 헤더
CoreItem coreItem;
//이 항목에 대한 나가는 링크 모두를 포함하는 링크 헤더의 리스트
ArrayList outLinks;
//이 항목의 확장들에 대한 확장 헤더의 리스트
ArrayList extensions;
//내포된 항목 헤더의 리스트
ArrayList embeddedItems;
//이 항목의 들어오는 링크의 id의 리스트
ArrayList inLinkIds;
//배킹 파일에 관한 정보
private BackingFileHeader backingFileHeader;
//직렬화가 스키마 메타 데이터를 배제하는지 여부
bool excludesSchemaMetadata;
//직렬화에서의 보안 기술자의 오프셋
long sdOffset;
//직렬화에서의 보안 기술자의 길이
long sdLength;
}
그 다음에, 구조(300)는 배킹 파일 섹션(390)을 포함할 수 있다.
[표 9]
public class BackingFileHeader
{
//배킹 파일이 인라인되어 있는 경우, 배킹 파일의 오프셋
private long backingFileOffset;
//배킹 파일의 길이
private long backingFileLength;
//파일 배킹된 항목의 속성을 저장함
private System.IO.FileAttributes fatFileAttributes;
//배킹 파일의 생성 시각
private DateTime fileCreationTime;
//배킹 파일의 마지막 기입 시각
private DateTime fileLastWriteTime;
//배킹 파일의 마지막 액세스 시각
private DateTime fileLastAccessTime;
}
마지막으로, 구조(300)는 헤더 섹션(394)을 포함할 수 있다. 헤더 섹션(394)은 코어 항목 및 연관된 엔티티(들)에 연관되어 있는 정보를 포함할 수 있다. 헤더 섹션(394)은 코어 항목 및 연관된 엔티티(들)에의 랜덤 액세스를 용이하게 해 줄 수 있다(예를 들어, 판독자가 관심을 두고 있는 부분만을 해석/파싱할 수 있게 해준다).
그 다음에, 도 4를 참조하면, 본 발명의 한 측면에 따른 직렬화 시스템(400)이 도시되어 있다. 직렬화 시스템(400)은 전술한 바와 같이, 식별 컴포넌트(110) 및 직렬화 컴포넌트(130)를 포함한다. 시스템(400)은 애플리케이션 프로그램 인터페이스(들)(API)(410)를 더 포함한다. API(410)는 시스템(400)과 애플리케이션(들)(420) 간의 통신을 용이하게 해준다. 예를 들어, API(410)는 항목 및 그의 연관된 엔티티(들)의 한 장소에서 다른 장소(예를 들어, 별도의 컴퓨터 시스템 및/또는 분리형 매체)로의 복사, 이동 및/또는 전송을 용이하게 해줄 수 있다. 따라서, API(410)는 내보내기(Export), 백업(Backup), 복원(Restore), 복사(Copy), 기타 등등의 항목 레벨 동작에 이용될 수 있다. 한 예에서, 애플리케이션(420)은 선택적으로 직렬화 정보(예를 들어, 플래그(들))를 API(410)에 제공함으로써 항목 모두 또는 그 일부를 포함할 수 있다. API(410)는 파일 시스템 레벨에서 및/또는 저장 프로시저 레벨에서 노출될 수 있다. 예시적인 API(410)에 대해서 이하에 기술한다.
Serialize Item API(항목 직렬화 API)
Serialize Item API는, 존재하는 경우, 이하의 컴포넌트를 포함하는 항목 직렬화를 생성한다.
● 코어 항목
● 나가는 링크(이 링크에 대해서는 직렬화되고 있는 항목이 소스 항목임) 및 들어오는 링크(이 링크에 대해서는 직렬화되고 있는 항목이 타겟 항목임)의 링크 식별자(들)
● 복합 항목 내의 항목
● 확장
● 항목 프래그먼트
● 엔티티(들)에 대한 로컬 생성 시각 및 수정 시각
예를 들어, Serialize Item API에 대한 호출은 이하의 형태를 가질 수 있다.
[System.Storage.serialization]. SerializeItem (
@itemid uniqueidentifier,
@dataoptions int)
returns varbinary (max)
여기서, itemid는 직렬화될 항목의 식별자이고, dataoptions은 데이터 직렬화 옵션(Serialize Data Options)(이하에 기술하는 바와 같이, 직렬화의 내용을 커스터마이즈하는 데 사용되는 옵션들)을 말하며, API는 항목의 직렬화를 바이트 어레이 형태로 반환한다.
Serialize Item To File(항목을 파일로 직렬화)
항목이 아주 긴 경우에, 그 항목을 메모리에서 직렬화하고 그 직렬화를 클라이언트 애플리케이션으로 반환하는 것은 비효율적일 수 있다. 이러한 시나리오에 있어서, 직렬화를 애플리케이션에 의해 지정된 파일에 직접 기입하는 Serialize Item To File API가 이용될 수 있다. 이것은 클라이언트 애플리케이션 및 서버측 모두에서 직렬화에 의해 소모되는 메모리를 제한할 수 있다. 게다가, API는 더 나은 성능을 가져올 수 있는데, 그 이유는 훨씬 더 적은 수의 바이트가 서버로부터 클라이언트 애플리케이션으로 전송될 필요가 있기 때문이다. 예를 들어, Serialize Item To File에 대한 호출은 다음과 같은 형태를 가질 수 있다.
[System.Storage.Serialization].SerializeItemToFile(
@itemid uniqueidentifier,
@dataoptions int,
@filename nvarchar (1024)
)
returns bigint
여기서, itemid는 직렬화될 항목의 식별자이고, dataoptions은 데이터 직렬화 옵션(Serialize Data Options)(이하에 기술하는 바와 같이, 직렬화의 내용을 커스터마이즈하는 데 사용되는 옵션들)을 말하며, filename은 객체가 직렬화되어 넣어질 파일의 이름이고, API는 파일에 기입되는 바이트의 수를 반환한다.
Serialization Data Options(데이터 직렬화 옵션)
옵션(options) 값은 직렬화 함수가 여러가지 고객 시나리오의 요건을 만족시킬 수 있게 해준다. 이들 옵션은 직렬화의 일부로서 포함되어야만 하는 항목에 관련되어 있는 데이터/메타데이터 요소를 선택하는 데 사용될 수 있다. 이들 옵션은 직렬화의 내용에 영향을 줄 수 있다.
이 예에서, 옵션(options)의 값은 이하의 것의 OR 조합으로서 지정될 수 있 다.
● 없음 또는 통상 사용 경우 중 하나, 및
● 없음, 개별적인 옵션들 중에서 하나 이상.
개별적인 옵션들
이들 옵션은 개별적인 시나리오에 대한 항목 경계를 정의한다. 예를 들어,
● INCLUDE_EXTENSIONS Ox2
확장이 이 직렬화에 포함되어야 하는지 여부를 지정한다.
● INCLUDE_OUTGOING_LINKS Ox4
나가는 링크가 이 직렬화에 포함되어야 하는지 여부를 지정한다.
● INCLUDE_EMBEDDED Ox8
복합 항목 내의 모든 항목이 이 직렬화에 포함되어야 하는지 여부를 지정한다.
● INCLUDE_SECURITY_DESCRIPTOR OxlO
항목에 대한 명시적인 액세스 제어 리스트(ACL)가 포함되어야 하는지 여부를 지정한다.
● INCLUDE_SYNC_METADATAOx80
비인가 복원(non-authoritative restore)을 위해 요구되는 동기 메타데이터를 포함한다.
● INCLUDE_SCHEMA_METADATA OxlOO
이 항목을 역직렬화하기 위해 요구되는 스키마 메타데이터가 이 직렬화에 포함되어야 하는지 여부를 지정한다. 많은 수의 항목이 직렬화되고 있는 경우, 애플리케이션은 개별적인 항목 직렬화로부터 개별적으로 그것을 백업하도록 선택할 수 있다.
● INLINE_BACKING_FILE Ox200
배킹 파일이 직렬화에 인라인되어 있는지 또는 파일의 UNC 경로만이 직렬화의 일부인지를 지정한다. 이것은 또한 배킹 파일의 속성(숨김, 읽기 전용, 기타 등등) 및 타임 스탬프를 포함한다.
이들 예시적인 옵션들을 사용하는 유효한 데이터 직렬화 옵션의 예는 이하의 것을 포함한다.
SERIALIZE_FOR_COPY | INCLUDE_IDs
이 옵션은, 복사를 위해 커스터마이즈되어 있고 또 id를 포함하는, 항목의 직렬화를 생성한다.
SERIALIZE_FOR_BACKUP | INCLUDE_IDs
그렇지만, 이것은 옵션 SERIALIZE_FOR_BACKUP을 지정함으로써 유효한 옵션이다. INCLUDE_IDs는 자동적으로 온(on)이고 그것이 필요없음을 개별적으로 지정한다.
INCLUDE_IDs | INCLUDE_OUTGOING_LINKS
이것은 코어 항목 및 직렬화에 항목 id를 포함하는 그의 확장의 직렬화를 생성한다. 이 예에서 통상 사용 경우의 어느 것도 지정하지 않는 것은 유효하다.
이들 예시적인 옵션을 사용하는 무효의 데이터 직렬화 옵션의 예는 이하의 것을 포함한다.
SERlALIZE_FOR_COPY | SERIALIZE_FOR_BACKUP
이 예에서 2개 이상의 디폴트를 지정하는 것은 무효이다.
SERIALIZE_FOR_COPY & !INCLUDE_EXTENSIONS
이 예에서, 'and' 결합은 허용되지 않는다. 상기의 것을 달성하기 위해, 옵션들은 다음과 같이 개별적인 옵션의 명시적인 or 결합을 사용하여 지정되어야만 한다.
INCLUDE_OUTGOING_LINKS | INCLUDE_EMBEDDED |
INLINE_FILESTREAM_ATTRIBUTES |
INCLUDE_SCHEMA_METADATA
통상 사용 경우
이들 옵션은 가장 통상적인 사용 시나리오에 대한 항목 경계를 정의한다. 예를 들어,
● SERIALIZE_FOR_COPY OxlOOOOOOO
이 옵션이 선택될 때, 이하의 옵션들이 턴온된다.
○ INCLUDE_EXTENSIONS,
○ INCLUDE_OUTGOING_LINKS,
○ INCLUDE_EMBEDDED,
○ INCLUDE_SECURITY_DESCRIPTOR,
○ INLINE_FILESTREAM_ATTRIBUTES 및
○ INCLUDE_SCHEMA_MBTADATA.
● SERIALIZE_FOR_BACKUP Ox20000000
이 옵션이 선택될 때, 이하의 옵션들이 턴온된다.
○ INCLUDE_EXTENSIONS,
○ INCLUDE_OUTGOING_LINKS,
○ INCLUDE_EMBEDDED,
○ INLINE_FILESTREAM_ATTRIBUTES,
○ INCLUDE_SECURITY_DESCRIPTOR,
○ INCLUDE_SCHEMA_METADATA
○ INCLUDE IDs 및
○ INCLUDE_SYNC_METADATA
도 5를 참조하면, 본 발명의 한 측면에 따른 직렬화 환경(500)이 도시되어 있다. 애플리케이션(들)(420)은 직렬화될 항목에 연관된 정보, 예를 들어 ItemID를 직렬화 시스템(400)에 제공한다. 그 후에, 직렬화 시스템(400)은 파일 스토어 시스템 메타데이터(510)로부터 ItemID에 관한 유형 정보를 획득한다. ItemID 및 유형 정보를 이용하여, 직렬화 컴포넌트(400)는 전술한 바와 같이 직렬화될 항목(예를 들어, 항목 및 연관된 엔티티(들))에 연관된 정보를 얻기 위해 파일 시스템 뷰(file system view)(530)에 (예를 들면, 재귀적으로) 쿼리를 한다.
한 예에서, 직렬화 컴포넌트(130)는 항목 프래그먼트에 대한 랜덤 액세스를 지원하지 않는다. 이 예에서, 항목 프래그먼트는 각 프래그먼트에 선행하는 길이 필드 및 헤더로부터 시작 오프셋를 사용하여 (예를 들어, 연결 리스트 방식으로) 순차적으로 액세스될 수 있다.
복합 항목 내의 항목들
INCLUDE_EMBEDDED 옵션이 선택될 때, 시스템(400)은 복합 항목 내의 항목들을 재귀적으로 지나가면서 이들을 직렬화한다. 예를 들어, 시스템(400)은 재귀적 구조를 다니면서 각 항목을 직렬화하기 위해 다중 쿼리를 수행할 수 있다. 그 결과 얻어지는 직렬화는 재귀적 구조를 가지며, 여기서 내포된 항목 직렬화는 그의 부모의 직렬화에 포함된다.
한 예에서, 복합 항목 내의 각 항목은 서로 다른 보안 기술자를 가질 수 있다. 따라서, 직렬화 API의 호출자가 복합 항목 내의 모든 항목에 액세스하는 것은 아니다. 이 예에서, 사용자가 모든 항목에 액세스하는 것은 아닌 상황에서, 호출자가 액세스하지 않는 항목은 직렬화되지 않는다.
배킹 파일
이 예에서, 배킹 파일은 (예를 들어, 직렬화 옵션에 기초하여) 직렬화에 인라인되어 있거나 호출자에 의해 개별적으로 복사될 수 있다.
배킹 파일 인라인(Backing File inline)
애플리케이션이 파일 백(file back) 항목(들)을 직렬화에 포함되도록 요청한 경우, 배킹 파일이 파일 저장 시스템(120)으로부터 판독될 수 있다. 이 파일 이외에, 속성(들), 생성 시각, 마지막 액세스 시각, 및/또는 수정 시각도 역시 직렬화 헤더에 포함될 수 있다. 예를 들어, 이 정보는 (예를 들어, 역직렬화시에 타임 스탬프를 그의 원래의 값으로 복원해야만 하는 경우) 항목이 백업을 위해 직렬화될 때 이용될 수 있다.
배킹 파일 인라인되어 있지 않음(Backing File not Inlined)
이 상황에서, 애플리케이션은 예를 들어 직렬화 API를 호출하는 동안 INLINE_BACKING_FILE 옵션을 설정하지 않음으로써 파일 백 항목(들)이 직렬화에 포함되도록 요청하지 않는다. 이 예에서, 직렬화 API는 파일의 내용을 직렬화에 포함하지 않고 파일 이름을 헤더에 내포할 수 있다. 따라서, 애플리케이션은 이 파일 이름을 읽고 파일 저장 시스템 API를 직접 사용하여 배킹 파일의 내용을 처리할 수 있다. 그렇지만, 이 경우에도 역시, 파일 속성 및 생성, 마지막 액세스 및 수정 타임 스탬프는 직렬화 헤더에서 캡처될 수 있다. 예를 들어, 이 정보는 (예를 들어, 역직렬화 시에 타임 스탬프를 그의 원래의 값으로 복원해야만 하는 경우) 항목이 백업을 위해 직렬화되고 있을 때 이용될 수 있다.
스키마 메타데이터(Schema Metadata)
이 예에서, 스키마 메타데이터는 각각의 엔티티 직렬화와 함께 캡처되는데 그 이유는 스키마 메타데이터가 파일 시스템 스토어(120)에 고유한 것일 수 있는 typeId를 포함하기 때문이다. 이름 및 버전 매핑을 조립하는 typeId는 사용자 정의 유형 직렬화를 역직렬화하는 데 요구되는 스키마 메타데이터이다. 예를 들어, 각각의 엔티티(예를 들어, 항목, 링크, 확장 및/또는 프래그먼트)에 연관된 스키마 메타데이터가 있을 수 있고, 이는 각자의 엔티티 직렬화와 함께 포함될 수 있다.
이 정보를 얻기 위해, 직렬화 시스템(400)은 전체 유형 이름(fully qualified type name)을 획득하기 위해 시스템 메타데이터(520)에 쿼리를 수행할 수 있다. 예를 들어, GetNameFromTypeId는 SchemaName 및 TypeName을 각각 포함하는 1행 2열의 테이블로서 TypeId가 주어지면 전체 유형 이름을 반환한다. 파일 시스템 스토어(120)의 개별적인 항목/링크/확장/프래그먼트 테이블로부터의 TypeId는 스키마 이름 및 유형 이름을 획득하기 위한 함수에의 입력으로서 이용될 수 있다. 이것은 또한 전체 유형 이름을 얻기 위해 sys.assemblies 테이블과 결합될 수 있다. 일반적으로, TypeId는 파일 시스템 스토어(들)(130)(예를 들어, 데이터베이스)에 걸쳐 고유하지 않지만, 전체 유형 이름은 고유한 것이다. 스토어내 복사(in-store copy)의 경우(예를 들어, type-id가 소스 및 타겟에서 동일한 경우), 스키마 메타데이터가 배제될 수 있다.
보안
전술한 바와 같이, 각각의 항목은 항목에 액세스할 수 있는 사용자(들) 및/또는 항목에 액세스할 수 없는 사용자(들)를 식별해주는 그에 연관된 보안 기술자를 가질 수 있다. 계속하여 도 5에 관련하여 기술된 예에서, 예시적인 신뢰 경계(trust boundary)(540)가 식별된다. 이 예에서, 환경(500)은 사용자가 파일 시스템 스토어(120)에 연결하기 위한 퍼미션을 갖는다는 것을 보장하기 위해 파일 시스템 권한 부여에 의존할 수 있다. 특정의 직렬화 또는 역직렬화 API의 호출자는 일 반적으로 API를 호출하기 전에 파일 시스템 스토어(120)와의 연결을 설정한다.
그 다음에 도 6을 참조하면, 본 발명의 한 측면에 따른 역직렬화 시스템(600)이 도시되어 있다. 시스템(600)은 예를 들어 시스템(100) 및/또는 시스템(400)에 의해 생성된 항목 및 그의 연관된 엔티티(들)를 역직렬화하는 데 이용될 수 있다. 시스템(600)은 항목 및 연관된 엔티티(들)에 랜덤 액세스하기 위해 헤더를 이용할 수 있다(예를 들어, 관심을 두고 있는 부분만을 해석/파싱할 수 있다).
시스템(600)은 항목 및 그의 연관된 엔티티(들)의 역직렬화를 용이하게 해주는 애플리케이션 프로그램 인터페이스(들)(API)(610)를 노출시킬 수 있다. API(610)는 직렬화된 항목을, 예를 들어 애플리케이션(들)(630)으로부터 수신된 역직렬화 컴포넌트(620)에 제공할 수 있다. 역직렬화 컴포넌트(620)는 항목 구조를 재생성하고 이를 파일 시스템 스토어(640)에 저장한다.
애플리케이션(630)으로부터 항목을 역직렬화하라는 요청을 수신한 후에, API(610)는 직렬화된 항목을 역직렬화 컴포넌트(620)에 제공하고, 역직렬화 컴포넌트(620)는 전술한 바와 같이 헤더 오프셋을 사용하여 헤더를 (예를 들어, 메모리로) 읽어들이고 또 역직렬화 프로세스를 통해 헤더를 이용한다. 한 예에서, 역직렬화 컴포넌트(620)는 이어서 이하의 것을 할 수 있다.
1. 코어 항목을 역직렬화한다.
2. 항목 프래그먼트를 역직렬화한다.
3. 나가는 링크를 역직렬화한다.
4. 확장을 역직렬화한다.
5. 복합 항목 컨테이너에 내포된 항목들을, 예를 들어 재귀적으로 트리를 위에서 아래로 순회하면서 역직렬화한다.
6. 배킹 파일을 역직렬화한다.
역직렬화된 항목 및 연관된 엔티티(들)는 파일 시스템 스토어(640)에 저장된다.
링크 결정(Link Fix up)
한 예에서, 역직렬화 동안에, 시스템(600)은 항목들이 일단 역직렬화되면 직렬화에 존재했던 항목들의 모든 관계가 계속하여 존재할 것을 보장한다. 게다가, 들어오는 링크 정보가 직렬화되기 때문에, 직렬화는 또한 역직렬화된 항목에 대한 들어오는 링크를 결정한다. 이것은 직렬화되었던 것이 역직렬화된 후에(예를 들면, 직후에) 동일할 것을 보장한다.
예를 들어, 결정 작업의 영역(scope)은 주어진 복사 동작에서의 모든 항목일 수 있다. 이하에 기술하는 바와 같이, 직렬화 API의 사용자는 2개의 헬퍼(helper) API BeginDeserializationBatch 및 EndDeserializationBatch를 호출함으로써 배치 영역(batch scope)을 생성할 수 있다. 이 영역 내에서 역직렬화된 어떤 항목이라도 이 영역 내의 다른 항목으로 결정된 그의 링크를 갖게 된다. 예를 들어, 항목들이 역직렬화될 때 이들의 관계에 대한 ID를 추적하기 위해 임시 테이블이 이용될 수 있다. 이 임시 테이블은 이어서 이전의 ID를 새 ID로 매핑하고, 이어서 직렬화는 링크의 타겟 ID 및 소스 ID를 정한다. 이 예에서, 링크(배치 내에서의 링크) 및 포함 관계가 정해질 수 있다.
이것은 예를 들어 DeserializeItem에 대한 추가의 플래그로서 구현될 수 있다. 그렇지만, 한 예에서, 직렬화 API의 소비자는 배치의 시작 및 끝을 명시적으로 지정해야만 한다.
API
API(610)는 시스템(600)과 애플리케이션(들)(630) 간의 통신을 용이하게 해준다. 예를 들어, API(410)는 직렬화된 항목의 역직렬화를 용이하게 해줄 수 있다. API(610)는 파일 시스템 레벨에서 및/또는 저장 프로시저 레벨에서 노출될 수 있다. 예시적인 API(610)가 이하에 기술되어 있다.
De-serialize Item API(항목 역직렬화 API)
De-serialize Item API는 항목을 역직렬화하고 이를 containerid로서 지정된 id를 갖는 컨테이너에 넣는다. 이름공간 이름 및 컨테이너 id 둘다가 널(null)로서 전달되는 경우, 이들의 값은 직렬화로부터 가져온다. 저장 프로시저가 항목이 직렬화될 때 있었던 동일한 컨테이너에 항목을 역직렬화한다. 예를 들어, 이것은 항목 id를 보유하고 있는 동안 전체 트리(예를 들어, 폴더 및 하위 폴더)를 소스로부터 목적지로 복사하는 것 등의 시나리오에서 요망될 수 있다. 이 예에서, 직렬화가 항목 id를 포함하고 있지 않은 경우, 컨테이너 id는 널(null)로서 전달될 수 없다(예를 들어, 그렇게 하면 에러가 발생한다). 예를 들어,
[System.Storage.Serialization].DeserializeItem(
@serialization varbinary (max),
@containerId uniqueidentifier,
@namespacename nvarchar(255),
@options int,
@itemid uniqueidentifier output)
@fileinfolist FileInfoList output
여기서, serialization는 (예를 들어, 이전의 직렬화의 결과로서 생성된) 직렬화된 항목을 말하고, containerId는 새로운 항목을 포함하게 될 컨테이너의 ItemId를 말하며, namespacename은 역직렬화된 항목의 이름공간 이름을 말하고, options은 역직렬화 프로세스의 거동을 규율하는 옵션을 말하며(이하에서 기술함), itemid는 새로운 항목의 ItemId를 말하고, fineinfolist는 이 항목에 포함된 파일의 파일 이름, 항목 id 및 크기의 리스트이다. 예를 들어,
Class FileInfoList: ArrayList;
//이는 이하의 인스턴스를 포함한다.
Class FileInfo {
SqlGuid itemId;
SqlString relativePath;
SqlBigint size;
}
De-serialize with Overwriting Existing Item
이 API(610)는 스토어 내의 기존의 항목을 역직렬화하고 주어진 직렬화의 내용으로 오버라이트한다. 이 예에서, 파일 배킹된 항목을 오버라이트할 때, 배킹 파일이 절단(truncate)된다. 직렬화가 파일 인라인(file inline)을 갖지 않는 경우, 이 동작의 결과 0 길이의 배킹 파일이 얻어진다.
게다가, 이 예에서, 이 API(610)는 동일한 항목을 과거의 상태로 복원할 때만 사용될 수 있다. 예를 들어,
[System.Storage.Serialization].DeserializeItemReplace(
@serialization varbinary (max),
@targetitemid uniqueidentifier,
@options int)
여기서, serialization은 직렬화된 항목(예를 들어, 이전의 직렬화의 결과로서 생성된 항목)을 말하고, targetitemid는 대체될 항목의 ItemId를 말하며, options은 역직렬화 프로세스의 거동을 규율하는 옵션을 말한다(이하에서 논의됨).
De-serialize Item From File
파일(예를 들어, 시스템(100) 및/또는 시스템(400)에 의해 생성됨)로부터 큰 항목을 역직렬화할 수 있게 해주기 위해 이 API(610)는 제공될 수 있다. 예를 들어, 파일은 전술한 바와 같이 SerializeItemToFile API에 의해 및/또는 전술한 바와 같이 SerializeItem API의 호출에 의해 생성될 수 있으며, 항목 직렬화는 차후에 파일에 기입된다. 이 예에서, 이름공간 이름 및 컨테이너 id 둘다가 널(null)로서 전달되는 경우, 그의 값은 직렬화로부터 가져온다. 예를 들어,
[System.Storage.Serialization].DeserializeItemFromFile(
@filename nvarchar (1024),
@containerId uniqueidentifier,
@namespacename nvarchar(255),
@options int.
@itemid uniqueidentifier output.
@fileinfolist FileInfoList output
여기서, filename은 역직렬화될 항목의 직렬화를 갖는 파일의 이름을 말하며, containerId는 새로운 항목을 포함하게 될 컨테이너의 ItemId를 말하고, namespacename은 역직렬화된 항목의 이름공간 이름을 말하며, options은 역직렬화 프로세스의 거동을 규율하는 옵션을 말하고(이하에서 기술됨), itemid는 새로운 항목의 ItemId를 말하며, fileinfolist는 이 항목에 포함된 파일의 파일 이름, 항목 id 및 크기의 리스트이다. 예를 들어,
Class FileInfoList: ArrayList;
//이는 이하의 인스턴스를 포함한다
Class FileInfo {
SqlGuid itemId;
SqlString relativePath;
SqlBigint size;
}
De-serialize with Overwriting existing item from file
De-serialize with Overwriting existing item from file API(610)는 파일 시스템 스토어(640) 내의 기존의 항목을 지정된 파일에 포함된 주어진 항목 직렬화의 내용으로 오버라이트한다(예를 들어, 전술한 바와 같이 SerializeItemToFile API에 의해 및/또는 SerializeItem API의 호출에 의해 생성되고 항목 직렬화는 차후에 파일에 기입됨). 이 예에서, 파일 배킹된 항목을 오버라이트할 때, 배킹 파일이 절단된다. 직렬화가 파일 인라인을 갖지 않는 경우, 이 동작의 결과 0 길이의 배킹 파일이 얻어진다.
이 예에서, DeserializeItemReplaceFromFile은 동일한 항목을 과거의 상태로 복원할 때만 사용될 수 있다. 예를 들어,
[System.Storage.SeriaIization].De-serializeItemReplaceFromFile(
@filename nvarchar (1024),
@fileoffset bigint,
@targetitemid uniqueidentifier,
@options int,
@bytesread bigint output
여기서, filename은 역직렬화될 항목의 직렬화를 갖는 파일의 이름이고, targetitemid는 대체될 항목의 ItemId이며, options은 역직렬화 프로세스의 거동을 규율하는 옵션을 말하고(이하에서 기술함), bytesread는 (예를 들어, 그 다음 오프셋으로의 점프를 용이하게 해주기 위해) 읽혀진 바이트의 수를 반환한다.
BeginDeserializationBatch 및 EndDeserializationBatch
이들 헬퍼 함수는 서로 관련되어 또 Link_Fix_Up 역직렬화 옵션(이하에서 기 술함)에 관련하여 사용될 수 있다. BeginDeserializationBatch를 호출하면 역직렬화 배치 영역을 시작한다. 이 예에서, 이 영역 내의 직렬화된 모든 항목은 이들이 계속 동작하도록 모든 그의 링크를 정정한다. 모든 항목이 역직렬화된 후에, 영역을 끝내고 이 동작에 의해 사용되는 임시 테이블을 비우기 위해 EndDeserializationBatch가 호출된다.
예를 들어, ItemA가 ItemC에 링크되어 있는 ItemB에 링크되어 있다. 게다가, 이들 항목은 새로운 스토어로 역직렬화된다. 이 예에서, 클라이언트 애플리케이션은 이하의 호출을 행한다.
Begin DeserializationBatch() (모든 링크를 추적하기 위해 임시 테이블을 생성함)
Link Fixup 플래그를 갖는 모든 항목을 역직렬화함
End DeSerializationBatch()
항목들이 이 새로운 스토어에 재생성되고 또 새로운 ItemID를 갖지만, 이들은 fix up 플래그로 인해 서로 정확하게 링크될 수 있다.
역직렬화 옵션들
예시적인 역직렬화 옵션은 이하의 것을 포함한다.
● RETAIN_ITEM_ID Oxl
직렬화된 항목과 동일한 itemId를 보유한다. 이것은 ItemID가 널(null)로 되어 있지 않은 경우에만 적용가능하다.
● RESTORE_SECURITY_DESCRIPTOR Ox2
직렬화된 항목과 동일한 명시적 액세스 제어 리스트(ACL)를 보유한다.
● RESTORE_TIME_STAMP 0x4
로컬 생성 및 수정 시각을 복원한다(예를 들어, 복사 및/또는 복원에 적용가능하다).
● RESTORE_SYNC_METADATA Ox8
항목에 대한 _ChangeInformation. SyncMetadata를 복원한다. Replica/Mapping/Conflict 항목의 경우에, 이들 항목은 이 옵션이 저정된 경우에만 복원된다.
● LINK_FIX_UP OxlO
Link_Fix_Up 옵션은 모든 항목 링크가 보존되도록 보장하기 위해 2개의 헬퍼 API BeginSerializationBatch 및 EndSerializationBatch에 관련하여 이용될 수 있다. 한 예에서, Link_Fix_Up이 배치 영역 밖에서 사용되는 경우, 그 호출은 실패한다.
역직렬화에서 사용자 정의 유형을 사용
역직렬화 컴포넌트(620)에 의한 사용자 정의 유형(들)(UDT)의 재구성은, (1) 직렬화가 유효한 직렬화인지 여부를 확인하기 위해, (2) 항목을 역직렬화하기 위해 필요한 유형이 시스템에 존재하는지 여부를 확인하기 위해, 및/또는 (3) 검증 제약(들)을 트리거하기 위해 수행될 수 있다. 이 예에서, 직렬화로부터 UDT의 재구성은 코어 항목의 역직렬화 이전에 수행된다.
그 다음에 도 7을 참조하면, 본 발명의 한 측면에 따른 역직렬화 환경(700) 이 도시되어 있다. 환경(700)은 베이스 업데이트(base update) API(720)를 통해 파일 시스템 스토어(640)와 인터페이스하는 역직렬화 시스템(600)을 포함한다. 예시적인 신뢰 경계(730)가 추가적으로 식별된다. 전술한 바와 같이, 특정의 역직렬화 API의 호출자는 일반적으로 API를 호출하기 전에 파일 시스템 스토어(640)와의 연결을 설정한다.
예를 들어, 애플리케이션(630)은 역직렬화 시스템(600)에 항목 직렬화를 제공할 수 있다. 전술한 바와 같이, 역직렬화 시스템(600)은 시스템 메타데이터(710)로부터 사용자 정의 유형에 관한 정보를 획득할 수 있다. 베이스 업데이트 API(740)를 통해, 역직렬화 시스템(600)은 역직렬화된 코어 항목 및 연관된 엔티티(들)을 저장하려고 시도할 수 있다. 베이스 업데이트 API(720)는 예를 들어 이하의 것을 포함할 수 있다.
CreateItem
역직렬화 시스템(600)은 이 베이스 업데이트 API(720)를 사용하여 파일 시스템 스토어(640)에 역직렬화된 항목을 생성할 수 있다. 예를 들어, 이 베이스 업데이트 API(720)는 오버라이트 없이 항목을 생성할 때 이용될 수 있다.
SetItemSecurity
이 베이스 업데이트 API(720)는 역직렬화된 항목의 보안 기술자를 설정하는 데 이용될 수 있다. 예를 들어, 보안 기술자를 설정할 때 이하의 정책이 이용될 수 있다.
● 역직렬화 시스템(600)이 복원 시맨틱스를 지정하지 않을 때, SetItemSecurity가 액세스 제어 리스트만을 설정하는 데 사용된다.
● 복원 시맨틱스가 지정되어 있는 경우, SetItemSecurity가 액세스 제어 리스트 및 그룹 및 소유자 둘다를 설정하는 데 이용될 수 있다.
ReplaceItem
역직렬화 시스템(600)은 기존의 항목을 파일 시스템 스토어(640) 내의 역직렬화된 항목으로 오버라이트하기 위해 이 베이스 업데이트 API(720)를 호출할 수 있다. 예를 들어, 이 베이스 업데이트 API(720)는 오버라이트로 생성할 때 이용될 수 있다.
MoveItem
이 베이스 업데이트 API(720)는 그 항목이 직렬화될 때 가졌던 것과 동일한 컨테이너 및 동일한 이름공간 이름을 갖도록 대체될 항목을 이동시키기 위해 사용될 수 있다.
CreateLink
역직렬화 시스템(600)은 이 베이스 업데이트 API(720)를 이용하여 파일 시스템 스토어(640) 내의 항목의 나가는 링크(들)를 역직렬화할 수 있다.
CreateExtension
이 베이스 업데이트 API(720)는 파일 시스템 스토어(640) 내의 항목의 확장을 역직렬화하는 데 사용될 수 있다.
CreateItemFragment
역직렬화 시스템(600)은 이 베이스 업데이트 API(720)를 사용하여 파일 시스 템 스토어(640) 내의 항목의 프래그먼트를 역직렬화할 수 있다.
UpdateLink
이 베이스 업데이트 API(720)는 이하에 기술하는 바와 같이, 생성된 항목에 대한 들어오는 링크인 링크의 타겟 항목 id를 업데이트하기 위해 역직렬화 시스템(600)에 의해 이용될 수 있다.
이동한 항목의 대체
역직렬화 동안에 항목을 과거의 그의 복사본으로 대체하는 것은 복원 동안의 통상적인 일일 수 있다. 중요한 것은, 항목이 직렬화(예를 들어, 백업)되었던 시각과 역직렬화(예를 들어, 복원)되었던 시각 사이에 복원된 항목이 이동할 수 있 다는 것이다. 이동은 이하의 것 중 하나를 말하는 일반적인 동작이다.
a) 부모 컨테이너를 변경한다.
b) 이름공간 이름을 변경한다.
c) 이름공간 이름 및 부모 컨테이너 둘다를 변경한다.
이 예에서, 항목이 복원될 때, 대체(replace) 동작은 이름공간 이름 또는 컨테이너 id를 변경할 수 없다. 따라서, 항목을 그의 원래의 위치로 복원하기 위해서는, 동일한 컨테이너 및 동일한 이름공간 이름을 갖도록 하고(이들 중 어느 하나가 변경된 경우) 이어서 대체를 수행하기 위해 MoveItem이 사용된다.
복합 항목의 대체
이 예에서, 복합 항목에 대해 DeserializeItemReplace가 호출될 때(예를 들어, 복합 항목을 과거의 그의 복사본으로 대체할 때), 이하의 일들이 일어난다.
1) 루트 항목이 그의 원래의 위치로 이동되고, 그의 이름공간 이름이 그의 이전의 값으로 복원되며, 직렬화 내의 항목으로 대체된다.
2) 직렬화(예를 들어, 백업)된 이후에 복합 항목 트리에 부가되었던 항목이 삭제된다.
3) 직렬화된 이후에 복합 항목으로부터 삭제되었던 항목은 CreateItem을 사용하여 역직렬화 프로세스의 일부로서 생성된다.
4) 마지막 직렬화 이후에 삭제되었던 항목은 ReplaceItem을 사용하여 대체된다.
역직렬화되는 항목에 대한 들어오는 링크의 처리
한 예에서, 복원 동작 동안에(예를 들어, 항목 id가 환경(700)에 보유되어 있을 때), 이하의 것들이 항목으로 들어오는 링크에 대한 타겟 항목 id를 결정하는 데 이용될 수 있다.
각각의 들어오는 링크 id에 대해,
a. 링크 id를 갖는 링크가 스토어에 존재하는지를 검사한다. 존재하는 경우, 다음 단계를 따르고, 그렇지 않은 경우, 다음 단계를 건너뛴다.
b. UpdateLink API(720)를 사용하여 이들 링크의 타겟 항목 id를 역직렬화된 항목의 id로 업데이트한다.
c. 들어오는 링크 id 모두에 대해 상기 2개의 단계를 반복한다.
파일 배킹된 항목의 역직렬화
파일이 직렬화 내에 인라인되어 있음
파일이 직렬화 내에 인라인되어 있는 경우, 한 예에서, 헤더는 이하의 정보, 즉 파일 배킹된 항목의 항목 id(이로부터 파일이 기입될 경로가 유추될 수 있음) 및 배킹 파일을 포함하는 직렬화의 일부분을 전달할 수 있다. 이것은 베이스 업데이트 API(720)를 사용하여 파일/파일들을 지정된 위치에 기입하는 데 이용될 수 있다.
파일이 직렬화 내에 인라인되어 있지 않음
이 예에서, 파일이 직렬화 내에 인라인되어 있지 않은 경우, 베이스 업데이트 API(720)를 사용하여 배킹 파일을 타겟 위치로 복사하는 것은 호출자의 책임이다.
그 용어가 본 명세서에 정의된 바와 같이, 시스템(100), 파일 시스템 스토어(120), 시스템(400), API(410), 애플리케이션(들)(420), 시스템(500), 파일 저장 시스템 메타데이터(510), 시스템 메타데이터(520), 파일 시스템 뷰(530), 환경(600), API(610), 역직렬화 컴포넌트(620), 애플리케이션(들)(630), 파일 시스템 스토어(640), 환경(700), 시스템 메타데이터(710) 및/또는 베이스 업데이트 API(720)가 컴퓨터 컴포넌트일 수 있다는 것을 잘 알 것이다.
간략히 도 8 내지 도 11을 참조하면, 본 발명에 따라 구현될 수 있는 방법이 나타내어져 있다. 설명의 편의상, 이 방법이 일련의 블록으로서 도시되고 기술되어 있지만, 본 발명이 블록들의 순서에 의해 제한되지 않는데, 왜냐하면 본 발명에 따르면 어떤 블록들이 본 명세서에 도시되고 기술된 것과 다른 순서로 및/또는 다른 블록들과 동시에 행해질 수 있기 때문이라는 것을 잘 알 것이다. 게다가, 도 시된 블록들 모두가 본 발명에 따른 방법을 구현해야만 하는 것은 아닐 수 있다.
본 발명은 하나 이상의 컴포넌트에 의해 실행되는 프로그램 모듈 등의 컴퓨터 실행가능 명령어의 일반적인 관점에서 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정의 작업을 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 데이터 구조, 기타 등등을 포함한다. 일반적으로, 프로그램 모듈의 기능은 여러가지 실시예에서 원하는 바에 따라 결합 또는 분산될 수 있다.
도 8 및 도 9를 참조하면, 본 발명의 한 측면에 따라 항목의 직렬화를 용이하게 해주는 방법(800)이 도시되어 있다. 804에서, 항목을 직렬화하라는 요청이 (예를 들어, 애플리케이션으로부터) 수신된다. 808에서, 헤더를 위한 메모리가 할당된다. 812에서, 코어 항목이 직렬화된다.
816에서, 있는 경우, 항목 프래그먼트(들)가 직렬화된다. 그 다음에, 820에서, 있는 경우, 나가는 링크(들)가 직렬화된다. 824에서, 있는 경우, 들어오는 링크(들) 식별자가 헤더에 채워진다. 828에서, 있는 경우, 확장(들)이 직렬화된다. 832에서, 있는 경우, 내포된 항목(들)이 직렬화된다. 836에서, 있는 경우, 배킹 파일이 직렬화된다. 840에서, 직렬화 길이, 헤더 오프셋 및 헤더가 직렬화에 기입된다. 844에서, 직렬화에 관한 정보가 요청자(예를 들어, 요청측 애플리케이션)에 제공된다. 예를 들어, 직렬화 자체가 요청측 애플리케이션에 제공될 수 있다. 다른 대안으로서, 직렬화에 대한 포인터 및/또는 직렬화의 파일 이름이 요청측 애플리케이션에 제공될 수 있다.
그 다음에, 도 10 및 도 11을 참조하면, 본 발명의 한 측면에 따라 항목의 역직렬화를 용이하게 해주는 방법(1000)이 도시되어 있다. 1004에서, 항목을 역직렬화하라는 요청이 수신된다. 1008에서, 헤더를 메모리로 읽어들이기 위해 헤더 오프셋이 사용된다. 1012에서, 코어 항목이 역직렬화된다. 1016에서, 있는 경우, 항목 프래그먼트(들)가 역직렬화된다. 1020에서, 있는 경우, 나가는 링크(들)가 역직렬화된다.
1024에서, 있는 경우, 확장(들)이 역직렬화된다. 1032에서, 있는 경우, 내포된 항목(들)이 역직렬화된다. 1036에서, 있는 경우, 배킹 파일이 역직렬화된다. 역직렬화된 항목 및 연관된 엔티티는 파일 저장 시스템에 저장될 수 있다.
본 발명의 여러가지 측면에 대한 부가의 설명을 제공하기 위해, 도 12 및 이하의 설명은 본 발명의 여러가지 측면이 구현될 수 있는 적합한 오퍼레이팅 시스템(1210)에 대한 간략한 일반적 설명을 제공하기 위한 것이다. 본 발명이 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 프로그램 모듈 등의 컴퓨터 실행가능 명령어의 일반적인 관점에서 기술되어 있지만, 당업자라면 본 발명이 다른 프로그램 모듈에 관련하여 및/또는 하드웨어와 소프트웨어의 조합으로서 구현될 수 있음을 잘 알 것이다. 그렇지만, 일반적으로 프로그램 모듈은 특정의 작업을 수행하거나 특정의 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조, 기타 등등을 포함한다. 오퍼레이팅 환경(1210)은 적합한 오퍼레이팅 환경의 단지 한 예이고, 본 발명의 사용 및 기능의 범위에 관한 어떤 제한을 암시하려는 것이 아니다. 본 발명에서 사용하기에 적합할 수 있는 다른 공지의 컴퓨터 시스템, 환경 및/또는 구성은 퍼스널 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스 템, 마이크로프로세서 기반 시스템, 프로그램가능 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템 또는 장치를 포함하는 분산 컴퓨팅 환경, 및 기타 등등을 포함하지만, 이에 한정되는 것은 아니다.
도 12를 참조하면, 본 발명의 여러가지 측면을 구현하는 예시적인 환경(1210)은 컴퓨터(1212)를 포함한다. 컴퓨터(1212)는 프로세싱 유닛(1214), 시스템 메모리(1216), 및 시스템 버스(1218)를 포함한다. 시스템 버스(1218)는 시스템 메모리(1216)를 비롯한 시스템 컴포넌트들을 프로세싱 유닛(1214)에 연결한다. 프로세싱 유닛(1214)은 여러가지 이용가능한 프로세서 중 임의의 것일 수 있다. 듀얼 마이크로프로세서 및 다른 멀티프로세서 아키텍처도 역시 프로세싱 유닛(1214)으로서 이용될 수 있다.
시스템 버스(1218)는 메모리 버스 또는 메모리 콘트롤러, 주변 버스 또는 외부 버스, 및/또는 8비트 버스, ISA(Industrial Standard Architecture), MSA(Micro-Channel Architecture), EISA(Extended ISA), IDE(Intelligent Drive Electronics), VLB(VESA Local Bus), PCI(Peripheral Component Interconnect), USB(Universal Serial Bus), AGP(Advanced Graphics Port), PCMCIA(Personal Computer Memory Card International Association bus), 및 SCSI(Small Computer Systems Interface)(이에 한정되는 것은 아님)를 비롯한 여러가지 이용가능한 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 비롯한 몇가지 유형의 버스 구조(들) 중 임의의 것일 수 있다.
시스템 메모리(1216)는 휘발성 메모리(1220) 및 비휘발성 메모리(1222)를 포 함한다. 시동 중과 같은 때에 컴퓨터(1212) 내의 구성요소들 간에 정보를 전송하는 기본적인 루틴을 포함하는 기본 입/출력 시스템(BIOS)은 비휘발성 메모리(1222)에 저장된다. 제한이 아닌 예로서, 비휘발성 메모리(1222)는 ROM(read only memory), PROM(programmable ROM), EPROM(electrically programmable ROM), EEPROM(electrically erasable ROM), 또는 플래쉬 메모리를 포함할 수 있다. 비휘발성 메모리(1220)는 외부 캐쉬 메모리로서 기능하는 RAM(random access memory)를 포함한다. 제한이 아닌 예로서, RAM은 SRAM(synchronous RAM), DRAM(dynamic RAM), SDRAM(synchronous DRAM), DDR SDRAM(double data rate SDRAM), ESDRAM(enhanced SDRAM). SLDRAM(Synchlink DRAM), 및 DRRAM(direct Rambus RAM) 등의 여러가지 형태로 이용가능하다.
컴퓨터(1212)는 또한 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체를 포함한다. 도 12는 예를 들어, 디스크 저장 장치(1224)를 나타내고 있다. 디스크 저장 장치(1224)는 자기 디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, 재즈(Jaz) 드라이브, 집(Zip) 드라이브, LS-100 드라이브, 플래쉬 메모리 카드, 또는 메모리 스틱을 포함하지만, 이에 한정되는 것은 아니다. 게다가, 디스크 저장 장치(1224)는 별개로 또는 CD-ROM(compact disk ROM device), CD-R 드라이브(CD recordable drive), CD-RW 드라이브(CD rewritable drive), 또는 DVD-ROM(digital versatile disk ROM drive) 등의 광학 디스크 드라이브를 비롯한 다른 저장 매체와 함께 저장 매체를 포함할 수 있다. 디스크 저장 장치(1224)의 시스템 버스(1218)로의 연결을 용이하게 해주기 위해, 인터페이스(1226) 등의 분리형 또는 비분리형 인터페이스가 일반적으로 사용된다.
도 12가 적합한 오퍼레이팅 환경(1210)에 기술된 기본적인 컴퓨터 자원과 사용자 간의 매개체로서 기능하는 소프트웨어를 기술함을 잘 알 것이다. 이러한 소프트웨어는 오퍼레이팅 시스템(1228)을 포함한다. 디스크 저장 장치(1224)에 저장될 수 있는 오퍼레이팅 시스템(1228)은 컴퓨터 시스템(1212)의 자원을 제어 및 할당하는 동작을 한다. 시스템 애플리케이션(1230)은 시스템 메모리(1216)에 또는 디스크 저장 장치(1232) 상에 저장된 프로그램 모듈(1232) 및 프로그램 데이터(1234)를 통해 오퍼레이팅 시스템(1228)에 의한 자원의 관리를 이용한다. 본 발명이 여러가지 오퍼레이팅 시스템 또는 오퍼레이팅 시스템들의 조합으로 구현될 수 있음을 잘 알 것이다.
사용자는 입력 장치(들)(1236)를 통해 컴퓨터(1212)에 명령 또는 정보를 입력한다. 입력 장치(1236)는 마우스 등의 포인팅 디바이스, 트랙볼, 스타일러스, 터치패드, 키보드, 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너, TV 튜너 카드, 디지털 카메라, 디지털 비디오 카메라, 웹 카메라, 기타 등등을 포함하지만, 이에 한정되는 것은 아니다. 이들 및 다른 입력 장치는 인터페이스 포트(들)(1238)를 거쳐 시스템 버스(1218)를 통해 프로세싱 유닛(1214)에 연결된다. 인터페이스 포트(들)(1238)는 예를 들어 직렬 포트, 병렬 포트, 게임 포트, 및 USB(Universal Serial Bus)를 포함한다. 출력 장치(들)(1240)는 입력 장치(들)(1236)와 동일한 유형의 포트들 중 어떤 것을 사용한다. 따라서, 예를 들어, USB 포트는 컴퓨터(1212)에 입력을 제공하기 위해 또 컴퓨터(1212)로부터의 정보를 출 력 장치(1240)로 출력하기 위해 사용될 수 있다. 출력 어댑터(1242)는 출력 장치(1240) 중에서도 특히 특수한 어댑터를 필요로 하는 모니터, 스피커 및 프린터와 같은 어떤 출력 장치(1240)가 있음을 나타내기 위해 제공되어 있다. 출력 어댑터(1242)는 제한이 아닌 예로서, 출력 장치(1240)와 시스템 버스(1218) 간의 연결 수단을 제공하는 비디오 및 사운드 카드를 포함한다. 유의할 점은 다른 장치 및/또는 장치들의 시스템이 원격 컴퓨터(들)(1244) 등의 입력 및 출력 기능 둘다를 제공한다는 것이다.
컴퓨터(1212)는 원격 컴퓨터(들)(1244) 등의 하나 이상의 원격 컴퓨터에의 논리적 연결을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(들)(1244)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 워크스테이션, 마이크로프로세서 기반 가전 기기, 피어 장치 또는 다른 통상의 네트워크 노드, 기타 등등일 수 있으며, 일반적으로 컴퓨터(1212)에 관련하여 기술된 구성요소들의 대부분 또는 그 전부를 포함한다. 간략함을 위해, 단지 메모리 저장 장치(1246)만이 원격 컴퓨터(들)(1244)에 도시되어 있다. 원격 컴퓨터(들)(1244)는 네트워크 인터페이스(1248)를 통해 컴퓨터(1212)에 논리적으로 연결되어 있고 이어서 통신 연결(1250)을 통해 물리적으로 연결되어 있다. 네트워크 인터페이스(1248)는 LAN(local-area network, 근거리 통신망) 및 WAN(Wide-area network, 원거리 통신망)를 포괄한다. LAN 기술은 FDDI(Fiber Distributed Data Interface), CDDI(Copper Distributed Data Interface), 이더넷/IEEE 802.3, 토큰링/IEEE 802.5, 기타 등등의 통신 네트워크를 포괄한다. WAN 기술은 포인트-투-포인트 링크, ISDN(Integrated Services Digital Network, 종합 정보 통신망) 및 그의 변형 등의 회선 교환 네트워크, 패킷 교환 네트워크, 및 DSL(Digital Subscriber Line, 디지털 가입자 회선)을 포함하지만, 이에 한정되지 않는다.
통신 연결(들)(1250)은 네트워크 인터페이스(1248)를 버스(1218)에 연결하는 데 이용되는 하드웨어/소프트웨어를 말한다. 통신 연결(1250)이 설명의 명백함을 위해 컴퓨터(1212) 내부에 도시되어 있지만, 이는 컴퓨터(1212) 외부에 있을 수도 있다. 네트워크 인터페이스(1248)에의 연결을 위해 필요한 하드웨어/소프트웨어는 단지 예로서 통상의 전화급 모뎀을 비롯한 모뎀, 케이블 모뎀 및 DSL 모뎀, ISDN 어댑터, 및 이더넷 카드 등의 내장 및 외장 기술을 포함한다.
이상에서 기술한 바는 본 발명의 예들을 포함하고 있다. 물론, 본 발명을 기술하기 위해 생각할 수 있는 모든 컴포넌트 또는 방법의 조합을 기술할 수는 없지만, 당업자라면 본 발명의 많은 추가의 결합 및 치환이 가능함을 잘 알 수 있다. 따라서, 본 발명은 청구된 청구항의 정신 및 범위 내에 속하는 이러한 변경, 수정 및 변형 모두를 포괄하는 것으로 보아야 한다. 게다가, 용어 "포함하는"이 상세한 설명 또는 청구항에서 사용되는 범위까지, 이러한 용어는 "포함하는"이 청구항에서 이행구로 사용될 때 해석되는 바와 같이 용어 "포함하는"과 유사한 방식으로 포함적인 것으로 보아야 한다.
본 발명은 파일 시스템 항목(들) 및 연관된 엔티티(들)의 직렬화 및/또는 역직렬화를 제공한다.

Claims (20)

  1. 항목에 연관된 엔티티들을 식별하는 식별 컴포넌트, 및
    상기 항목, 상기 연관된 엔티티들, 및 상기 항목 및 연관된 엔티티들에 연관된 정보를 제공하는 헤더를 직렬화하는 직렬화 컴포넌트
    를 포함하는 직렬화 시스템.
  2. 제1항에 있어서,
    상기 연관된 엔티티는 나가는 링크(outgoing link), 들어오는 링크(incoming link), 내포된 항목, 확장(extension), 항목 프래그먼트(item fragment), 및 배킹 파일(backing file) 중 적어도 하나를 포함하는 직렬화 시스템.
  3. 제1항에 있어서,
    상기 항목 및 연관된 엔티티의 직렬화의 개시는 요청에 기초하는 직렬화 시스템.
  4. 제3항에 있어서,
    상기 연관된 엔티티의 식별은 상기 요청에 연관된 컨텍스트에 연관된 보안 정보에 적어도 부분적으로 기초하는 직렬화 시스템.
  5. 제4항에 있어서,
    상기 연관된 엔티티의 식별은 추가적으로 상기 연관된 엔티티에 연관된 액세스 제어 리스트에 기초하는 직렬화 시스템.
  6. 제1항에 있어서,
    상기 헤더는 상기 항목 및 상기 연관된 엔티티들에의 랜덤 액세스를 용이하게 해주는 직렬화 시스템.
  7. 제1항에 있어서,
    상기 항목의 직렬화에 연관된 애플리케이션과 상기 시스템 간의 통신을 용이하게 해주는 애플리케이션 프로그램 인터페이스를 더 포함하는 직렬화 시스템.
  8. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 상기 항목 및 상기 연관된 엔티티의 내보내기(export), 백업(backup), 복원(restore) 및 복사(copy) 중 적어도 하나를 용이하게 해주는 직렬화 시스템.
  9. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 직렬화 옵션에 연관된 정보를 수신하고,
    상기 직렬화 옵션은 복수의 연관된 엔티티들 중 어느 것이 상기 항목과 직렬화되어야 하는지를 선택하는 데 이용되는 직렬화 시스템.
  10. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 파일 시스템 레벨에서 노출되는 직렬화 시스템.
  11. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 저장 프로시저 레벨(stored procedure level)에서 노출되는 직렬화 시스템.
  12. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 상기 직렬화를 바이트 어레이 형태로 반환하는 직렬화 시스템.
  13. 제7항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 상기 직렬화에 연관된 포인터 또는 파일 이름을 반환하는 직렬화 시스템.
  14. 제1항에 있어서,
    상기 연관된 엔티티는 내포된 항목을 포함하며,
    상기 시스템은 추가적으로 상기 내포된 항목을 재귀적으로 직렬화하는 직렬화 시스템.
  15. 제1항의 시스템에 의해 발생된 직렬화를 수신하는 역직렬화 시스템.
  16. 항목의 직렬화를 용이하게 해주는 방법으로서,
    상기 항목을 직렬화하는 단계,
    상기 항목에 연관된 적어도 하나의 엔티티를 식별하는 단계, 및
    상기 연관된 엔티티들을 직렬화하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 항목을 직렬화하라는 요청을 수신하는 단계,
    상기 항목 및 연관된 엔티티에 연관된 정보를 포함하는 헤더를 직렬화하는 단계, 및
    직렬화 길이 및 헤더 오프셋을 직렬화하는 단계
    중 적어도 하나를 더 포함하는 방법.
  18. 제16항에 있어서,
    상기 연관된 엔티티는 나가는 링크, 들어오는 링크, 내포된 항목, 확장, 항목 프래그먼트, 보안 정보, 및 배킹 파일 중 적어도 하나를 포함하는 방법.
  19. 제16항의 방법을 수행하는 컴퓨터 실행가능 명령어들이 저장되어 있는 컴퓨터 판독가능 매체.
  20. 2개 이상의 컴퓨터 컴포넌트들 간에 전송되어 항목의 직렬화된 전송을 용이하게 해주는 데이터 패킷으로서,
    직렬화 길이 필드,
    헤더 오프셋 필드,
    코어 항목 필드,
    적어도 하나의 연관된 엔티티를 포함하는 필드, 및
    상기 항목 및 연관된 엔티티에 연관된 정보를 제공하는 헤더 필드
    를 포함하는 데이터 패킷.
KR1020060001344A 2005-02-24 2006-01-05 파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는시스템 및 방법 KR20060094458A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US65611805P 2005-02-24 2005-02-24
US60/656,118 2005-02-24
US11/121,284 2005-05-03
US11/121,284 US7676481B2 (en) 2005-02-24 2005-05-03 Serialization of file system item(s) and associated entity(ies)

Publications (1)

Publication Number Publication Date
KR20060094458A true KR20060094458A (ko) 2006-08-29

Family

ID=36599106

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060001344A KR20060094458A (ko) 2005-02-24 2006-01-05 파일 시스템 항목(들) 및 연관된 엔티티(들)를 직렬화하는시스템 및 방법

Country Status (7)

Country Link
US (1) US7676481B2 (ko)
EP (1) EP1696344A3 (ko)
JP (1) JP2006236328A (ko)
KR (1) KR20060094458A (ko)
AU (1) AU2006200054A1 (ko)
BR (1) BRPI0600133A (ko)
CA (1) CA2533770A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873683B2 (en) 2005-07-01 2011-01-18 Qnx Software Systems Gmbh & Co. Kg File system having transaction record coalescing
US8959125B2 (en) 2005-07-01 2015-02-17 226008 Ontario Inc. File system having inverted hierarchical structure
US7970803B2 (en) * 2005-07-01 2011-06-28 Qnx Software Systems Gmbh & Co. Kg Optimized startup verification of file system integrity
US7809777B2 (en) * 2005-07-01 2010-10-05 Qnx Software Systems Gmbh & Co. Kg File system having deferred verification of data integrity
US8930812B2 (en) * 2006-02-17 2015-01-06 Vmware, Inc. System and method for embedding, editing, saving, and restoring objects within a browser window
US8566503B2 (en) * 2006-08-25 2013-10-22 Qnx Software Systems Limited Multimedia filesystem having unified representation of content on diverse multimedia devices
US7908276B2 (en) * 2006-08-25 2011-03-15 Qnx Software Systems Gmbh & Co. Kg Filesystem having a filename cache
US8015483B2 (en) * 2006-10-20 2011-09-06 Microsoft Corporation Processing an XML feed with extensible or non-typed elements
US8156507B2 (en) * 2006-12-08 2012-04-10 Microsoft Corporation User mode file system serialization and reliability
US8117601B2 (en) * 2007-11-14 2012-02-14 Microsoft Corporation Internal test and manipulation of an application
US9350595B1 (en) * 2007-12-27 2016-05-24 Emc Corporation System and method for serializing and deserializing data objects into a single binary stream
US8805776B2 (en) 2008-06-26 2014-08-12 Microsoft Corporation Relationship serialization and reconstruction for entities
US8341154B2 (en) * 2009-10-28 2012-12-25 Microsoft Corporation Extending types hosted in database to other platforms
US8671085B2 (en) 2011-12-09 2014-03-11 Microsoft Corporation Consistent database recovery across constituent segments
US8527462B1 (en) 2012-02-09 2013-09-03 Microsoft Corporation Database point-in-time restore and as-of query
US9465856B2 (en) 2013-03-14 2016-10-11 Appsense Limited Cloud-based document suggestion service
US9367646B2 (en) * 2013-03-14 2016-06-14 Appsense Limited Document and user metadata storage
US10572451B2 (en) * 2014-01-31 2020-02-25 Hewlett Packard Enterprise Development Lp File system storage
US20160239499A1 (en) * 2015-02-12 2016-08-18 Red Hat, Inc. Object Creation Based on Copying Objects Corresponding to Similar Entities
CN104615507A (zh) * 2015-02-13 2015-05-13 广东欧珀移动通信有限公司 备份数据的批量还原方法和装置
US9479578B1 (en) * 2015-12-31 2016-10-25 Dropbox, Inc. Randomized peer-to-peer synchronization of shared content items
US10021184B2 (en) 2015-12-31 2018-07-10 Dropbox, Inc. Randomized peer-to-peer synchronization of shared content items
US10635632B2 (en) 2017-08-29 2020-04-28 Cohesity, Inc. Snapshot archive management
EP4293528A3 (en) * 2017-08-29 2024-01-24 Cohesity, Inc. Snapshot archive management
US11874805B2 (en) 2017-09-07 2024-01-16 Cohesity, Inc. Remotely mounted file system with stubs
US10719484B2 (en) 2017-09-07 2020-07-21 Cohesity, Inc. Remotely mounted file system with stubs
US11321192B2 (en) 2017-09-07 2022-05-03 Cohesity, Inc. Restoration of specified content from an archive
US11288079B2 (en) * 2018-01-25 2022-03-29 Red Hat, Inc. Reducing classloading of hierarchically configured applications via provisioning
US11487701B2 (en) 2020-09-24 2022-11-01 Cohesity, Inc. Incremental access requests for portions of files from a cloud archival storage tier

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05225012A (ja) * 1992-02-12 1993-09-03 Fuji Xerox Co Ltd データ列変換復元方法
US5506983A (en) * 1992-07-06 1996-04-09 Microsoft Corporation Method and system for transactioning of modifications to a tree structured file
US5873103A (en) 1994-02-25 1999-02-16 Kodak Limited Data storage management for network interconnected processors using transferrable placeholders
US6961712B1 (en) * 1996-10-25 2005-11-01 Ipf, Inc. Consumer product information request (CPIR) enabling servlets and web-based consumer product information catalogs employing the same
US5832274A (en) 1996-10-09 1998-11-03 Novell, Inc. Method and system for migrating files from a first environment to a second environment
JPH11184860A (ja) * 1997-12-18 1999-07-09 Sony Corp 情報処理装置および情報処理方法、並びに記録媒体
US6532476B1 (en) * 1999-11-13 2003-03-11 Precision Solutions, Inc. Software based methodology for the storage and retrieval of diverse information
US7120863B1 (en) * 1999-11-15 2006-10-10 International Business Machines Corporation Method, system, and program for interfacing with elements in a document
US6877006B1 (en) * 2000-07-19 2005-04-05 Vasudevan Software, Inc. Multimedia inspection database system (MIDaS) for dynamic run-time data evaluation
US6912543B2 (en) 2000-11-14 2005-06-28 International Business Machines Corporation Object-oriented method and system for transferring a file system
WO2002057917A2 (en) * 2001-01-22 2002-07-25 Sun Microsystems, Inc. Peer-to-peer network computing platform
US7200627B2 (en) * 2001-03-21 2007-04-03 Nokia Corporation Method and apparatus for generating a directory structure
US7136865B1 (en) * 2001-03-28 2006-11-14 Siebel Systems, Inc. Method and apparatus to build and manage a logical structure using templates
US7120639B1 (en) * 2001-06-27 2006-10-10 Microsoft Corporation Pluggable formatters
US7092950B2 (en) * 2001-06-29 2006-08-15 Microsoft Corporation Method for generic object oriented description of structured data (GDL)
US6898604B1 (en) * 2001-06-29 2005-05-24 Microsoft Corporation XML serialization and deserialization
JP2004199517A (ja) * 2002-12-19 2004-07-15 Toshiba Corp 電子ドキュメントファイリング装置、電子ドキュメントファイリングシステム、電子ドキュメントファイリング方法及びプログラム
US7020666B2 (en) * 2003-03-07 2006-03-28 Microsoft Corporation System and method for unknown type serialization
JP2004334436A (ja) * 2003-05-06 2004-11-25 Ns Solutions Corp 大規模データ取扱装置
US7325226B2 (en) * 2003-06-19 2008-01-29 Microsoft Corporation Modular object serialization architecture
JP2005051308A (ja) * 2003-07-29 2005-02-24 Ricoh Co Ltd 文書管理装置、文書管理方法及び文書管理システム
US7464082B2 (en) * 2004-11-29 2008-12-09 International Business Machines Corporation Methods for de-serializing data objects on demand

Also Published As

Publication number Publication date
EP1696344A2 (en) 2006-08-30
US7676481B2 (en) 2010-03-09
EP1696344A3 (en) 2007-02-07
CA2533770A1 (en) 2006-08-24
JP2006236328A (ja) 2006-09-07
BRPI0600133A (pt) 2006-10-24
AU2006200054A1 (en) 2006-09-07
US20060190469A1 (en) 2006-08-24

Similar Documents

Publication Publication Date Title
US7676481B2 (en) Serialization of file system item(s) and associated entity(ies)
JP4583377B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報のユニットに対する関係および階層の同期サービスを実現するシステムおよび方法
US5937406A (en) File system interface to a database
US6871245B2 (en) File system translators and methods for implementing the same
US6804663B1 (en) Methods for optimizing the installation of a software product onto a target computer system
KR100868410B1 (ko) 관리화된 파일 시스템 필터 모델 및 아키텍쳐
JP4583376B2 (ja) ハードウェア/ソフトウェアインタフェースシステムにより管理可能な情報のユニットに対する同期処理サービスを実現するシステムおよび方法
KR101041319B1 (ko) 하드웨어/소프트웨어 인터페이스 시스템에 의해 관리가능한정보 단위의 피어 대 피어 동기화를 위해 충돌 처리를제공하는 시스템 및 방법
KR101224680B1 (ko) 데이터베이스 내부에 표현된 파일 시스템
JP4944008B2 (ja) ファイルシステム内での効率的なファイルコンテンツをサーチするためのシステム、方法及びコンピュータアクセス可能な記録媒体
US20060059204A1 (en) System and method for selectively indexing file system content
US6370549B1 (en) Apparatus and method for searching for a file
US20050091285A1 (en) Promotion and demotion techniques to facilitate file property management between object systems
JPH07175704A (ja) ファイル装置およびデータオブジェクトアクセス方法
JP4583375B2 (ja) 同期スキーマの実装のためのシステム
EP3622416B1 (en) Metadata storage for placeholders in a storage virtualization system
RU2371757C2 (ru) Системы и способы моделирования данных в основанной на предметах платформе хранения
KR101109390B1 (ko) 하드웨어/소프트웨어 인터페이스 시스템에 의해 관리가능한 정보의 단위들에 대한 동기화 서비스를 제공하는시스템 및 방법
KR20060110733A (ko) 중간 파일 시스템 공유 또는 장치를 통해 컴퓨터 시스템을동기화하는 시스템 및 방법
MXPA06000913A (en) Serialization of file system item(s) and associated entity(ies)

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid