KR20070121664A - 데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법 - Google Patents
데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법 Download PDFInfo
- Publication number
- KR20070121664A KR20070121664A KR1020077020801A KR20077020801A KR20070121664A KR 20070121664 A KR20070121664 A KR 20070121664A KR 1020077020801 A KR1020077020801 A KR 1020077020801A KR 20077020801 A KR20077020801 A KR 20077020801A KR 20070121664 A KR20070121664 A KR 20070121664A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- item
- component
- storage system
- data storage
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/289—Object oriented databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/40—Data acquisition and logging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
본 발명은 데이터 저장 시스템과 연관된 데이터를 용이하게 조작할 수 있게 하는 시스템 및/또는 방법을 제공한다. 데이터 저장 시스템은 데이터 모델과 연관된 특성과 제약 중 적어도 하나를 갖고 있다. 데이터 모델은 데이터 저장 시스템이 데이터베이스 기반 파일 시스템이 되도록 데이터 저장 시스템을 표현할 수 있다. 데이터 조작 컴포넌트는 데이터 모델과 연관된 데이터를 조작할 수 있으며, 데이터 저장 시스템의 보전을 보장하기 위하여 상기 특성과 제약 중 적어도 어느 하나를 시행한다. 또한, 데이터 저장 시스템 내의 데이터 조작을 제공하기 위해 API 컴포넌트를 불러낼 수 있다.
Description
본 발명은 일반적으로 데이터베이스에 관한 것으로, 특히 데이터 저장 시스템과 연관된 데이터 모델 및/또는 보안 구현에 기초하여 데이터를 용이하게 조작하는 시스템 및/또는 방법에 관한 것이다.
컴퓨터 기술(예컨대, 마이크로프로세서 속도, 메모리 용량, 데이터 전송 대역폭, 소프트웨어 기능성 등)이 발전됨에 따라 여러 산업 분야에서 컴퓨터를 응용하는 일이 늘어가고 있다. 갈수록 더 강력해지고 있는 서버 시스템은 서버 어레이 형태로 구성되며, 예컨대 월드 와이드 웹 (WWW)과 같은 외부 소스로부터 나오는 요구들을 처리한다.
이용 가능한 전자적 데이터의 량이 늘어감에 따라, 그와 같은 전자적 데이터를, 사용하기 편리하고 빠른 데이터 탐색(search)과 검색(retrieval)을 용이하게 실시할 수 있는 방식으로 저장하는 것이 중요하게 된다. 오늘날은 전자적 데이터를 하나 또는 그 이상의 데이터베이스에 저장하는 것이 일반적이다. 일반적으로 통상의 데이터베이스는 컴퓨터 프로그램이 원하는 데이터를 신속하게 탐색하여 선택할 수 있도록 구조화된 데이터를 갖는 정보의 집합체라고 말할 수 있다. 일반적으로 데이터베이스 내의 데이터는 하나 또는 그 이상의 테이블을 통해 구성된다. 그와 같은 테이블은 행과 열의 어레이로서 구성된다.
테이블은 각각이 필드 세트를 포함하는 레코드 세트로 구성될 수 있다. 일반적으로 레코드에는 테이블 내의 행으로 인덱스값이 부여되어 있으며, 레코드 필드에는 통상적으로 열로서 인덱스값이 부여되어 있다. 따라서, 열/행 인덱스 쌍은 테이블 내의 특정 데이터를 참조할 수 있다. 예컨대, 행에는 판매 거래, 사람, 또는 프로젝트에 관한 완전한 데이터 레코드를 저장할 수 있다. 마찬가지로, 테이블의 열에는 동일한 일반 데이터 형식을 가진 행의 불연속 부분과 레코드의 필드를 정의할 수 있다.
일반적으로 개별 데이터 각각은 그 자체로는 그다지 유용한 정보가 되지 못한다. 데이터베이스 애플리케이션을 이용하게 되면 사용자는 데이터를 체계화하여 처리할 수 있기 때문에 데이터를 더 유용하게 사용할 수가 있다. 사용자는 데이터베이스 애플리케이션을 이용하여 데이터를 비교, 분류, 정렬, 병합, 분리 및 상호 연결시킬 수 있기 때문에, 데이터로부터 유용한 정보를 생성할 수가 있다. 데이터베이스의 용량과 기능이 크게 강화됨에 따라 데이터베이스를 활용하는 저장 용량이 거의 무한정으로 증가하였다. 그러나, 통상의 데이터베이스 시스템은 시간, 파일 확장, 위치, 및 크기에 따라 질의 능력(query ability)이 제한된다. 예컨대, 데이터베이스에 연관된 엄청난 데이터를 탐색하는데 있어 통상의 탐색은 파일명, 파일 크기, 파일 작성일 등으로 제한되는데, 이와 같은 기술은 불충분하며 부적절한 것이다,
최종 사용자로부터의 지속적으로 증가하는 데이터 생성에 따라서, 데이터의 탐색, 관련짓기, 조작 및 저장하는 데 있어 문제점과 난관도 커지고 있다. 최종 사용자는 문서를 작성하고, 사진을 저장하고, 컴팩트 디스크로부터 음악을 재생하고, e-메일을 수신하고, 보낸 e-메일의 카피를 보관하는 등의 작업을 수행한다. 예컨대, 음악 컴팩트 디스크를 만드는 간단한 프로세스에서는 최종 사용자는 메가바이트 데이터를 생성할 수 있다. 컴팩트 디스크로부터 음악을 재생하고, 파일을 적당한 포맷으로 변환하고, 쥬얼 케이스 커버(jewel case cover)를 만들고, 컴팩트 디스크 라벨을 디자인하는 작업들 모두는 데이터 생성을 필요로 한다.
사용자를 둘러싼 복잡한 문제뿐만 아니라 개발자도 데이터와 관련된 유사한 문제를 갖고 있다. 개발자는 개인용 애플리케이션에서부터 더 발전된 기업용 애플리케이션에 이르기까지 수많은 애플리케이션을 작성한다. 개발자는 애플리케이션의 작성 및/또는 개발 중에 반드시 그런 것은 아니지만 자주 데이터를 수집한다. 그와 같은 데이터를 얻을 때는 그 데이터를 저장할 필요가 있다. 즉, 데이터의 탐색, 관련짓기, 조작 및 저장에 관련된 문제나 난관들은 개발자와 최종 사용자 모두에게 영향을 미친다. 특히, 데이터를 어떻게 조작하더라도 종래의 시스템 및/또는 데이터베이스를 붕괴시키고 그리고/또는 그 시스템 및/또는 데이터베이스 내에서 불안정한 상태를 야기하지 않고 데이터의 보전이 보장되어야 한다.
도 1은 각자의 특성을 가진 데이터 모델에 적어도 부분적으로 기초하여 데이터를 용이하게 조작하는 예시적인 시스템의 블록도이다.
도 2는 데이터 저장 시스템의 특성 내에서 데이터를 용이하게 조작하는 예시적인 시스템의 블록도이다.
도 3은 데이터 조작이 데이터 저장 시스템과 연관된 상태에서 데이터 보전 및 보안을 용이하게 실시하는 예시적인 시스템의 블록도이다.
도 4는 데이터 저장 시스템과 연관된 데이터를 조작하는 API를 용이하게 구현하는 예시적인 시스템의 블록도이다.
도 5는 데이터 저장 시스템의 특성 내에서 데이터를 조작하는 API를 용이하게 불러내는 예시적인 시스템의 블록도이다.
도 6은 데이터 저장 시스템의 특성 내에서 데이터를 조작하는 API를 용이하게 불러내는 예시적인 시스템의 블록도이다.
도 7은 API 컴포넌트을 이용하는 데이터 저장 시스템 내에서 데이터를 용이하게 조작하는 예시적인 시스템의 블록도이다.
도 8은 데이터 모델에 적어도 부분적으로 기초하여 데이터를 용이하게 조작하는 예시적인 시스템의 블록도이다.
도 9는 적어도 하나의 모델 제약을 시행하면서 데이터베이스 기반 시스템에 적어도 부분적으로 기초하여 데이터를 조작하는 예시적인 방법을 도시한 도이다.
도 10은 시행되고 있는 각자의 특성을 가진 데이터 모델에 적어도 부분적으로 기초하여 데이터를 조작하는 예시적인 방법을 도시한 도이다.
도 11은 본 발명의 신규한 양상이 적용될 수 있는 예시적인 네트워킹 환경을 도시한 도이다.
도 12는 본 발명에 따라 적용될 수 있는 예시적인 운용 환경을 도시한 도이다.
다음은 본 발명의 기본적인 이해를 제공하기 위하여 본 발명의 개요에 대해서 설명한다. 이 개요는 본 발명을 전체적으로 개관하는 것은 아니다. 이 개요는 본 발명의 핵심적인 또는 중요한 요소를 확인하거나 본 발명의 범위를 설명하는 것도 아니다. 이 개요의 목적은 본 발명의 일부 개념을 후술할 상세한 설명에 대한 서두로서 간단한 형태로 제시한다.
본 발명은 특성 및/또는 제약과 연관된 데이터 모델에 적어도 부분적으로 기초하여 데이터를 용이하게 조작할 수 있는 시스템 및/또는 방법에 관한 것이다. 데이터 모델은 데이터 저장 시스템(예컨대, 데이터베이스 기반 파일 저장 시스템)을 나타낼 수 있는데, 이 모델은 데이터 저장 시스템 내의 정보를 복잡한 형태의 인스턴스(instance)로서 나타낼 수 있는 존속 개체(persisted entities) 및 하위 개체의 계층적 모델이다. 데이터 조작을 용이하게 하기 위해서 데이터 조작 컴포넌트(component)는 데이터 저장 시스템과 연관된 데이터 조작 절차를 제공할 수 있으며, 또한 특성 및/또는 제약 중 적어도 한 가지를 시행 및/또는 구현할 수 있다. 즉, 데이터 조작 컴포넌트는 임의의 적당한 데이터 조작 중에 데이터 저장 시스템 내의 데이터를 존속시킨다(persist).
본 발명의 일 양상에 따라서, 데이터 조작 컴포넌트는 데이터를 조작하는 적어도 한 가지 절차를 제공하는 절차 컴포넌트를 포함한다. 데이터 상의 절차는 카피, 갱신, 대체, 입수, 설정, 생성, 삭제, 이동, 변경 등을 구현할 수 있다. 더욱이, 데이터 조작 컴포넌트는 데이터 저장 시스템을 나타내는 데이터 모델과 연관된 특성 및/또는 제약을 시행 및/또는 구현하는 시행 컴포넌트를 포함할 수 있다. 데이터 조작과 연관하여 특성 및/또는 제약을 활용함으로써 데이터 저장 시스템에서 데이터 모델의 보전을 유지할 수 있다.
본 발명의 다른 양상에 따라서, 데이터 조작 컴포넌트는 애플리케이션 프로그래밍 인터페이스(API)를 활용할 수 있다. API는 클라이언트(예컨대, 호출자)에 노출될 수 있다. 이 점에서 API는 클라이언트 요구를 실행하는 하나 또는 그 이상의 개별 구현 루틴을 호출할 수 있는 공개 표면 영역(public surface area)이다. 일 양상에서, API는 루틴(예컨대, 서브 루틴은 포함될 수 없음)을 제공할 수 있다. API는 사용자가 데이터 저장 시스템과 연관된 적어도 하나의 특성 및/또는 제약을 유지하면서 데이터 저장 시스템 내의 데이터를 조작하는 것과 연관된 적어도 하나의 절차를 호출 및/또는 활용하는데 활용될 수 있다. API는 데이터 저장 시스템 내에서 적당한 동작이 수행될 수 있도록 하는 여러 가지 기능 및/또는 절차를 정의할 수 있는 API 정의 컴포넌트도 활용할 수 있다.
본 발명의 또 다른 양상에 따라서, 데이터 조작 컴포넌트는 복수의 동시 호출자를 용이하게 지원하면서 동시에 교착 상태(deadlocks)를 제거할 수 있는 로킹(locking) 컴포넌트를 포함할 수 있다. 예컨대, 공통의 자원 세트의 소유권을 요구하는 호출자가 동시에 여러 명 있는 상황에서 각 호출자가 다른 호출자들을 기다리고 있기 때문에 어떠한 요구도 충족될 수 없어 교착 상태가 발생하는 경우를 가정한다. 그와 같은 경우에 로킹 컴포넌트는 폐쇄될(lock up) 수 있다(예컨대, 호출자들은 차단된다.). 이와 같은 경우에서 벗어나는 유일한 방법은 호출자들 중 한 명을 퇴거시키는 것이다. 로킹 컴포넌트는 복잡한 로킹 로직이 개별 요구가 자동적으로 성공 또는 실패하는 것을 보증할 수 있도록 복수의 동시 호출자를 지원할 수도 있다. 더욱이, 데이터 조작 컴포넌트는 낙관적 동시성(optimistic concurrency) 기술을 이용하는 낙관적 동시성 컴포넌트를 포함할 수 있다. 이 기술에서는 첫 번째 프로세스가 두 번째 프로세스와 거의 같은 시각에서 어떤 변화를 줄 가능성이 낮다고 가정하므로, 그 변화가 데이터 저장 시스템에 맡겨질 준비가 될 때까지는 로크를 채용하지 않는다. 복수의 호출자의 동시 액세스에 의해 특정 호출자의 저장 상태 독점을 무효화시키는 경우에는, 무효화된 독점이 검출될 수 있으며, 그 호출자가 시스템 상태의 이해를 다시 동기화시키고 요구를 다시 제출할 때까지는 시스템은 데이터 변경 요구를 거절한다. 이 기술은 로크를 불러내는 명령어를 실행할 필요성을 제거함으로써 시스템 성능을 개선할 수 있다. 더욱이, 이 기술은 장기(long term) 로크를 불러낼 필요성을 제거함으로써 시스템에서 교착 상태를 줄일 수 있다.
본 발명의 또 다른 양상에 따라서, 데이터 조작 컴포넌트는 그와 같은 시스템에서 채용된 여러 가지 데이터 조작에 대응할 수 있는 보안 기술을 제공하는 보안 컴포넌트를 포함할 수 있다. 보안 컴포넌트는 사용자 프로필 및/또는 로그인, 패스워드, 생체 측정 표지(예컨대, 지문, 망막 스캔, 인덕턴스 등), 음성 인식 등과 같은 여러 가지 보안책을 이용하여 특정 개체 조작 데이터의 보전과 유효성을 보장할 수 있다. 더욱이, 데이터 조작에 의해 특성 및/또는 제약이 시행되지 않는 경우에 데이터 조작 컴포넌트는 에러 코드를 제공하는 에러 컴포넌트를 포함할 수 있다. 에러 코드는 데이터 조작이 불완전함을 의미하도록 구현될 수 있다. 에러 코드는 에러를 기술하는 텍스트에 해당할 수 있다. 본 발명의 다른 여러 양상에서는 데이터 조작을 용이하게 하면서 데이터 모델에 맞는 방법들이 제공된다.
이하의 설명과 첨부 도면은 본 발명의 양상들을 더 자세히 설명한다. 그러나 이들 양상들은 본 발명의 원리를 이용할 수 있는 여러 가지 방식들 중 일부를 나타낸 것이며, 본 발명은 그와 같은 양상 모두와 그 등가물들을 포함하는 것이다. 본 발명의 다른 이점들과 신규한 특징들은 첨부 도면과 관련하여 설명된 이하의 상세한 설명으로부터 명백하게 될 것이다.
본 출원에서, "컴포넌트(component)", "시스템", "인터페이스" 등과 같은 용어는 하드웨어, (예컨대, 실행 중인) 소프트웨어, 및/또는 펌웨어와 같은 컴퓨터 관련 개체를 말한다. 예컨대, 컴포넌트는 프로세서 상에서 실행되는 프로세스, 프로세서, 오브젝트, 실행가능한 프로그램, 및/또는 컴퓨터일 수 있다. 예컨대, 서버 상에서 실행되는 애플리케이션과 그 서버가 컴포넌트가 될 수 있다. 프로세스 내에는 하나 또는 그 이상의 컴포넌트가 상주할 수 있으며, 하나의 컴포넌트가 하나의 컴퓨터 상에 집중되고, 그리고/또는 2 또는 그 이상의 컴퓨터 간에 분산될 수 있다.
도면을 참조하여 본 발명을 설명한다. 도면에서 동일한 도면 부호는 동일한 구성 요소를 나타낸다. 이하의 설명에서는 본 발명을 철저히 이해하기 위하여 많은 특정의 세부사항들이 설명되지만, 본 발명은 그러한 특정의 세부사항에 대한 설명이 없더라도 용이하게 실시될 수 있다. 여러 경우에서, 공지의 구조나 장치는 본 발명의 설명을 쉽게 하기 위해서 블록도 형태로 나타낸다.
도 1을 참조로 설명하면, 도 1은 각자의 특성을 가진 데이터 모델에 적어도 부분적으로 기초하여 데이터를 용이하게 조작하는 시스템(100)을 도시한 것이다. 데이터 모델(102)은 적어도 데이터베이스 구조에 기초한 복잡한 모델일 수 있다. 이 모델에서, 데이터 저장 시스템 내의 정보를 복잡한 형태의 인스턴스로 표현할 수 있도록 아이템(item), 서브 아이템, 속성(property), 및 관계가 정의된다. 데이터 모델(102)은 많은 존속 오브젝트와 이들 오브젝트들 간의 링크를 생성하여 관리하기 위하여 기본 빌딩 블록 세트를 이용할 수 있다. 아이템은 데이터 모델(102) 내의 최소 일관성 단위로 정의될 수 있으며, 독립적으로 보장, 나열, 동기화, 카피, 백업/재생 등이 될 수 있다. 아이템은 일종의 인스턴스이며, 데이터 모델(102) 내의 모든 아이템은 단일의 포괄적 크기의 아이템으로 저장될 수 있다. 데이터 모델(102)은 적어도 하나의 아이템 및/또는 컨테이너(container) 구조에 근거할 수 있다. 더욱이, 데이터 모델(102)은 파일 속에 아이템으로서 들어있는 풍부한 메타데이터를 노출시키는 저장 플랫폼일 수 있다. 데이터 모델(102)은 상기 설명된 기능을 지원하는 데이터베이스 기반 파일 저장 시스템을 나타낼 수 있으며, 임의의 적당한 특성 및/또는 속성을 구현할 수 있다. 더욱이, 데이터 모델(102)은 컨테이너 계층 구조를 이용하는 데이터베이스 기반 파일 저장 시스템을 나타낼 수 있다. 이 경우, 컨테이너는 제로 또는 그 이상의 아이템을 포함할 수 있는 아이템이다. 컨테인먼트(containment) 개념은 관련 클래스 내의 컨테이너 ID 속성을 통해 구현된다. 저장소(store)도 컨테이너가 될 수 있는데, 이 경우에 저장소는 물리적으로 구성된 관리 단위일 수 있다. 또한, 저장소는 컨테이너 계층 구조 내의 컨테이너 트리(tree)에 대한 루트(root) 컨테이너를 나타낸다. 더욱이, 데이터 모델(102)은 정보를 복잡한 형태로 나타내는 적어도 하나의 존속 개체와 개체당 제로 또는 그 이상의 하위 개체의 계층적 모델을 정의하는 데이터베이스 기반 시스템인 데이터 저장 시스템을 나타낼 수 있다.
데이터 조작 컴포넌트(104)는 그와 같은 데이터 모델(102)의 특성과 연관된 데이터 보전 및 안정성을 보장하면서 데이터 모델(102)에 관련된 데이터를 조작할 수 있다. 데이터 모델(102)은 데이터베이스 기반 파일 저장 시스템과 연관된 임의의 적당한 특성 및/또는 가이드라인을 포함할 수 있다. 데이터 조작 컴포넌트(104)는 안정된 시스템을 보장하면서(예컨대, 데이터 모델(102)로 표현된 데이터베이스 기반 파일 저장 시스템과 연관된 임의의 특성에 맞추면서) 적어도 하나의 오브젝트에 이동, 삭제, 카피, 생성, 갱신, 대체 등을 제공할 수 있다. 예컨대, 데이터 모델(102)은 컨테이너의 각 ID가 고유한 특성을 가진 데이터베이스 기반 파일 저장 시스템을 표현할 수 있다. 이 예에서, 데이터 조작 컴포넌트(104)는 컨테이너의 ID의 고유성을 시행 및/또는 유지하면서 임의의 적당한 데이터 조작(예컨대, 카피, 갱신, 대체, 취득, 설정, 생성, 삭제, 이동 등)을 채용할 수 있다. 상기 설명된 기능들은 본 발명을 한정하는 것은 아니며, 데이터 모델(102)과 관련된 임의의 적당한 데이터 조작은 이와 관련한 임의의 적당한 특성을 유지하면서 채용될 수 있다. 더욱이, 데이터 조작 컴포넌트(104)는 데이터 모델(102)에 기초한 계층 구조에 대응하여(예컨대, 저장소와 컨테이너 중 적어도 어느 하나를 이용하여는) 데이터를 조작할 수 있다.
본 발명의 일 양상에 따라서, 데이터 조작은 예컨대 애플리케이션 프로그래밍 인터페이스(API)(미도시)를 이용하여 사용자로부터의 입력에 적어도 부분적으로 기초할 수 있다. API를 채용함으로써 데이터 모델(102)과 그에 대응하는 데이터베이스 기반 파일 저장 시스템에 관련된 상호작용 및/또는 조작은 이와 연관된 임의의 적당한 특성을 유지/시행하면서 구현될 수 있다. API는 데이터 조작 컴포넌트(104), 이 데이터 조작 컴포넌트(104)에 내장된 별도의 컴포넌트. 및/또는 이들의 임의의 조합에 의해서 불러 내어질 수 있다.
시스템(100)은 인터페이스 컴포넌트(106)를 더 포함한다. 인터페이스 컴포넌트(106)는 데이터 조작 컴포넌트(104)를 임의의 운용 및/또는 데이터베이스 시스템 내로 가상적으로 통합시키기 위하여 여러 가지 어댑터, 커넥터, 통신 경로 등을 제공한다. 또한, 인터페이스 컴포넌트(106)는 데이터 및 데이터 조작 컴포넌트(106)와의 상호 작용을 위해 여러 가지 어댑터, 커넥터, 채널, 통신 경로 등을 제공할 수 있다. 인터페이스 컴포넌트(106)는 데이터 조작 컴포넌트(104)에 내장되어 있지만 그와 같은 구현에 한정되는 것은 아니다. 예컨대, 인터페이스 컴포넌트(106)는 시스템(100)에 관련한 데이터를 송수신하는 독립형의 컴포넌트일 수 있다.
도 2는 데이터 저장 시스템의 특성 내에서 데이터를 용이하게 조작하는 시스템(200)을 도시한 것이다. 데이터 저장 시스템(202)은 적어도 계층 구조를 이용함으로써 데이터의 인스턴스를 복잡한 형태로 표현하는 데이터베이스 기반 파일 저장 시스템일 수 있다. 데이터 저장 시스템(202)은 데이터가 조작되는 동안에 데이터 저장 시스템(202)의 특성을 보장하도록 시행되는 적어도 하나의 특성을 포함할 수 있다. 데이터 모델(미도시)은 데이터 저장 시스템(202)을 표현할 수 있다. 더욱이, 아이템, 서브 아이템, 속성 및 관계는 정보를 복잡한 형태의 인스턴스로 표현할 수 있도록 데이터 저장 시스템(202) 내에서 정의될 수 있다. 데이터 저장 시스템(202)은 데이터의 형태를 기술하고, 그 데이터에 대한 특정의 의미 일관성을 의미하는 제약을 선언하고, 데이터 간의 의미 연관성을 정의하는 데이터 모델이 될 수 있다. 데이터 저장 시스템(202)은 풍부한 존속 오브젝트와 그 오브젝트들 간의 링크를 생성하여 관리하기 위해 기본 빌딩 블록 세트를 이용할 수 있다.
예컨대, 빌딩 블록은 "Item", "ItemExtension", "Link" 및 "ItemFragment"를 포함할 수 있다. "Item"은 데이터 저장 시스템(202) 내의 최소 일관성 단위로서 정의될 수 있으며, 독립적으로 보장, 나열, 동기화, 카피, 백업/재생 등이 될 수 있다. 예컨대, 아이템은 최소 일관성 단위가 될 수 있지만, 아이템을 중심으로 그려진 경계는 아이템이 논리적으로 소유할 수 있는 링크, 아이템 확장 및 아이템 프그래그먼트를 포함할 수 있다. 따라서, 아이템은 테이블에서 행이 될 수 있으며, 아이템 행과 그 2차 파트 모두를 말한다. 즉, 아이템은 삭제, 카피 등이 될 수 있으며, 이와 같은 동작은 아이템과 그 파트 전부에 자동적으로 적용될 수 있다. 아이템은 일종의 인스턴스이며, 데이터 저장 시스템(202) 내의 모든 아이템은 단일의 포괄적 크기의 아이템으로 저장될 수 있다. "ItemExtension"은 개체 확장을 이용하여 확장되는 아이템 타입이다. 개체 확장은 각자의 속성(예컨대, 이름, 확장 아이템 타입, 속성 선언 등)을 가진 스키마(schema)에서 정의될 수 있다. "ItemExtension"은 확장된 아이템 타입에 적용될 수 있는 속성 세트를 그룹화하도록 구현될 수 있다. "Link"는 2개의 아이템 인스턴스 간의 연관성을 정의하는 개체 타입이다. 여기서, 링크들은 방향성을 갖는다 (예컨대, 한 아이템이 링크의 소스라면, 다른 아이템은 링크의 타겟이다). "ItemFragment"는 아이템 타입 및/또는 아이템 확장에서 큰 컬렉션(collection)의 선언을 가능하게 하는 개체 타입이다. 데이터 저장 시스템(202)은 데이터를 복잡한 형태의 인스턴스로 표현하는 임의 적당한 데이터베이스 기반 파일 저장 시스템을 표현할 수 있으며, 본 발명은 상기 서술에 한정되지 않는다. 데이터 저장 시스템(202)은 도 1에서 보여진 데이터 모델(102)의 표현과 거의 유사할 수 있다.
데이터 조작 컴포넌트(204)는 데이터 저장 시스템(202)과 연관된 적어도 하나의 특성을 시행하면서 데이터 저장 시스템(202) 내의 데이터 조작을 제공할 수 있다. 데이터 조작 컴포넌트(204)는 (예컨대, 복잡한 형태의 인스턴스로 표현된) 데이터에 대한 카피, 갱신, 대체, 취득, 설정, 생성, 삭제, 이동 등과 같은 조작을 제공할 수 있다. 데이터 조작 컴포넌트(204)는 도 1에서 보여진 데이터 조작 컴포넌트(104)와 거의 유사할 수 있다.
데이터 조작 컴포넌트(204)는 데이터 저장 시스템(202)과 연관된 특성에 따라서 데이터를 조작하는 특정의 기능을 제공하는 절차 컴포넌트(206)를 포함할 수 있다. 즉, 절차 컴포넌트(206)는 데이터 저장 시스템(202)에 관련된 조작 기술을 제공할 수 있다. 예컨대, 절차 컴포넌트(206)는 데이터 및/또는 복잡한 형태의 인스턴스로서의 데이터 표현에 대한 카피, 이동, 대체, 설정, 삭제, 생성, 취득, 갱신 등을 포함할 수 있다. 절차 컴포넌트(206)는 데이터 저장 시스템(202) 내에서 구현될 수 있는 임의의 적당한 데이터 조작 기술 및/또는 기능을 제공할 수 있다. 절차 컴포넌트(206)는 데이터 조작 컴포넌트(204)에 내장되는 것으로 서술되었지만, 본 발명은 이에 한정되지 않는다. 절차 컴포넌트(206)는 독립형의 컴포넌트이거나 데이터 저장 시스템(202)에 내장될 수 있다(예컨대, 이것은 데이터 모델 개념의 구체화일 수 있다).
데이터 조작 컴포넌트(204)는 데이터 저장 시스템(202)의 적어도 하나의 특성을 데이터 조작과 병합시키는 시행(enforcer) 컴포넌트(208)를 더 포함할 수 있다. 전술한 바와 같이, 데이터 저장 시스템(202)은 데이터 저장 시스템(202) 내의 데이터 조작에 대한 가이던스를 제공할 수 있는 임의의 적당한 수의 특성을 포함할 수 있다. 즉, 시행 컴포넌트(208)는 데이터 저장 시스템(202)에 관련된 데이터 모델 제약을 방해함이 없이 데이터 저장 시스템(202) 내의 데이터 조작을 가능하게 한다. 시행 컴포넌트(208)는 도시된 바와 같이 데이터 조작 컴포넌트(204)에 내장될 수도 있지만, 독립형의 컴포넌트이거나, 데이터 저장 시스템(202)에 내장되거나, 이들의 임의의 조합이 될 수 있다.
예컨대, 데이터 저장 시스템(202)은 전술한 바와 같은 아이템, 컨테이너 및 저장 구조 계층을 이용할 수 있다. 시행 컴포넌트(208)는 데이터 저장 시스템(202)과 연관된 컨테이너 ID에 관련된 특성을 구현할 수 있다. 예컨대, 시행 컴포넌트(208)는 다음의 3가지 중 적어도 하나를 제공할 수 있다. (1) 저장소 내의 아이템의 논 널(non-null) 아이템 ID를 포함하는 컨테이너 ID(이것은 후술할 조작 기능 및/또는 기술 "CreateItem", "CreateComplexItems", "MoveItem" 및 "ReplaceItem"으로 구현될 수 있음); (2) 컨테이너 ID는 후술할 조작 기능 및/또는 기술 "UpdateItem"을 이용하여 생신되지 않는다; (3)컨테이너 ID는 "MoveItem" 호출을 통해 변경될 수 없다. 본 발명은 상기 언급된 조작 기능 및/기술에 한정되지 않는다.
다음 예로서, 시행 컴포넌트(208)는 데이터 조작과 관련하여 트랜잭션 의미(transaction semantic)를 구현할 수 있다. 시행 컴포넌트(209)는 다음의 2가지 트랜잭션 의미를 구현할 수 있다. (1) 액티브한 트랜잭션이 없는 경우 에러 코드가 발생될 수 있으며 배치(batch)는 처리되지 않는다; (2) 동작을 유효화시켜 적용하는 시도가 있다. 동작을 유효화시켜 적용하는 것이 성공하면, 제어는 호출자에게 반환될 수 있고, 호출자가 공급한 트랜잭션에서 동작 효과는 일어나지 않는다. 동작을 유효화시켜 적용하는 것이 실패하면, 트랜잭션은 실패하여 에러가 발생되고, 제어는 호출자에게 반환될 수 있다. 실패한 트랜잭션은 호출자가 그 트랜잭션에 대해 질의를 발행할 수는 있으나 그 트랜잭션을 맡길 수는 없다(예컨대, 위탁 호출은 에러를 발생시킬 수 있다)는 것을 의미한다. API 요구는 자동적으로 성공하거나 완전히 실패할 수 있다. 복잡한 API는 기본 저장 테이블에 대해 적어도 한 가지 변경을 가할 수 있으며, 복잡한 세트의 일관성 및/또는 보전 테스트를 구현할 수 있다. 더욱이, 시스템(200)은 모순(inconsistent) 및/또는 무효 상태에 있지 않을 것이다.
도 3은 데이터 조작이 데이터 저장 시스템과 연관된 상태에서 데이터 보전 및 보안을 용이하게 실시하는 시스템을 도시한 도이다. 데이터 저장 시스템(302)은 데이터 모델에 적어도 부분적으로 기초한 데이터베이스 기반 파일 저장 시스템일 수 있으며, 데이터는 복잡한 형태의 인스턴스로서 표현된다. 데이터 조작 컴포넌트(304)는 데이터 저장 시스템(302)과 연관된 데이터 조작을 제공할 수 있다. 데이터 조작 컴포넌트(304)는 데이터 저장 시스템(302)에서의 데이터 조작과 관련된 적어도 하나의 기능 및/또는 기술을 제공할 수 있는 절차 컴포넌트(306)를 포함할 수 있다. 더욱이, 데이터 조작 컴퍼넌트(304)는 데이터 저장 시스템(302)과 연관된 적어도 하나의 특성 및/또는 가이드라인을 시행하는 시행 컴포넌트(308)를 포함할 수 있으며, 이와 같은 특성은 데이터 조작으로 구현될 데이터 모델 제약을 보장한다. 데이터 저장 시스템(302), 데이터 조작 컴포넌트(304), 절차 컴포넌트(306) 및 절차 컴포넌트(308)는 각각 도 2에 도시된 데이터 저장 시스템(202), 데이터 조작 컴포넌트(204), 절차 컴포넌트(206) 및 절차 컴포넌트(208)와 거의 유사할 수 있다.
데이터 조작 컴포넌트(304)는 데이터 저장 시스템(302) 내의 데이터 조작과 연관된 적어도 하나의 절차를 저장 및/또는 액세스하는 것을 용이하게 하기 위하여 데이터 저장소(310)를 포함할 수 있다. 예컨대, 데이터 저장소(310)는 API가 이용할 수 있는 절차(예컨대, 코드)를 저장할 수 있으며, 사용자는 데이터 조작을 수신할 수 있으며, 이 데이터 조작은 데이터 저장 시스템(302)과 연관된 적어도 하나의 특성을 유지하는 동안에 불러내어 질 수 있다. 다른 예로서, 데이터 저장소(310)는 데이터 저장 시스템(302)과 연관된 여러 가지 특성 및/또는 여러 가지 API 데이터(예컨대, 서브 루틴 등)를 저장할 수 있다. 일 예로서, 데이터 저장소(310)는 하드 드라이브일 수 있다. 데이터 저장소(310)는 예컨대 휘발성 메모리나 불휘발성 메모리일 수 있으며, 또는 이 양자를 모두 포함할 수도 있다. 예컨대, 불휘발성 메모리는 판독 전용 메모리(ROM), 프로그램가능 ROM(PROM), 전기적 프로그램가능 ROM(EPROM), 전기적 소거 및 프로그램가능 ROM(EEPROM) 또는 플래시 메모리를 포함할 수 있다. 휘발성 메모리는 외부 캐시 메모리로 기능하는 임의 접근 메모리(RAM)를 포함할 수 있다. 예컨대, RAM은 정적 RAM(SRAM), 동적 RAM(DRAM), 동기식 DRAM(SDRAM), 더블 데이터 레이트 SDRAM(DDR SDRAM), 개량형 SDRAM(ESDRAM), 싱크링크 DRAM(SLDRAM), 램버스 다이렉트 RAM(RDRAM), 다이렉트 램버스 다이나믹 RAM(DRDRAM), 및 램버스 다이나믹 RAM(RDRAM)과 같은 여러 가지 형태로 이용될 수 있다. 본 시스템 및 방법의 데이터 저장소(310)는 이들 및 기타 다른 적당한 형태의 메모리를 포함하나, 이에 한정되는 것은 아니다. 또한, 데이터 저장소(310)는 서버 및/또는 데이터베이스일 수도 있다.
데이터 조작 컴포넌트(304)는 시스템(300)에 적어도 하나의 보안 속성을 제공하는 보안 컴포넌트(312)를 더 포함할 수 있다. 예컨대, 보안 컴포넌트(312)는 특정 데이터 조작 기능 및/또는 기술이 연관되도록 사용자 프로필을 이용할 수 있다. 더욱이, 보안 컴포넌트(312)는 로그인, 패스워드, 생체 측정 표지(예컨대, 지문, 망막 스캔, 인덕턴스 등), 음성 인식 등과 같은 여러 가지 보안책을 이용하여 특정 개체 조작 데이터의 보전과 유효성을 보장할 수 있다. 보안 컴포넌트(312)는 데이터 저장 시스템(302)과 연관된 임의의 적당한 보안 속성을 더 채용할 수 있다. 즉, 보안 컴포넌트(312)는 데이터 저장 시스템(302) 보안 제약이 시행되도록 보안 규정을 구현할 수 있다.
도 4는 데이터 저장 시스템과 연관된 데이터를 조작하는 API를 용이하게 구현하는 시스템(400)을 도시한 것이다. 데이터 저장 시스템(402)은 적어도 하나의 특성이 연관된 데이터베이스 기반 파일 저장 시스템일 수 있다. 데이터 저장 시스템(402)은 데이터 모델(미도시)로 표현될 수 있다. 데이터 조작 컴포넌트(404)는 데이터 저장 시스템(402)과 연관된 데이터의 카피, 이동, 대체, 설정, 삭제, 생성, 취득, 갱신 등을 포함하는 데이터 조작을 가능하게 한다. 데이터 저장 시스템(402) 및 데이터 조작 컴포넌트(404)는 도 3 및 도 2에 도시된 데이터 저장 시스템(302), 데이터 저장 시스템(202), 데이터 조작 컴포넌트(304) 및 데이터 조작 컴포넌트(204)와 거의 유사한 기능을 이용할 수 있다.
데이터 조작 컴포넌트(404)는 개체가 데이터 저장 시스템(402) 내의 데이터를 조작할 수 있게 하는 API 컴포넌트(406)(이하 API(406)이라 함)를 더 포함할 수 있다. 개체는 사용자, 컴퓨터, 데이터베이스 등일 수 있다. API(406)는 적어도 하나의 사용자 입력을 수신할 수 있다. 사용자 입력은 데이터 저장 시스템(402) 내의 데이터 조작과 관련한 명령 및/또는 기능이다. API(406)는 데이터 조작 컴포넌트(404)에 내장된 것으로 서술되지만, API(406)는 독립형의 컴포넌트이거나, 데이터 저장 시스템(402)에 내장되거나, 이들의 임의의 조합이 될 수 있다. 더욱이, API(406)는 데이터 저장 시스템(402)와 연관된 특성을 시행하면서 특정의 절차를 이용하는 데이터 조작을 제공하는 전술한 여러 가지 컴포넌트를 이용할 수 있다.
도 5는 데이터 저장 시스템의 특성 내에서 데이터를 조작하는 애플리케이션 프로그래밍 인터페이스(API)를 용이하게 불러내는 시스템(500)을 도시한 것이다. 데이터 저장 시스템(502)은 적어도 하나의 정의 특성을 가진 데이터베이스 기반 파일 저장 시스템일 수 있다. 데이터 저장 시스템(502)은 데이터 모델(미도시)에 적어도 부분적으로 기초할 수 있다. 데이터 조작 컴포넌트(504)는 데이터 저장 시스템(502)과 연관된 데이터의 카피, 이동, 대체, 설정, 삭제, 생성, 취득, 갱신 등을 포함하는 데이터 조작을 가능하게 한다. 데이터 저장 시스템(502) 및 데이터 조작 컴포넌트(504)는 도 4, 도 3 및 도 2에 도시된 데이터 저장 시스템(402), 데이터 저장 시스템(302), 데이터 저장 시스템(202), 데이터 조작 컴포넌트(404), 데이터 조작 컴포넌트(304) 및 데이터 조작 컴포넌트(204)와 거의 유사한 기능을 이용할 수 있다.
데이터 조작 컴포넌트(504)는 API 컴포넌트(506)(이하 API(506)이라 함)를 포함할 수 있다. API(506) 는 저장된 절차를 실행함으로써 데이터 조작(예컨대, 저장소 내에서의 데이터의 생성, 갱신 및 삭제)을 제공할 수 있다. API(506)는 예컨대 데이터 저장 시스템(502)과 연관된 특성의 보전 및/또는 순수성(purity)을 보장하면서 사용자가 데이터 조작을 구현할 수 있게 한다. 데이터 조작은 예컨대 API(506)를 이용함으로써 사용자로부터의 입력에 적어도 부분적으로 기초할 수 있다. API(506)를 채용함으로써, 데이터 저장 시스템(502)과 관련된 상호 작용 및/또는 조작은 이 시스템과 연관된 임의의 적당한 특성을 유지/시행하면서 구현될 수 있다. API(506)는 데이터 조작 컴포넌트(504)에 의해 불러내어 질 수 있으며, 독립형의 컴포넌트이거나, 데이터 조작 컴포넌트(504)에 내장되거나, 이들의 임의의 조합이 될 수 있다.
데이터 조작 컴포넌트(504)는 보전을 보증하는 적당한 로킹 방법을 이용하여 하나 또는 그 이상의 애플리케이션을 가지고 데이터에 동시에 액세스하는 것을 용이하게 하는 로킹(locking) 컴포넌트를 더 포함할 수 있다. 예컨대, 공통의 자원 세트의 소유권을 요구하는 호출자가 동시에 여러 명 있는 상황에서 각 호출자가 다른 호출자들을 기다리고 있기 때문에 어떠한 요구도 충족될 수 없는 경우(예컨대,교착 상태가 발생하는 경우)를 가정한다. 그와 같은 경우에 로킹 컴포넌트(508)는 호출자들을 차단(예컨대, 폐쇄(lock up))할 수 있다. 이와 같은 경우로부터 벗어나는 유일한 방법은 호출자들 중 한 명을 퇴거시키는 것이다. 이 상황을 피하기 위하여 로킹 컴포넌트(508)는 복잡한 로킹 로직이 개별 요구가 자동적으로 성공 또는 실패하는 것을 보증할 수 있도록 복수의 동시 호출자를 지원할 수 있다. 더욱이, 로킹 컴포넌트(508)는 교착 상태를 검출하여 그에 대응할 수 있다. 로킹 컴포넌트(508)는 로킹을 통해 데이터 저장 시스템(예컨대, 저장소)의 특정 파트에의 연속적인 액세스를 채용함으로써 데이터 일관성을 유지할 수 있다. 로킹은 미세한 수준으로 행해질 수 있다. 이 경우, 주어진 조작 및/또는 동작에 의해 영향을 받는 데이터 저장 시스템(예컨대, 저장소) 내의 자원은 이 조작 및/또는 동작 기간 동에 로크될 수 있다. 다른 동작 및/또는 이와 실질적으로 유사한 동작은 로크들을 서로 다른 순서로 취할 수 있으며, 이 경우도 교착 상태가 발생할 수 있다. 예컨대, 로킹 컴포넌트(508)는 상당한 성능 손실을 갖고서 교착 상태를 피할 수 있다. 더욱이, 로킹 컴포넌트(508)는 그와 같은 상황을 알리는 교착 상태 에러 코드를 API(506)에 제공할 수 있다.
데이터 조작 컴포넌트(504)는 낙관적 동시성(optimistic concurrency) 컴포넌트(510)를 포함할 수 있다. API(506)는 데이터 저장 시스템(502) 내의 데이터에 조작 및/또는 변화를 가하기 위하여 낙관적 동시성을 이용할 수 있다. 적어도 두 개의 프로세스가 거의 유사한 시각에 거의 유사한 데이터를 갱신하려고 할 때에 동시성이 일어난다. 낙관적 동시성 컴포넌트(510)는 낙관적 동시성을 이용하며, 낙관적 동시성에서는 다른 프로세스가 거의 같은 시각에서 어떤 변화를 줄 가능성은 낮으며, 어떤 로크가 채용된 후에 그 변화는 데이터 저장 시스템(예컨대, 저장소)에 맡겨 진다. 그와 같은 기술을 채용함으로써 낙관적 동시성 컴포넌트(510)는 로크 시간을 줄이며 더 양호한 데이터베이스 성능을 제공한다. 복수의 호출자의 동시 액세스에 의해 특정 호출자의 저장 상태 독점을 무효화시키는 경우에는, 무효화된 독점이 검출될 수 있으며, 그 호출자가 시스템 상태의 이해를 다시 동기화시키고 요구를 다시 제출할 때까지는 시스템은 데이터 변경 요구를 거절한다.
예컨대, 낙관적 동시성 컴포넌트(510)는 아이템의 변경에 따라 변화되는 토큰(token)을 그 아이템과 연관시킬 수 있다. 토큰은 데이터가 메모리에 읽어들여 질때에 호출자에게 넘겨진다. 호출자는 이 토큰을 갱신 동작에 대한 파라미터로서 다시 저장소로 보낸다. 저장소는 그 토큰을 저장소 내의 현재 토큰과 비교할 수 있다. 토큰들이 동일하면, 기록(write)은 성공적으로 구현될 것이다. 만일 메모리 내의 호출자 버전이 저장소 내의 호출자 버전과 다르면, 이는 아이템이 다른 애플리케이션에 의해 이미 변경되었고, 기록은 실패할 것이라는 것을 의미한다.
다른 예로서, 두 개의 애플리케이션에 의한 동시 액세스로 인한 실패에 대해 검토한다. 아래의 테이블에는 아이템 변경을 시도할 데이터 저장 시스템(502) 상에서 동시에 실행되는 두 개의 애플리케이션이 있다.
시간 | 애플리케이션 1 | 저장소 내의 아이템 토큰 값 | 애플리케이션 2 | |
1 | 아이들(Idle) | 1 | 아이들 | |
2 | 아이템은 메모리내로 페치된다. 아이템 토큰=1 | 1 | 아이들 | |
3 | 아이들 | 1 | 아이템은 메모리내로 페치된다. 아이템 토큰=1 | |
4 | 아이들 | 1 | 아이템은 메모리에서 변경된다. 아이템 토큰=1 | |
5 | 아이들 | 1 | 아이템은 저장소에 다시 맡겨진다. 메모리 내의 아이템 토큰 값은 저장소 내의 토큰 값과 일치하므로 기록은 성공한다. 현재 아이템 토큰 = 2 | |
6 | 아이템은 메모리에서 변경된다. 아이템 토큰=1 | 2 | 아이들 | |
7 | 아이템은 저장소에 다시 맡겨진다. 에러! 메모리 내의 아이템 토큰 값(1)은 저장소 토큰 값(2)과 일치하지 않는다. | 2 | 아이들 |
API(506)는 생성 및/또는 갱신 동작에 대한 토큰 정보를 발생시킴으로써 이 기술을 지원할 수 있다. 예컨대, 생성 기능으로부터의 출력 토큰 파라미터는 "concurrencyToken"이라고 부를 수 있다. 또한 API(506)는 토큰 정보를 갱신 및/또는 삭제 동작에 대한 입력 파라미터로서 택할 수 있다. 갱신 및/또는 삭제 동작으로 넘어간 토큰 정보도 "concurrencyToken"이라고 말할 수 있다. 이 파라미터는 입력 및 출력 파라미터 양자가 될 수 있다. 입력의 경우에는 "concurrencyToken"은 오브젝트가 캐시로 읽어들일 때에 수신되어, 생성되고, 및/또는 갱신되는 값이다. 이것은 오브젝트에 대한 기록이 없는 경우에 저장소 내의 "기대값(expected value)"이 될 수 있다. 출력의 경우에는 저장소는 동작이 성공적으로 완료된 후에 오브젝트의 새로운 "concurrencyToken"를 발생시킬 수 있다.
"concurrencyToken" 파라미터는 BIGINT(예컨대, 64 비트 정수)로 대표될(typed) 수 있다. 이 파라미터는 그 값이 증가하지 않는 데이터베이스 타임스탬프일 수 있다. 백업으로부터 아이템을 복구시키면 시간적으로 과거 상태로 될 수 있다. 두 개의 "concurrencyToken" 간에 지원된 유일한 동작은 동일 및/또는 부등이다. 이 값도 저장소가 지원하는 여러 가지 관점에서 유용할 수 있다. 이들 관점에서 컬럼명은 아이템, 아이템 확장, 링크 및 아이템 프래그먼트에 있어 "LastUpdateLocalTS"이다. 보안 스크립터에 대해서는 컬럼명은 "SDLastUpdateLocalTS"이다.
도 6은 데이터 저장 시스템의 특성 내에서 데이터를 조작하는 API를 용이하게 불러내는 시스템(600)을 도시한 것이다. 데이터 저장 시스템(602)은 데이터 모델에 적어도 부분적으로 기초한 데이터베이스 기반 파일 저장 시스템일 수 있다. 데이터는 복잡한 형태의 인스턴스로서 표현된다. 데이터 조작 컴포넌트(604)는 데이터 저장 시스템(602)과 연관된 데이터 조작을 제공할 수 있다. 데이터 조작 컴포넌트(604)는 API 컴포넌트(606)(이하 API(606)라 함)를 불러낼 수 있다. API(606)는 저장된 절차를 실행함으로써 데이터 조작(예컨대, 저장소 내의 데이터의 생성, 갱신 및 삭제)을 제공할 수 있다. API(606)는 예컨대 데이터 저장 시스템(602)과 연관된 특성의 보전 및/또는 순수성을 보장하면서 사용자가 데이터 조작을 구현할 수 있게 한다. 데이터 저장 시스템(602), 데이터 조작 컴포넌트(604) 및 API(606)는 도 5, 도 4, 도 3 및 도 2에 도시된 데이터 저장 시스템(502, 402, 302, 202), 데이터 조작 컴포넌트(504, 404, 304, 204), 및 API(506, 406)와 거의 유사할 수 있다.
데이터 조작 컴포넌트(604)는 API(605)가 이용하는 적어도 하나의 데이터 구조를 채용할 수 있는 데이터 구조 컴포넌트(608)를 포함할 수 있다. 예컨대, 데이터 구조 컴포넌트(608)는 여러 가지 동의어(synonym) 및/또는 일반명 리스트 타입을 이용할 수 있다. 일 예로서, 이하의 테이블들은 동의어와 구조화 질의어(SQL) 타입, 및 리스트 타입과 이에 대응하는 공통어 런타임(CLR)을 정의할 수 있다. 이하의 테이블들은 예시적인 것이며, 본 발명은 이에 한정되는 것은 아니다.
동의어 | Sql 타입 |
[System.Storage.Store].ItemId | UNIQUEIDENTIFIER |
[System.Storage.Store].LinkId | UNIQUEIDENTIFIER |
[System.Storage.Store].TypeId | UNIQUEIDENTIFIER |
[System.Storage.Store].CompliedChangeDefinition | VARBINARY(MAX) |
[System.Storage.Store].FragmentId | UNIQUEIDENTIFIER |
[System.Storage.Store].UsageId | UNIQUEIDENTIFIER |
[System.Storage.Store].SecurityDescriptor | VARBINARY(MAX) |
리스트 타입 | 대응 CLR 등가 |
[System.Storage.Store].AssignmentValueList | SqlList<[System.Storage.Store].AssignmentValue> |
[System.Storage.Store].ComplexItemList | SqlList<[System.Storage.Store].ComplexItem> |
[System.Storage.Store].ItemIdList | SqlList<[System.Storage.Store].ItemId> |
데이터 구조 컴포넌트(608)는 변화 정의 타입을 채용할 수 있다. API(606)와 데이터 조작 컴포넌트(604)는 속성 미세 수준에서(at the property granularity level) 동작 및/또는 변경을 제공할 수 있다. 이와 같은 기술을 이용함으로써 호출자는 변화된 데이터의 크기에 비례하는 동작의 크기를 유지하면서 그 변화된 데이터를 갱신 방법으로 넘긴다. 미세 갱신은 ChangeDefinition 타입을 이용하여 기술될 수 있다. 데이터 저장 시스템(602)에서, 오브젝트는 저장소 내에 계속 저장되어 있으며, 표의 특정 셀은 Contact의 저장된 인스턴스 또는 복잡할 수 있는 속성을 가진 기타 다른 복잡한 형태의 저장된 인스턴스일 수 있다. ChangeDefinition 타입은 구조화된 오브젝트에 적용될 수 있는 변화 세트를 모델링할 수 있다.
예컨대, 컨택(contact)의 이름 필드를 갱신하기 위하여 호출자는 ChangeDefinition 오브젝트의 인스턴스를 생성하여 이 오브젝트에 2개의 노드(예컨대, 아이템 타입을 기술하는 노드와 필드명을 포함하는 노드)를 거주시킬 수 있다. 그러면, 클라이언트는 ChangeDefinition의 컴파일된 버전과 그에 대응하는 값의 리스트 중 적어도 하나를 저장소에서 변경을 가하는 UpdateItem 방법으로 넘길 수 있다. 아이템 확장 및/또는 링크에서 파일을 변경하는 데는 실질적으로 유사한 패턴이 적용될 수 있다.
ChangeDefinition 인스턴스는 트리 내의 각 레벨이 오브젝트 타입 내의 속성의 중첩 레벨(nested level)에 대응할 수 있는 트리 구조를 이용하여 속성 변화를 모델링할 수 있다. 속성값의 변화는 할당 노드라 불리는 종 노드(leaf node)로 표현된다. 할당 노드 타입은 할당일 수 있다. 이들 노드는 속성에의 할당을 표현할 수 있으며 속성명을 포함할 수 있다. 비종 노드(non-leaf node)(루트 노드는 제외)는 톱 레벨 속성 및/또는 다른 충첩 타입 속성의 멤버인 중첩 타입을 표현한다. 이것은 트래버설(traversal) 노드라고 말할 수 있다. 트래버설 노드는 (할당 또는 트래버설) 노드 리스트와 선택적으로는 적당한 캐스트를 구현하기 위해 저장소가 사용하는 타입을 포함한다. 트래버설 노드 타입은 PathComponent이다.
데이터 구조 컴포넌트(608)는 트래버설 및 할당 노드를 생성함으로써 ChangeDefinition을 구축할 수 있다. 예컨대, 이 노드들은 ChangeDefinition에 의해 부가될 수 있으며, ChangeDefinition 클래스는 노드를 생성하여 트리를 탐색하기 위한 방법을 갖는다. 일 예로서, ChangeDefinition 클래스는 사용자 정의 타입(UDT)이 아니다. 다른 예로서, 다음의 것들은 정의된 할당 타입이다. 1) 스칼라 값을 소정 깊이로 할당하는 것; 2) 중첩 타입 인스턴스를 소정 깊이로 할당하는 것; 및 3) 컬렉션(예컨대, 멀티세트 및/또는 sqlList)을 소정 깊이로 할당하는 것. 스칼라 속성(예컨대, XML 및 FileStream 속성)은 대체될 수 있다. 다른 예로서, 그와 같은 스칼라 속성은 부분적으로 갱신된다. 일단 트리가 완성되고 나면, 데이터 구조 컴포넌트(608)는 바이너리 포맷으로 변화될 수 있는 속성의 디스크립션(description)(예컨대, 컴파일된 변화 정의라고도 함)을 발생시킬 수 있는 Compile 방법을 이용할 수 있다. 일 예로서, 그 값은 Update 방법에서 ChangeDefinition 파라미터로서 보내질 수 있다.
다음은 데이터 구조 컴포넌트(608)의 일 구현의 예이다. 본 발명은 이 예에 한정되지 않는다. 호출자는 ChangeDefinition 트리에서 기술된 속성에 대응하는 값의 리스트를 구축하는 일을 담당할 수 있다. 호출자가 ChangeDefinition 트리에 할당 노드를 부가하면, 그 할당 노드에 인덱스가 할당될 수 있다. 인덱스는 n-1(여기서 n은 지금까지 트리에 삽입된 숫자임)이 될 수 있다. 예컨대, 제1 할당 노드는 인덱스가 제로이고, 제2 할당 노드는 인덱스가 1이 되는 식으로 된다. 인덱스는 addAssignment의 호출자에게 반환될 수도 있다. 그러면, 호출자는 ChangeDefinition 트리에 부가된 속성값을 포함하는 AssignmentValue 오브젝트를 구축한다. 그러면, AssignmentValue는 AssignmentValueList 내의 그 위치가 ChangeDefinition 트리의 할당 노드의 인덱스와 맵핑될 수 있도록 AssignmentValueList 내에 추가된다. 할당 노드는 ChangeDefinition에 추가될 수 있으며, 이에 대응하는 AssignmentValue 오브젝트는 리스트의 끝에 AssignmentValue 오브젝트를 첨부하는 부가 방법을 이용하여 AssignmentValue 리스트에 추가될 수 있다. 최종적인 AssignmentValueList는 Update 방법의 valueList 파라미터를 위해 넘겨지는 값이다.
데이터 조작 컴포넌트(604)는 데이터 저장 시스템(602)의 특성과 상충하는 동작 및/또는 데이터 조작과 연관된 에러를 처리하는 에러 컴포넌트(610)를 더 포함할 수 있다. 예컨대, API(606)는 현재 아이템 도메인을 보장한다. 이 아이템 도메인은 아이템이 관련 속성, 개체, 및/또는 하위 개체를 정의 및/또는 포함하는 논리적 영역이다. 만일 아이템 도메인 밖에 있는 어떤 아이템이 (예컨대, 아이템을 통해, 또는 링크, 아이템 확장, 아이템 프래그먼트를 통해) 참조되면, 그 아이템은 마치 그것이 존재하지 않은 것처럼 보일 것이다. 즉, "아이템은 존재하지 않느다."라는 에러 코드가 채용될 수 있다.
에러 컴포넌트(610)는 에러 코드를 발생시킬 수 있다. 에러 코드는 데이터 조작이 불완전한 것을 의미하도록 구현될 수 있다. 에러 코드는 에러를 기술하는 텍스트에 해당할 수 있다. 데이터 저장 시스템(602) 내에서의 데이터 조작에 관련한 절차 및/또는 동작은 기능(예컨대, 삭제, 카피, 이동, 획득, 설정, 갱신 등)의 발생 코드일 수 있는 정수 값을 발생시킬 수 있다. 일 예로서, 정수 값은 동작이 성공적이면 제로이고 동작이 실패하면 제로가 아닐 수 있다. 각 조작 절차/동작 및/또는 기능은 에러 코드와 연관될 수 있다. 예컨대, API(606)는 텍스트를 디스플레이하기 보다는 에러 코드를 발생시킬 수 있다. 그러면, 에러 코드는 대응하는 텍스트 메시지에 링크될 수 있으며, 이 텍스트 메시지는 필요에 따라 데이터베이스의 테이블로부터 검색될 수 있다.
도 7은 API 컴포넌트을 이용하는 데이터 저장 시스템 내에서 데이터를 용이하게 조작하는 시스템(700)을 도시한 것이다. 데이터 저장 시스템(702)은 데이터 모델에 적어도 부분적으로 기초한 데이터베이스 기반 파일 저장 시스템일 수 있다. 데이터는 복잡한 형태의 인스턴스로서 표현된다. 데이터 조작 컴포넌트(704)는 데이터 저장 시스템(702)과 연관된 적어도 하나의 특성의 시행을 보장하면서 데이터 저장 시스템(702)과 연관된 데이터 조작을 제공할 수 있다. 데이터 조작 컴포넌트(704)는 API 컴포넌트(706)(이하 API(706)라 함)를 불러낼 수 있다. API(706)는수신된 사용자 입력에 대한 저장된 절차를 실행함으로써 데이터 조작(예컨대, 카피, 갱신, 대체, 획득, 설정, 생성, 삭제, 이동 등)을 제공할 수 있다. API(706)는 데이터 조작 요구/명령에 대한 사용자 입력을 수신할 수 있다. 그와 같은 사용자 입력은 데이터 저장 시스템(702)과 연관된 특성의 보전 및/또는 순수성을 보장하면서 실행된다. 데이터 저장 시스템(702), 데이터 조작 컴포넌트(704) 및 API(706)는 도 6, 도 5, 도 4, 도 3 및 도 2에 도시된 데이터 저장 시스템(602, 502, 402, 302, 202), 데이터 조작 컴포넌트(604, 504, 404, 304, 204), 및 API(606, 506, 406)와 거의 유사할 수 있다.
데이터 조작 컴포넌트(704)는 (데이터 저장 시스템(702)을 개발하는데 활용된) 데이터 모델의 제약을 무효화함이 없이 사용자가 데이터 저장 시스템(702)과 연관된 데이터를 조작할 수 있게 하는 절차 및/또는 동작을 정의하는 API 정의 컴포넌트(708)를 포함할 수 있다. API 정의 컴포넌트(708)는 데이터 저장 시스템(702) 내에서의 데이터 조작과 관련한 임의의 적당한 기능 및/또는 절차를 구현할 수 있다. 절차에 대한 이하의 설명은 일 예이며, 본 발명은 그 예에 한정되지 않는다. 더욱이, 본 발명은 이하의 절차 참조 이름, 기능, 속성 및 서술에 한정되지 않는다.
API 정의 컴포넌트(708)는 데이터 저장 시스템(702) 내에서 아이템을 발생시키는, 특히 데이터 저장 시스템(702) 내의 저장소 내에서 아이템을 생성하는 절차를 이용할 수 있다. 예컨대, 다음의 테이블은 아이템 생성 절차와 연관된 파라미터들을 제공한다.
이름 | 방향 | 타입 | 설명 |
Item | IN | [System.Storage.Store].Item | 저장될 아이템 |
namespaceName | IN | NVARCHAR(255) | 데이터 저장 시스템 네임스페이스에 저장 및 사용된 namespaceName. 이 이름은 논 널(non-null)이어야 하며, 논 앰프티(non-empty) 스트링 또는 에러가 발생된다. |
securityDescriptor | IN | [System.Storage.Store].SecurityDescriptor | 새로 생성된 아이템에 바로 적용되는 보안 디스크립터. 이것은 보안 디스크립터의 바이너리 형태이다. 이 파라미터는 선택적인 것이며 널일 수 있다. 그 경우에 보안은 포함하는 아이템으로부터 인계받는다. 디폴트값은 널이다. |
promotionStatus | IN | INTEGER | 아이템을 위해 저장될 프로모션 값. 이 값이 논 널이고 아이템이 루트 File-Backed 아이템이 아니면(예컨대, isFileBacked!=TRUE), 에러가 발생된다. 파라미터가 널로 설정되고 아이템이 루트 File-Backed 아이템이면, STALE의 값이 설정된다. 디폴트값은 널이다. |
isFileBacked | IN | BIT | 아이템이 파일 백(file-backed) 아이템인지 명시한다. isFileBacked가 TRUE로 설정되면, 이 아이템에 연관된 isFileBacked 비트는 TRUE로 설정되고, 제로 길이 파일 스트림이 생성되어 이 아이템과 연관된다. 아이템 전의 아이템들 중 어느 것이 File-Backed 아이템이면 에러가 발생된다. 디폴트값은 널이다. |
concurrencyToken | OUT | BIGINT | 절차가 발생하면, 이 변수는 이 아이템의 생성과 관련된 concurrencyToken을 포함한다. 디폴트값은 널이다. |
isGhost | IN | BIT | 아이템이 고스트(ghost)되어야 하는지를 명시한다. 이 파라미터는 이 파라미터에 대한 사용허가없이 호출자에 대해 널이어야 한다. isGhost가 TRUE로 설정되고 아이템이 루트 File-Backed 아이템이 아니면, 에러가 발생된다. 디폴트값은 널이다. |
itemSyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
itemSyncMetadata | IN | [System.Storage.Store].ItemSyncMetadata | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
전술한 바와 같이, 아이템 생성 절차는 데이터 저장 시스템(702)에 관련된 제약의 보장에 적어도 부분적으로 기초하여 연관된 여러 가지 에러 코드를 가질 수 있다. 그와 같은 에러 코드는 임의의 적당한 포맷일 수 있으며, 그 코드는 해당하는 에러를 기술하는 텍스트 메시지를 표현할 수 있다. 예컨대, 사용자가 파일 폴더를 생성하려고 할 때에 에러 코드가 발생될 수 있다. 다른 예로서, 일반 타입 파일의 아이템이 파일 백되지 않으면 에러 코드가 발생될 수 있다.
상기 예시적인 아이템 생성 절차에 따라서 아이템은 컨테이너 아이템의 ItemId인 ContainerId라 불리는 속성을 갖는다. 컨테이너 아이템은 저장소 내에 미리 존재해 있어야 하며 클라이언트의 연결점으로부터 도달가능해야 한다. 만일 호출자가 아이템에 대한 CreationTime을 제공하지 않으면(예컨대, 널 값을 제공하면), 저장소는 CreationTime을 현재 시각으로 설정할 것이다. 만일 호출자가 아이템에 대한 LastModificationTime을 제공하지 않으면(예컨대, 널 값을 제공하면), 저장소는 LastModificationTime을 현재 시각으로 설정할 것이다. 만일 이들 값 모두가 제공되지 않으면, 저장소는 item.CreationTime과 item.LastModificationTime을 제공할 것이며, 이들은 실질적으로 유사할 것이다.
다른 예로서, API 정의 컴포넌트(708)는 SecurityDescriptor를 채용할 수 있다. 선택적인 SecurityDescriptor를 포함하게 되면 클라이언트의 요구 사항을 충족시켜 새로운 아이템을 자동적으로 생성하고 보안 및 검증 파라미터를 명시적으로 설정할 수가 있다. SecurityDescriptor는 전술한 바와 같은 보안 컴포넌트(미도시)와 함께 작용할 수 있다. 더욱이, API 정의 컴포넌트(708)는 툼스톤드(tombstoned) 아이템의 구현을 정의할 수 있다. 만일 절차 내로 넘겨진 아이템과 똑 같은 아이템 id를 가진 툼스톤드 아이템이 저장소 내에 존재하면, 그 절차는 실패하지 않을 것이다. 이 툼스톤드 아이템은 부활될 것이며, CreateItem 호출로 넘겨진 새로운 데이터는 그 부활된 아이템 속으로 들어갈 것이다.
전술한 바와 같이, 클라이언트가 후속되는 아이템 갱신에 대한 낙관적 동시성 검출을 이용할 수 있도록 concurrencyToken이 발생된다. 발생된 concurrencyToken은 아이템에 대한 토큰이다. 다른 예로서, 파일 시스템 에이전트가 CreationItem을 호출하면, API 컴포넌트(706)는 오딧(audit)을 발생하지 않을 것이다. 이 호출은 사용자의 컨텍스트(예컨대, exec_as_htoken)에서 행해지며, 액세스 체크는 API(706)에서 행해질 것이다. 이 이벤트에 대한 파일 시스템(예컨대, 종래의 파일 저장 시스템. 이 시스템에서는 비트 방식 시스템은 운영 체제와 함께 유사한 비트 크기의 API를 채용함) 오딧이 파일 시스템 에이전트에 의해 발생될 것이다. 더욱이, API 정의 컴포넌트(708)는 파일 백 아이템에 관련된 여러 가지 시행을 제공할 수 있다. 예컨대, 아이템이 파일 백 아이템이라면(예컨대, isFileBacked" 플래그가 참(true)으로 설정되면), 다음이 적용될 수 있다. 1) FileBackedItem은 다른 파일 백 아이템 트리에 포함될 수 없다(예컨대, 모(parent) 아이템에 대해서, EntityState.RootFileBackedItemId는 NULL이어야 한다); 2) "CompoundItem" 타입으로 선언된 아이템 만이 파일 백될 수 있다.
API 정의 컴포넌트(708)는 적어도 하나의 복합(complex) 아이템을 생성하는 절차를 구현할 수 있다. 이 절차는 데이터 저장 시스템(702)과 연관된 저장소에서 복수의 아이템을 생성할 수 있다. API 정의 컴포넌트(708)는 아이템 확장 세트와 각 아이템과의 링크 세트를 생성할 수 있다. 타입 ComplexItem은 불변의 UDT이다. 다음은 ComplexItem 정의의 예이다.
public class ComplexItem
{
Public ComplexItem(Item item,
SqlInt32promotionStatus,
SqlBoolean isFileBacked,
SqlString namespaceName,
SqlBoolean isGhost,
SyncEntityVersion syncInfo,
ItemSyncMetadata syncMetadata);
public void AddLink(Link link,
SyncEntityInformation syncInfo,
LinkSyncMetadata synMetadata);
public void AddItemExtension(ItemExtension itemextension,
SyncEntityVersion syncInfo);
public void AddItemFragment(ItemFragment itemFragment,
SyncEntityVersion syncInfo);
}
더욱이, 이하의 테이블은 복합 아이템 생성 절차와 연관된 파라미터의 예를 제공한다.
이름 | 방향 | 타입 | 설명 |
ComplexItems | IN | [System.Storage.Store].ComplexItemList | 하나 또는 그 이상의 ComplexItem 인스턴스 리스트 |
securityDescriptor | IN | [System.Storage.Store].SecurityDescriptor | 새로 생성된 모든 아이템에 바로 적용되는 보안 디스크립터. 스트링은 보안 디스크립터의 바이너리 형태이다. 이 파라미터는 선택적인 것이며 널일 수 있다. 그 경우에 보안은 포함하는 아이템 소스로부터 인계받는다. 디폴트값은 널이다. |
concurrencyToken | OUT | BIGINT | 절차가 발생하면, concurrencyToken은 모든 아이템, 링크, 아이템 확장의 생성과 관련된 값을 포함한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 다음의 기능을 제공할 수 있다. 트랜잭션 의미는 모든 아이템이 자동으로 부가되는 것이다. 기능이 수행되는 동안에 실패가 있으면, 복합 아이템들 중 어느 것도 저장소에 삽입되지 않는다. ComplextItems 리스트가 공백이면, 동작은 누프(noop)하며 성공을 발생시킨다. 만일 절차로 넘겨진 것과 동일한 아이템 ID를 가진 툼스톤드 아이템이 저장소에 존재하면, 절차는 실패할 것이다. 아이템 확장 리스트는 제로 또는 그 이상의 엔트리를 가지고 널 또는 논 널이 될 수 있다. 링크 리스트는 제로 또는 그 이상의 엔트리를 가지고 널 또는 논 널이 될 수 있다. 아이템 프래그먼트 리스트는 제로 또는 그 이상의 엔트리를 가지고 널 또는 논 널이 될 수 있다. 클라이언트가 후속되는 아이템 갱신에 대한 낙관적 동시성 검출을 이용할 수 있도록 concurrencyToken이 발생된다. concurrencyToken 값은 이 동작의 결과로서 생성된 모든 아이템, 링크 및 아이템 확장에 적용될 것이다. 파일 백 아이템에 대해서는 다음이 적용될 수 있다. 1) FileBackedItem은 다른 파일 백 아이템 트리에 포함될 수 없다(예컨대, 모(parent) 아이템에 대해서, EntityState.RootFileBackedItemId는 NULL이어야 한다); 2) "CompoundItem" 타입으로 선언된 아이템 만이 파일 백될 수 있다.
API 정의 컴포넌트(708)는 데이터 저장 시스템(702) 내의 저장소에 링크를 생성하는 절차를 구현할 수 있다. 예컨대, 이하의 테이블은 링크 생성에 이용되는 절차와 연관된 여러 가지 파라미터를 기술할 수 있다.
이름 | 방향 | 타입 | 설명 |
link | IN | [System.Storage.Store].Link | 링크 |
concurrencyToken | OUT | BIGINT | 절차가 발생하면, concurrencyToken은 이 링크의 생성과 연관된 값을 포함한다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncMetadata | IN | [System.Storage.Store].LinkSyncMetadata | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 데이터 저장 시스템(702)과 연관된 여러 가지 특성을 보장한다. 예컨대, 타겟 아이템 id는 (이 링크 타입에 대한 스키마에서 규정된 비와 같이) 올바른 타입의 유효 아이템을 지시할 수 있고, 그리고/또는 타겟 아이템 id는 널이어야 한다. CreateLink는 기존의 데이터 저장 시스템(702) 아이템 간에 하나의 링크를 생성하는데 이용될 수 있다. 만일 절차로 넘겨진 것과 거의 유사한 링크 id와 소스 아이템 id를 가진 툼스톤드 링크가 저장소에 존재하면, 절차는 실패하지 않을 것이다. 이 툼스톤드 링크는 부활될 것이며, CreateLink 호출로 넘겨진 새로운 데이터는 그 부활된 링크 속으로 들어갈 것이다. 부가적으로, 클라이언트가 후속되는 링크 갱신에 대한 낙관적 동시성 검출을 이용할 수 있도록 concurrencyToken이 발생될 수 있다.
API 정의 컴포넌트(708)는 저장소 내에 아이템 확장을 생성하는 절차를 채용할 있다. 예컨대, 이하의 테이블은 아이템 확장을 생성하는데 이용되는 절차와 연관된 여러 가지 파라미터를 기술할 수 있다.
이름 | 방향 | 타입 | 설명 |
itemExtension | IN | [System.Storage.Store].ItemExtension | ItemExtension을 확장시키는 UDT의 인스턴스 |
itemId | IN | [System.Storage.Store].ItemId | ItemExtension이 연관될 UDT의 인스턴스 |
concurrencyToken | OUT | BIGINT | 절차가 발생하면, concurrencyToken은 이 아이템 확장의 생성과 연관된 값을 포함한다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
클라이언트가 후속되는 아이템 확장 갱신에 대한 낙관적 동시성 검출을 이용할 수 있도록 상기 이용된 concurrencyToken이 발생될 수 있다.
API 정의 컴포넌트(708)는 저장소 내의 아이템을 변경하는 절차를 불러낼 수 있다. 이 경우, 저장소는 데이터 저장 시스템(702)에 관련된 존속 데이터이다. 이하의 테이블은 아이템 절차의 변경에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
itemId | IN | [System.Storage.Store].ItemId | 갱신될 아이템의 Id |
compiledChangeDefinition | IN | [System.Storage.Store].CompiledChangeDefinition | 아이템의 속성에 대한 설명이 변경될 것이다. |
valueList | IN | [System.Storage.Store].AssignmentValueList | ChangeDefinition에서 속성에 적용될 값 세트 |
promotionStatus | IN | INTEGER | 아이템을 위해 저장될 프로모션 값. 아이템이 File-Backed 아이템이 아니면, 이 파라미터는 무시된다. 널이 건네지면, 이 값은 변하지 않는다. |
concurrencyToken | IN OUT | BIGINT | 입력시, concurrencyToken은 아이템의 기대값이다. 절차가 concurrencyToken을 발생하면, 이것은 이 아이템의 갱신과 관련된 값을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncMetadata | IN | [System.Storage.Store].ItemSyncMetadata | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 저장소 내의 링크를 변경하는 절차를 불러낼 수 있다. 이하의 테이블은 링크 절차의 변경에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
sourceitemId | IN | [System.Storage.Store].ItemId | 링크의 소스 아이템의 id |
linkId | IN | [System.Storage.Store].LinkId | 갱신될 링크의 id |
compiledChangeDefinition | IN | [System.Storage.Store].CompiledChangeDefinition | 아이템의 속성에 대한 설명이 변경될 것이다. |
valueList | IN | [System.Storage.Store].AssignmentValueList | ChangeDefinition에서 속성에 적용될 값 세트 |
concurrencyToken | IN OUT | BIGINT | 입력시, concurrencyToken은 링크의 기대값이다. 절차가 concurrencyToken을 발생하면, 이것은 이 링크의 갱신과 관련된 값을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncMetadata | IN | [System.Storage.Store].LinkSyncMetadata | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
링크의 소스가 불변이며, 이 저장된 절차를 이용하여서는 변화될 수 없다. 링크의 타겟은 변화될 수 있으며 UpdateLink를 호출함으로써 변화될 수 있다. 타겟 아이템 id의 타입은 널 또는 논 널일 수 있다. 만일 논 널이면, 이 아이템은 저장소에 존재하는 아이템을 지시하며 링크 상에서 선언된 타입과 일치할 수 있다.
또한, API 정의 컴포넌트(708)는 저장소 내의 ItemExtension을 변경할 수 있다. 이하의 테이블은 API 정의 컴포넌트(708)가 이용하는 절차의 예로서, 연관된 여러 가지 속성 및/또는 설명을 보여준다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 타겟 아이템 확장과 연관된 아이템의 id |
typeId | IN | [System.Storage.Store].TypeId | 아이템 확장의 타입 id |
compiledChangeDefinition | IN | [System.Storage.Store].CompiledChangeDefinition | 아이템 확장에서 어느 속성이 변경될 것인지에 대해 설명한다. |
valueList | IN | [System.Storage.Store].AssignmentValueList | ChangeDefinition에서 속성에 적용될 값 세트 |
concurrencyToken | IN OUT | BIGINT | 입력시, concurrencyToken은 확장의 기대값이다. 절차가 concurrencyToken을 발생하면, 이것은 아이템 확장의 갱신과 관련된 값을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
더욱이, API 정의 컴포넌트(708)는 저장소 내에서 아이템을 삭제할 수 있는 API(706)로 절차를 불러낼 수 있다. 이하의 테이블은 저장소로부터 아이템을 삭제하는 절차의 파라미터 및 설명의 예를 보여준다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 삭제될 아이템의 ItemId |
concurrencyToken | IN | BIGINT | 이 아이템에 대한 concurrencyToken의 기대값. 만일 이 값이 널이면, 체크는 행해지지 않는다. 디폴트값은 널이다. |
deletionUtc | IN | DATETIME | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncVersion | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
아이템이 발견되지 않은 경우에는, 절차는 성공을 발생할 것이다. 아이템을 목표로 삼는 저장소 내이 링크는 널로 설정된 TargetItemId 속성을 가질 수 있다. TargetItemId를 널로 설정하는 것은 링크 상에서 호출자가 갖는 유효한 허가와는 무관하게 성공할 수 있다. 아이템이 삭제될 때에, 그 아이템으로부터 나온 링크, 그 아이템과 연관된 ItemExtensions과 ItemFragments는 삭제될 수 있다. 이 삭제는 아이템이 자(children) 아이템을 갖지 않아도(예컨대, itemid와 동일한 컨테이너 id를 가진 아이템이 존재하지 않더라도) 성공할 수 있다. 일 예로서, 아이템 트리의 케스케이드(cascade) 삭제를 강제할 방법은 없다. 이것은 단지 호출자에 의해서 구현될 수 있다. 아이템 id가 툼스톤되면, concurrencyToken/LastUpdateTS 값의 상태에 관계없이 성공이 발생된다. concurrencyToken이 일치하지 않고 아이템이 툼스톤되지 않으면, 에러 코드가 발생될 수 있다. 파일 시스템 에이전트는 그 자신의 컨텍스트에서 DeleteItem을 호출할 수 있다. API(706)에서는 액세스 체크나 오딧은 행해지지 않는다.
API 정의 컴포넌트(708)는 저장소 내의 링크를 삭제하는 절차를 불러낼 수 있다. 이하의 테이블은 링크 절차의 삭제에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
sourceitemId | IN | [System.Storage.Store].ItemId | 삭제될 링크의 소스 아이템의 ItemId |
linkId | IN | [System.Storage.Store].LinkId | 삭제될 링크의 id |
concurrencyToken | IN | BIGINT | 이 아이템에 대한 concurrencyToken의 기대값. 만일 이 값이 널이면, 체크는 행해지지 않는다. 디폴트값은 널이다. |
deletionUtc | IN | DATETIME | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncVersion | IN | [System.Storage.Store].SyncVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 데이터 저장 시스템(702) 내의 저장소에서 아이템 확장을 삭제하는 절차를 채용할 수 있다. 이하의 테이블은 본 발명에서 이용되는 아이템 확장 절차의 삭제에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
itemId | IN | [System.Storage.Store].ItemId | 타겟 아이템 확장이 연관된 아이템의 id |
typeId | IN | [System.Storage.Store].TypeId | 아이템 확장의 타입 id |
concurrencyToken | IN | BIGINT | 아이템 확장의 concurrencyToken의 기대값. 만일 이 값이 널이면, 체크는 행해지지 않는다. 디폴트값은 널이다. |
deletionUtc | IN | DATETIME | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncVersion | IN | [System.Storage.Store].SyncVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
또한, API 정의 컴포넌트(708)는 저장소에서 ItemFragment를 생성하는 절차를 채용할 수 있다. 이하의 테이블은 사용자가 ItemFragment를 생성할 수 있게 하는 절차에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
itemIdFragment | IN | [System.Storage.Store].ItemFragment | 생성될 아이템 프래그먼트. ItemFragment의 FragmentId는 udt 내부에 저장된다. |
concurrencyToken | OUT | BIGINT | 절차가 concurrencyToken을 발생시킬 때, 이것은 이 ItemFragment의 생성과 연관된 값을 포함한다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 저장소에서 ItemFragment를 변경하는 절차를 불러낼 수 있다. 이 저장된 절차는 ItemFragment 속성의 타입과 이름이 이 저장된 절차의 이름에 포함되도록 타입당 발생될 수 있다. 더 자세한 설명은 전술한 "CreateItemFragment"를 참조하라. 이하의 테이블은 저장소 내의 ItemFragment의 변경에 해당하는 파라미터와 설명의 예이다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 갱신될 아이템 프래그먼트의 아이템 id |
setId | IN | [System.Storage.Store].SetId | 갱신될 아이템 프래그먼트 속성의 식별자 |
fragmentId | IN | [System.Storage.Store].FragmentId | 갱신될 프래그먼트의 프래그먼트 id |
compiledChangeDefinition | IN | [System.Storage.Store].CompiledChangeDefinition | 변경될 ItemFragment 속성의 설명 |
valueList | IN | [System.Storage.Store].AssignmentValueList | ChangeDefinition에서 속성에 적용될 값 세트 |
concurrencyToken | IN OUT | BIGINT | 입력시, concurrencyToken은 확장의 기대값이다. 절차가 concurrencyToken을 발생하면, 이것은 ItemFragment의 갱신과 관련된 값을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 저장소에서 ItemFragment를 삭제하는 절차를 정의 및/또는 구현할 수 있다. 이하의 테이블은 데이터 저장 시스템(702) 내의 ItemFragment를 삭제하는 절차의 예로서 여러 가지 파라미터를 서술한다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 삭제될 ItemFragment의 소스 아이템의 ItemId |
setId | IN | [System.Storage.Store].SetId | 삭제될 아이템 프래그먼트 속성의 식별자 |
fragmentId | IN | [System.Storage.Store].FragmentId | 갱신될 프래그먼트의 프래그먼트 id |
concurrencyToken | IN | BIGINT | 이 ItemFragment에 대한 concurrencyToken의 기대값. 만일 이 값이 널이면, 체크는 행해지지 않는다. 디폴트값은 널이다. |
deletionUtc | IN | DATETIME | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
SyncVersion | IN | [System.Storage.Store].SyncVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
더욱이, API 정의 컴포넌트(708)는 아이템의 보안 디스크립터를 얻는 절차를 채용한다. 이하의 테이블은 데이터 저장 시스템(702) 내의 아이템의 보안 디스크립터를 얻는 절차와 연관된 여러 가지 파라미터의 예이다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 보안 디스크립터가 검색되어야 하는 아이템의 id |
securityInfoFlags | IN | INTEGER | 보안 디스크립터 중 어느 부분이 발생되어야 하는 지를 표시하는 플래그 세트 |
securityDescriptor | OUT | [System.Storage.Store].SecurityDescriptor | 보안 디스크립터 |
concurrencyToken | OUT | BIGINT | 절차가 이 변수를 발생시킬 때에, 이것은 보안 디스크립터의 이 갱신과 연관된 concurrencyToken 값을 포함한다. 디폴트값은 널이다. |
클라이언트가 후속되는 보안 디스크립터 갱신에 대한 낙관적 동시성 검출을 이용할 수 있도록 하는 concurrencyToken이 발생된다. concurrencyToken은 보안 디스크립터와 연관될 수 있다. 일 예로서, 보안 디스크립터에 대한 concurrencyToken은 itemId에 해당하는 아이템의 concurrencyToken 값에 관련하지 않는다. 파일 시스템 에이전트는 그 자신의 컨텍스트에서 GetItemSecurity를 호출할 수 있다.
API 정의 컴포넌트(708)는 저장소에서 아이템의 보안 디스크립터를 설정할 수 있다. 이하의 테이블은 API(706)가 이용하는 보안 디스크립터를 설정하는 절차의 예로서 연관된 여러 가지 속성 및/또는 설명을 서술한다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 보안 디스크립터가 검색되어야 하는 아이템의 id |
securityInfoFlags | IN | INTEGER | 보안 디스크립터 중 어느 부분이 갱신되고 있는지를 표시하는 플래그 세트 |
securityDescriptor | OUT | [System.Storage.Store].SecurityDescriptor | 보안 디스크립터 |
concurrencyToken | IN OUT | BIGINT | 입력시, 이것은 보안 디스크립터의 concurrencyToken의 기대값이다. 절차가 이 변수를 발생하면, 이것은 보안 디스크립터의 갱신과 관련된 concurrencyToken을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
API 정의 컴포넌트(708)는 아이템을 컨테이너들 간에 이동시키고, 그리고/또는 아이템의 namespaceName을 변화시키는 절차를 채용할 수 있다. 이하의 테이블은 이 절차와 연관된 여러 가지 파라미터의 예이다.
이름 | 방향 | 타입 | 설명 |
ItemId | IN | [System.Storage.Store].ItemId | 이동될 아이템의 ItemId |
newContainerId | IN | [System.Storage.Store].ItemId | 아이템이 이동될 컨테이너의 Id. 만일 널이 건네지면, 컨테이너 id는 변하지 않는다. |
namespaceName | IN | NVARCHAR(255) | namespaceName 이름 값. 만일 널이 건네지면, 이름은 변하지 않는다. 공백 스트링으로 건네지는 것은 에러이다. *타입의 실제 선언된 길이에 대해 상세한 것을 위해서는 각주 부분을 참조하라. |
concurrencyToken | IN OUT | BIGINT | 이 Item에 대한 concurrencyToken의 기대값. 만일 이 값이 널이면, 체크는 행해지지 않는다. 디폴트값은 널이다. |
만일 이동될 아이템이나 새로운 컨테이너가 현재의 연결점으로부터 도달할 수 없다면, 이 절차는 에러를 발생할 수 있다. 이 동작은 동일한 이름을 가진 아이템이 타겟 컨테이너 내에 이미 존재한다면 실패할 수 있다. 이 기능을 이용하는 유효한 방법은 3가지가 있다. 이하의 테이블은 이들 용법을 보여준다.
namespaceName | newContainerId | 결과 |
Null | Null | 에러 |
Null | Non-null | 아이템을 이동시키되 동일한 namespaceName을 유지한다. |
Non-null | Null | 아이템을 이동시키지 말고 namespaceName을 변경한다. |
Non-null | Non-null | 아이템을 새로운 컨테이너로 이동시키고 namespaceName을 변경한다. |
MoveItem의 호출 방식에 무관하게(예컨대, 아이템을 이동시키든지 및/또는 아이템 개명(rename)하든지 간에), (concurrencyToken에서 발생된) LastUpdateTS 값은 갱신될 수 있다. 파일 시스템 에이전트는 사용자의 컨텍스트에서 MoveItem을 호출할 수 있다. 파일/디렉토리 상의 액세스 체크나 오딧은 개명되지 않는다. 모 아이템에 대해 행해진 액세스 체크와 오딧은 사용자가 아이템을 새로운 목적지로 이동시키기 위해 액세스할 것인지 여부를 판단한다.
API 정의 컴포넌트(708)는 아이템을 다른 타입일 수 있는 새로운 아이템으로 대체하는 절차를 채용할 수 있다. 이하의 테이블은 이 절차와 연관된 여러 가지 파라미터의 예이다.
이름 | 방향 | 타입 | 설명 |
newItem | IN | [System.Storage.Store].ItemId Item | 저장소에서 기존 아이템을 대체하는 아이템 |
deleteItemOwnedContent | IN | BIT | 이 파라미터가 TRUE이면, 모든 아이템 소유 내용(아이템으로부터 나온 링크, 아이템 확장, 아이템에 첨부된 파일 스트림)은 삭제될 것이다. |
concurrencyToken | IN OUT | BIGINT | 입력시, concurrencyToken은 아이템의 기대값이다. 절차가 concurrencyToken을 발생하면, 이것은 이 아이템의 갱신과 관련된 값을 포함한다. 만일 입력값이 널이면, 체크는 행해지지 않는다. 새로운 concurrencyToken은 계속 발생된다. 디폴트값은 널이다. |
SyncInfo | IN | [System.Storage.Store].SyncEntityVersion | 호출자가 Sync가 아니면 널이어야 한다. 디폴트값은 널이다. |
아이템을 다른 아이템 오브젝트로 대체하는 데는 ReplaceItem 동작이 이용될 수 있다. 이들 오브젝트는 OldItem과 NewItem이라 할 수 있다. OldItem과 NewItem은 동일한 ItemId를 가질 수 있지만 타입은 서로 다를 수 있다. 예컨대, 이 동작이 이용될 애플리케이션은 프로퍼티 프로모션(Property promotion)이다. 이하의 설명은 ReplaceItem 동작과 연관될 수 있다. 1) 컨테이너 ID는 변경될 수 없다(이 기능을 갖기 위해서는 호출자는 MoveItem을 호출해야 한다.); 2) 기존의 namespaceaName은 변하지 않을 것이다; 3) 아이템이 파일 백된 경우에 대체되고 있는 Item으로부터 나오는 아이템들은 모두 항상 삭제한다; 4) ReplaceItem 동작이 아이템을 목표로 하는 링크를 (타겟 타입 제약이 더 이상 유효하지 않기 때문에) 무효화시키는 경우에는 ReplaceItem은 실패한다; 5) ReplaceItem 동작이 아이템으로부터 나온 링크를 (소스 타입 제약이 더 이상 유효하지 않기 때문에) 무효화시키는 경우에는 ReplaceItem은 실패한다; 6) 새로운 아이템의 변화 단위는 모두 디폴트 값으로 설정된다. 최소한 2가지 예외가 있을 수 있다. 만일 아이템이 sync에 관여하면, ChangeInformation.SyncInformation.CreationSyncVersion 값이 구 아이템으로부터 신 아이템으로 이동할 수 있다. 또한, 아이템이 sync에 관여하고 파일 백되면, 파일 스트림의 변화 단위는 구 아이템으로부터 신 아이템으로 이동한다; 7) 모든 파일 방식 속성은 특정되어야 한다. CreateItem과 달리, 파일 속성은 사용자에 의해 설정되지 않으면 모 폴더로부터의 파일 속성의 인스턴스는 없다; 8) 파일 백 아이템에 대해서는 DeleteItemOwnedCount 플래그가 특정되지 않으면 파일 스트림 데이터는 변경되지 않는다 (이하의 테이블 참조);
OldItem | NewItem 타입 | 행위 |
논 파일 백 아이템 | 파일 백 아이템 | 허용되지 않음; ReplaceItem은 실패한다(에러 코드 발생). |
파일 백 아이템 | 파일 백 아이템 | 구 파일 스트림을 유지한다(플래그 DeleteEmbeddedCount의해 무효로 되지 않는 경우에). 아이템이 Sync에 관여하면, 파일 스트림에 해당하는 변화 단위 값은 구 아이템으로부터 신 아이템으로 이동한다. |
파일 백 아이템 | 논 파일 백 아이템 | 허용되지 않음; ReplaceItem은 실패한다(에러 코드 발생). |
논 파일 백 아이템 | 논 파일 백 아이템 | 특별한 행위없음. |
9) ReplaceItem은 아이템이 제너릭(Generic) 아이템 타입으로부터 컴파운드(Compound) 아이템 타입 또는 그 반대로 전환되지 못하게 한다(이하의 테이블 참조).
OldItem | NewItem 타입 | 행위 |
Generic | Generic | 허용됨 |
Compound | Compound | 허용됨 |
Generic | Compound | 허용되지 않음(에러 코드 발생) |
Compound | Generic | 허용되지 않음(에러 코드 발생). |
도 8은 각자의 특성을 가진 데이터 모델에 적어도 부분적으로 기초하여 데이터 조작을 용이하게 하는 지능 컴포넌트를 채용한 시스템(800)을 도시한 것이다. 시스템(800)은 (데이터 모델로 표현될 수 있는) 데이터 저장 시스템(802), 데이터 조작 컴포넌트(804), 및 상기 도면에서 보여진 컴포넌트들과 거의 유사할 수 있는 인터페이스(106)를 포함할 수 있다. 시스템(800)은 지능 컴포넌트(806)를 더 포함한다. 지능 컴포넌트(806)는 데이터 저장 시스템(802)과 연관된 적어도 하나의 특성에 따라서 데이터 조작(예컨대, 카피, 갱신, 대체, 획득, 설정, 생성, 삭제, 이동 등)을 용이하게 하는 데이터 조작 컴포넌트(804)에 의해 이용될 수 있다. 예컨대, 지능 컴포넌트(806)는 데이터 저장 시스템(802)과 연관된 특성을 분석하고 그리고/또는 데이터 저장 시스템(802)에 대한 특성의 보전을 보장하는데 이용될 수 있다.
지능 컴포넌트(806)는 이벤트 및/또는 데이터를 통해 수집된 정보로부터 시스템, 환경 및/또는 사용자에 대해 개략적으로 추리 또는 추론할 수 있다. 예컨대 특정의 컨텍스트(context)나 행위(action)를 식별하거나 상태의 확률 분포를 발생시키는데 추론이 이용될 수 있다. 추론은 개연적인(probabilistic) 것, 즉, 데이터와 이벤트에 기초하여 관심의 대상인 상태의 확률 분포를 계산하는 것일 수 있다. 추론은 이벤트 및/또는 데이터 세트로부터 상위 레벨의 이벤트를 만들어 내는 기술이라고도 할 수 있다. 이벤트들이 시간적으로 근접하여 상관되어 있는지 여부와 이벤트들이 하나 또는 몇 개의 이벤트 및 데이터 소스로부터 나오는지 여부와 무관하게 이와 같은 추론의 결과, 새로운 이벤트 또는 행위가 구축된다. 본 발명과 관련한 자동적 및/또는 추론적 행위를 수행하는 것과 관련하여 (명시적 및/또는 암시적으로 학습된(trained)) 여러 가지 분류 방식 및/또는 시스템(예컨대, 지원 벡터 머신(support vector machines), 신경 회로망, 전문가 시스템, 베이지안 신뢰 회로망(Bayesian belief networks), 퍼지 로직(fuzzy logic), 데이터 융합 엔진(data fusion engines) 등)이 이용될 수 있다.
분류자는 입력 속성 벡터(x=(x1, x2, x3, x4, xn)를 입력이 클래스에 속한다는 신뢰(confidence)에 맵핑시키는 함수이다(즉, f(x)=confidence(class)). 그와 같은 분류는 사용자가 자동적으로 수행되기를 원하는 행위를 예측 또는 추론하는 확률 및/또는 통계 방식 분석(예컨대, 분석 유틸리티와 코스트를 계산에 넣는 것)을 이용할 수 있다. 지원 벡터 머신(SVM)은 이용될 수 있는 분류자의 예이다. SVM은 논 트리거링 이벤트(non-triggering events)로부터 트리거링 기준을 분할하는 초곡면(hypersurface)를 입력 공간에서 찾아냄으로써 작동한다. 직관적으로는 이 동작에 의해서 트레이닝 데이터와 가까운(동일하지는 않음) 테스팅 데이터에 대한 분류가 정확하게 된다. 다른 방향성(directed) 및 무방향성(undirected) 모델 분류 방식은 예컨대 나이브 베이즈(naive Bayes), 베이지안 회로망, 결정 트리(decision tree), 및 퍼지 로직 모델을 포함하며, 서로 다른 패턴의 독립성을 제공하는 확률적 분류 모델이 이용될 수 있다. 여기서 사용된 분류는 우선도 모델(models of priority)을 개발하는데 이용되는 통계적 회귀(statistical regression)를 포함한다.
도 9 및 10은 본 발명에 따른 방법을 나타낸 것이다. 설명을 간단하게 하기 위하여 이 방법은 일련의 동작(acts)들로 기술한다. 본 발명은 도시된 동작들 및/또는 동작 순서에 한정되지 않는다. 예컨대, 동작들은 여러 가지 순서로 및/또는 동시에 일어날 수 있으며, 그리고 여기서는 설명되지 않은 다른 동작도 일어날 수 있다. 더욱이, 본 발명에 따른 방법을 구현하는 데는 도시된 동작이 필요 없을 수도 있다. 또한, 본 기술 분야의 당업자라면 이 방법이 상태도나 이벤트를 통해 일련의 상관(interrelated) 상태로 표현될 수 있음을 잘 알 것이다.
도 9는 적어도 하나의 모델 제약을 시행하면서 데이터베이스 기반 시스템에 내에서 데이터 조작을 용이하게 불러내는 방법(900)을 나타낸 것이다. 도면부호 902에서, 데이터 모델을 이용하여 데이터 저장 시스템을 표현할 수 있다. 데이터 모델은 데이터베이스 구조에 적어도 부분적으로 기초한 복잡한 모델일 수 있다. 이 데이터베이스 구조에서는 아이템, 서브 아이템, 속성 및 관계가 데이터 저장 시스템 내의 정보를 복잡한 형태의 인스턴스로 표현할 수 있도록 정의될 수 있다. 데이터 모델은 풍부한 존속 오브젝트와 그 오브젝트들 간의 링크를 생성하여 관리하기 위해 기본 빌딩 블록 세트를 이용할 수 있다. 데이터 모델은 표현된 데이터 저장 시스템의 구조 및/또는 기능을 반영하는 적어도 하나의 특성을 포함할 수 있다. 즉, 데이터 모델은 데이터 모델, 데이터 저장 시스템, 및 이와 연관된 데이터의 보전을 보장하기 위해 시행될 수 있는 제약을 포함할 수 있다.
도면부호 904에서, (데이터 모델에 기초한) 데이터 저장 시스템과 연관된 특성이 결정될 수 있다. 이 특성은 예컨대 그 특성에 따른 데이터 저장 시스템을 제공하는 가이드라인, 제한, 청사진 등으로 이루어질 수 있다. 그와 같은 특성을 이용함으로써 해당 데이터 모델의 보전과 정확도가 보장될 수 있다. 도면부호 906에서, 적어도 하나의 절차를 구현함으로써 데이터 조작을 불러낼 수 있다. 데이터 저장 시스템과 관련된 임의의 적당한 데이터 조작을 제공하면서, 그와 같은 데이터 저장 시스템의 특성은 안정된 환경을 제공하도록 시행된다. 일 예로서, API를 이용하여 데이터 저장 시스템과 관련하여 임의의 적당한 데이터 조작을 가능하도록 할 수 있다. 예컨대, 사용자는 API를 이용하여 데이터를 변경할 수 있다. 데이터 조작은 카피, 갱신, 대체, 획득, 설정, 생성, 이동 등을 포함할 수 있다. 예컨대, 데이터 저장 시스템은 컨테이너 계층 시스템을 포함할 수 있다. 이 컨테이너 계층 시스템에서 데이터 저장 시스템 내의 데이터를 조작하는데 이용되는 절차 중에 그와 같은 특성이 시행된다.
도 10은 시행되고 있는 각자의 특성을 가진 데이터 모델에 적어도 부분적으로 기초하여 데이터를 조작하는 방법(1000)을 나타낸 것이다. 도면부호 1002에서, 데이터 모델을 이용하여 데이터 저장 시스템을 표현할 수 있다. 데이터 저장 시스템은 정보를 복잡한 형태의 인스턴스로 표현하는 데이터베이스 기반 파일 시스템일 수 있다. 도면부호 1004에서, 표현된 데이터 저장 시스템과 연관된 특성이 결정된다. 이 특성은 제한, 가이드라인, 규칙, 목표, 청사진, 및/또는 정확한 구현을 조장하는 데이터 저장 시스템과 연관된 임의의 적당한 요소 등을 포함할 수 있다.
도면부호 1006에서, 적어도 하나의 절차를 이용하여 데이터 조작을 불러낼 수 있다. 데이터 조작은 API에 의해 제공될 수 있다. 여기서 사용자는 적어도 하나의 데이터 조작에 대응하는 적어도 하나의 절차를 호출할 수 있다. 데이터 WHR작은 데이터 저장 시스템과 연관된 특성(들)을 유지 및/또는 시행하면서 불러낸다. 도면부호 1008에서, 에러 코드가 이용될 수 있고, 그리고/또는 보안이 채용될 수 있다. 에러 코드는 예컨대 데이터 조작이 데이터 저장 시스템의 특성을 침해할 때에 발생되어 이용될 수 있다. 에러 코드는 API를 통해 사용자에게 보여질 수 있다. 여기서 에러 코드는 이 코드를 텍스트 메시지와 연관시키는 룩업(lookup) 테이블에 대응할 수 있다. 데이터 조작 및/또는 API와 연관된 보안은 여러 가지 권한 레벨 및/또는 로그인 및/또는 패스워드를 포함할 수 있다. 즉, 각 데이터 조작은 보안 레벨과 상관될 수 있으며, 특정 레벨의 보안만이 그와 같은 절차 및/또는 로그인 및 패스워드를 구현할 수 있다.
도면부호 1010에서, 데이터 저장 시스템 내의 데이터 조작과 관련하여 낙관적 동시성 및/또는 교착 상태가 구현될 수 있다. 낙관적 동시성은 다른 프로세스가 거의 같은 시각에서 어떤 변화를 줄 가능성이 낮다고 가정하므로, 그 변화가 데이터 저장 시스템(예컨대, 저장소)에 맡겨질 준비가 될 때까지는 로크를 채용하지않는다. 그와 같은 기술을 채용함으로써 로크 시간을 줄이며 더 양호한 데이터베이스 성능을 제공한다. 예컨대, 아이템의 변경에 따라 변화되는 토큰을 그 아이템과 연관시킬 수 있다. 즉, 낙관적 동시성은 2개의 동시성 애플리케이션 단의 데이터 액세스를 용이하게 할 수 있다. 또한, 로킹은 복수의 동시성 호출자들을 용이하게 지원할 수 있다. 예컨대, 공통의 자원 세트의 소유권을 요구하는 호출자가 동시에 여러 명 있는 상황에서 각 호출자가 다른 호출자들을 기다리고 있기 때문에 어떠한 요구도 충족될 수 없는 경우를 가정한다. 그와 같은 경우에 시스템은 호출자들을 차단(예컨대, 폐쇄(lock out))할 수 있다. 이와 같은 경우로부터 벗어나는 유일한 방법은 호출자들 중 한 명을 퇴거시키는 것이다. 이 상황을 피하기 위하여 로킹 은 복잡한 로킹 로직이 개별 요구가 자동적으로 성공 또는 실패하는 것을 보증할 수 있도록 복수의 동시성 호출자를 지원할 수 있다. 더욱이, 복잡한 로킹 로직이 개별 요구가 자동적으로 성공 또는 실패하는 것을 보증할 수 있도록 복수의 동시성 호출자는 지원받을 수 있다.
본 발명의 여러 가지 양상을 구현하는 추가적인 정황을 제공하기 위하여, 도 11 및 12와 이하의 설명은 본 발명의 여러 가지 양상이 구현될 수 있는 적당한 컴퓨팅 환경에 대한 개요를 제공한다. 본 발명은 로컬 컴퓨터 및/또는 원격 컴퓨터에서 실행되는 컴퓨터 프로그램의 컴퓨터 실행 명령어들로 설명하였지만, 본 기술 분야의 통상의 전문가라면 본 발명이 다른 프로그램 모듈과 조합하여 구현될 수도 있음을 잘 알 것이다. 일반적으로, 프로그램 모듈은 특정의 태스크를 수행하고 그리고/또는 특정의 추상 데이터 타입을 구현하는 루틴, 프로그램, 컴포넌트, 데이터 구조 등을 포함한다.
더욱이, 본 기술 분야의 통상의 전문가라면 본 발명의 방법은 개인용 컴퓨터, 휴대형 컴퓨팅 장치, 마이크로프로세서 탑재 및/또는 프로그램가능 전자장치는 물론 싱글 프로세서 또는 멀티 프로세서 컴퓨터 시스템, 미니컴퓨터, 메인프레임 컴퓨터 등(각각은 하나 또는 그 이상의 관련 장치와 통신할 수 있음)을 포함하는 다른 컴퓨터 시스템 구성을 가지고 실시될 수 있음을 잘 알 것이다. 본 발명의 설명된 양상들은 통신망을 통해 연결된 원격 프로세싱 장치들에 의해 특정 태스크가 수행되는 분산 컴퓨팅 환경에서도 실시될 수 있다. 그러나, 본 발명의 일부 양상은 독립형 컴퓨터 상에서 실시될 수 있다. 분산 컴퓨팅 환경에서 프로그램 모듈은 로컬 및/또는 원격 메모리 저장 장치에 저장될 수 있다.
도 11은 본 발명과 상호작용할 수 있는 예시적인 컴퓨팅 환경(1100)의 개략적 블록도이다. 시스템(1100)은 하나 또는 그 이상의 클라이언트(1110)를 포함한다. 클라이언트(1110)는 하드웨어 및/또는 소프트웨어(예컨대, 스레드(threads), 프로세스, 컴퓨팅 장치)일 수 있다. 시스템(1100)은 하나 또는 그 이상의 서버(1120)도 포함한다. 서버(1120)는 하드웨어 및/또는 소프트웨어(예컨대, 스레드(threads), 프로세스, 컴퓨팅 장치)일 수 있다. 서버(1120)는 예컨대 본 발명을 이용하여 변환을 수행하는 스레드를 수용할 수 있다.
클라이언트(1110)와 서버(1120) 간의 한 가지 가능한 통신은 2 또는 그 이상의 컴퓨터 프로세스 간에 전송되기에 적합한 데이터 패킷 형태일 수 있다. 시스템(1100)은 클라이언트(1110)와 서버(1120) 간의 통신을 용이하게 하는데 이용될 수 있는 통신 프레임워크(1140)를 포함한다. 클라이언트(1110)는 클라이언트(1110) 측의 정보를 저장하는데 이용될 수 있는 하나 또는 그 이상의 서버 데이터 저장소(1130)에 작용적으로 연결된다. 유사하게, 서버들(1120)은 서버(1140) 측의 정보를 저장하는데 이용될 수 있는 하나 또는 그 이상의 서버 데이터 저장소(들)(1130)에 작용적으로 연결된다.
도 12를 참조로 설명하면, 본 발명의 여러 가지 양상을 구현하는 예시적인 환경(1200)은 컴퓨터(1212)를 포함한다. 컴퓨터(1212)는 프로세싱 유닛(1214), 시스템 메모리(1216) 및 시스템 버스(1218)를 포함한다. 시스템 버스(1218)는 시스템 메모리(1216) 등을 포함하는 시스템 컴포넌트를 프로세싱 유닛(1214)에 연결한다. 프로세싱 유닛(1214)은 이용가능한 임의의 프로세서이다. 듀얼 마이크로프로세서와 기타 멀티프로세서 구조도 프로세싱 유닛(1214)으로서 이용될 수 있다.
시스템 버스(1218)는 메모리 버스나 메모리 컨트롤러, 주변 버스나 외부 버스, 및/또는, ISA(Industrial Standard Architecture), MSA(Micro-Channel Architecture), IDE(Intelligent Drive Electronics), VLB(VESA Local Bus), PCI(Peripheral Component Interconnect), 카드 버스(Card Bus), USB(Universal Serial Bus), AGP(Advanced Graphics Port), PCMCIA(Personal Computer Memory Card International Association bus), 파이어와이어(Firewire)(IEEE 1394), SCSI(Small Compuer System Interface) 등을 포함하는 여러 가지 이용가능한 버스 구조를 이용하는 로컬 버스를 포함하는 몇 가지 타입의 버스 구조일 수 있다.
시스템 메모리(1216)는 휘발성 메모리(1220)와 불휘발성 메모리(1222)를 포함한다. 불휘발성 메모리(1222)에는 기동 중(during start-up)과 같은, 컴퓨터(1212) 내의 요소들 간에 정보를 전송하는 기본 루틴을 포함하는 BIOS(basic input/output system)가 저장되어 있다. 예컨대, 불휘발성 메모리(1222)는 판독 전용 메모리(ROM), 프로그램가능 ROM(PROM), 전기적 프로그램가능 ROM(EPROM), 전기적 소거 및 프로그램가능 ROM(EEPROM) 또는 플래시 메모리를 포함할 수 있다. 휘발성 메모리(1220)는 외부 캐시 메모리로 기능하는 임의 접근 메모리(RAM)를 포함할 수 있다. 예컨대, RAM은 정적 RAM(SRAM), 동적 RAM(DRAM), 동기식 DRAM(SDRAM), 더블 데이터 레이트 SDRAM(DDR SDRAM), 개량형 SDRAM(ESDRAM), 싱크링크 DRAM(SLDRAM), 램버스 다이렉트 RAM(RDRAM), 다이렉트 램버스 다이나믹 RAM(DRDRAM), 및 램버스 다이나믹 RAM(RDRAM)과 같은 여러 가지 형태로 이용될 수 있다.
컴퓨터(1212)는 착탈식/고정식, 휘발성/불휘발성 컴퓨터 저장 매체도 포함한다. 도 12는 예컨대 디스크 스토리지(1224)를 도시한다. 디스크 스토리지(1224)는 자기 디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, 재즈(Jaz) 드라이브, 집(Zip) 드라이브, LS-100 드라이브, 플래시 메모리 카드, 메모리 스틱등과 같은 장치를 포함한다. 또한, 디스크 스토리지(1224)는 저장 매체 단독으로 또는 CD-ROM(compact disk ROM), CD-R Drive(CD-Recordable Drive), CD-RW Drive(CD-Rewritable Drive), DVD-ROM(digital versatile disk ROM) 등과 같은 광 디스크 드라이브 등을 포함하는 다른 저장 매체와 조합하여 구성될 수 있다. 디스크 스토리지(1224)를 시스템 버스(1218)에 용이하게 접속하기 위해서 통상적으로 인터페이스(1226)와 같은 착탈식 또는 고정식 인터페이스가 이용된다.
도 12는 적당한 운용 환경(1200)에서 설명된 기본 컴퓨터 자원과 사용자 간의 매개자로서 기능하는 소프트웨어를 설명한다. 이와 같은 소프트웨어는 운영 체제(1228)를 포함한다. 운영 체제(12280는 디스크 스토리지(1224)에 저장될 수 있으며, 컴퓨터 시스템(1212)의 자원을 제어하고 할당한다. 시스템 애플리케이션(1230)은 시스템 메모리(1216)나 디스크 스토리지(1224)에 저장된 프로그램 모듈(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, 워크스테이션, 마이크로프로세서 탑재 가전 제품, 피어(peer) 장치, 기타 일반적인 네트워크 노드 등일 수 있으며, 통상적으로는 컴퓨터(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), 이더넷, 토큰 링 등을 포함한다. WAN은 점간 링크(point-to-point links), ISDN(Integrated Services Digital Networks)와 그 변형과 같은 회로 교환망, 패킷 교환망, DSL(Digital Subscriber Lines) 등을 포함한다.
통신 접속부(1250)는 네트워크 인터페이스(1248)를 버스(1218)에 연결하는데 이용되는 하드웨어/소프트웨어를 말한다. 통신 접속부(1250)는 컴퓨터(1212) 내부에 있는 것으로 도시되어 있지만, 컴퓨터(1212) 외부에 있어도 된다. 네트워크 인터페이스(1248)와의 접속에 필요한 하드웨어/소프트웨어는 예컨대 통상의 전화 모뎀, 케이블 모뎀, DSL 모뎀, ISDN 어댑터, 이더넷 카드 등을 포함하는 모뎀과 같은 내장형이나 외장형을 포함한다.
상술한 것은 본 발명의 예들을 포함한다. 물론, 본 발명을 설명하기 위해 컴포넌트 또는 방법의 가능한 모든 조합을 설명하는 것은 가능하지 않지만, 본 기술 분야의 통상의 전문가라면 본 발명의 더 많은 조합 및 변경이 가능함을 알 것이다. 따라서, 본 발명은 첨부된 청구범위의 본질 및 범위에 속하는 그러한 모든 변경, 수정 및 변형을 포함하고 있다.
특히, 상술한 컴포넌트, 장치, 회로, 시스템 등에 의해 수행된 여러 가지 기능과 관련하여, 그와 같은 컴포넌트를 기술하는데 사용된 용어들("수단"도 포함)은, 달리 표시하지 않으면, 기술된 컴포넌트의 특정 기능을 수행하고, 개시된 구조와는 구조적으로는 같지 않더라도, 여기에서 설명된 본 발명의 예시적인 양상에서의 기능을 수행하는 임의의 컴포넌트에 대응한다(예컨대, 기능적 등가). 그 점에 있어서, 본 발명은 본 발명의 여러 가지 방법의 행위 및/또는 이벤트를 수행하기 위하여 컴퓨터 실행 명령어를 가진 컴퓨터 판독 매체는 물론 시스템을 포함한다.
또한, 본 발명의 특성은 몇 가지 구현들 중 하나 만에 대해서 설명되었지만, 이 특성은 주어진 또는 특정한 애플리케이션에 대해 바람직하고 유리할 수 있는 다른 구현의 하나 또는 그 이상의 다른 특성과 조합될 수 있다. 더욱이, "포함한다"이나 "포함하는"과 같은 용어나 그 변형은 상세한 설명이나 청구범위에서 사용되는 경우에, 이들 용어는 "구성하는"과 같은 용어와 유사한 의미를 갖는 것으로 보아야 한다.
Claims (20)
- 데이터를 용이하게 조작하는 시스템에 있어서,복잡한 형태의 인스턴스(instances)를 부분적으로 표현하고, 제약(constraint)과 특성(characteristic) 중 적어도 어느 하나를 포함하는 데이터 모델; 및상기 데이터 모델과 연관하여 데이터를 조작하고, 상기 제약과 특성 중 적어도 어느 하나를 시행하는(enforce) 데이터 조작 컴포넌트를 포함하는 시스템.
- 제1항에 있어서,상기 데이터 모델은 정보를 복합 형태로 표현하는 적어도 하나의 존속 개체(persisted entity)와 각 개체당 제로 또는 그 이상의 하위 개체의 계층적 모델을 정의하는 데이터베이스 기반 시스템인 데이터 저장 시스템을 표현하는 시스템.
- 제1항에 있어서,상기 데이터 조작은 카피(copy), 갱신(update), 대체(replace), 획득(get), 설정(set), 생성(create), 삭제(delete), 이동(move) 및 변경(modify) 중 적어도 어느 하나인 시스템.
- 제1항에 있어서,상기 데이터 저장 시스템 상에서 불러내는(invoke) 데이터 조작에 대응하는 보안 기술을 이용할 수 있는 보안 컴포넌트를 더 포함하는 시스템.
- 제4항에 있어서,상기 보안 기술은 로그인, 패스워드, 생체 측정 표지(biometric indicia), 음성 인식, 및 사용자와 연관된 보안 레벨 중 적어도 어느 하나인 시스템.
- 제2항에 있어서,데이터베이스 내에서 상기 데이터 저장 시스템과 연관된 데이터를 존속시키는(persist) API 컴포넌트를 더 포함하고, 상기 데이터 모델 제약과 특성 중 적어도 어느 하나를 시행하기 위하여 적어도 하나의 절차(procedure)가 이용되는 시스템.
- 제2항에 있어서,상기 데이터 저장 시스템과 연관된 상기 제약 및 특성 중 적어도 어느 하나에 따라서 데이터를 조작하는 적어도 하나의 절차를 제공하는 절차 컴포넌트를 더 포함하는 시스템.
- 제2항에 있어서,상기 저장 시스템의 특성과 제약 중 적어도 어느 하나를 상기 데이터 조작과 통합시키는 시행(enforcer) 컴포넌트를 더 포함하는 시스템.
- 제2항에 있어서,자동적으로 성공하라는 개별적 요구와 자동적으로 실패하라는 개별적 요구 중 어느 하나를 보증하는 복합 로킹 로직(complex locking logic)을 제공하는 로킹 컴포넌트를 더 포함하는 시스템.
- 제2항에 있어서,낙관적 동시성(optimistic concurrency) 기술을 이용하는 낙관적 동시성 컴포넌트를 더 포함하고, 상기 낙관적 동시성 기술은, 제1 프로세스가 제2 프로세스와 거의 같은 시각에서 변화를 줄 가능성이 낮다고 가정하므로, 상기 변화가 상기 데이터 저장 시스템에 맡겨질 준비가 될 때까지는 로크를 채용하지 않는 시스템.
- 제2항에 있어서,상기 데이터 조작이 상기 특성과 제약 중 적어도 어느 하나를 시행하지 않을 때에 에러 코드를 제공할 수 있는 에러컴포넌트를 더 포함하고, 상기 에러 코드는 에러를 기술하는 텍스트에 대응할 수 있고, 절차는 구현되지 않는 시스템.
- 제3항에 있어서,상기 API 컴포넌트에 의해 구현될 적어도 하나의 데이터 구조를 이용할 수 있는 데이터 구조 컴포넌트를 더 포함하는 시스템.
- 제12항에 있어서,상기 데이터 구조 컴포넌트는 동의어(synonym) 타입과 일반명(generic) 리스트 타입 중 적어도 어느 하나를 이용하는 시스템.
- 제12항에 있어서,상기 데이터 구조 컴포넌트는 미세 갱신(granular update)을 제공하는 변화 정의 타입을 이용하고, 사용자는 변화된 데이터의 크기에 비례하는 절차의 크기를 유지하면서 상기 변화된 데이터를 갱신 방법으로 보낼 수 있는 시스템.
- 제3항에 있어서,상기 API 컴포넌트와 함께 이용될 다음의 절차, 1) 생성 아이템; 2) 생성 복합 아이템; 3) 생성 링크; 4) 생성 아이템 확장; 5) 갱신 아이템; 6)갱신 링크; 7) 갱신 아이템 확장; 8) 삭제 아이템; 9) 삭제 링크; 10) 삭제 아이템 확장; 11) 생성 아이템 프래그먼트(fragment); 12) 갱신 아이템 프래그먼트; 13) 삭제 아이템 프래그먼트; 14) 획득 아이템 보안; 15) 설정 아이템 보안; 16) 이동 아이템; 및 17) 대체 아이템 중 적어도 어느 하나를 정의하는 API 정의 컴포넌트를 더 포함하는 시스템.
- 제3항에 있어서,상기 API 컴포넌트는 사용자로부터 데이터를 조작하라는 입력을 수신하는 시스템.
- 제1항에 따른 시스템의 컴포넌트들을 저장한 컴퓨터 판독 가능 매체.
- 데이터를 용이하게 조작하게 하는 컴퓨터 구현 방법에 있어서,데이터베이스 기반 파일 시스템인 데이터 저장 시스템을 표현하기 위하여 데이터 모델을 이용하는 단계;상기 데이터 저장 시스템과 연관된 특성과 제약 중 적어도 어느 하나를 결정하는 단계;상기 특성과 제약 중 적어도 어느 하나를 시행하면서 상기 데이터 저장 시스템 내에서 데이터를 조작하는 단계; 및사용자가 상기 데이터를 조작할 수 있도록 API를 불러내는 단계를 포함하는 컴퓨터 구현 방법.
- 데이터 조작 컴포넌트와 인터페이스 간에 전달되며, 제18항에 따른 컴퓨터 구현 방법을 용이하게 수행할 수 있도록 하는 데이터 패킷.
- 데이터를 용이하게 조작하게 하는 컴퓨터 구현 시스템에 있어서,특성과 제약 중 적어도 어느 하나를 가진 데이터 저장 시스템을 데이터 모델을 가지고 표현하는 수단;상기 데이터 모델과 연관된 데이터를 조작하고 상기 제약과 특성 중 적어도 어느 하나를 시행하는 수단; 및데이터를 조작하기 위하여 API를 불러내는 수단을 포함하는 컴퓨터 구현 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/111,557 US20060242104A1 (en) | 2005-04-21 | 2005-04-21 | Systems and methods for manipulating data in a data storage system |
US11/111,557 | 2005-04-21 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20070121664A true KR20070121664A (ko) | 2007-12-27 |
Family
ID=37188257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077020801A KR20070121664A (ko) | 2005-04-21 | 2006-03-09 | 데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법 |
Country Status (12)
Country | Link |
---|---|
US (1) | US20060242104A1 (ko) |
EP (1) | EP1872280A4 (ko) |
JP (1) | JP5108749B2 (ko) |
KR (1) | KR20070121664A (ko) |
CN (1) | CN101617290B (ko) |
AU (1) | AU2006240541B2 (ko) |
BR (1) | BRPI0609007A2 (ko) |
CA (1) | CA2598592A1 (ko) |
MX (1) | MX2007011690A (ko) |
RU (1) | RU2413984C2 (ko) |
TW (1) | TW200701018A (ko) |
WO (1) | WO2006115589A2 (ko) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7454435B2 (en) * | 2005-05-03 | 2008-11-18 | Microsoft Corporation | Systems and methods for granular changes within a data storage system |
US8087088B1 (en) * | 2006-09-28 | 2011-12-27 | Whitehat Security, Inc. | Using fuzzy classification models to perform matching operations in a web application security scanner |
US7769789B2 (en) * | 2007-05-11 | 2010-08-03 | Oracle International Corporation | High performant row-level data manipulation using a data layer interface |
US8032548B2 (en) * | 2007-07-31 | 2011-10-04 | Oracle International Corporation | Efficient network data transfer |
US8880564B2 (en) * | 2007-10-11 | 2014-11-04 | Microsoft Corporation | Generic model editing framework |
JP4612699B2 (ja) * | 2008-03-11 | 2011-01-12 | 株式会社東芝 | 監視診断装置及び遠隔監視診断システム |
US20090241134A1 (en) * | 2008-03-24 | 2009-09-24 | Microsoft Corporation | Remote storage service api |
US8863092B2 (en) * | 2011-02-10 | 2014-10-14 | Microsoft Corporation | Mechanism for compatibility and preserving framework refactoring |
US8538934B2 (en) * | 2011-10-28 | 2013-09-17 | Microsoft Corporation | Contextual gravitation of datasets and data services |
US9098269B2 (en) * | 2013-01-04 | 2015-08-04 | Microsoft Technology Licensing, Llc | System and method to ensure resource access safety with immutable object types |
CN103268321B (zh) * | 2013-04-19 | 2016-04-27 | 中国建设银行股份有限公司 | 高并发交易数据处理方法和装置 |
CN103336789A (zh) | 2013-06-06 | 2013-10-02 | 华为技术有限公司 | 一种数据库***的锁操作方法及设备 |
US9361407B2 (en) | 2013-09-06 | 2016-06-07 | Sap Se | SQL extended with transient fields for calculation expressions in enhanced data models |
US9575819B2 (en) | 2013-09-06 | 2017-02-21 | Sap Se | Local buffers for event handlers |
US9176801B2 (en) | 2013-09-06 | 2015-11-03 | Sap Se | Advanced data models containing declarative and programmatic constraints |
US9442977B2 (en) | 2013-09-06 | 2016-09-13 | Sap Se | Database language extended to accommodate entity-relationship models |
US9430523B2 (en) | 2013-09-06 | 2016-08-30 | Sap Se | Entity-relationship model extensions using annotations |
US9354948B2 (en) | 2013-09-06 | 2016-05-31 | Sap Se | Data models containing host language embedded constraints |
US9639572B2 (en) | 2013-09-06 | 2017-05-02 | Sap Se | SQL enhancements simplifying database querying |
US9619552B2 (en) | 2013-09-06 | 2017-04-11 | Sap Se | Core data services extensibility for entity-relationship models |
WO2015119592A1 (en) | 2014-02-04 | 2015-08-13 | Hewlett-Packard Development Company, L.P. | Item identifier assignment |
WO2016008088A1 (en) | 2014-07-15 | 2016-01-21 | Microsoft Technology Licensing, Llc | Data retrieval across multiple models |
WO2016008085A1 (en) | 2014-07-15 | 2016-01-21 | Microsoft Technology Licensing, Llc | Data model change management |
WO2016008087A1 (en) | 2014-07-15 | 2016-01-21 | Microsoft Technology Licensing, Llc | Managing multiple data models over data storage system |
EP3170101B1 (en) | 2014-07-15 | 2020-10-07 | Microsoft Technology Licensing, LLC | Data model indexing for model queries |
US20160042097A1 (en) * | 2014-08-07 | 2016-02-11 | Brigham Young University | System and method for concurrent multi-user analysis of design models |
US10409835B2 (en) * | 2014-11-28 | 2019-09-10 | Microsoft Technology Licensing, Llc | Efficient data manipulation support |
US10599662B2 (en) * | 2015-06-26 | 2020-03-24 | Mcafee, Llc | Query engine for remote endpoint information retrieval |
CN105159966A (zh) * | 2015-08-25 | 2015-12-16 | 航天恒星科技有限公司 | 创建目录实体的方法、装置和目录实体处理*** |
US11157517B2 (en) * | 2016-04-18 | 2021-10-26 | Amazon Technologies, Inc. | Versioned hierarchical data structures in a distributed data store |
US10671639B1 (en) | 2017-03-30 | 2020-06-02 | Amazon Technologies, Inc. | Selectively replicating changes to hierarchial data structures |
US10423342B1 (en) | 2017-03-30 | 2019-09-24 | Amazon Technologies, Inc. | Scaling events for hosting hierarchical data structures |
US10860550B1 (en) | 2017-03-30 | 2020-12-08 | Amazon Technologies, Inc. | Versioning schemas for hierarchical data structures |
CN110008031B (zh) * | 2018-01-05 | 2022-04-15 | 北京金山云网络技术有限公司 | 设备操作方法、集群***、电子设备及可读取存储介质 |
CN109240848A (zh) * | 2018-07-27 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 一种数据对象标识生成方法及装置 |
RU2715524C1 (ru) * | 2019-08-23 | 2020-02-28 | Федеральное государственное унитарное предприятие "Центральный институт авиационного моторостроения имени П.И. Баранова" | Способ автоматизированного формирования электронной информационной модели силовой установки и устройство для его реализации |
CN111897818A (zh) * | 2020-07-31 | 2020-11-06 | 平安普惠企业管理有限公司 | 数据存储方法、装置、电子设备及存储介质 |
US20230185940A1 (en) * | 2021-12-13 | 2023-06-15 | Docusign, Inc. | Batch processing of audit records |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5230073A (en) * | 1986-07-21 | 1993-07-20 | Bell Communications Research, Inc. | System and method for accessing and updating a continuously broadcasted stored database |
US5448726A (en) * | 1989-10-23 | 1995-09-05 | International Business Machines Corporation | Data base management system with data dictionary cache including a single loadable object descriptor |
JP2575543B2 (ja) * | 1990-04-04 | 1997-01-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 同時アクセス管理方法 |
US5263155A (en) * | 1991-02-21 | 1993-11-16 | Texas Instruments Incorporated | System for selectively registering and blocking requests initiated by optimistic and pessimistic transactions respectively for shared objects based upon associated locks |
US5956715A (en) * | 1994-12-13 | 1999-09-21 | Microsoft Corporation | Method and system for controlling user access to a resource in a networked computing environment |
JPH09297684A (ja) * | 1996-03-05 | 1997-11-18 | Fujitsu Ltd | オブジェクト・ネットワークによる情報処理装置 |
JPH09259018A (ja) * | 1996-03-25 | 1997-10-03 | Nippon Telegr & Teleph Corp <Ntt> | データエントリ装置及びデータエントリ方法 |
JPH09319629A (ja) * | 1996-05-27 | 1997-12-12 | Hitachi Ltd | データベース設計支援ツール |
AU5365998A (en) * | 1996-11-27 | 1998-06-22 | 1 Vision Software, L.L.C. | File directory and file navigation system |
US6240413B1 (en) * | 1997-12-22 | 2001-05-29 | Sun Microsystems, Inc. | Fine-grained consistency mechanism for optimistic concurrency control using lock groups |
US6327343B1 (en) * | 1998-01-16 | 2001-12-04 | International Business Machines Corporation | System and methods for automatic call and data transfer processing |
US6507662B1 (en) * | 1998-09-11 | 2003-01-14 | Quid Technologies Llc | Method and system for biometric recognition based on electric and/or magnetic properties |
US6370537B1 (en) * | 1999-01-14 | 2002-04-09 | Altoweb, Inc. | System and method for the manipulation and display of structured data |
WO2001035278A1 (en) * | 1999-11-10 | 2001-05-17 | Fakhouri Sameh A | A decision based system for managing distributed resources and modeling the global optimization problem |
US6772154B1 (en) * | 2000-11-16 | 2004-08-03 | Sun Microsystems, Inc. | Implementation of nested databases using flexible locking mechanisms |
DE10058391C2 (de) * | 2000-11-24 | 2003-06-18 | Siemens Ag | Vorrichtung zur Objektbearbeitung |
US6910039B2 (en) * | 2001-11-14 | 2005-06-21 | Sun Microsystems, Inc. | Validation technique for bulk lock delegation |
US6922694B2 (en) * | 2001-11-14 | 2005-07-26 | Sun Microsystems, Inc. | Lock delegation with space-efficient lock management |
US7349913B2 (en) * | 2003-08-21 | 2008-03-25 | Microsoft Corporation | Storage platform for organizing, searching, and sharing data |
US7483923B2 (en) * | 2003-08-21 | 2009-01-27 | Microsoft Corporation | Systems and methods for providing relational and hierarchical synchronization services for units of information manageable by a hardware/software interface system |
US7590643B2 (en) * | 2003-08-21 | 2009-09-15 | Microsoft Corporation | Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system |
US20060059127A1 (en) * | 2004-09-15 | 2006-03-16 | International Business Machines Corporation | Method, system, and storage medium for facilitating application development |
US20060095332A1 (en) * | 2004-09-30 | 2006-05-04 | Sap Aktiengesellschaft | System and method for providing access to an application through a common interface for application extensions |
US7516122B2 (en) * | 2004-12-02 | 2009-04-07 | Computer Associates Think, Inc. | System and method for implementing a management component that exposes attributes |
-
2005
- 2005-04-21 US US11/111,557 patent/US20060242104A1/en not_active Abandoned
-
2006
- 2006-02-24 TW TW095106423A patent/TW200701018A/zh unknown
- 2006-03-09 JP JP2008507654A patent/JP5108749B2/ja not_active Expired - Fee Related
- 2006-03-09 EP EP06737439A patent/EP1872280A4/en not_active Withdrawn
- 2006-03-09 AU AU2006240541A patent/AU2006240541B2/en not_active Ceased
- 2006-03-09 CA CA002598592A patent/CA2598592A1/en not_active Withdrawn
- 2006-03-09 KR KR1020077020801A patent/KR20070121664A/ko not_active Application Discontinuation
- 2006-03-09 WO PCT/US2006/008268 patent/WO2006115589A2/en active Application Filing
- 2006-03-09 RU RU2007138949/08A patent/RU2413984C2/ru not_active IP Right Cessation
- 2006-03-09 MX MX2007011690A patent/MX2007011690A/es not_active Application Discontinuation
- 2006-03-09 CN CN2006800094799A patent/CN101617290B/zh not_active Expired - Fee Related
- 2006-03-09 BR BRPI0609007-9A patent/BRPI0609007A2/pt not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
AU2006240541A1 (en) | 2006-11-02 |
US20060242104A1 (en) | 2006-10-26 |
BRPI0609007A2 (pt) | 2010-01-12 |
RU2007138949A (ru) | 2009-04-27 |
JP2008538632A (ja) | 2008-10-30 |
TW200701018A (en) | 2007-01-01 |
AU2006240541B2 (en) | 2011-10-27 |
JP5108749B2 (ja) | 2012-12-26 |
CN101617290A (zh) | 2009-12-30 |
CN101617290B (zh) | 2012-09-05 |
WO2006115589A2 (en) | 2006-11-02 |
CA2598592A1 (en) | 2006-11-02 |
WO2006115589A3 (en) | 2009-06-04 |
EP1872280A4 (en) | 2010-03-17 |
MX2007011690A (es) | 2007-11-15 |
EP1872280A2 (en) | 2008-01-02 |
RU2413984C2 (ru) | 2011-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20070121664A (ko) | 데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법 | |
JP7113040B2 (ja) | 分散型データストアのバージョン化された階層型データ構造 | |
JP4394643B2 (ja) | アイテムベースのストレージプラットフォームにおけるデータモデリングのためのシステムおよび方法 | |
KR101159311B1 (ko) | 임의의 데이터 모델에 대한 맵핑 시스템 및 방법 | |
KR100959473B1 (ko) | 저장 플랫폼과 애플리케이션 프로그램 사이의 애플리케이션프로그래밍 인터페이스 | |
JP4738908B2 (ja) | ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法 | |
US8005866B2 (en) | Database | |
AU2002334721B2 (en) | An index structure to access hierarchical data in a relational database system | |
US7933913B2 (en) | Secondary index and indexed view maintenance for updates to complex types | |
JP4583377B2 (ja) | ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報のユニットに対する関係および階層の同期サービスを実現するシステムおよび方法 | |
Orend | Analysis and classification of NoSQL databases and evaluation of their ability to replace an object-relational Persistence Layer | |
JP4653106B2 (ja) | タイプ・パス索引付け | |
US7801882B2 (en) | Optimized constraint and index maintenance for non updating updates | |
AU2002334721A1 (en) | An index structure to access hierarchical data in a relational database system | |
JP4351530B2 (ja) | リレーショナルデータベースシステム内の階層型データにアクセスするための効率的な索引構造 | |
US11100129B1 (en) | Providing a consistent view of associations between independently replicated data objects | |
JP4580390B2 (ja) | ハードウェア/ソフトウェアインターフェイスシステムによって管理可能な情報単位の拡張および継承のためのシステムおよび方法 | |
US11657088B1 (en) | Accessible index objects for graph data structures | |
JP2007503049A (ja) | 同期スキーマの実装のためのシステム | |
JP4394644B2 (ja) | データの編成、検索、および共有のためのストレージプラットフォーム | |
RU2371757C2 (ru) | Системы и способы моделирования данных в основанной на предметах платформе хранения | |
CN116964571A (zh) | 对rdbms中存储的聚合存储数据全面支持多值、多字段、多级别、多位置功能索引的技术 | |
US11010361B1 (en) | Executing code associated with objects in a hierarchial data structure | |
Pollack et al. | Query Strategies | |
Krogh et al. | Developing Applications Using SQL with MySQL NDB Cluster |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E601 | Decision to refuse application |