KR20090048624A - 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 - Google Patents

데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 Download PDF

Info

Publication number
KR20090048624A
KR20090048624A KR1020097004700A KR20097004700A KR20090048624A KR 20090048624 A KR20090048624 A KR 20090048624A KR 1020097004700 A KR1020097004700 A KR 1020097004700A KR 20097004700 A KR20097004700 A KR 20097004700A KR 20090048624 A KR20090048624 A KR 20090048624A
Authority
KR
South Korea
Prior art keywords
fragment
map
index
data
actual
Prior art date
Application number
KR1020097004700A
Other languages
English (en)
Other versions
KR101467589B1 (ko
Inventor
로버트 에이치. 거버
비샬 카투리아
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20090048624A publication Critical patent/KR20090048624A/ko
Application granted granted Critical
Publication of KR101467589B1 publication Critical patent/KR101467589B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • 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/99931Database or file accessing
    • Y10S707/99937Sorting
    • 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
    • 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/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability

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)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터세트가 조각들로 나뉘어지고 복수의 위치에 저장되며 시스템은 이 데이터세트 조각들이 저장될 수 있는 저장소의 개수를 동적으로 늘리거나 줄인다. 데이터 구조는 제1 인덱스와 제1 엘리먼트를 포함하는 제1 데이터 필드, 및 각각이 인덱스와 엘리먼트를 포함하는 하나 이상의 데이터 필드를 포함한다. 하나 이상의 데이터 필드의 엘리먼트는 제1 데이터 필드의 인덱스와 관련된 위치를 나타내는 토큰을 포함한다. 데이터세트의 데이터 행은 제2 인덱스를 이용하여 데이터 필드의 인덱스에 매핑된다. 해쉬 함수(hash function)를 이용하여 데이터세트의 데이터 행으로부터 제2 데이터 인덱스가 도출된다. 그 다음 제2 인덱스는 모듈러 함수(modulus function)를 이용하여 하나 이상의 데이터 필드에 포함된 데이터 필드의 인덱스에 매핑된다.
저장소, 해쉬 함수, 모듈러 함수, 하드 디스크, 컴퓨터 시스템

Description

데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및 장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체{DYNAMIC FRAGMENT MAPPING}
데이터베이스 시스템은 행 및 열을 포함하는 테이블형(tabular) 데이터 세트를 각종 방식으로 저장할 수 있다. 데이터베이스 시스템은 휘발성 및 비휘발성 메모리에, 데이터베이스 시스템에 국부적인 통상적인 파일 저장 장치에 위치된 파일에, 네트워크 상에 위치된 하나 이상의 저장 시스템에 부착된 통상적인 파일 저장 장치에 위치된 파일에, 또는 다른 곳에 데이터를 저장할 수 있다. 데이터베이스 시스템은 통상적으로 데이터를 데이터 세트에 추가 또는 제거할 수 있으므로 데이터 세트는 시간에 따라 줄어들 수도 있고 늘어날 수도 있다.
그러나, 데이터 세트가 늘어남에 따라, 데이터 세트는 너무 커져서 이 데이터 세트가 저장된 곳의 저장 용량을 초과할 수 있다. 예를 들면, 데이터 세트는 하드 디스크 드라이브 상에 파일로서 저장될 수 있다. 데이터 세트가 하드 디스크 드라이브의 용량보다 커진다면, 더 큰 용량을 가진 하드 디스크 드라이브로 데이터 세트 전체를 옮기거나 이 데이터 세트를 하나 이상의 조각들로 나누어서 각 조각이 복수의 물리적 저장소(storage location)들 중 하나로 옮겨질 수 있다.
일단 데이터 세트가 나뉘어지면, 데이터베이스 시스템은 복수의 물리적 저장소들 각각에 저장된 데이터의 위치를 찾고(locate) 검색하기 위해 고정된 기능 성(fixed functionality)을 구현할 수 있다. 예를 들면, 데이터베이스 시스템은 2개의 물리적 저장소를 포함할 수 있다. 데이터베이스 시스템은 제1 물리적 저장소에 데이터 세트의 제1 행과 관련된 데이터를 저장하도록 선택할 수 있다. 데이터베이스 시스템은 또한 제2 물리적 저장소에 데이터 세트의 제2 행과 관련된 데이터를 저장하도록 선택할 수 있다. 그 다음 데이터베이스 시스템은 제1 물리적 저장소에 데이터 세트의 제3 행과 관련된 데이터를 저장하도록 선택할 수 있다. 데이터세트(dataset)의 각각의 행 마다 이러한 패턴이 반복될 수 있다. 그 다음 데이터베이스 시스템은 이러한 고정된 기능성을 역순으로 수행하여(reverse) 데이터의 위치를 찾고 검색할 수 있다. 예를 들면, 데이터베이스 시스템은 제2 물리적 저장소에 저장된 데이터를 액세스함으로써 데이터세트의 제2 행과 관련된 데이터를 검색할 수 있다.
또한 제1 물리적 저장소 또는 제2 물리적 저장소 중 하나의 용량이 다 차게되었다면, 추가적인 물리적 저장소가 데이터베이스 시스템에 추가될 수 있다. 그러나, 데이터베이스 시스템은 고정된 기능성을 이용하여 데이터를 검색할 뿐만 아니라 분리할 수도 있기 때문에, 제1 및 제2 물리적 저장소에 저장된 모든 데이터는 제3 물리적 저장소의 추가를 수용하도록 개조될 것이 필요가 있을 수 있다.
예를 들면, 현재 데이터베이스 시스템은 제1 물리적 저장소에 제1 행과 관련된 데이터를 저장하도록 선택할 수 있다. 데이터베이스 시스템은 또한 제2 물리적 저장소에 제2 행과 관련된 데이터를 저장하도록 선택할 수 있다. 그 다음 데이터베이스 시스템은 제3 물리적 저장소에 제3 행과 관련된 데이터를 저장하도록 선택 할 수 있다. 제3 행과 관련된 데이터가 이전에 제1 물리적 저장소에 저장되었음을 유의한다. 그러나, 데이터베이스 시스템에 의해 채용될 수 있는 고정된 기능성에 충실하기 위해서는, 제3 행과 관련된 데이터는 제3 물리적 저장소로 개조될 필요가 있을 수 있다.
그렇지 않고, 데이터베이스 시스템이 데이터세트를 분리하고 저장하는 데에 고정된 기능성을 채용하지 않는다면, 이 분리 및 탐색 함수(division and lookup function)는 새로운 물리적 저장소가 데이터베이스 시스템에 추가되거나 데이터베이스 시스템으로부터 제거될 때마다 변경되어야 할 필요가 있을 수 있다. 예를 들면, 데이터베이스 시스템은 물리적 저장소의 개수 및 행번호(the row number)에 기초하여 수학적인 함수를 수행함으로써 데이터세트의 행에 대한 물리적 위치를 선택하는 비-고정 함수(non-fixed function)를 포함할 수 있다. 데이터의 각 행의 위치 및 각 행의 위치를 결정하는 수학적인 함수가 둘 다 물리적 저장소의 개수에 기초하기 때문에, 물리적인 저장소가 데이터베이스 시스템에 추가되거나 데이터베이스 시스템으로부터 제거될 때마다 수학적인 함수 및 각 행의 위치가 모두 다시 계산되고 개조되어야 한다.
물리적 저장소가 추가되거나 제거될 때마다 모든 물리적 저장소 상의 모든 데이터를 개조할 필요 없이 데이터가 소정의 물리적 저장소로부터 다른 곳으로 쉽게 이동할 수 있게 하는 방법을 구현하는 시스템은 매우 유용할 것이다.
다음은 독자에게 기본적인 이해를 제공하기 위하여 본 개시물의 간단한 요약을 제시한다. 이 요약은 본 개시물의 방대한 개관이 아니며 본 발명의 핵심/중요한 요소를 식별하거나 본 발명의 범주의 윤곽을 나타내는 것이 아니다. 이 요약의 단 하나의 목적은 본원에 기술된 몇 가지 개념들을 추후에 제시될 보다 상세한 설명에 대한 서두로서 간단한 형태로 나타내는 것이다.
제시된 예는 동적인 프레그먼트 매핑(dynamic fragment mapping)을 위한 메카니즘 및 기술을 제공한다. 테이블, 행세트(rowset), 인덱스, 또는 테이블이나 인덱스의 파티션(partition) 등의 데이터 개체는 데이터 프레그먼트로 나뉘어질 수 있거나 데이터 프레그먼트로서 존재할 수 있다. 행세트는 데이터베이스 테이블의 하나 이상의 행들의 세트라 간주될 수 있거나 인덱스의 엔트리들이 될 수 있다. 행 및 레코드(record)라는 용어는 대체로 동일한 것으로 간주될 수 있다. 따라서, 행세트는 또한 레코드세트와 동등한 것일 수 있다.
가능한 데이터 프레그먼트의 최대 개수가 선택될 수 있다. 데이터세트가 프레그먼트들로 나뉘어질 때, 이 각각의 데이터세트 조각에 가상 ID가 할당될 수 있다. 행들의 세트를 포함할 수 있는 물리적인 위치는 실제 프레그먼트(actual fragment)라 알려질 수 있다. 실제 프레그먼트의 물리적 위치를 알아내기 위해 디레퍼런싱(dereferenced)될 수 있는 ID 토큰(identifier token)을 포함하는 엘리먼트 각각을 가지고 어레이(array)가 생성될 수 있다. 이러한 어레이는 가상 ID로부터 실제 프레그먼트의 물리적인 위치를 알아내기 위한 하나의 맵(map)으로서 작용할 수 있다. 가상 ID와 맵 인덱스 값을 상호연관(correlate)시키는 매핑 함수는 관련된 맵 인덱스 값에서의 엘리먼트(element)의 값을 알아내기 위해 호출될 수 있다. 그 다음 각각의 데이터세트 조각은 이 맵 인덱스 값에 의해 참조되는 위치에 물리적으로 저장될 수 있다.
맵에서는 복수의 엘리먼트가 동일한 물리적 위치를 참조할 수 있다. 기존의(pre-existing) 물리적 위치를 가리키는 복수의 맵 인덱스 엘리먼트들 중 하나에서의 값을 변경함으로써 새로운 물리적 위치가 추가될 수 있다. 그 다음 이전에 맵 엘리먼트와 관련되었던 데이터 조각들이 이전의 물리적 위치로부터 새로운 물리적 위치로 이동될 수 있다. 이와 관련하여, 현존하는 물리적 위치는 맵 인덱스 엘리먼트에서의 값을 다른 기존의 위치로 변경하고 삭제될 위치로부터 상기 기존의 위치로데이터를 이동함으로써 삭제될 수 있다.
실제 프레그먼트 맵을 포함하는 엘리먼트 세트는 필요에 따라 확장되거나 수축될 수 있다. 예를 들면, 맵이 더 이상 새로운 물리적 위치에 대한 저장 공간을 충분히 가지고 있지 않을 수 있는 상황이 일어날 수 있다. 그러면 맵 엘리먼트 개수는 선택된 인수(factor)만큼 증가할 수 있다. 매핑 함수가 가상 ID(virtual identifier)와 맵 인덱스 값들을 상호연관시킬 때, 복수의 가상 ID 값이 이제 하나의 새로운 맵 인덱스 값과 상호연관될 수 있다. 새로운 인덱스에서의 맵 엘리먼트의 값은 새로운 물리적 위치를 참조하도록 변경될 수 있다. 이 새로운 맵 인덱스 값과 관련된 모든 데이터 조각들은 새로운 물리적 위치로 이동될 수 있다.
다른 예에서, 물리적 위치가 너무 적은 행을 저장하는 상황이 발생할 수 있다. 맵 인덱스 엘리먼트의 개수가 줄어들 수 있다. 매핑 함수가 가상 ID를 맵 인덱스 값과 상호연관시킬 때, 복수의 가상 ID는 이제 하나의 새로운 맵 인덱스 값에 상호연관될 수 있다. 맵 인덱스 엘리먼트의 값은 기존의 물리적 위치를 참조하도록 변경될 수 있다. 새로운 맵 인덱스 값과 연관된 모든 데이터 조각들은 기존의 물리적 위치로 이동될 수 있다.
대안적인 예에서, 가상 ID와 관련된 물리적 데이터는 물리적 위치에 비하여 너무 커졌을 수 있다. 이러한 상태는 데이터 왜곡(data skew)이라 알려져 있다. 이러한 데이터 왜곡 상태에서, 새로운 물리적 위치를 추가하고 가상 ID에 새로운 물리적 어드레스(address)를 할당하는 것은, 정보를 2 부분으로 분할하는 대신에 이전의 물리적 위치에서 새로운 위치로 모든 정보를 이동시킬 수 있기 때문에 가능하지 않을 수 있다. 이러한 데이터 왜곡 상태에서는, 맵 인덱스 엔트리(entry)에 플래그(flag)가 추가될 수 있고 맵 인덱스 값과 관련된 데이터가 모든 물리적 위치로 분산될 수 있다. 이러한 데이터 왜곡 플래그는 탐색 함수가 데이터의 위치를 알아내기 위하여 모든 물리적 위치를 검사할 수 있음을 나타낼 수 있다.
프레그먼트의 물리적 위치를 찾기 위하여, 가상 ID가 매핑 함수에 전달된다. 그 다음 매핑 함수는 맵 인덱스 값을 반환할 수 있다. 맵 인덱스 값에서의 엘리먼트는 프레그먼트가 저장된 물리적 위치를 참조하는 ID를 포함할 수 있다. 그 다음 ID는 물리적 위치를 알아내도록 디레퍼런싱될 수 있으며 프레그먼트가 검색될 수 있다.
부가적인 특징들 중 다수가 첨부된 도면들에 관련하여 고려되는 이하 상세한 설명을 참조함으로써 보다 잘 이해될 것이기 때문에 보다 쉽게 인식될 것이다.
도 1은 통상의 데이터 저장 및 탐색 시스템을 도시하는 블록도.
도 2는 프레그먼트(fragment) 맵(map)을 생성하기 위한 예시적인 방법, 실제 프레그먼트를 분할하기 위한 예시적인 방법, 실제 프레그먼트를 병합하기 위한 예시적인 방법, 및 프레그먼트의 위치를 탐색하기 위한 예시적인 방법을 포함하는 동적인 프레그먼트 시스템을 도시하는 블록도.
도 3은 프레그먼트 매핑 데이터 구조를 도시하는 블록도.
도 4는 프레그먼트 맵을 생성하기 위한 예시적인 방법을 도시하는 흐름도.
도 5는 실제 프레그먼트를 분할하기 위한 예시적인 방법을 도시하는 흐름도.
도 6은 실제 프레그먼트 분할 중에 예시적인 프레그먼트 맵과 예시적인 물리적 위치들의 상태 변화(state transitions)를 도시하는 블록도.
도 7은 실제 프레그먼트를 병합하기 위한 예시적인 방법을 도시하는 흐름도.
도 8은 실제 프레그먼트 병합 중에 예시적인 프레그먼트 맵과 예시적인 물리적 위치들의 상태 변화를 도시하는 블록도.
도 9는 프레그먼트 ID(identifier)를 이용하여 프레그먼트의 물리적 위치의 ID를 탐색하기 위한 예시적인 방법을 도시하는 흐름도.
도 10은 실제 프레그먼트를 분할하고 프레그먼트 맵 내에 데이터 왜곡(skew)이 있다고 프레그먼트에 표시하기 위한 예시적인 방법을 도시하는 흐름도.
도 11은 데이터 왜곡을 포함하는 실제 프레그먼트의 분할 중에 예시적인 프레그먼트 맵과 예시적인 물리적 위치들의 상태 변화를 도시하는 블록도.
도 12는 프레그먼트 ID를 이용하여 데이터 왜곡을 포함한 프레그먼트의 물리 적 위치의 ID를 탐색하기 위한 예시적인 방법을 도시하는 흐름도.
도 13은 기술된 시스템 및 방법을 구현하기 위한 예시적인 컴퓨터 장치를 도시하는 도면.
본 발명은 첨부된 도면들의 견지에서 읽혀지는 이하 상세한 설명으로부터 잘 이해될 것이다.
동일한 참조 번호는 첨부된 도면의 동일한 부분을 나타내는 데에 이용된다.
첨부된 도면에 관련하여 이하 제공된 상세한 설명은 제시된 예들의 설명으로서 의도된 것이지 제시된 예들이 구축되거나 이용될 수 있는 형태만을 제시하고 있음을 의도하는 것은 아니다. 설명은 이 예의 기능 및 이 예를 구축하고 구동하기 위한 일련의 단계들을 설명한다. 그러나, 동일하거나 동등한 기능 및 일련의 단계들이 다른 예에 의해 수행될 수 있다.
본원에는 제시된 예들이 동적인 프레그먼트 매핑 시스템으로 구현되는 것으로서 기술되고 예시되었지만, 기술된 시스템은 일례로서 제공된 것이지 한정 사항이 아니다. 당업자들이 인식할 바와 같이, 제시된 예는 각종 다른 유형의 동적인 프레그먼트 매핑 시스템에서 적용되기에 적절하다.
도 1은 통상의 데이터세트(110), 통상의 저장 및 탐색 컴포넌트(120), 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 및 통상의 물리적 저장 장치(150)를 포함하는 통상의 데이터 탐색 시스템(100)을 도시하는 블록도이다.
통상의 데이터 탐색 시스템(100)은 마이크로소프트® SQL 서버TM와 같은 자립형(standalone) 데이터베이스 시스템, 썬 마이크로시스템즈의 자바 또는 마이크로소프트® . Net과 같은 관리되거나 해석되는 언어(managed or interpreted language) 시스템에 포함되는 데이터베이스 시스템 등을 포함하는 임의의 유형의 통상적인 데이터베이스 시스템이 될 수 있다. 통상의 데이터세트(110)는 통상의 저장 및 탐색 컴포넌트(120)에 연결될 수 있다. 통상의 저장 및 탐색 컴포넌트(120)는 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 및 통상의 물리적 저장 장치(150)에 연결될 수 있다. 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 또는 통상의 물리적 저장 장치(150) 각각은 휘발성 또는 비휘발성 물리적 메모리, 또는 컴퓨터 하드 디스크 드라이브, 등과 같은 통상적인 유형의 컴퓨터 저장 장치일 수 있다.
통상의 데이터세트(110)는 테이블형(tabular) 구조로 저장된 임의의 유형의 데이터일 수 있다. 예를 들면, 통상의 데이터세트(110)는 통상적인 행과 통상적인 열을 포함하는 통상적인 데이터베이스 테이블, 또는 XML(extensible markup language) 등이 될 수 있다. 통상의 저장 및 탐색 컴포넌트(120)는 통상의 데이터 탐색 시스템(100) 상에서 실행될 수 있는 통상적으로 구축된 소프트웨어 컴포넌트일 수 있다. 통상의 저장 및 탐색 시스템(120)은 통상적인 저장 함수를 구현할 수 있다. 이러한 통상적인 저장 함수는 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 또는 통상의 물리적 저장 장치(150) 중 하나에 통상의 데이터 세트(110)의 하나 이상의 행을 저장하기 위한 기능성을 제공할 수 있다. 이러한 통상적인 저장 함수는 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 또는 통상의 물리적 저장 장치(150) 중 어느 것에 행이 저장될 수 있는지를 결정하는 고정된 기능성을 더 구현할 수 있다.
통상의 저장 및 탐색 컴포넌트(120)는 통상적인 고정된 탐색 함수를 더 구현할 수 있다. 이러한 통상적인 고정된 탐색 함수는 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 또는 통상의 물리적 저장 장치(150)에 저장된 통상의 데이터세트(110)의 하나 이상의 행의 위치를 알아내기 위한 기능성을 제공할 수 있다. 이러한 통상적인 고정된 탐색 함수는 또한 통상적인 데이터세트(110)의 하나 이상의 행의 위치를 알아내는 데에 통상적인 저장 함수에 의해 이용되는 고정된 기능성을 더 이용할 수 있다.
예를 들면, 통상적인 저장 함수는 통상적인 데이터세트(110)의 하나 이상의 행을 저장하는 곳을 결정하는 데에 물리적 저장 단위(unit)의 카운트(count)를 이용할 수 있다. 일 예에서, 통상의 저장 및 탐색 컴포넌트(120)는 초기에는 통상의 물리적 저장 장치(130) 및 통상의 물리적 저장 장치(140)에 연결될 수 있다. 통상의 저장 함수는 통상의 물리적 저장 장치(130)에 홀수로 넘버링된(odd-numbered) 행을 저장하고 통상의 물리적 저장 장치(140)에 짝수로 넘버링된(even-numbered) 행을 저장할 수 있다. 따라서 통상적인 탐색 함수는 통상의 물리적 저장 장치(130)에서 홀수로 넘버링된 행과 관련된 데이터를 찾을 것이고 통상의 물리적 저장 장치(140)에서 짝수로 넘버링된 행과 관련된 데이터를 찾을 것이다.
이 예를 계속하자면, 그 다음 통상의 저장 및 탐색 컴포넌트(120)가 통상의 물리적 저장 장치(130) 또는 물리적 저장 장치(140) 중 하나의 용량이 다 찼다는 것에 응답하여 통상의 물리적 저장 장치(150)를 추가할 수 있다. 그러나, 통상의 저장 및 탐색 컴포넌트(120)는 통상의 물리적 저장 장치(130) 또는 통상의 물리적 저장 장치(140)에 저장된 행들을 통상의 물리적 저장 장치(150)로 단순히 옮겨놓지 않는다. 전술한 바와 같이, 통상의 탐색 함수는 통상의 물리적 저장 장치(130)에서 홀수로 넘버링된 행들을 찾고 통상의 물리적 저장 장치(150)에서 짝수로 넘버링된 행들을 찾기를 예상할 것이다. 따라서, 통상의 탐색 함수는 통상의 데이터세트(110)의 제1 행이 통상의 물리적 저장 장치(130)에 저장될 수 있고, 제2 행이 통상의 물리적 저장 장치(140)에 저장될 수 있고, 제3 행이 통상의 물리적 저장 장치(150)에 저장될 수 있고, 제4 행이 통상의 물리적 저장 장치(130)에 저장될 수 있고 다른 행들도 마찬가지로 저장될 수 있는 등, 이러한 패턴이 반복되도록 고정된 기능성을 확장할 수 있다.
상기 예로부터 알 수 있는 바와 같이, 통상의 물리적 저장 장치(150)를 추가하면 이전에 통상의 물리적 저장 장치(130) 및 통상의 물리적 저장 장치(140)에 저장되었던 데이터를 완전히 개조할 필요가 있을 수 있다. 대안으로, 통상의 저장 및 탐색 컴포넌트(120)는 새로운 통상적인 저장 방법 및 새로운 통상적인 탐색 방법을 포함하는 대안적인 통상의 저장 및 탐색 컴포넌트로 교체될 수 있다. 이러한 새로운 통상의 저장 방법 및 새로운 통상의 탐색 방법은 통상의 물리적 저장 장치(130), 통상의 물리적 저장 장치(140), 또는 통상의 물리적 저장 장치(150) 각각 으로부터 데이터를 저장하고 검색하기 위한 기능성을 포함할 수 있다. 그러나, 추가적인 통상의 물리적 저장소가 도입되어야 하는 경우, 이전의 통상의 저장 및 탐색 컴포넌트를 대체할 추가적인 새로운 통상의 저장 및 탐색 컴포넌트가 또한 필요할 수 있다.
물리적 저장소가 추가되거나 제거될 때마다 모든 물리적 저장소 상의 모든 데이터를 개조할 필요 없이 데이터가 소정의 물리적 저장소로부터 다른 곳으로 쉽게 이동할 수 있게 해주는 방법을 구현하는 시스템이 유용할 것이다.
도 2는 프레그먼트(fragment) 맵(map)을 생성하기 위한 예시적인 방법(400), 실제 프레그먼트를 분할하기 위한 예시적인 방법(500), 실제 프레그먼트를 병합하기 위한 예시적인 방법(700), 및 프레그먼트의 위치를 탐색하기 위한 예시적인 방법(900)을 포함하는 예시적인 탐색 컴포넌트(210)를 포함하는 동적인 프레그먼트 시스템(200)을 도시하는 블록도이다.
동적인 프레그먼트 시스템(200)은 마이크로소프트® SQL 서버TM와 같은 자립형 데이터베이스 시스템, 썬 마이크로시스템즈의 자바 또는 마이크로소프트® . Net과 같은 관리되고 해석되는 언어 시스템에 포함되는 데이터베이스 시스템 등을 포함하는 임의의 유형의 통상적인 데이터베이스 시스템이 될 수 있다. 그러나, 본원에 기술된 기능성을 제공하는데에 임의의 유형의 컴퓨터 시스템에서 동적인 프레그먼트 시스템(200)이 이용될 수 있다. 당업자들은 동적인 프레그먼트 시스템(200)이 제1 ID(identifier)가 제2 ID로 매핑될 수 있는 광범위한 적용(applications)에 서 이용될 수 있는 기능성을 포함하는 것임을 인식할 것이다. 프레그먼트는 또한 데이터세트들의 서브세트로서 알려질 수 있다.
데이터세트(110)는 저장 및 탐색 컴포넌트(210)에 연결될 수 있다. 저장 및 탐색 컴포넌트(210)는 물리적 저장소(130), 물리적 저장소(140), 및 물리적 저장소(150)에 연결될 수 있다. 데이터세트(110)는 테이블형 구조로 저장된 임의의 유형의 데이터가 될 수 있다. 예를 들면, 데이터세트(110)는 통상의 행 및 통상의 열을 포함하는 통상의 데이터베이스 테이블일 수 있다. 데이터세트(110)의 통상의 열은 고유한 ID 또는 고유한 키를 포함하도록 지정될 수 있다.
저장 및 탐색 컴포넌트(210)는 동적인 프레그먼트 시스템(200)에서 실행될 수 있는 통상적으로 구축된 소프트웨어 컴포넌트일 수 있다. 물리적 저장소(130), 물리적 저장소(140), 또는 물리적 저장소(150) 각각은 휘발성 또는 비휘발성 물리적 메모리, 또는 컴퓨터 하드 디스크 드라이브 등과 같은 통상적인 유형의 컴퓨터 저장 장치일 수 있다.
저장 및 탐색 컴포넌트(210)는 실제 프레그먼트를 분할하기 위한 예시적인 방법(500), 실제 프레그먼트를 병합하기 위한 예시적인 방법(700), 및 프레그먼트의 위치를 탐색하기 위한 예시적인 방법(900) 등을 더 구현할 수 있다. 프레그먼트 맵을 생성하기 위한 방법(400)은 도 4의 설명에서 보다 자세히 설명하기로 한다. 실제 프레그먼트를 분할하기 위한 방법(500)은 도 5의 설명에서 보다 자세히 설명하기로 한다. 실제 프레그먼트를 병합하기 위한 방법(700)은 도 7의 설명에서 보다 자세히 설명하기로 한다. 프레그먼트의 위치를 탐색하기 위한 예시적인 방 법(900)은 도 9의 설명에서 보다 자세히 설명하기로 한다.
도 3은 프레그먼트 매핑 데이터 구조(300)를 도시하는 블록도이다. 프레그먼트 매핑 데이터 구조(300)는 어레이, 리스트, 컬렉션(collection) 또는 임의의 기타 특정 데이터 유형의 동종 엘리먼트의 그루핑(grouping)이 될 수 있다.
프레그먼트 매핑 데이터 구조(300)는 논리적 프레그먼트 id이기도 한 번호로 인덱싱된 엘리먼트들의 세트를 포함할 수 있는 맵(330)으로 이루어질 수 있다. 맵(330)은 실제 프레그먼트 맵(310) 및 가상 실제 프레그먼트 맵(320)으로 더 이루어질 수 있다. 실제 프레그먼트 맵(310)은 맵(330)의 임의의 개수의 엘리먼트로 이루어질 수 있다. 또한, 실제 프레그먼트 맵(310)의 엘리먼트 각각은 ID, 또는 토큰 등을 포함할 수 있는데, 이들은 제1 실제 프레그먼트(340) 및/또는 제2 실제 프레그먼트(350)와 같은 실제 프레그먼트를 참조할 수 있다. 대안적인 예에서, 실제 프레그먼트 맵(310)의 각각의 엘리먼트는 다른 유사한 프레그먼트 맵 구조로의 인덱스를 참조할 수 있다.
전술한 바와 같이, 맵(330)의 각 엘리먼트는 도 3에 도시된 바와 같이, 번호 0 내지 n+1에 의해, 번호로 인덱싱될 수 있다. 또한, 가상 실제 프레그먼트 맵(320)에 포함된 맵(330)의 엘리먼트들은 인덱스 값을 가질 수 있는데, 이 인덱스 값은 함수를 통해 전달될 때, 이러한 함수가 실제 프레그먼트 맵(310) 내에 있는 인덱스 값을 반환할 수 있다. 이런 식으로, 가상 실제 프레그먼트 맵(320)의 엘리먼트들의 인덱스 값들은 이 함수를 이용하여 실제 프레그먼트 맵(310)에서의 대응하는 엘리먼트들에 "매핑"된다. 이러한 함수는 도 4, 도 5, 도 7, 및 도 9의 설명 에서 보다 자세히 설명하기로 한다.
또한, 실제 프레그먼트 맵(310)의 엘리먼트들이 실제 프레그먼트(340), 제2 실제 프레그먼트(350) 등에 대응하는 ID를 포함할 수 있기 때문에, 가상 실제 프레그먼트 맵(320)의 엘리먼트들은 실제 프레그먼트(340) 또는 제2 실제 프레그먼트(350) 중 하나를 "가리킨다". 이러한 관계(relationship)는 실제 프레그먼트(340)는 인덱스 값 0, 2, 4, 6 내지 n을 포함하고, 제2 실제 프레그먼트(350)는 인덱스 값 1, 3, 5, 7, 및 n+1을 포함하는 것으로 예시된다.
일 실시예에서, 프레그먼트 매핑 데이터 구조(300)에서 실제 프레그먼트 맵(310)은 데이터세트의 행들을 물리적 저장소에 매핑하는 데에 이용될 수 있다. 대안적인 실시예에서, 프레그먼트 매핑 데이터 구조(300)의 실제 프레그먼트 맵(310)은 임의의 인덱싱된 데이터를 임의의 대응하는 프레그먼트 유형에 매핑하는 데에 이용될 수 있다. 다른 대안적인 실시예에서, 실제 프레그먼트 맵(310)은 가상 ID를 다른 프레그먼트 맵 구조의 실제 ID에 매핑하는 데에 이용될 수 있다. 이제 프레그먼트 맵 구조의 예시적인 실시예를 생성하기 위한 예시적인 방법이 기술될 것이다.
도 4는 프레그먼트 맵을 생성하기 위한 예시적인 방법(400)을 도시하는 흐름도이다.
블록(410)은 초기 프레그먼트 개수가 결정될 수 있는 동작을 나타낼 수 있다. 초기 프레그먼트 개수를 결정하는 데에는 어떠한 방법이라도 이용될 수 있다. 일 실시예에서, 초기 프레그먼트 개수는 2의 거듭제곱(a power of 2)이 되도록 지 정될 수 있다. 대안적인 실시예에서, 초기 프레그먼트 개수는 실제 프레그먼트 맵의 사이즈의 인수(a factor of the size)가 되도록 지정될 수 있다. 다른 대안적인 예에서, 초기 프레그먼트 개수는 초기 프레그먼트 개수에 의해 제시되는 데이터세트의 사이즈에 관련될 수 있다.
블록(420)은 실제 프레그먼트 맵의 사이즈가 결정될 수 있는 동작을 나타낼 수 있다. 실제 프레그먼트 맵은 실제 프레그먼트, 물리적 프레그먼트, 또는 가상 프레그먼트 등의 물리적인 저장소를 나타내는 ID, 또는 토큰(token) 등을 포함할 수 있다. 이러한 결정은 임의의 방법을 이용하여 수행될 수 있다. 일 실시예에서, 실제 프레그먼트 맵의 사이즈는 블록(410)에서 결정된 초기 프레그먼트 개수의 사이즈에 기초하여 결정된다. 이 결정에 의해 실제 맵 사이즈가 2의 거듭제곱이 되지 않는다면, 그 다음으로 근접한 2의 거듭제곱이 선택될 수 있다.
블록(430)은 엘리먼트들 및 인덱스 값을 가지는 어레이가 생성될 수 있는 동작을 나타낼 수 있다. 블록(420)에서 결정된 사이즈의 실제 프레그먼트 맵인 어레이가 생성될 수 있다. 대안적인 실시예에서, 블록(410)에서 생성된 초기 프레그먼트 맵의 사이즈와 블록(420)에서 생성된 실제 프레그먼트 맵의 사이즈가 결합된 것과 동등할 수 있는 어레이가 생성될 수 있다. 대안적인 실시예에서, 블록(410)에서 생성된 초기 프레그먼트 맵의 사이즈와 블록(420)에서 생성된 실제 프레그먼트 맵의 사이즈의 결합 보다 사이즈가 크거나 작은 어레이가 생성될 수 있으며 동적으로 다른 사이즈로 조정될 수 있다.
블록(440)은 블록(420)에서 결정된 실제 프레그먼트 맵의 엘리먼트가 값들로 서 채워질(populated) 수 있는 동작을 나타낼 수 있다. 임의의 방법을 이용하여 값들이 선택될 수 있고 이러한 값들은 ID, 또는 토큰 등이 될 수 있다. 일 실시예에서, 이들 값들은 실제 프레그먼트의 물리적인 위치에 대한 참조이다. 이러한 값들은 임의의 방법을 이용하여 실제 프레그먼트 맵으로 삽입될 수 있다.
도 5는 실제 프레그먼트(500)를 분할하기 위한 예시적인 방법을 도시하는 흐름도이다. 프레그먼트 맵은 도 3에 기술된 것과 같은 어레이가 될 수 있다.
블록(510)은 너무 커진 프레그먼트가 식별되는 동작을 나타낼 수 있다. 이러한 식별은 프레그먼트를 질의하고 프레그먼트의 용량이 다 찼거나 프레그먼트가 원하는 사이즈보다 커져서 어떠한 추가적인 정보도 저장할 수 없다는 판정을 더 하는 형태를 취할 수 있다. 설명을 위하여, LARGE_AF는 너무 커진 프레그먼트를 칭하는 것으로 한다.
블록(520)은 LARGE_AF가 실제 프레그먼트 맵에서 1회를 초과하는 횟수로 참조되었는지를 판정하는 판정을 나타낼 수 있다. 부정 판정에 대한 응답으로, 흐름은 블록(530)으로 계속된다. 긍정 판정에 대한 응답으로, 흐름은 블록(540)으로 계속된다.
블록(530)은 실제 프레그먼트 맵의 사이즈가 2배가 되는 동작을 나타낼 수 있다. 그러나, 당업자들이 인식할 바와 같이, 실제 프레그먼트 맵은 임의의 적절한 인수만큼(by any appropriate factor) 사이즈가 증가할 수 있다. 실제 프레그먼트 맵의 사이즈가 2배가 된 후에는, 본래의 실제 프레그먼트 맵의 엘리먼트들의 값이 새롭게 생성된 실제 프레그먼트 맵의 엘리먼트들에 복사된다.
블록(540)은 새로운 실제 프레그먼트가 생성되는 동작을 나타내는 것일 수 있다. 이러한 실제 프레그먼트는 "비어"있거나, 어떠한 정보도 포함하지 않을 수도 있고 그 밖의 상태일 수도 있다. 이러한 새로운 실제 프레그먼트는 설명을 위해서 NEW AF라 칭하는 것으로 한다.
블록(550)은 블록(540)에서 생성된 실제 프레그먼트에 대한 새로운 ID가 선택되거나 생성되는 동작을 나타낼 수 있다. 이러한 ID는 숫자, 토큰, 또는 임의의 값 등이 될 수 있다. 이러한 새로운 삭별자는 설명을 위해서 NEW AF ID라 칭하는 것으로 한다.
블록(560)은 한번 ID LARGE_AF로 채워졌던 실제 프레그먼트 맵의 엔트리들 중 하나가 블록(550)에서 선택되거나 생성된 NEW AF ID로 변경될 수 있는 동작을 나타낼 수 있다.
블록(570)은 현재 NEW AF ID를 가리키는, 어레이의 가상 실제 프레그먼트 맵의 ID들과 관련된 데이터 행들이 LARGE_AF 프레그먼트로부터 NEW AF로 이동될 수 있는 동작을 나타낼 수 있다. 이러한 정보의 이동은 임의의 수단을 이용해서 수행될 수 있다. 예를 들면, 정보가 소정의 물리적 저장 장치로부터 다른 물리적 저장 장치로 복사될 수도 있고, 네트워크를 통해 복사될 수도 있고, 물리적 메모리의 소정 부분으로부터 물리적 메모리의 다른 부분으로 복사될 수도 있으며, 그 외의 방식으로 복사될 수도 있다.
이하 도면은 도 5의 방법을 예시하기 위한 일련의 도면들을 이용할 수 있다.
도 6은 실제 프레그먼트 분할 중에 예시적인 프레그먼트 맵과 예시적인 물리 적 위치들의 상태 변화(state transitions; 600)를 도시하는 블록도이다.
블록 A(610)는 실제 프레그먼트 맵(640)이 2개의 엘리먼트를 포함하는 상태를 나타낼 수 있다. 실제 프레그먼트 맵(640)의 제1 엘리먼트는 제1 실제 프레그먼트(670)에 대응하는 ID를 포함할 수 있다. 실제 프레그먼트 맵(640)의 제2 엘리먼트는 제2 실제 프레그먼트(680)에 대응하는 ID를 포함할 수 있다. 블록 A(610)에서, 제2 실제 프레그먼트(680)의 용량이 다 차게 될 수 있다. 제1 실제 프레그먼트(670)에 포함된 정보는 앞서 기술한 바와 같이 매핑 함수를 이용하여 실제 프레그먼트 맵(640)의 제1 엘리먼트에 매핑될 수 있음을 유의한다. 또한, 제2 실제 프레그먼트(680)에 포함된 정보는 역시 앞서 기술한 바와 같이 매핑 함수를 이용하여 실제 프레그먼트 맵(640)의 제2 엘리먼트에 마찬가지로 매핑될 수 있다. 이러한 매핑은 블록 A(610)에서 화살표로 나타내었다.
블록 B(620)는 실제 프레그먼트 맵(640)의 사이즈가 2배가 되어 확장된 실제 프레그먼트 맵(650)을 생성한 상태를 나타낼 수 있다. 실제 프레그먼트 맵(640)의 제1 및 제2 엘리먼트에 포함된 ID는 확장된 실제 프레그먼트 맵(650)의 새롭게 생성된 엘리먼트로 복사되었을 수 있다. 블록 B(620)에서 볼 수 있는 바와 같이, 확장된 실제 프레그먼트 맵(650)의 제1 및 제3 엘리먼트는 제1 실제 프레그먼트(670)에 대응할 수 있다. 또한, 확장된 실제 프레그먼트 맵(650)의 제2 및 제4 엘리먼트는 제2 실제 프레그먼트(680)에 대응할 수 있다.
확장된 실제 프레그먼트 맵(650)과 관련된 가상 실제 프레그먼트의 엘리먼트들은 제1 실제 프레그먼트(670)에 매핑시키고 확장된 실제 프레그먼트 맵(650)의 제2 및 제4 엘리먼트를 제2 실제 프레그먼트(680)에 매핑시킬 수 있는 매핑 함수는 모듈러(modulus) 함수가 될 수 있음을 유의한다. 예를 들면, 모듈러 함수는 확장된 실제 프레그먼트 맵(650)의 사이즈를, 확장된 실제 프레그먼트 맵(650) 내의 엘리먼트의 그 인덱스 수로 또는 가상 실제 프레그먼트 맵과 같은 확장된 실제 프레그먼트 맵(650)의 인덱스 값을 벗어난(beyond) 엘리먼트의 임의의 다른 부분으로 나눈 후의 나머지를 반환할 수 있다. 그러나, 이러한 행위를 생성하는 해슁(hashing) 또는 매핑 함수는 어떠한 유형의 것이라도 이용될 수 있다.
블록 C(630)는 제3 실제 프레그먼트(690)가 추가되었을 수 있는 상태를 나타낼 수 있다. 확장된 실제 프레그먼트 맵(650)의 제4 엔트리는 최종 확장된 실제 프레그먼트 맵(660)을 생성하도록 수정되었을 수 있다. 최종 확장된 실제 프레그먼트 맵(660)의 제4 엘리먼트는 이제 제3 실제 프레그먼트(690)에 대응할 수 있다. 즉, 앞서 설명한 매핑 함수가 가상 실제 프레그먼트 맵의 엘리먼트들은 최종 확장된 실제 프레그먼트 맵(660)의 제2 또는 제4 엘리먼트 중 하나로 매핑시킬 수 있기 때문에, 제2 엔트리에 대응했었을 수 있는 가상 실제 프레그먼트 맵의 엘리먼트가 이제 제4 엔트리에 대응할 수 있다. 따라서, 이들 엘리먼트는 이제 새로운 프레그먼트인, 제3 실제 프레그먼트(690)에 대응할 수 있다. 마지막으로, 현재 최종 확장된 실제 프레그먼트 맵(660)의 제4 엘리먼트로 매핑하고 있는 제2 실제 프레그먼트(680) 상에 저장된 임의의 정보는 제3 실제 프레그먼트(690)로 이동될 수 있다.
도 7은 실제 프레그먼트를 병합하기 위한 예시적인 방법(700)을 도시하는 흐름도이다.
블록(710)은 실제 프레그먼트가 병합될 후보로서 식별되는 동작을 나타낼 수 있다. 이러한 식별은 실제 프레그먼트를 질의하고 그 프레그먼트가 방대한 양의 미사용되거나 빈 저장 공간을 가지고 있는지를 더 판정하는 형태를 취할 수 있다. 이러한 후보 실제 프레그먼트는 설명을 위해 AF_M으로서 칭하는 것으로 한다. AF_M ID는 식별된 프레그먼트와 관련된 ID를 칭하는 것으로 한다.
블록(720)은 실제 프레그먼트 맵을 질의하여 이 실제 프레그먼트 맵이 후보 실제 프레그먼트 AF_M에 대한 잠재적인 병합 파트너를 포함하는지를 판정하기 위한 판정을 나타낼 수 있다. 일 실시예에서, 빈 저장 공간과 같이 유사한 요소들을 가지는 실제 프레그먼트 맵의 엘리먼트들이 질의되어 실제 프레그먼트들 중 하나가 후보 실제 프레그먼트 AF_M에 대한 잠재적인 병합 파트너인지 판정한다. 그러나, 실제 프레그먼트 맵 내의 어떠한 엘리먼트라도 후보 실제 프레그먼트 AF_M에 대한 잠재적인 병합 파트너일 수 있다. 부정 판정에 대한 응답으로, 흐름은 블록(770)으로 계속된다. 긍정 판정에 대한 응답으로, 잠재적인 병합 파트너인 실제 프레그먼트는 병합 파트너 실제 프레그먼트가 되고 흐름은 블록(730)으로 계속된다.
블록(730)은 실제 프레그먼트 AF_M 상에 저장된 임의의 정보가 블록(720)에서 식별되었을 수 있는 병합 파트너 실제 프레그먼트로 이동되는 동작을 나타낼 수 있다.
블록(740)은 후보 실제 프레그먼트 AF_M에 대한 참조(reference)를 이전에 포함하였던 실제 프레그먼트 맵의 맵 엔트리가 블록(720)에서 식별되었을 수 있는 병합 파트너 실제 프레그먼트의 ID에 대한 참조를 포함하도록 수정되는 동작을 나 타낼 수 있다.
블록(750)은 실제 프레그먼트 맵이 축소(collapsed)되거나 사이즈가 줄어들 수 있는지를 판정하는 판정을 나타낼 수 있다. 일 실시예에서, 실제 프레그먼트 맵이 검사되고 실제 프레그먼트 맵의 엘리먼트가 정규 패턴(regular pattern)을 형성하는 ID를 포함한다면, 실제 프레그먼트 맵은 이 패턴이 반복될 수 있는 횟수와 관련된 인수만큼(by a factor related to the number of times the pattern may repeat) 축소될 수 있다. 예를 들면, 실제 프레그먼트 맵은 4개의 엘리먼트를 포함할 수 있는데, 제1 엘리먼트와 제3 엘리먼트는 제1 ID를 포함하고 제2 엘리먼트와 제4 엘리먼트는 제2 ID를 포함한다. 실제 프레그먼트 맵은 이 ID들이 제1 ID, 제2 ID의 반복되는 패턴을 따르기 때문에 축소될 수 있다. 부정 판정에 대한 응답으로, 흐름은 블록(770)으로 계속된다. 긍정 판정에 대한 응답으로, 흐름은 블록(760)으로 계속된다.
블록(770)은 방법이 종료될 수 있는 동작을 나타낼 수 있다.
블록(760)은 실제 프레그먼트 맵이 축소되는 동작을 나타낼 수 있다. 이러한 축소는 임의의 방법을 이용하여 수행될 수 있다. 일 실시예에서, 실제 프레그먼트 맵은 실제 프레그먼트 맵에 포함된 엘리먼트의 개수를 줄임으로서 축소될 수 있다. 다음의 도면은 도 7의 방법을 예시하기 위하여 일련의 도면을 이용할 수 있다.
도 8은 실제 프레그먼트 병합 중에 예시적인 프레그먼트 맵과 예시적인 물리적 위치들의 상태 변화(800)를 도시하는 블록도이다.
블록 A(810)는 실제 프레그먼트 맵(840)이 4개의 엘리먼트를 포함하는 상태를 나타낼 수 있다. 실제 프레그먼트 맵(840)의 제1 엘리먼트는 제1 실제 프레그먼트(870)에 대응하는 ID를 포함할 수 있다. 실제 프레그먼트 맵(840)의 제2 엘리먼트는 제2 실제 프레그먼트(880)에 대응하는 ID를 포함할 수 있다. 실제 프레그먼트 맵(840)의 제3 엘리먼트는 제1 실제 프레그먼트(870)에 대응하는 ID를 포함할 수 있다. 마지막으로, 실제 프레그먼트 맵(840)의 제4 엘리먼트는 제3 실제 프레그먼트(890)에 대응하는 ID를 포함할 수 있다.
블록 A(810)에서, 제3 실제 프레그먼트(890)는 소정의 최소 데이터량 보다 적은 양을 저장할 수 있다. 제3 실제 프레그먼트(890)에 포함된 정보는 실제 프레그먼트 맵(840)의 제4 엘리먼트에 의해 참조될 수 있음을 유의한다. 이러한 참조는 블록 A(810)에서 화살표로 나타내었다. 관련된 가상 실제 프레그먼트 맵의 엘리먼트들이 도시되지는 않았지만, 이러한 가상 실제 프레그먼트 맵의 엘리먼트들은 앞서 기술된 매핑 함수를 이용하여 실제 프레그먼트 맵(840)의 엘리먼트들 중 하나와 관련될 수 있다. 이러한 매핑 함수는 실제 프레그먼트 맵(840)의 사이즈를 이용하여 나머지를 결정하기 위한 모듈러 함수가 될 수 있다.
블록 B(820)는 수정된 실제 프레그먼트 맵(850)의 제4 엘리먼트가 제2 실제 프레그먼트(880)에 대응하는 ID를 포함하도록 변경된 상태를 나타낼 수 있다. 또한, 제3 실제 프레그먼트(890) 상에 저장된 정보는 제2 실제 프레그먼트(880)로 이동될 수 있다.
블록 C(830)는 블록 B(820)의 수정된 실제 프레그먼트 맵(850)이 축소되어 축소된 실제 프레그먼트 맵(860)을 생성할 수 있는 상태를 나타낼 수 있다. 관련된 가상 실제 프레그먼트 맵의 엘리먼트는 이전에 매핑 함수를 이용하여 실제 프레그먼트 맵의 제3 및 제4 엘리먼트에 매핑되었을 수 있음을 유의한다. 이러한 매핑 함수는 축소된 실제 프레그먼트 맵(860)의 사이즈를 이용하는 모듈러 함수일 수 있기 때문에, 관련된 가상 실제 프레그먼트 맵의 엘리먼트는 이제 축소된 실제 프레그먼트 맵(860)의 제1 엘리먼트 또는 제2 엘리먼트 중 하나에 매핑될 수 있다.
도 9는 프레그먼트의 위치를 탐색하기 위한 예시적인 방법(900)을 도시하는 흐름도이다.
블록(910)은 해슁 함수가 가상 실제 프레그먼트 맵에 포함될 수 있는 엘리먼트에 데이터 세트의 행을 매핑하는 데에 이용될 수 있는 동작을 나타낼 수 있다. 일 실시예에서, 해슁 함수는 데이터 세트의 행의 열 값을 파라미터로 하여 가상 실제 프레그먼트 맵의 엘리먼트 인덱스 값을 반환할 수 있다. 그러나, 한 정보의 조각을 가상 실제 프레그먼트 맵의 인덱스에 매핑시킬 수 있는 해쉬 함수라면 어떤 것이든지 이용될 수 있다.
블록(920)은 블록(910)에서 결정된 엘리먼트 인덱스가 매핑될 수 있는 실제 프레그먼트 맵의 대응하는 엘리먼트를 알아내는 데에 래핑(wrapping), 또는 매핑 함수가 이용될 수 있는 동작을 나타낼 수 있다. 일 실시예에서, 래핑 함수는 블록(910)에서 결정된 엘리먼트 인덱스를 실제 프레그먼트 맵의 사이즈로 나누고 그 나머지를 반환함으로써 실제 프레그먼트 맵 인덱스를 반환할 수 있는 모듈러 함수일 수 있다. 그러나, 가상 실제 프레그먼트 맵의 엘리먼트 인덱스를 실제 프레그 먼트 맵의 엘리먼트 인덱스에 매핑시키는 래핑 함수라면 어떤 것이든지 이용될 수 있다.
블록(930)은 블록(920)에서 결정된 실제 프레그먼트 맵의 엘리먼트 인덱스의 위치를 찾는 동작을 나타낼 수 있다.
블록(940)은 블록(930)에서 찾아냈었을 수 있는 실제 프레그먼트 맵의 엘리먼트 인덱스에 저장될 수 있는 ID가 판독되는 동작을 나타낼 수 있다. 이러한 판독 동작은 임의의 통상적인 어레이 데이터 판독 동작을 이용하여 수행될 수 있다.
도 10은 실제 프레그먼트를 분할하고 프레그먼트 맵 내에 데이터 왜곡(skew)이 있다고 프레그먼트에 표시하기 위한 예시적인 방법(1000)을 도시하는 흐름도이다.
블록(1010)은 너무 커진 프레그먼트가 식별되는 동작을 나타낼 수 있다. 이러한 식별은 프레그먼트를 질의하여 프레그먼트의 용량이 다 찼거나 프레그먼트가 원하는 사이즈보다 커져서 어떠한 추가적인 정보도 저장할 수 없다는 판정을 더 하는 형태를 취할 수 있다. 설명을 위하여 너무 커진 프레그먼트를 LARGE_AF라 칭하는 것으로 한다.
블록(1020)은 블록(1010)에서 식별된 프레그먼트가 데이터 왜곡 상태에 있는지를 판정하는 판정 동작(decision)을 나타낼 수 있다. 데이터 왜곡은 소정의 임계치를 초과하는 복수의 데이터의 행들이 단일 프레그먼트에 매핑될 수 있는 상태를 칭하는 것으로 한다. 또한, 프레그먼트 맵은 프레그먼트가 도 5의 설명에서 설명된 바와 같이 더 이상 분할되지 않을 수 있는 상태에 있을 수 있다. 부정 판정 에 응답하여, 흐름은 도 5의 블록(500)으로 계속된다. 긍정 판정에 응답하여, 흐름은 블록(1030)으로 계속된다.
블록(1030)은 블록(1010)에서 식별된 프레그먼트가 자신이 데이터 왜곡 상태에 있음을 나타내기 위하여 데이터 왜곡 플래그를 엘리먼트 인덱스에 추가할 수 있는 동작을 나타낼 수 있다. 이러한 플래그는 임의의 유형의 데이터 또는 정보가 될 수 있다. 예를 들면, 데이터 왜곡 플래그는 블록(1010)에서 식별된 실제 프레그먼트 LARGE_AF에서 이미 저장된 임의의 정보와 함께 저장된 데이터의 부가적인 부분일 수 있다.
블록(1040)은 앞서 블록(1010)에서 식별된 프레그먼트 LARGE_AF 상에 저장되었던 정보 또는 데이터가 모든 다른 프레그먼트들에 분산되는 동작을 나타낼 수 있다. 이러한 분산은 임의의 방법을 이용하여 수행될 수 있다. 예를 들면, LARGE_AF 상에 저장된 정보 또는 데이터는 모든 다른 프레그먼트에 의해 제공된 로컬 물리적 저장 장치에 복사될 수도 있고, 모든 다른 프레그먼트에 의해 제공된 다른 물리적 저장 장치에 네트워크 접속을 통해 복사될 수도 있으며 다른 방식으로 복사될 수도 있다.
도 11은 데이터 왜곡을 포함하는 실제 프레그먼트의 분할 중에 예시적인 프레그먼트 맵과 예시적인 물리적 위치들의 상태 변화(1100)를 도시하는 블록도이다.
블록 A(1110)는 실제 프레그먼트 맵(1130)이 4개의 엘리먼트를 포함하는 상태를 나타낼 수 있다. 실제 프레그먼트 맵(1130)의 제1 엘리먼트는 제1 실제 프레그먼트(1150)에 대응하는 ID를 포함할 수 있다. 실제 프레그먼트 맵(1130)의 제2 엘리먼트는 제2 실제 프레그먼트(1160)에 대응하는 ID를 포함할 수 있다. 실제 프레그먼트 맵(1130)의 제3 엘리먼트는 실제 프레그먼트(1150)에 대응하는 ID를 포함할 수 있다. 마지막으로, 실제 프레그먼트 맵(1130)의 제4 엘리먼트는 제3 실제 프레그먼트(1170)에 대응하는 ID를 포함할 수 있다. 블록 A(1110)에서, 제3 실제 프레그먼트(1170)는 데이터 왜곡 상태에 있을 수 있다.
블록 B(1120)는 실제 프레그먼트 맵(1140)의 제4 엘리먼트가 도면에서 소문자 'x'로 표시된 데이터 왜곡 플래그를 포함할 수 있는 상태를 나타낼 수 있다. 데이터 왜곡 플래그가 존재한다는 것은 실제 프레그먼트 맵(1140)의 제4 엘리먼트가 현재 실제 프레그먼트(1150), 제2 실제 프레그먼트(1160), 및 제3 실제 프레그먼트(1170) 모두에 매핑될 수 있음을 나타낼 수 있다. 또한, 이전에 제3 실제 프레그먼트(1170)에 저장된 정보는 이제 실제 프레그먼트(1150) 및 제2 실제 프레그먼트(1160) 각각으로 이동되었을 수 있다.
도 12는 프레그먼트 ID를 이용하여 데이터 왜곡을 포함한 프레그먼트의 물리적 위치의 ID를 탐색하기 위한 예시적인 방법(1200)을 도시하는 흐름도이다.
블록(900)은 도 9에 기술된 프레그먼트 ID를 이용하여 프레그먼트의 물리적 위치의 ID를 탐색하기 위한 예시적인 방법을 나타낼 수 있다.
블록(1210)은 블록(900)에서 탐색된 프레그먼트가 데이터 왜곡 플래그를 포함하는 프레그먼트 맵의 엘리먼트에 매핑되는지에 대한 판정을 나타낼 수 있다. 이러한 판정은 임의의 형태를 취할 수 있다. 예를 들면, 프레그먼트에 대응하는 엘리먼트가 판독될 수 있고 반환된 정보는 이 정보가 데이터 왜곡 플래그를 포함하 는지를 판정하도록 질의될 수 있다. 부정 판정에 대한 응답으로, 흐름은 블록(1220)으로 계속된다. 긍정 판정에 대한 응답으로, 흐름은 블록(1230)으로 계속된다
블록(1220)은 정보가 블록(900)에서 식별된 프레그먼트로부터 판독되는 동작을 나타낼 수 있다.
블록(1230)은 프레그먼트 맵의 각 프레그먼트로부터 정보가 판독되는 동작을 나타낼 수 있다.
도 13은 기술된 시스템 및 방법을 구현하기 위한 예시적인 컴퓨터 장치(1300)를 나타낸다. 가장 기본적인 구성에서, 컴퓨팅 장치(1300)는 통상적으로 적어도 하나의 중앙 처리 장치(CPU; 1305) 및 메모리(1310)를 포함한다.
컴퓨팅 장치의 정확한 구성 및 유형에 따라서, 메모리(1310)는 (RAM 등의) 휘발성, (ROM, 플래시 메모리 등과 같은) 비휘발성 또는 이 둘의 조합일 수 있다. 또한, 컴퓨팅 장치(1300)는 추가적인 특징/기능성도 가질 수 있다. 예를 들면, 컴퓨팅 장치(1300)는 복수의 CPU를 포함할 수 있다. 기술된 방법은 컴퓨팅 장치(1300)의 임의의 처리 유닛에 의해 임의의 방식으로 실행될 수 있다. 예를 들면, 기술된 프로세스는 복수의 CPU에 의해 병렬로 실행될 수 있다.
컴퓨팅 장치(1300)는 자기 또는 광 디스크나 테이프를 포함하지만 이에 한정되지 않는 추가적인 (이동식 및/또는 비이동식) 저장 장치도 포함할 수 있다. 이러한 추가적인 저장 장치는 도 13에서 저장 장치(1315)로 도시된다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 메모리(1310) 및 저장 장치(1315)는 모두 컴퓨터 저장 매체의 예이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치 또는 원하는 정보를 저장하는 데에 이용될 수 있고 컴퓨팅 장치(1300)에 의해 액세스될 수 있는 임의의 기타 매체를 포함하지만 이에 한정되지 않는다. 임의의 이러한 컴퓨터 저장 매체가 컴퓨팅 장치(1300)의 일부일 수 있다.
컴퓨팅 장치(1300)는 장치가 다른 장치와 통신할 수 있게 해주는 통신 장치(들)(1340)를 또한 포함할 수 있다. 통신 장치(들)(1340)는 통신 매체의 일례이다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. 피변조 데이터 신호라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 한정되지 않는다. 본원에서 사용된 컴퓨터 판독가능 매체 또는 장치 판독가능 매체라는 용어는 컴퓨터 저장 매체 및 통신 매체를 모두 포함한다. 기술된 방법은 데이터, 및 컴퓨터 실행가능 명령어 등과 같은 임의의 형태로 된 임의의 컴퓨터 판독가능 매체로 인코딩될 수 있다.
컴퓨팅 장치(1300)는 또한 키보드, 마우스, 펜, 음성 입력 장치, 점촉 입력 장치 등과 같은 입력 장치(들)(1335)를 포함할 수 있다. 디스플레이, 스피커, 프린터 등과 같은 출력 장치(들)(1330)가 또한 포함될 수 있다. 이들 모든 장치는 본 기술 분야에 널리 공지되어 있어 장황하게 설명할 필요가 없다.
당업자들은 프로그램 명령어들을 저장하는 데에 이용되는 저장 장치가 네트워크를 통해 분산될 수 있음을 인식할 것이다. 예를 들면 원격 컴퓨터는 소프트웨어로서 기술된 프로세스의 일례를 저장할 수 있다. 로컬 및 단말 컴퓨터는 프로그램을 실행시키기 위하여 원격 컴퓨터를 액세스하고 소프트웨어의 일부 또는 모두를 다운로드할 수 있다. 대안으로 로컬 컴퓨터는 필요할 경우 소프트웨어 조각들을 다운로하거나, 소프트웨어 명령어들 중 일부는 로컬 단말기에서 일부는 원격 컴퓨터(또는 컴퓨터 네트워크)에서 실행시킴으로서 분산적으로 처리할 수 있다. 당업자들은 또한 당업자들에게 공지된 통상의 기술들을 이용함으로써 소프트웨어 명령어들 중 모두 또는 일부가 DSP, 또는 프로그램가능한 로직 어레이(programmable logic array) 등의 전용 회로에 의해 수행될 수 있음을 인식할 것이다.

Claims (20)

  1. 데이터 구조(330)를 가지는 하나 이상의 장치 판독가능 매체로서,
    제1 인덱스(index; 330) 및 제1 엘리먼트를 포함하는 제1 데이터 필드(310) - 상기 제1 엘리먼트는 상기 제1 인덱스(330)(0)와 관련된 위치(340)를 나타내는 제1 토큰(token)을 포함함 - ,
    인덱스(330) 및 엘리먼트를 포함하는 하나 이상의 데이터 필드(310) - 상기 엘리먼트는 상기 제1 인덱스(330)와 관련된 위치(340)에 대응하는 토큰을 포함함 - 및
    데이터 행(310)으로부터 도출된 제2 인덱스(330) - 상기 제2 인덱스(330)는 상기 하나 이상의 데이터 필드(310) 각각의 대응하는 인덱스(330)에 관련됨 -
    를 포함하는 하나 이상의 장치 판독가능 매체.
  2. 제1항에 있어서,
    상기 제2 인덱스(330)는 래핑 함수(wrapping function; 900)를 이용하여 제1 인덱스(330)에 매핑되는 하나 이상의 장치 판독가능 매체.
  3. 제1항에 있어서,
    상기 데이터 필드(310)는 별개의 맵(seperate map)에 대한 인덱스인 하나 이상의 장치 판독가능 매체.
  4. 제1항에 있어서,
    상기 제2 인덱스(310)는 가상 맵 인덱스(virtual map index)인 하나 이상의 장치 판독가능 매체.
  5. 제1항에 있어서,
    상기 제2 인덱스(310)는 모듈러 함수(modulus function)를 이용하여 상기 제1 인덱스에 매핑되는 하나 이상의 장치 판독가능 매체.
  6. 제1항에 있어서,
    상기 제1 인덱스(330)와 관련된 위치(340)는 물리적 저장소(physical storage location)인 하나 이상의 장치 판독가능 매체.
  7. 제1항에 있어서,
    상기 제2 인덱스(330)는 해쉬 함수(hash function)를 이용하여 데이터 행(310)으로부터 도출되는 하나 이상의 장치 판독가능 매체.
  8. 제1항에 있어서,
    상기 하나 이상의 데이터 필드(310)는 맴버들(members) 또는 어레이(330)인 하나 이상의 장치 판독가능 매체.
  9. 제1항에 있어서,
    상기 제1 데이터 필드(310)는 어레이(330)의 맴버인 하나 이상의 장치 판독가능 매체.
  10. 장치 실행가능 명령어를 갖는 하나 이상의 장치 판독가능 매체로서,
    상기 장치 실행가능 명령어는,
    너무 커진 프레그먼트(680)를 식별하는 단계(510);
    상기 프레그먼트(680)가 실제 프레그먼트 맵(640)에서 1회를 초과하여 참조되었는지를 판정하는 단계(520);
    상기 실제 프레그먼트 맵(650)의 사이즈를 늘리는 단계(530);
    새로운 실제 프레그먼트(690)를 식별하기 위해 새로운 토큰을 선택하는 단계(550); 및
    상기 실제 프레그먼트 맵(660)의 엔트리(entry)를 상기 새로운 토큰으로 수정하는 단계(560)
    를 수행하는 하나 이상의 장치 판독가능 매체.
  11. 제10항에 있어서,
    상기 실제 프레그먼트 맵(640)의 사이즈를 늘리는 단계는 상기 실제 프레그먼트 맵(650, 660)의 사이즈를 2배로 늘리는 하나 이상의 장치 판독가능 매체.
  12. 제10항에 있어서,
    상기 새로운 토큰과 관련된 데이터는 상기 프레그먼트(680)로부터 상기 새로운 프레그먼트(690)로 이동되는 하나 이상의 장치 판독가능 매체.
  13. 제10항에 잇어서,
    상기 프레그먼트(680)는 데이터세트(dataset)(110)의 서브세트(subset)인 하나 이상의 장치 판독가능 매체.
  14. 제10항에 있어서,
    상기 실제 프레그먼트 맵(640, 650, 660)은 어레이인 하나 이상의 장치 판독가능 매체.
  15. 제10항에 있어서,
    실제 프레그먼트 맵(640, 650, 660)의 적어도 하나의 엔트리를 수정하는 단계(560)를 더 포함하는 하나 이상의 장치 판독가능 매체.
  16. 장치 실행가능 명령어를 갖는 하나 이상의 장치 판독가능 매체로서,
    상기 장치 실행가능 명령어는,
    소정의 임계치 이하로 된 사이즈의 프레그먼트(890)를 식별하는 단계(710);
    실제 프레그먼트 맵(840)에서 상기 프레그먼트(890)에 대한 병합 파트너(merge partner; 880)를 식별하는 단계(720);
    상기 실제 프레그먼트 맵(850)의 상기 프레그먼트(890)에 대응하는 엔트리를 상기 병합 파트너(880)의 ID(identifier)로 수정하는 단계(740); 및
    상기 실제 프레그먼트 맵(840, 850)이 축소될 수 있다면, 상기 실제 프레그먼트 맵(860)의 사이즈를 축소시키는 단계(750, 760)
    를 수행하는 하나 이상의 장치 판독가능 매체.
  17. 제16항에 있어서,
    상기 프레그먼트(890)와 관련된 데이터(730)를 상기 병합 파트너(880)와 관련된 물리적 저장소로 이동시키는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
  18. 제16항에 있어서,
    상기 프레그먼트(890)는 데이터세트(110)의 서브세트인 하나 이상의 장치 판독가능 매체.
  19. 제16항에 있어서,
    상기 실제 프레그먼트 맵(840)의 사이즈가 2의 인수(factor of two)만큼 축소되는 하나 이상의 장치 판독가능 매체.
  20. 제16항에 있어서,
    실제 프레그먼트 맵(840, 850)에서 적어도 하나의 엔트리를 수정하는 단계(740)를 더 포함하는 하나 이상의 장치 판독가능 매체.
KR1020097004700A 2006-09-06 2007-08-18 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 KR101467589B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/470,586 US7523288B2 (en) 2006-09-06 2006-09-06 Dynamic fragment mapping
US11/470,586 2006-09-06

Publications (2)

Publication Number Publication Date
KR20090048624A true KR20090048624A (ko) 2009-05-14
KR101467589B1 KR101467589B1 (ko) 2014-12-02

Family

ID=39153420

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097004700A KR101467589B1 (ko) 2006-09-06 2007-08-18 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체

Country Status (7)

Country Link
US (1) US7523288B2 (ko)
EP (1) EP2069979B1 (ko)
JP (1) JP4669067B2 (ko)
KR (1) KR101467589B1 (ko)
CN (1) CN101512526B (ko)
TW (1) TWI372981B (ko)
WO (1) WO2008030694A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7992037B2 (en) * 2008-09-11 2011-08-02 Nec Laboratories America, Inc. Scalable secondary storage systems and methods
EP2605143A4 (en) * 2010-08-13 2014-10-08 Fujitsu Ltd MEMORY CONTROL DEVICE, INFORMATION PROCESSING DEVICE AND CONTROL METHOD FOR A MEMORY CONTROL DEVICE
GB2489405B (en) * 2011-03-22 2018-03-07 Advanced Risc Mach Ltd Encrypting and storing confidential data
KR20130014943A (ko) * 2011-08-01 2013-02-12 삼성전자주식회사 임의의 메모리 집합을 지원하는 메모리 구성 장치 및 방법
US20140344235A1 (en) * 2013-05-17 2014-11-20 Emmanuel Zarpas Determination of data modification
CN103441937A (zh) * 2013-08-21 2013-12-11 曙光信息产业(北京)有限公司 组播数据的发送方法和接收方法
US9405643B2 (en) 2013-11-26 2016-08-02 Dropbox, Inc. Multi-level lookup architecture to facilitate failure recovery
US9547706B2 (en) * 2014-03-10 2017-01-17 Dropbox, Inc. Using colocation hints to facilitate accessing a distributed data storage system
US20170255565A1 (en) * 2016-03-02 2017-09-07 Intel Corporation Method and apparatus for providing a contiguously addressable memory region by remapping an address space
US10509798B2 (en) * 2016-05-11 2019-12-17 Informatica Llc Data flow design with static and dynamic elements
CN106227678B (zh) * 2016-07-21 2018-12-28 北京四维益友信息技术有限公司 一种虚拟存储介质的存取方法
CN108509438B (zh) * 2017-02-24 2021-08-31 南京烽火星空通信发展有限公司 一种ElasticSearch分片扩展方法
US11099983B2 (en) 2017-04-27 2021-08-24 EMC IP Holding Company LLC Consolidating temporally-related data within log-based storage
US11402998B2 (en) 2017-04-27 2022-08-02 EMC IP Holding Company LLC Re-placing data within a mapped-RAID environment comprising slices, storage stripes, RAID extents, device extents and storage devices
WO2018199795A1 (en) 2017-04-27 2018-11-01 EMC IP Holding Company LLC Best-effort deduplication of data
WO2019022631A1 (en) * 2017-07-27 2019-01-31 EMC IP Holding Company LLC STORING DATA IN DIFFERENTLY SIZED WAFERS WITHIN DIFFERENT STORAGE LEVELS
CN107465573B (zh) * 2017-08-04 2020-08-21 苏州浪潮智能科技有限公司 一种提高ssr客户端在线监控效能的方法
US11461287B2 (en) 2017-10-26 2022-10-04 EMC IP Holding Company LLC Managing a file system within multiple LUNS while different LUN level policies are applied to the LUNS
WO2019083391A1 (en) 2017-10-26 2019-05-02 EMC IP Holding Company LLC ACCORDING DATA STORAGE EQUIPMENT
WO2019083390A1 (en) 2017-10-26 2019-05-02 EMC IP Holding Company LLC USE OF RECURRENT WRITE QUOTAS TO OPTIMIZE THE USE OF STATIC SEMICONDUCTOR DISK
CN108776692A (zh) * 2018-06-06 2018-11-09 北京京东尚科信息技术有限公司 用于处理信息的方法和装置
CN112306372A (zh) 2019-07-31 2021-02-02 伊姆西Ip控股有限责任公司 用于处理数据的方法、设备和程序产品

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5555404A (en) * 1992-03-17 1996-09-10 Telenor As Continuously available database server having multiple groups of nodes with minimum intersecting sets of database fragment replicas
US5881379A (en) * 1996-05-20 1999-03-09 International Business Machines Corporation System, method, and program for using duplicated direct pointer sets in keyed database records to enhance data recoverability without logging
JP3345628B2 (ja) * 1997-07-11 2002-11-18 アネックスシステムズ株式会社 データ格納及び検索方法
US6055604A (en) * 1997-08-26 2000-04-25 Hewlett-Packard Company Forced transaction log posting using a least busy storage media without maintaining redundancy of the transaction log
JPH11110262A (ja) * 1997-10-01 1999-04-23 Toshiba Corp 情報管理システム
US6405284B1 (en) * 1998-10-23 2002-06-11 Oracle Corporation Distributing data across multiple data storage devices in a data storage system
JP4206586B2 (ja) * 1999-11-12 2009-01-14 株式会社日立製作所 データベース管理方法および装置並びにデータベース管理プログラムを記録した記憶媒体
US6523036B1 (en) * 2000-08-01 2003-02-18 Dantz Development Corporation Internet database system
US7162478B2 (en) * 2001-02-28 2007-01-09 International Business Machines Corporation System and method for correlated fragmentations in databases
JP2004021797A (ja) * 2002-06-19 2004-01-22 Hitachi Ltd データベース管理方法および装置
US6941310B2 (en) * 2002-07-17 2005-09-06 Oracle International Corp. System and method for caching data for a mobile application
JPWO2004025475A1 (ja) * 2002-09-10 2006-01-12 玉津 雅晴 データベースの再編成システム、並びに、データベース
US7237062B2 (en) * 2004-04-02 2007-06-26 Seagate Technology Llc Storage media data structure system and method

Also Published As

Publication number Publication date
TWI372981B (en) 2012-09-21
CN101512526A (zh) 2009-08-19
CN101512526B (zh) 2011-12-07
TW200825800A (en) 2008-06-16
EP2069979A1 (en) 2009-06-17
US7523288B2 (en) 2009-04-21
JP2010503117A (ja) 2010-01-28
EP2069979A4 (en) 2016-08-03
JP4669067B2 (ja) 2011-04-13
KR101467589B1 (ko) 2014-12-02
US20080059749A1 (en) 2008-03-06
EP2069979B1 (en) 2018-10-24
WO2008030694A1 (en) 2008-03-13

Similar Documents

Publication Publication Date Title
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
US20230006144A9 (en) Trie-Based Indices for Databases
KR101972645B1 (ko) 클러스터링 저장 방법 및 장치
US7756859B2 (en) Multi-segment string search
KR100856245B1 (ko) 파일 시스템 장치 및 그 파일 시스템의 파일 저장 및 파일 탐색 방법
JP3318834B2 (ja) データファイルシステム及びデータ検索方法
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
US6745198B1 (en) Parallel spatial join index
WO2014047214A1 (en) Hierarchical ordering of strings
CN113961514A (zh) 数据查询方法及装置
Amur et al. Design of a write-optimized data store
CN114840487A (zh) 分布式文件系统的元数据管理方法和装置
Moško et al. Clustered pivot tables for I/O-optimized similarity search
JP6006740B2 (ja) インデックス管理装置
KR101693108B1 (ko) 읽기 성능 개선을 위한 티-트리 인덱스를 이용한 데이터베이스 읽기 방법 및 그 장치
JP2007048318A (ja) リレーショナルデータベースの処理方法およびリレーショナルデータベース処理装置
US7822736B2 (en) Method and system for managing an index arrangement for a directory
JP3859044B2 (ja) インデクス作成方法および検索方法
KR100472949B1 (ko) 시계열 데이터베이스에서 서브시퀀스 매칭의 인덱스검색방법
Pagh Basic external memory data structures
KR20010109945A (ko) 비공간검색조건이 포함된 케이-최근접 질의를 위한알에스트리구조 및 점증적 최근접 방법
JP5953262B2 (ja) データ索引装置、データ索引方法及びプログラム
KR100902010B1 (ko) 연관 피드백을 포함한 내용 기반 멀티미디어 검색 방법
CN107391666B (zh) 一种复合索引键值的生成方法及装置
Sioutas et al. Geometric Retrieval for Grid Points in the RAM Model.

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171027

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 6