KR101597384B1 - 분할되고 확장가능하며 사용가능한 구조적 저장소에서의 파티션 관리 - Google Patents
분할되고 확장가능하며 사용가능한 구조적 저장소에서의 파티션 관리 Download PDFInfo
- Publication number
- KR101597384B1 KR101597384B1 KR1020117009130A KR20117009130A KR101597384B1 KR 101597384 B1 KR101597384 B1 KR 101597384B1 KR 1020117009130 A KR1020117009130 A KR 1020117009130A KR 20117009130 A KR20117009130 A KR 20117009130A KR 101597384 B1 KR101597384 B1 KR 101597384B1
- Authority
- KR
- South Korea
- Prior art keywords
- partition
- partitions
- server
- master
- child
- Prior art date
Links
Images
Classifications
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0605—Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/161—Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
확장가능한 구조적 저장 시스템의 파티션 관리가 제공된다. 저장 시스템은 하나 이상의 테이블에 의해 표현되는 저장소를 제공하며, 각각의 테이블은 데이터 엔터티를 나타내는 행을 포함한다. 테이블은 다수의 파티션으로 분할되고, 각각의 파티션은 행들의 인접 범위를 포함하고 있다. 파티션은 테이블 서버에 의해 제공되고 테이블 마스터에 의해 관리된다. 테이블 서버 및 파티션에 대한 로드 분산 정보가 추적되고, 테이블 마스터는 로드 분산 정보에 기초하여 파티션을 분할 및/또는 병합하기로 결정한다.
Description
대량의 계산 및 저장 리소스를 제공하기 위해 서버 팜, 웹 서비스 등을 비롯한 분산 시스템이 점점 더 보편화되고 있다. 예를 들어, 다양한 응용 분야에 대한 엄청난 양의 데이터를 저장 및 검색하는 데 분산 저장 시스템이 이용되어 왔다. 어떤 경우에, 저장 시스템은 데이터를 보다 효율적으로 저장, 검색 및 쿼리하기 위해 구조적 저장소(structured storage)를 이용한다. 구조적 저장 시스템(structured storage system)은 네트워크 전체에 걸쳐 있는 다수의 노드에 데이터를 저장할 수 있다. 이러한 저장을 제공하기 위해 요망되는 컴퓨팅 리소스의 양이 증가함에 따라, 추가 컴퓨팅 장치를 추가하여 필요에 따라 추가 리소스가 추가될 수 있는 유연성 있는 토폴로지를 제공함으로써 이러한 저장 시스템이"확장"될 수 있다. 그에 따라, 구조적 저장 시스템은, 예를 들어, 페타바이트(petabyte)에서 엑사바이트(exabyte)의 저장된 데이터로 확장가능할 수 있다. 그 결과, 데이터가 항상 액세스가능하고 지속가능하여 데이터 손실을 방지하도록 이러한 구조적 저장 시스템 내에서 데이터를 관리하는 것은 종종 복잡하다.
이 요약은 이하에서 상세한 설명에 더 기술되는 일련의 개념을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징 또는 필수적인 특징을 명시하기 위한 것이 아니며, 청구된 발명 대상의 범위를 정하는 데 보조 수단으로 사용되기 위한 것도 아니다.
본 발명의 실시예는 구조적 데이터 저장 시스템(structured data storage system)에서의 파티션 관리(partition management)에 관한 것이다. 저장소에서, 구조적 데이터(structured data)는 서로 다른 서버에 의해 제공될 수 있는 다수의 파티션으로 나누어져 있다. 이들 파티션의 위치를 추적하기 위해 파티션 맵(partition map)이 사용된다. 보다 구체적으로는, 파티션 맵을 사용하여, 클라이언트는 어느 서버가 특정 데이터를 제공하고 있는지를 알아낼 수 있다. 파티션에 대한 상세한 로드 정보가 추적된다. 서버들에 걸친 로드 분산을 달성하기 위해 서버들 간에 파티션이 이동될 수 있다. 일부 실시예에서, 더 나은 로드 분산을 달성하기 위해, 분할하기 위한 높은 로드를 가지는 파티션이 식별된다. 파티션을 분할하기 위한 위치가 결정되고, 파티션이 분할되어 자식 파티션을 만들고, 이 자식 파티션이 다른 서버로 오프로딩될 수 있다. 파티션이 자식 파티션으로 분할된 것을 반영하기 위해 파티션 맵이 업데이트된다. 일부 실시예에서, 병합하기 위한 2개 이상의 파티션이 식별된다. 파티션이 병합되고, 병합된 파티션을 반영하기 위해 파티션 맵이 업데이트된다.
구조적 저장소가 추가 전용(append-only) 파일 시스템 인터페이스를 제시하는 스트림 시스템(stream system) 상에 구축된다. 스트림은 추가 전용 파일과 유사하다. 각각의 파티션은 그와 연관된 일련의 스트림을 가진다. 파티션의 모든 지속적 상태가 그와 연관된 일련의 스트림에 유지된다. 일련의 스트림 중에는, 파티션의 모든 다른 스트림에 대한 포인터는 물론 그 파티션의 중요한 정보[파티션에 포함된 모든 행의 파티션 키 범위(partition key range) 등]도 포함하는, 파티션에 대한 메타데이터 스트림이 있다.
첨부 도면을 참조하여 이하에서 본 발명에 대해 상세히 기술한다.
도 1은 본 발명의 실시예를 구현하는 데 사용하기 적당한 예시적인 컴퓨팅 환경의 블록도.
도 2는 본 발명의 일 실시예에 따른 테이블 구조를 나타낸 도면.
도 3은 본 발명의 실시예가 구현될 수 있는 예시적인 시스템을 나타낸 블록도.
도 4는 본 발명의 일 실시예에 따른 파티션을 나타낸 블록도.
도 5는 본 발명의 일 실시예에 따른, 파티션을 분할하는 방법을 나타낸 흐름도.
도 6은 본 발명의 일 실시예에 따른, 부모 파티션이 2개의 자식 파티션으로 분할되는 것의 일례를 나타낸 도면.
도 7은 본 발명의 다른 실시예에 따른, 파티션을 분할하는 방법을 나타낸 흐름도.
도 8은 본 발명의 일 실시예에 따른, 파티션을 병합된 파티션으로 병합하는 방법을 나타낸 흐름도.
도 9는 본 발명의 일 실시예에 따른, 손상된 파티션을 복구하는 방법을 나타낸 흐름도.
도 10은 본 발명의 일 실시예에 따른, 파티션 버전 관리 및 업그레이드 방법을 나타낸 흐름도.
도 1은 본 발명의 실시예를 구현하는 데 사용하기 적당한 예시적인 컴퓨팅 환경의 블록도.
도 2는 본 발명의 일 실시예에 따른 테이블 구조를 나타낸 도면.
도 3은 본 발명의 실시예가 구현될 수 있는 예시적인 시스템을 나타낸 블록도.
도 4는 본 발명의 일 실시예에 따른 파티션을 나타낸 블록도.
도 5는 본 발명의 일 실시예에 따른, 파티션을 분할하는 방법을 나타낸 흐름도.
도 6은 본 발명의 일 실시예에 따른, 부모 파티션이 2개의 자식 파티션으로 분할되는 것의 일례를 나타낸 도면.
도 7은 본 발명의 다른 실시예에 따른, 파티션을 분할하는 방법을 나타낸 흐름도.
도 8은 본 발명의 일 실시예에 따른, 파티션을 병합된 파티션으로 병합하는 방법을 나타낸 흐름도.
도 9는 본 발명의 일 실시예에 따른, 손상된 파티션을 복구하는 방법을 나타낸 흐름도.
도 10은 본 발명의 일 실시예에 따른, 파티션 버전 관리 및 업그레이드 방법을 나타낸 흐름도.
법적 요건을 만족시키기 위해 본 발명의 발명 대상이 본 명세서에 구체적으로 기술되어 있다. 그렇지만, 그 설명 자체가 이 특허의 범위를 제한하기 위한 것은 아니다. 오히려, 발명자는, 현재 또는 장래의 다른 기술과 함께, 이 문서에 기술된 단계와 다른 단계 또는 이 문서에 기술된 단계와 유사한 단계의 조합을 포함시키기 위해, 청구된 발명 대상이 다른 방식으로도 구현될 수 있는 것을 생각하고 있다. 게다가, "단계" 및/또는 "블록"이라는 용어가 이용되는 방법의 서로 다른 구성요소를 암시하기 위해 본 명세서에서 사용될 수 있지만, 개별 단계의 순서가 명확하게 기술되어 있지 않은 한 또 그러한 경우를 제외하고는, 이들 용어가 본 명세서에 개시된 다양한 단계 사이에 임의의 특정의 순서를 암시하는 것으로 해석되어서는 안된다.
본 발명의 실시예는 확장가능하고 사용가능하며 지속가능한 구조적 저장소를 제공한다. 구조적 저장소는 다수의 테이블로 표현되며, 각각의 테이블은 다수의 행을 포함하고, 각각의 행은 데이터 엔터티(data entity)를 나타낸다. 테이블은 다수의 파티션(partition)으로 나누어지고, 각각의 파티션은 테이블로부터의 행들의 범위를 포함하고 있다. 파티션은 테이블 서버(table server)에 저장되고 테이블 마스터(table master)를 사용하여 관리된다.
일부 실시예에서, 로드 분산을 위해 파티션이 분할된다. 테이블 서버 및 파티션에 대한 로드 분산 정보가 추적된다. 로드 분산 정보에 기초하여, 테이블 마스터는 파티션을 로드 분산시키기로 결정하고, 로드를 분산시키기 위해, 파티션을 다른 노드에 재할당할 수 있다. 그에 부가하여, 일부 파티션에 대해, 테이블 마스터는 현재 로드를 분산시키기 위해 파티션을 분할하기로 결정할 수 있다. 테이블 마스터는 분할비(split ratio)를 결정하고, 분할 위치를 확인하기 위한 키 정보(key information)를 얻기 위해, 파티션을 제공하는 테이블 서버에 쿼리한다. 테이블 서버로부터 수신된 키 정보에 기초하여, 테이블 마스터는 테이블 서버에게 파티션을 분할하도록 지시한다. 분할 요청을 수신할 때, 테이블 서버는 대상 파티션을 언로드(unload)하고, 자식 파티션을 만들며, 자식 파티션을 제공하기 시작한다. 일부 실시예에서, 자식 파티션이 다른 테이블 서버에 할당될 수 있다. 자식 파티션을 제공하는 테이블 서버(들)를 반영하기 위해 파티션 맵이 업데이트된다.
일부 실시예에서는, 파티션이 병합된다. 다시 말하자면, 테이블 서버 및 파티션에 대한 로드 분산 정보가 추적된다. 로드 분산 정보에 기초하여, 병합하기 위한 2개 이상의 파티션이 식별된다. 파티션을 제공하는 테이블 서버(들)는 파티션을 제공하는 것을 중단하도록 지시받는다. 파티션이 병합되고 테이블 서버에 로드되며, 테이블 서버는 병합된 파티션을 제공하기 시작한다. 병합된 파티션을 제공하는 테이블 서버를 반영하기 위해 파티션 맵이 업데이트된다.
그에 따라, 한 측면에서, 본 발명의 실시예는 구조적 저장 시스템 내의 하나 이상의 컴퓨팅 장치에 의해 구현되는 방법에 관한 것이며, 여기서 구조적 저장소는 하나 이상의 테이블로 표현되고, 각각의 테이블은 복수의 행을 포함하며, 각각의 행은 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 행을 식별해주는 하나 이상의 키를 포함하고, 복수의 행이 복수의 파티션에 분배되며, 각각의 파티션은 테이블 내의 복수의 행으로부터의 행들의 범위를 포함하고, 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터는 복수의 테이블 서버에의 파티션 할당을 제어한다. 이 방법은 파티션을 자식 파티션으로 분할하는 것에 대한 것이고, 파티션에 대한 로드 정보에 기초하여 분할하기 위한 파티션을 식별하는 단계를 포함하며, 여기서 로드 정보는 파티션의 2개 이상의 부분 각각에 대한 로드를 지정하는 정보를 포함한다. 이 방법은 또한, 테이블 마스터에서, 파티션의 2개 이상의 부분 각각에 대한 로드에 기초하여 파티션을 분할하기 위한 분할비를 결정하는 단계를 포함한다. 이 방법은 분할비에 대응하는 파티션 내에서의 실제 위치를 나타내는 키 정보를 얻기 위해 테이블 서버에 쿼리하는 단계를 추가로 포함한다. 이 방법은 또한, 테이블 마스터에서, 테이블 서버로부터 키 정보를 수신하는 단계를 포함하며, 키 정보는 분할비에 대응하는 파티션 내에서의 실제 위치를 나타낸다. 이 방법은 테이블 마스터로부터 테이블 서버로 분할 요청을 송신하는 단계를 추가로 포함하며, 분할 요청은 키 정보에 기초하여 파티션을 분할하라는 것을 나타낸다. 이 방법은 또한 자식 파티션을 만들기 위해 키 정보에 대응하는 위치에서 파티션을 분할하는 단계를 포함한다. 이 방법은 테이블 마스터에 분할 완료를 통지하는 단계를 추가로 포함한다. 이 방법은, 파티션이 자식 파티션으로 분할된 것에 기초하여, 파티션 맵을 업데이트하는 단계를 추가로 포함하고, 파티션 맵은 복수의 파티션과 복수의 파티션을 제공하는 복수의 테이블 서버 간의 매핑을 저장한다.
본 발명의 다른 실시예에서, 한 측면은 구조적 저장 시스템을 관리하는 방법을 수행하는 컴퓨터 사용가능 명령어를 저장하는 하나 이상의 컴퓨터 저장 매체에 관한 것이며, 여기서 구조적 저장 시스템은 하나 이상의 테이블로 표현되고, 각각의 테이블은 복수의 행을 포함하며, 각각의 행은 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 행을 식별해주는 하나 이상의 키를 포함하고, 복수의 행이 복수의 파티션에 분배되며, 각각의 파티션은 테이블 내의 복수의 행으로부터의 행들의 범위를 포함하고, 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터는 복수의 테이블 서버에의 파티션 할당을 제어한다. 이 방법은 테이블의 적어도 2개의 파티션을 병합된 파티션으로 병합하는 것에 대한 것이고, 복수의 테이블 서버 상의 복수의 파티션에 대한 로드 정보를 추적하는 단계를 포함한다. 이 방법은 또한, 테이블 마스터에서, 로드 정보에 기초하여 병합할 적어도 2개의 파티션을 식별하는 단계를 포함한다. 이 방법은, 테이블 마스터에서, 병합된 파티션에 대한 메타데이터 스트림을 작성하는 단계를 추가로 포함한다. 이 방법은 또한 적어도 2개의 파티션을 제공하는 적어도 하나의 테이블 서버로부터 적어도 2개의 파티션을 오프로딩하는 단계를 포함한다. 이 방법은, 테이블 마스터에서, 병합된 파티션을 복수의 테이블 서버 중에서 선택된 테이블 서버에 할당하는 단계를 추가로 포함한다. 이 방법은, 선택된 테이블 서버에서, 병합된 파티션을 로드하여 제공하는 단계를 추가로 포함한다.
본 발명의 추가의 실시예는 구조적 저장 시스템을 관리하는 방법을 수행하는 컴퓨터 사용가능 명령어를 저장하는 하나 이상의 컴퓨터 저장 매체에 관한 것이며, 여기서 구조적 저장 시스템은 하나 이상의 테이블로 표현되고, 각각의 테이블은 복수의 행을 포함하며, 각각의 행은 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 행을 식별해주는 하나 이상의 키를 포함하고, 복수의 행이 복수의 파티션에 분배되며, 각각의 파티션은 테이블 내의 복수의 행으로부터의 행들의 범위를 포함하고, 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터는 복수의 테이블 서버에의 파티션 할당을 제어한다. 이 방법은 테이블의 파티션을 적어도 2개의 자식 파티션으로 분할하는 것에 대한 것이고, 복수의 테이블 서버 상의 복수의 파티션에 대한 로드 정보를 추적하는 단계를 포함한다. 이 방법은 또한, 테이블 마스터에서, 로드 정보에 기초하여 분할할 파티션을 식별하는 단계를 포함하며, 여기서 파티션에 대한 로드 정보는 파티션의 서로 다른 부분에 대한 서로 다른 로드를 식별해준다. 이 방법은, 테이블 마스터에서, 파티션을 분할하기 위한 분할비를 결정하는 단계를 추가로 포함하고, 여기서 분할비는 로드 정보에 기초하여 지정되고, 파티션의 제1 부분이 로드의 제1 분량을 포함하고 파티션의 제2 부분이 로드의 제2 분량을 포함하는 파티션 내의 지점을 나타낸다. 이 방법은, 테이블 마스터로부터 테이블 서버로, 분할비에 대응하는 파티션 내에서의 실제 위치를 식별해주는 키 정보에 대한 요청을 송신하는 단계를 추가로 포함한다. 이 방법은 또한, 테이블 서버에서, 분할비에 대응하는 파티션에서의 실제 위치를 식별해주는 키 정보를 결정하고 키 정보를 테이블 서버로부터 테이블 마스터로 전달하는 단계를 포함한다. 이 방법은, 테이블 마스터에서, 각각의 자식 파티션에 대한 메타데이터 스트림을 구축하는 단계를 추가로 포함한다. 이 방법은 테이블 마스터로부터 테이블 서버로 분할 요청을 송신하는 단계, 및 테이블 서버에서, 파티션으로부터 자식 파티션을 작성하는 단계를 추가로 포함한다. 이 방법은 또한 테이블 서버에서 파티션을 제공하는 것을 중단하는 단계, 및 테이블 서버에서 자식 파티션을 로드하여 제공하는 단계를 포함한다. 이 방법은 테이블 서버로부터 테이블 마스터로 분할 완료 통지를 송신하는 단계를 추가로 포함한다. 이 방법은, 파티션이 자식 파티션으로 분할된 것에 기초하여, 파티션 맵을 업데이트하는 단계를 추가로 포함하고, 파티션 맵은 복수의 파티션과 복수의 파티션을 제공하는 복수의 테이블 서버 간의 매핑을 저장한다.
본 발명의 실시예의 개요를 간략하게 기술하였지만, 본 발명의 다양한 측면에 대한 일반적인 정황을 제공하기 위해 본 발명의 실시예가 구현될 수 있는 예시적인 운영 환경에 대해 이하에서 기술한다. 먼저 특히 도 1을 참조하면, 본 발명의 실시예를 구현하기 위한 예시적인 운영 환경이 도시되어 있으며 전체적으로 컴퓨팅 장치(100)로서 나타내어져 있다. 컴퓨팅 장치(100)는 적당한 컴퓨팅 환경의 일례에 불과하며 본 발명의 용도 또는 기능의 범위에 관한 어떤 제한을 암시하기 위한 것이 아니다. 컴퓨팅 장치(100)가 예시된 구성요소들 중 어느 하나 또는 예시된 구성요소들의 임의의 조합에 관한 어떤 의존관계 또는 요구사항을 갖는 것으로 해석되어서도 안된다.
본 발명은 일반적으로 컴퓨터 또는 기타 기계[PDA(personal data assistant) 또는 기타 핸드헬드 장치 등]에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어를 비롯한 컴퓨터 코드 또는 기계 사용가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 루틴, 프로그램, 개체, 구성요소, 데이터 구조, 기타 등등을 포함하는 프로그램 모듈은 특정의 작업을 수행하거나 특정의 추상 데이터 형식을 구현하는 코드를 말한다. 본 발명은 핸드헬드 장치, 가전 제품, 범용 컴퓨터, 전용 컴퓨팅 장치(more specialty computing device), 기타 등등을 비롯한 각종의 시스템 구성에서 실시될 수 있다. 본 발명은 또한 작업이 통신 네트워크를 통해 연결되어 있는 원격 처리 장치에 의해 수행되는 분산 컴퓨팅 환경에서도 실시될 수 있다.
도 1을 참조하면, 컴퓨팅 장치(100)는 메모리(112), 하나 이상의 프로세서(114), 하나 이상의 제시 구성요소(presentation components)(116), 입/출력 포트(118), 입/출력 구성요소(120), 및 예시적인 전원 공급 장치(122)를 직접 또는 간접적으로 연결시키는 버스(110)를 포함하고 있다. 버스(110)는 하나 이상의 버스일 수 있는 것(주소 버스, 데이터 버스, 또는 이들의 조합 등)을 나타낸다. 도 1의 다양한 블록이 명확함을 위해 선으로 나타내어져 있지만, 실제로는, 다양한 구성요소를 구분하는 것이 그렇게 명확하지 않으며, 비유적으로 말하면, 이들 선이 보다 정확하게는 애매모호하다(grey and fuzzy). 예를 들어, 디스플레이 장치와 같은 제시 구성요소(presentation component)를 I/O 구성요소라고 생각할 수 있다. 또한, 프로세서는 메모리를 갖는다. 이러한 것이 기술의 속성임을 잘 알 것이며, 다시 말하지만 도 1의 도면은 단지 본 발명의 하나 이상의 실시예와 관련하여 사용될 수 있는 예시적인 컴퓨팅 장치를 나타낸 것에 불과하다. "워크스테이션", "서버", "랩톱", "핸드헬드 장치", 기타 등등의 카테고리들 간에 구별을 두지 않는데, 그 이유는 이들 모두가 도 1의 범위 내에 속하는 것으로 생각되고 "컴퓨팅 장치"를 말하는 것이기 때문이다.
컴퓨팅 장치(100)는 통상적으로 각종의 컴퓨터 판독가능 매체를 포함하고 있다. 컴퓨터 판독가능 매체는 컴퓨팅 장치(100)에 의해 액세스될 수 있는 사용가능한 매체라면 어느 것이라도 될 수 있고, 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체 둘다를 포함한다. 제한이 아닌 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등의 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체 둘다를 포함한다. 컴퓨터 저장 매체로는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 또 컴퓨팅 장치(100)에 의해 액세스될 수 있는 임의의 다른 매체가 있지만, 이들로 제한되지 않는다. 통신 매체는 통상적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터를 반송파 또는 기타 전송 메카니즘 등의 피변조 데이터 신호(modulated data signal)에 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는 신호의 특성들 중 하나 이상이 정보를 그 신호에 인코딩하는 방식으로 설정 또는 변경된 신호를 의미한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection) 등의 유선 매체와, 음향, RF, 적외선 및 기타 무선 매체 등의 무선 매체를 포함한다. 상기한 것들 중 임의의 것의 조합도 역시 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
메모리(112)는 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 메모리는 이동식, 비이동식, 또는 이들의 조합일 수 있다. 예시적인 하드웨어 장치로는 고상 메모리(solid-state memory), 하드 드라이브, 광 디스크 드라이브, 기타 등등이 있다. 컴퓨팅 장치(100)는 메모리(112) 또는 I/O 구성요소(120)와 같은 다양한 엔터티로부터 데이터를 판독하는 하나 이상의 프로세서를 포함한다. 제시 구성요소(들)(116)는 사용자 또는 기타 장치에 데이터 표시(data indication)를 제공한다. 예시적인 제시 구성요소로는 디스플레이 장치, 스피커, 인쇄 구성요소, 진동 구성요소, 기타 등등이 있다.
I/O 포트(118)에 의해 컴퓨팅 장치(100)는 I/O 구성요소(120)를 비롯한 다른 장치(이들 중 일부는 기본 제공되어 있을 수 있음)에 논리적으로 결합될 수 있다. 예시적인 구성요소로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너, 프린터, 무선 장치, 네트워킹 장치, 기타 등등이 있다.
상위 레벨 데이터 모델
본 발명의 실시예에 따르면, 구조적 저장소는 테이블로 표현되고, 여기서 테이블은 일련의 행을 포함한다. 예시로서, 도 2는 본 발명의 일 실시예에 따른 테이블(200)의 일부분을 나타낸 것이다. 테이블(200) 내의 각각의 행[행(202) 등]은 데이터 엔터티를 나타내고, 속성(204, 206, 208)[열(208)의 데이터 값은 간단함과 명확함을 위해 비어두었음]을 비롯한 일련의 속성을 포함하며, 이들 속성은 일련의 열에 나타내어져 있다. 속성/열은, 예를 들어, 이름, 형식 값 쌍(typed value pair), 또는 이름-다중 형식 값(multiple typed value) 매핑일 수 있다. 행 및/또는 각각의 개별 속성이 버전 관리되거나 버전 관리되지 않을 수 있다. 테이블 자체는 테이블 내의 각각의 행이 동일한 유형을 갖는 동일한 속성을 가지는 경우 고정 스키마(fixed schema)를 가질 수 있거나, 모든 행에 일련의 서로 다른 속성 및 유형이 저장되어 있을 수 있는 경우 어떤 강제 적용된 스키마(schema enforced)도 갖지 않을 수 있다.
구조적 저장소에 대해 수행되는 일련의 표준 동작은 테이블, 행 및 속성을 삽입, 업데이트 및 삭제하는 기능을 포함한다. 그에 부가하여, 지정된 스캔/쿼리와 일치하는 일련의 테이블, 행 또는 속성을 찾기 위해 테이블, 행 및 속성을 스캔하고 쿼리하는 기능이 제공된다.
분할(Partitioning)
테이블이 수십억 또는 수조의 행과 수 테라바이트/페타바이트의 데이터로 증가할 수 있으며, 테이블은 테이블의 서로 다른 부분으로의 트래픽/로드를 처리하기 위해 수천개의 서버에 걸쳐 분산될 필요가 있을 수 있다. 구조적 저장소에 대한 이 확장성을 달성하기 위해, 실시예는 서버에 걸쳐 테이블 및 행을 분산시키기 위해 분할을 이용한다. 분할은 테이블 내의 행을 파티션으로 그룹화하고/나누고, 이어서 파티션이 서로 다른 서버에 할당되어 그로부터 제공(서버에 대한 읽기 및 쓰기 액세스의 제공)될 수 있다.
테이블을 확장가능하도록 만들기 위해, 테이블은 파티션 키(partition key)를 구성하는, 속성이라고 불리우는 1개 내지 다수개의 키를 가진다. 예를 들어, 도 2의 테이블(200)을 참조하면, 테이블(200)의 첫번째 열(204)은 각각의 행/엔터티에 대한 파티션 키를 포함한다. 주어진 테이블에 대해 2개 이상의 파티션 키 속성/열이 있는 경우, 서로 결합된 속성/열은 그 테이블에 대한 복합 파티션 키(composite partition key)를 형성한다. 행에 대한 파티션 키의 값은 엔터티/행이 속하는 파티션을 식별하는 데 사용된다. 동일한 파티션 키 값을 가지는 행은 동일한 파티션으로 그룹화된다고 말해진다.
파티션 키에 부가하여, 각각의 행은 0개 내지 다수개의 추가 행 키(row key) 속성/열을 가질 수 있다. 예를 들어, 다시 도 2의 테이블(200)을 참조하면, 테이블(200)의 두번째 열(206)은 각각의 행/엔터티에 대한 행 키를 포함한다. 행 키는 파티션 내에서의 행의 고유 ID를 나타낸다. 파티션 키는 행 키와 결합되어 테이블 내의 행/엔터티에 대한 기본 키(primary key)(고유 ID)를 나타낸다. 기본 키는 테이블 내의 파티션에 대한 기본 정렬 순서(primary sort order)를 나타낸다. 행 키가 없는 경우, 파티션 키가 기본 키이고 테이블 내의 각각의 엔터티를 일의적으로 식별해야만 한다. 이하에서의 설명이 단일 파티션 키 및 단일 행 키의 측면에서 본 발명의 실시예를 기술하고 있지만, 다수의 파티션 키 및/또는 행 키가 사용될 때에도 똑같이 적용될 수 있다.
파티션 키는 동일한 파티션 키 "값"을 가지는 행을 그룹화하는 데 사용되는 반면, 행 키는 파티션 내의 행의 고유 ID를 나타낸다. 파티션 키 값에 기초하여 테이블 행을 나누는 것을 본 명세서에서 테이블을 분할(partitioning)한다고 말한다. 이것은 테이블의 행을 파티션으로 그룹화/나눈다. 파티션은 동일한 파티션 키 값을 가지는 일련의 행이며, 따라서 동일한 파티션 키를 가지는 모든 행은 항상 동일한 파티션 내에 저장될 것이다. 따라서, 동일한 파티션 키 값을 가지는 2개의 행은 동일한 파티션에 있고, 2개의 파티션에 걸쳐 분할되지 않는다. 그에 부가하여, 일부 실시예에서, 파티션 키 값이 파티션 키 네임스페이스(partition key namespace)에서 인접하여 나타나는 한, 서로 다른 파티션 키 값을 가지는 다수의 행이 동일한 파티션으로 그룹화될 수 있도록 파티션의 정의가 확장된다. 일례로서, 도 2의 테이블(200)을 참조하면, 제1 파티션(P1 210), 제2 파티션(P2 212), 제3 파티션(P3 214) 및 제4 파티션(P4 216)을 포함하는 4개의 파티션이 예시되어 있다. 도 2에 도시된 바와 같이, 일부 파티션은 단일 파티션 키 값의 행을 포함하고 있는 반면, 다른 파티션은 다중 파티션 키 값의 행을 포함하고 있다. 전자의 일례로서, P1(210)은 전체적으로 1의 파티션 키 값을 가지는 행을 포함하고, P2(212)는 전체적으로 2의 파티션 키 값을 가지는 행을 포함한다. 후자의 일례로서, P3(214)는 전체적으로 3, 4 또는 5의 파티션 키 값을 가지는 행을 포함하고, P4(216)는 전체적으로 6 또는 7의 파티션 키 값을 가지는 행을 포함한다.
분할의 이점은 (1) 데이터의 액세스 패턴 및 트래픽 요구에 기초하여 테이블을 파티션으로 나누고 파티션을 서버들에 걸쳐 분산시킴으로써 테이블에 대한 액세스를 스케일링할 수 있는 것, 및 (2) 동일한 파티션 내의 행이 그룹화되어 동일한 테이블 서버로부터 액세스되며, 이로 인해 동작의 범위가 파티션 내로 한정될 때 보다 효율적인 쿼리, 스캔 및 캐싱이 가능하게 되는 것을 포함하지만, 이들로 제한되지 않는다. 파티션에 걸쳐 스캔하는 것이 훨씬 더 효율적인 이유는, 쿼리를 할 때 파티션 키를 지정하지 않는 경우 잠재적으로 전체 테이블에 걸쳐 탐색해야만 하는 것 대신에, 파티션에 대한 단일 테이블 서버로부터 파티션이 액세스되기 때문에, 대체로 파티션 내의 행만 스캔되면 되기 때문이다.
상위 레벨 아키텍처
본 발명의 실시예에 따르면, 본 명세서에서 "테이블 서버"라고 하는 일련의 서버는 구조적 저장 시스템을 저장하고 그에 대한 액세스를 제공한다. 그에 부가하여, 본 명세서에서 "테이블 마스터"라고 하는 일련의 서버는 테이블 서버를 관리한다. "테이블 클라이언트"는 응용 프로그램에게 구조적 저장 시스템에 대한 액세스를 제공한다.
이제 도 3을 참조하면, 본 발명의 일 실시예에 따른 시스템(300)의 상위 레벨 아키텍처를 나타낸 블록도가 제공된다. 본 명세서에 기술된 이 구성 및 기타 구성이 단지 일례로서 기술되어 있다는 것을 잘 알 것이다. 기타 구성 및 요소(예를 들어, 기계, 인터페이스, 기능, 순서, 및 기능 그룹, 기타)가 도시된 것에 부가하여 또는 그 대신에 사용될 수 있으며, 일부 요소는 완전히 생략될 수 있다. 게다가, 본 명세서에 기술된 요소들 중 다수는, 개별 구성요소 또는 분산 구성요소로서 또는 다른 구성요소와 함께, 임의의 적당한 조합으로 임의의 적당한 위치에 구현될 수 있는 기능적 엔터티이다. 본 명세서에서 하나 이상의 엔터티에 의해 수행되는 것으로 기술된 다양한 기능이 하드웨어, 펌웨어 및/또는 소프트웨어에 의해 수행될 수 있다. 예를 들어, 메모리에 저장된 명령어를 실행하는 프로세서에 의해 다양한 기능이 수행될 수 있다.
도시되지 않은 구성요소 중에서도 특히, 시스템(300)은 일반적으로 테이블 마스터(302), 테이블 서버(304, 306, 308, 310) 및 테이블 클라이언트(312)를 포함한다. 각각은, 예를 들어, 도 1을 참조하여 기술된 컴퓨팅 장치(100)와 같은 임의의 유형의 컴퓨팅 장치 상에 존재할 수 있다. 이들 구성요소는 하나 이상의 LAN(local area network) 및/또는 WAN(wide area network)(이들로 제한되지 않음)을 포함할 수 있는 네트워크를 통해 서로 통신을 할 수 있다. 도 3에 단지 1개의 테이블 마스터, 4개의 테이블 서버 및 1개의 테이블 클라이언트만이 도시되어 있지만, 본 발명의 실시예의 범위 내에서 임의의 수의 테이블 마스터, 테이블 서버 및 테이블 클라이언트가 시스템(300) 내에서 이용될 수 있다는 것을 잘 알 것이다.
테이블 마스터(302)는 다음과 같은 일을 맡고 있다: (1) 테이블 서버(304, 306, 308, 310)에 파티션을 할당하는 것, (2) 오류로 인해 파티션이 제공되지 않을 때를 신속하게 판정하고 파티션을 다른 테이블 서버에 재할당하는 것, (3) 테이블 서버(304, 306, 308, 310) 간의 파티션의 로드 분산을 제어하는 것, 및 (4) 테이블 서버(304, 306, 308, 310)의 상태를 모니터링하는 것.
각각의 테이블 서버(304, 306, 308, 310)는 테이블 마스터에 의해 테이블 서버에 할당된 파티션에 대한 읽기 및 쓰기 액세스를 제공하는 일을 맡고 있다. 각각의 테이블 서버(304, 306, 308, 310)는 0개 내지 다수개의 파티션을 호스팅할 수 있다. 도 3의 일례에서, TS1(304)은 파티션 P1 및 P4를 호스팅하고, TS2(306)는 파티션 P2 및 P7을 호스팅하며, TS3(308)는 파티션 P3를 호스팅하고, TS4(310)는 P5 및 P6를 호스팅한다.
테이블 클라이언트(312)는 응용 프로그램에 링크되고, 테이블 서버(304, 306, 308, 310)에 의해 유지되는 파티션에게 명령을 내리는 데 사용된다. 테이블 클라이언트(312)는 파티션 맵을 사용하여 파티션을 제공하는 테이블 서버를 결정하고, 그 테이블 서버로 명령을 송신한다. 테이블 클라이언트(312)는 또한 테이블 서버로부터 다시 결과를 수신하고 이를 응용 프로그램으로 전달한다. 파티션 맵은 파티션과 파티션을 제공하는 테이블 서버 간의 매핑을 저장하는 특수 테이블이며, 테이블 마스터(302)에 의해 유지된다.
도 4에 나타낸 바와 같이, 내부적으로, 테이블 서버에서 제공되는 파티션(400)은 3가지 주요 부분, 즉 업데이트 로그(402), 1개 내지 다수개의 메모리 테이블(404) 및 0개 내지 다수개의 파일 테이블(406)을 포함한다. 업데이트 로그(402)는 영구 저장소 내의 파티션에 대한 최근의 변화를 추적한다. 메모리 테이블(404)은 업데이트 로그에서의 최근의 (델타) 업데이트의 메모리 버전이다. 이들은 파티션(400)에 대한 최근의 델타 변화이다. 메모리 테이블(404)이 충분히 커지거나 충분한 변경이 있는 경우, 메모리 테이블(404)이 저장소에 보관되는 파일 테이블(406)에 대해 검사된다. 이것이 행해질 때, 검사된 메모리 테이블(checkpointed memory table)(404)까지의 업데이트 로그(402) 내의 모든 요청이 업데이트 로그(402)로부터 제거될 수 있다. 앞서 기술한 바와 같이, 파티션은 그의 지속적 상태를 저장하는 일련의 스트림을 가진다. 업데이트 로그(402)는 이들 스트림 중 하나[업데이트 로그 스트림(update log stream)이라고 함]에 저장된다. 모든 파일 테이블(406)은 이들 스트림 중 하나[파일 테이블 스트림(file table stream)이라고 함]에 저장된다.
테이블 서버가 파티션을 로드할 때, 파티션이 마지막으로 오프로딩되기 바로 전의 상태로 메모리 테이블을 다시 재구성하기 위해, 테이블 서버는 가장 최근의 검사점 이후의 업데이트 로그 내의 모든 요청을 재생(replay)한다.
테이블 서버에서 파티션에 액세스할 때, 모든 최근의 변화를 알기 위해 테이블 서버는 먼저 메모리 테이블 내에 일치된 행이 있는지를 살펴보고, 일치하는 것이 없는 경우, 그 데이터가 있는지 자신의 페이지 캐시 및 파일 테이블을 조사한다.
파티션에 대한 다수의 메모리 테이블 및 다수의 파일 테이블이 있을 수 있다. 다수의 메모리 테이블이 있을 수 있는 이유는 하나의 메모리 테이블이 꽉차게 될 때, 그 메모리 테이블이 파일 테이블에 대해 검사될 필요가 있기 때문이다. 이것이 행해질 때, 현재 메모리 테이블은 읽기 전용으로 설정되고, 쓰기(writing)를 위해 파티션에 대한 새 메모리 테이블이 생성된다. 따라서, 파티션은 항상 최근의 (델타) 업데이트에 대해 사용되는 하나의 메모리 테이블을 가지며, 지연되어 검사(lazily checkpointed) 하나 이상의 메모리 테이블을 가질 수 있다. 메모리 테이블이 파일 테이블에 대해 검사되면, 메모리 테이블이 삭제되거나 가비지 수집될 수 있다.
파티션에 대해 모든 검사가 행해진 것으로 인해, 파티션에 대한 다수의 파일 테이블 검사점이 있을 수 있다. 이것은, 파일 테이블로부터 데이터를 읽어야 할 때, 잠재적으로 다수의 파일 테이블이 조사될 필요가 있고 가장 최근 것부터 가장 오래된 것으로 탐색된다. 이렇게 하는 이유는 가장 최근에 쓰여진 파일 테이블이 파티션에 대한 가장 최근의 변화를 포함하기 때문이다. 파티션이 있는지 충분한 파일 테이블이 검사되었을 때, 파티션이 있는지 탐색되는 데이터를 찾기 위해 검색되어야 하는 파일 테이블의 수를 줄이기 위해, 테이블 서버는 파일 테이블을 새로운 병합된 파일 테이블로 지연되어 압축/병합한다.
확장가능하고 사용가능하며 지속가능한 구조적 저장소
본 발명의 실시예는 확장가능한 구조적 저장 시스템을 제공하는 데 분할(partitioning), 로드 분산(load balancing) 및 조절(throttling)을 이용한다. 확장성은 다음과 같은 것들에 의해 제공된다: (1) 테이블을 파티션으로 분할하고 파티션을 데이터 센터 내의 다수의 서버에 걸쳐 분산시키는 것, (2) 로드가 많이 걸린 테이블 서버로부터 로드가 적게 걸린 테이블 서버로 파티션을 이동시키기 위해 로드 분산을 사용하는 것, 및 (3) 너무 많은 트래픽이 보내지는 파티션에 대한 요청을 무시(drop)하도록 조절하는 것 또는 너무 많은 트래픽이 보내지는 테이블 서버에 대한 요청을 무시하는 것.
파티션의 서로 다른 부분에 대한 로드에 기초하여 테이블을 파티션으로 자동으로 분할하고 이어서 테이블 서버에 걸쳐 로드 분산함으로써 확장성이 제공된다. 로드 분산은 시스템이 작업량에 동적으로 적응하게 하고 로드를 많은 수의 컴퓨터에 걸쳐 분산시키며, 그로써 모든 실제 리소스를 효율적으로 이용함으로써 더 나은 확장성을 달성한다. 그에 부가하여, 조절(throttling)은 시스템을 높은 로드로부터 보호하여, 시스템이 효율적인/최적화된 체제로 동작하게 한다.
사용가능성은 테이블 마스터에서 제공되지 않는 파티션을 식별하고 이들을 다른 테이블 서버에 할당하며 파티션 맵을 업데이트함으로써 제공되며, 이에 의해 테이블 클라이언트는 파티션의 새 위치를 찾아내어 그에 액세스할 수 있다. 노드/네트워크 오류의 경우에 파티션을 신속하게 재할당하는 것은 모든 파티션을 액세스가능한 상태로 유지하고 높은 시스템 사용가능성을 가져온다.
지속가능성은 모든 파티션 데이터를 복제된 스트림 계층에 저장함으로써 제공된다. 스트림 계층은 (파일과 유사한) 스트림에/으로부터 데이터를 쓰기/읽기 위해 파일 시스템과 유사한 인터페이스를 제공하고, 스트림 계층은, 시스템 내의 임의의 테이블 서버로부터 데이터가 복제되고 항상 지속가능하며 사용가능하도록 하기 위해, 전체 기능을 제공한다. 따라서, 파티션 맵, 업데이트 로그 및 파일 테이블을 비롯한 파티션 정보는 스트림 계층에 저장된다.
효율적인 스트림 레벨 동작
스트림 계층은 스트림의 한 영역을 다른 스트림에 효율적으로 하드 링크(hard-linking)시키는 기능을 제공한다. 스트림 계층에 있는 각각의 스트림은 익스텐트(extent)라고 하는 데이터 블록의 목록으로 이루어져 있다. 스트림 내의 데이터는 실제로는 그 익스텐트 내에 저장된다. 스트림은 익스텐트의 순서있는 목록이다. 주어진 익스텐트가 다수의 스트림에 존재할 수 있거나, 심지어 동일한 스트림의 순서 있는 익스텐트 목록(ordered extent list)에서 여러번 나타날 수 있다. 스트림 계층은 다른 스트림에 존재하는 일련의 기존의 익스텐트를 링크시킴으로써 스트림을 작성하는 인터페이스를 제공한다. 이 프로세스에서는 실제 데이터 복사가 수반되지 않으며, 따라서 아주 효율적이다. 스트림 계층은 각각의 익스텐트의 참조 카운트(reference count)를 유지한다. 익스텐트가 그를 가리키는 스트림을 갖지 않는 경우, 스트림 계층은 시스템으로부터 이 익스텐트를 가비지 수집/삭제할 것이다.
스트림 계층은 또한, 하나의 원자성 트랜잭션에서, 스트림의 작성, 삭제, 이름 변경 및 익스텐트를 스트림에 하드 링크시키는 것과 같은 다수의 스트림 레벨 동작을 가지는 기능도 지원한다.
구조적 저장 시스템은 파티션의 스트림의 사용되지 않는 부분을 효율적으로 가비지 수집하기 위해 이들 특징을 광범위하게 사용한다. 일례에서, 파티션의 검사가 행해지면, 검사점 이전의 업데이트 로그 내의 모든 메시지가 더 이상 사용되지 않는다. 업데이트 로그 스트림과 동일한 이름의 새 스트림을 작성하는 것, 원래의 스트림으로부터 여전히 사용되는 익스텐트를 새 스트림에 하드 링크시키는 것, 및 원래의 스트림을 삭제하는 것을 원자적으로 수행함으로써 업데이트 로그를 효율적으로 잘라내기 위해 이들 특징이 사용된다. 이들 모두가 하나의 원자성 트랜잭션에서 행해진다. 이것은 오류 처리 논리를 상당히 단순화시킨다. 파티션의 다른 스트림(파일 테이블 스트림 및 메타데이터 스트림 등)에 대해 유사한 방식이 또한 사용된다.
구조적 저장 시스템은 또한, 이후의 섹션에서 기술되는 바와 같이, 파티션의 분할 및 병합을 효율적으로 구현하기 위해 이들 특징을 광범위하게 사용한다. 보다 구체적으로는, 어느 비트도 실제로 복사 또는 이동시키는 일 없이, 원래의 파티션(들)으로부터 분할/병합에 의해 만들어진 자식 파티션(들)으로 데이터를 효율적으로 참조하기 위해 이들 특징이 사용된다.
파티션의 분할, 병합 및 로드 분산
본 발명의 일부 실시예는 저장 시스템 내의 테이블 서버 간의 로드 분산의 균형을 이루게 한다. 일반적으로, 테이블 서버는 각각의 파티션의 로드를 추적하고, 이 정보를 테이블 마스터에게 주기적으로 보고한다. 테이블 마스터는 테이블 서버 간에 파티션을 이동시키는 것으로 로드 분산 결정을 한다. 이것은 원래의 테이블 서버로부터 대상 파티션을 오프로딩하고 파티션을 다른 테이블 서버에 할당함으로써 달성된다.
최적화로서, 본 발명의 일부 실시예는, 파티션이 오프로딩되기 전에 또는 오프로딩될 때, 테이블 마스터로 하여금 "오프로딩 준비(prepare to offload)" 요청을 테이블 서버로 송신하게 할 수 있다. 이 요청을 수신할 때, 테이블 서버는, 파티션이 다시 로드될 때 재생될 필요가 있는 로그의 양을 줄이기 위해, 파티션에 대한 검사를 행할 것이다. 파티션을 제공하기 위한 사용가능성 SLA를 충족시키기 위해 이것이 제공된다.
하나의 파티션이 비교적 높은 로드를 가지는 경우에, 파티션을 2개 이상의 파티션으로 분할하는 것이 바람직하게 될 수 있으며, 이것은 파티션이 2개 이상의 파티션 키 값을 포함하는 경우에만 가능하다. 그 후에, 로드 분산을 달성하기 위해 자식 파티션들 중 하나 이상이 다른 테이블 서버로 오프로딩될 수 있다.
로드 분산 추적을 위해, 각각의 테이블 서버에서, 메모리를 그다지 사용하지 않고, 각각의 파티션 내에서의 세분화된 로드 정보를 추적하기 위해 샘플링 메커니즘이 사용된다. 로드 정보를 추적하기 위해, 파티션이 다수의 파티션 키 범위[본 명세서에서 "버킷(bucket)"이라고 함]로 나누어지고, 각각의 버킷에 대응하는 로드가 추적된다. 보다 구체적으로는, 테이블 서버는 이들 버킷에 속하는 요청들을 확률적으로 샘플링하고, 버킷들에 걸쳐 로드 분산을 추적한다. 예를 들어, 도 2의 테이블(200) 내의 파티션 P3(214)을 참조하면, 로드 추적을 위해 파티션이 2개의 버킷으로 나누어질 수 있다. 제1 버킷은 파티션 키 값이 3인 행을 포함할 것이고, 제2 버킷은 파티션 키 값이 4인 행과 파티션 키 값이 5인 행을 포함할 것이다. 실시예에서, 버킷 경계는 항상 파티션 키 값 상에 있어야만 한다. 즉, 동일한 파티션 키 값을 가지는 행은 항상 동일한 버킷에 있을 것이다. 예를 들어, 파티션 키 값이 3인 행은 로드 추적은 물론 분할을 위해 2개의 버킷으로 분할되지 않을 수 있다.
일부 실시예에서, 수집된 트래픽 샘플에 기초하여, 파티션 내의 키에 걸쳐 트래픽 분산을 보다 정확하게 추적하기 위해 버킷 경계가 동적으로 조정될 수 있다. 즉, 2개의 기존의 버킷이 다른 버킷에 비해 그다지 로드를 갖지 않는 경우, 이들은 하나의 버킷으로 병합될 것이고, 이와 달리, 하나의 버킷이 모든 다른 버킷보다 상당히 더 많은 로드를 포함하는 경우, 그 버킷은 가능한 경우 2개로 분할될 수 있다. 예를 들어, 이전의 일례에서, 제2 버킷이 제1 버킷에 비해 너무 많은 로드를 포함하는 경우, 이는 2개의 작은 버킷으로 분할될 수 있고, 그 중 하나가 파티션 키 값이 4인 행을 포함하고, 그 중 다른 하나가 파티션 키 값이 5인 행을 포함한다. 게다가, 파티션 키 값 3을 포함하는 제1 버킷이 로드가 거의 없는 경우, 이는 파티션 키 값 4를 포함하는 버킷과 병합될 수 있다. 이러한 모니터링 및 버킷 크기의 조정은 모두가 즉시 동적으로 행해진다. 하나의 파티션 내의 파티션 키에 걸쳐 로드 분산을 추적하는 데 사용되는 버킷 레벨 샘플링 방식 이외에, 테이블 서버는 또한 파티션 전체에 대한 작업 로드의 총량을 추적한다. 후자는 테이블 마스터로 전달된다. 따라서, 파티션이 로드에 기초하여 분할되어야 할 때, 테이블 서버 및 테이블 마스터 둘다는 파티션이 어디에서 분할되어야 하는지를 결정하는 데 꽤 정확한 로드 분산 정보를 이용할 수 있다.
이제 도 5를 참조하면, 본 발명의 일 실시예에 따른, 파티션을 분할하는 방법(500)을 나타낸 흐름도가 제공된다. 도 5의 실시예에서, 부모 파티션(P1)은 2개의 자식 파티션[P1'(단지 행의 부분집합을 포함하도록 수정된 원래의 파티션) 및 P2(나머지 행을 포함하는 새 파티션)]으로 분할된다. 도 5가 파티션을 2개의 자식 파티션으로 분할하는 것에 대해 기술하고 있지만, 본 발명의 실시예에 따르면 파티션이 3개 이상의 자식 파티션으로 분할될 수 있다는 것을 잘 알 것이다.
먼저, 블록(502)에 도시된 바와 같이, 테이블 서버, 파티션 및/또는 파티션 일부분(partition portion)(즉, "버킷")에 대한 로드 분산 정보가 추적된다. 상기한 바와 같이 파티션 일부분 레벨에서 세분화된 로드 정보를 추적함으로써, 파티션을 어디에서 분할해야 하는지에 관한 결정이 행해질 수 있다. 로드 정보가 테이블 서버에서 추적되고 주기적으로 테이블 마스터에게 제공된다. 본 실시예에서, 테이블 마스터로 송신되는 로드 정보는 각각의 파티션의 총로드 및 각각의 테이블 서버의 로드를 포함한다. 일부 다른 실시예는 버킷 레벨 정보를 비롯한 모든 로드 추적 정보를 테이블 마스터에게 제공할 수 있다. 로드 분산 및 분할 결정에 도움을 주기 위해 파티션에 대한 부가의 정보, 제한 및 암시가 테이블 서버로부터 테이블 마스터에게 제공된다. 예를 들어, 버킷 정보의 분산에 기초하여, 테이블 서버는 파티션의 "분할 거부(reluctant to split)"를 심각도(degree of severity)로 표시할 수 있으며, 여기서 높음은, 테이블 서버가 파티션을 분할하지 않을 것이기 때문에, 테이블 마스터가 파티션에 대한 분할을 요청해서는 안된다는 것을 의미하고, 중간은 테이블 서버가 파티션을 분할하지 않기로 선택할 수 있고 테이블 마스터가 그 결정을 번복할 수 있는 어떤 상황이 있다는 것을 의미하며, 낮음은 테이블 서버가 수신 대기하고 있다가 테이블 마스터로부터 지시를 받는다는 것을 의미한다.
테이블 마스터는 파티션을 분할할지 여부, 파티션을 병합할지 여부, 및/또는 테이블 서버 간에 파티션을 이동시킬지 여부를 비롯한 로드 정보를 사용하여 로드 분산 결정을 한다. 도 5의 본 실시예에서, 블록(504)에 나타낸 바와 같이, 테이블 마스터는 로드 분산 정보에 기초하여 파티션(P1)을 분할하기로 결정한다.
블록(506)에서, 테이블 마스터는 파티션을 분할하기 위한 분할비를 결정한다. 분할비는 파티션이 분할되어야만 하는 위치를 결정하기 위한 로드비(load ratio)를 나타낸다. 예를 들어, 테이블 마스터는 30%/70% 로드 지점에서 파티션을 분할하기로 결정할 수 있다. 환언하면, 파티션의 제1 부분에 대한 로드가 30%이고 파티션의 나머지에 대한 로드가 70%인 지점에서 파티션이 분할되어야 한다. 블록(508)에서, 테이블 마스터는 분할하라는 요청을 식별된 파티션을 호스팅하는 테이블 서버로 송신한다. 상세하게는, 테이블 마스터는 파티션에서의 분할비에 대응하는 위치를 지정하는 키 정보를 요청한다. 요청에 응답하여, 블록(510)에 나타낸 바와 같이, 테이블 서버는 분할비에 기초하여 파티션을 분할하기 위한 실제 파티션 키 위치를 식별한다. 실제 위치는 분할비에 의해 지정된 로드 분산과 일치하려고 시도하지만, 실제 로드 분산이 달라질 수 있다. 예를 들어, 테이블 마스터에 의해 요청된 분할비는 30%/70% 로드 분산일 수 있지만, 제공될 수 있는 가장 가깝게 일치하는 것은 35%/65% 로드 분산일 수 있다.
일부 실시예에서, 분할을 위한 실제 위치는 파티션 키 정보를 사용하여 식별된다. 예를 들어, 도 2의 파티션 P3(214)이 파티션 키 값 3과 파티션 키 값 4 사이에서 분할되어야 하는 경우, 분할을 식별해주는 키 정보는 파티션 키 값 3 및/또는 파티션 키 값 4일 수 있다. 이러한 변형례 전부가 본 발명의 실시예의 범위에 속하는 것으로 생각된다. 블록(512)에 나타낸 바와 같이, 테이블 서버는 분할비에 대한 키 정보를 테이블 마스터에게 반환한다.
블록(514)에 나타낸 바와 같이, 테이블 마스터는 새 파티션(P2)에 대한 스트림을 자식 파티션들 중 하나로서 구축한다. 파티션의 모든 지속적 상태가 그 파티션에 대한 "스트림"에 유지된다. 파티션의 모든 다른 스트림에 대한 포인터는 물론 그 파티션의 중요한 정보[파티션에 포함된 모든 행의 파티션 키 범위 등]도 포함하는, 파티션에 대한 메타데이터 스트림이 있다. 이 단계에서, 테이블 마스터는 분할비에 대응하는 올바른 파티션 키 범위 정보를 가지는 새 파티션(P2)에 대한 메타데이터 스트림을 작성하는 일을 맡고 있다. 그에 부가하여, 블록(516)에서, 테이블 마스터는 분할 요청을 테이블 서버로 송신한다. 분할 요청은, 그 다음 하트비트에서, 테이블 마스터로부터 테이블 서버에게 제공될 수 있다.
일부 실시예에서, 오류를 처리하기 위해 적절한 마스터 로그가 기록된다. 테이블 마스터는, 각각의 단계가 완료된 후에, 대응하는 단계를 로그하며, 따라서 마스터 오류의 경우에, 로그가 재생될 수 있고, 테이블 마스터는 분할이 중단된 곳으로부터 분할을 재시작할 수 있다.
분할 요청을 수신한 후에, 블록(518)에 나타낸 바와 같이, 테이블 서버는 원래의 파티션(P1)을 제공하는 것을 중단하고 원래의 파티션(P1)을 언로드한다. 블록(520)에 나타낸 바와 같이, 테이블 서버는 또한 원래의 파티션으로부터 2개의 자식 파티션(P1' 및 P2)을 작성한다. 테이블 서버는 원래의 파티션(P1)에서의 정보에 기초하여 (메타데이터 스트림 이외에) 새 파티션(P2) 스트림을 구축한다. 보다 구체적으로는, P2의 키 범위에 속하는 데이터의 일부분이 기본 스트림 계층의 특징을 사용하여 파티션(P1)으로부터 파티션(P2)의 스트림으로 효율적으로 복사/하드 링크될 것이다. 자식 파티션(P1')은 P1의 키 범위를 조정함으로써 "만들어진다". 자식 파티션(P1')은 원래의 파티션(P1)과 동일한 일련의 스트림을 사용한다. 감소된 키 범위를 조정하기 위해 P1'의 메타데이터가 변경된다.
블록(522)에 나타낸 바와 같이, 테이블 서버는 자식 파티션(P1' 및 P2) 둘다를 로드하고 이들 파티션을 제공하기 시작한다. 그에 부가하여, 블록(524)에 나타낸 바와 같이, 테이블 서버는 분할의 완료에 관해 테이블 마스터에게 통지한다. 이 통지는, 그 다음 하트비트에서, 테이블 서버로부터 테이블 마스터에게 제공될 수 있다. 테이블 서버로부터의 분할 완료 통지에 응답하여, 블록(526)에 나타낸 바와 같이, 테이블 마스터는 새 파티션을 반영하기 위해 파티션 맵을 업데이트한다. 이 시점에서, 테이블 마스터는 분할 완료를 고려할 수 있다. 블록(528)에 나타낸 바와 같이, 테이블 마스터는 새로 만들어진 자식 파티션(P2)을 포함하는 새 할당을 테이블 서버로 송신하여 파티션 맵과 일치하도록 한다.
일부 실시예에서, 파티션이 분할된 후에, 테이블 마스터는 자식 파티션을 원래의 파티션이 존재했던 테이블 서버로부터 다른 테이블 서버로 이동시키기로 결정할 수 있다. 이것에 의해 테이블 마스터는 네트워크에 걸쳐 로드를 효과적으로 분산시킬 수 있다. 파티션을 한 테이블 서버로부터 오프로딩하고 이어서 이를 다른 테이블 서버에 할당함으로써 파티션 이동이 달성된다.
본 발명의 다른 실시예에서, 블록(518)에서 원래의 파티션이 언로드되기 전에 새 자식 파티션을 만듦으로써, 도 5를 참조하여 전술한 분할 프로토콜의 성능이 향상될 수 있다. 전술한 방법(500)에 대한 다른 변동도 역시 당업자에게는 명백하게 될 수 있으며, 본 발명의 실시예의 범위 내에 있다.
도 6은 본 발명의 일 실시예에 따른, 도 2의 P3(214)를 분할하는 것의 일례를 나타낸 것이다. 상세하게는, 도 6은 TS3(308) 상에 존재하는 P3(214)의 분할을 수행하기 위한 테이블 마스터(302)와 도 3의 TS3(308) 간의 상호작용을 나타낸 것이다. 먼저, 602에 나타낸 바와 같이, 테이블 마스터(302)는 P3(214)를 분할하기 위한 위치를 식별하기 위해 키 정보를 쿼리하라는 요청을 TS3(308)으로 송신한다. 이 요청은 0.3 분할비를 지정하며, 이는 테이블 마스터가 P3(214)에 대한 로드의 30%를 수신한 P3(214)의 한 부분과 로드의 70%를 수신한 나머지 부분 사이의 위치에서 P3(214)를 분할하고자 한다는 것을 나타낸다.
테이블 마스터(302)로부터의 요청에 응답하여, TS3(308)은 테이블 마스터(302)에 의해 지정된 분할비에 대응하는 키 정보를 결정한다. 키 정보는 분할비로서 테이블 마스터(302)에 의해 지정된 30%/70% 로드 분산에 기초하여 P3(214)의 2개의 부분 사이의 위치를 나타낸다. 본 일례에서, TS3(308)는 파티션 키 값이 3인 행에 대한 로드가 로드의 대략 30%를 가지는 반면 나머지에 대한 로드가 로드의 대략 70%를 가지는 것으로 판정한다. 그에 따라, 본 일례에서 TS3(308)에 의해 결정된 키 정보는 파티션 키 값 4이다. 다양한 실시예에서, P3(214)가 분할되어야 하는 위치를 식별해주기 위해 다른 키 정보가 제공될 수 있다는 것을 잘 알 것이다.
606에서, TS3(214)는 키 정보(즉, 파티션 키 값 4)를 테이블 마스터(302)로 전달한다. 608에서, 테이블 마스터(302)는 새 파티션(PN)에 대한 스트림을 구축한다. 그에 부가하여, 블록(610)에서, 테이블 마스터(302)는 분할 요청을 테이블 마스터로 송신한다. 본 일례에서 분할 요청은 각각의 자식 파티션에 대한 범위를 지정한다. 상세하게는, 하나의 자식 파티션(P3')에 대해, 분할 요청은 하위 파티션 키 값 3 및 상위 파티션 키 값 4를 나타내며, 이는 P3'이 파티션 키 값 3을 가지는 행을 포함한다는 것을 나타낸다. 다른 자식 파티션(PN)에 대해, 분할 요청은 하위 파티션 키 값 4 및 상위 파티션 키 값 6을 나타내고, 이는 PN이 파티션 키 값 4를 가지는 행은 물론 파티션 키 값 5를 가지는 행도 포함한다는 것을 나타낸다.
분할 요청에 기초하여, 612에서, TS3는 원래의 파티션 P3(214)를 제공하는 것을 중단한다. 그에 부가하여, 614에 나타낸 바와 같이 TS3(308)는 P3를 P3' 및 PN으로 분할하고, 616에 나타낸 바와 같이 P3' 및 PN을 제공하기 시작한다. 618에 나타낸 바와 같이, TS3(308)는 이어서 분할 완료 통지를 테이블 마스터(302)로 송신한다. 620에서, 테이블 마스터(302)는 자식 파티션을 반영하기 위해 파티션 맵을 업데이트한다.
이제 도 7을 참조하면, 본 발명의 다른 실시예에 따른, 파티션을 분할하는 방법(700)을 나타낸 흐름도가 제공된다. 도 7의 실시예에서, 부모 파티션(P1)은 2개의 새 자식 파티션(P2, P3)으로 분할되고, 각각의 자식 파티션은 부모 파티션(P1)으로부터의 행의 일부분을 포함한다. 도 7이 파티션을 2개의 자식 파티션으로 분할하는 것에 대해 기술하고 있지만, 본 발명의 실시예에 따르면 파티션이 3개 이상의 자식 파티션으로 분할될 수 있다는 것을 잘 알 것이다.
도 5의 방법(500)과 유사하게, 블록(702)에 나타낸 바와 같이, 처음에 로드 분산 정보가 추적된다. 로드 분산 정보에 의해 테이블 마스터는 파티션을 분할할지 여부, 파티션을 병합할지 여부, 및/또는 테이블 서버 간에 파티션을 이동시킬지 여부를 비롯한 로드 분산 결정을 할 수 있다. 도 7의 본 실시예에서, 블록(704)에 나타낸 바와 같이, 테이블 마스터는 로드 분산 정보에 기초하여 파티션(P1)을 분할하기로 결정한다.
블록(706)에서, 테이블 마스터는 파티션을 분할하기 위한 분할비를 결정한다. 앞서 논의된 바와 같이, 분할비는 파티션이 분할되어야만 하는 위치를 결정하기 위한 로드비(load ratio)를 나타낸다. 예를 들어, 테이블 마스터는 30%/70% 로드 지점에서 파티션을 분할하기로 결정할 수 있다. 블록(708)에서, 테이블 마스터는 분할하라는 요청을 식별된 파티션을 호스팅하는 테이블 서버로 송신한다. 상세하게는, 테이블 마스터는 파티션에서의 분할비에 대응하는 위치를 지정하는 키 정보를 요청한다. 요청에 응답하여, 블록(710)에 나타낸 바와 같이, 테이블 서버는 분할비에 기초하여 파티션을 분할하기 위한 실제 위치를 식별한다. 블록(712)에 나타낸 바와 같이, 테이블 서버는 분할비에 대한 키 정보를 테이블 마스터에게 반환한다.
블록(714)에 나타낸 바와 같이, 테이블 마스터는 새 파티션(P2 및 P3)에 대한 메타데이터 스트림을 구축한다. 일부 실시예에서, 오류를 처리하기 위해 적절한 마스터 로그가 기록된다. 테이블 마스터는, 각각의 단계가 완료된 후에, 대응하는 단계를 로그하며, 따라서 마스터 오류의 경우에, 로그가 재생될 수 있고, 테이블 마스터는 분할이 중단된 곳으로부터 분할을 재시작할 수 있다. 그에 부가하여, 블록(716)에서, 테이블 마스터는 분할 요청을 테이블 서버로 송신한다. 분할 요청은, 그 다음 하트비트에서, 테이블 마스터로부터 테이블 서버에게 제공될 수 있다.
분할 요청에 응답하여, 블록(718)에 나타낸 바와 같이, 테이블 서버는 원래의 파티션(P1)으로부터 2개의 자식 파티션(P2 및 P3)을 작성한다. 테이블 서버는 원래의 파티션(P1)에 기초하여 (메타데이터 스트림 이외에) 새 파티션(P2 및 P2)에 대한 스트림을 구축한다. 보다 구체적으로는, P2의 키 범위에 속하는 데이터의 일부분이 기본 스트림 계층의 특징을 사용하여 파티션(P1)으로부터 파티션(P2)의 스트림으로 효율적으로 복사/하드 링크될 것이다. 이와 유사하게, P3의 키 범위에 속하는 데이터의 일부분이 기본 스트림 계층의 동일한 특징을 사용하여 파티션(P1)으로부터 파티션(P3)의 스트림으로 효율적으로 복사/하드 링크될 것이다.
블록(720)에 나타낸 바와 같이, 테이블 서버는 원래의 파티션(P1)을 제공하는 것을 중단하고 원래의 파티션(P1)을 언로드한다. 그에 부가하여, 블록(722)에 나타낸 바와 같이, 테이블 서버는 자식 파티션(P2 및 P3) 둘다를 로드하고 이들 파티션을 제공하기 시작한다. 블록(724)에 나타낸 바와 같이, 테이블 서버는 분할의 완료에 관해 테이블 마스터에게 통지한다. 이 통지는, 그 다음 하트비트에서, 테이블 서버로부터 테이블 마스터에게 제공될 수 있다. 테이블 서버로부터의 분할 완료 통지에 응답하여, 블록(726)에 나타낸 바와 같이, 테이블 마스터는 새 파티션을 반영하기 위해 파티션 맵을 업데이트한다. 이 시점에서, 테이블 마스터는 분할 완료를 고려할 수 있다. 블록(728)에 나타낸 바와 같이, 테이블 마스터는 새로 만들어진 자식 파티션(P2 및 P3)을 포함하는 새 할당을 테이블 서버로 송신하여 파티션 맵과 일치하도록 한다.
어떤 경우에, 테이블 마스터는, 예를 들어, 로드 분산 정보에 기초하여, 2개 이상의 파티션을 하나의 파티션으로 병합하기로 결정할 수 있다. 일 실시예에서, 2개의 인접 파티션(즉, 테이블에서의 행의 순서에서 인접한 파티션)이 비교적 낮은 로드를 가질 때 병합이 수행된다. 여러 파티션을 하나의 파티션으로 병합하는 것은 시스템에서의 파티션의 수를 줄이는 데 유익할 수 있다.
그에 따라, 도 8은 본 발명의 일 실시예에 따른, 파티션을 병합하는 방법(800)을 나타낸 흐름도이다. 블록(802)에 나타낸 바와 같이, 처음에 로드 분산 정보가 추적된다. 로드 분산 정보에 기초하여, 블록(804)에 나타낸 바와 같이, 테이블 마스터는 2개의 파티션(P1 및 P2)이 새 파티션(P3)으로 병합되어야 하는 것으로 결정한다. 실시예에서, 연속적이고 연결되어 있는(non-disjoint) 파티션 키 범위를 형성하는 파티션만이 병합될 수 있다.
테이블 마스터가 2개의 파티션을 병합하기로 결정할 때, 블록(806)에 나타낸 바와 같이, 테이블 마스터는 '병합 준비' 메시지(들)를 2개의 파티션을 제공하는 테이블 서버(들)로 송신한다. 어떤 경우에, 양 파티션이 단일 테이블 서버에 존재할지도 모르는 반면, 다른 경우에, 파티션은 서로 다른 테이블 서버에 존재한다. '병합 준비' 메시지는 병합된 파티션의 로드 시간을 줄이기 위해 병합 이전에 파티션을 압축할 기회를 테이블 서버(들)에 제공한다.
테이블 마스터는 블록(808)에서 병합된 파티션(P3)에 대한 메타데이터 스트림을 작성하고, 블록(810)에서 부모 파티션이 존재하는 테이블 서버(들)로부터 2개의 부모 파티션(P1 및 P2)을 오프로딩한다. 이어서, 블록(812)에 나타낸 바와 같이, 테이블 마스터는 파티션 맵을 업데이트한다(원자적으로 오래된 파티션 항목을 제거하고 새 파티션 항목을 삽입한다). 테이블 마스터의 관점에서 볼 때, 이 시점에서 병합 트랜잭션이 완료되는데, 그 이유는, 테이블 마스터 장애 조치의 경우에, 새로운 병합된 파티션이, 부트스트랩 동안, 보관된 파티션 맵에서 발견될 것이기 때문이다.
블록(814)에 나타낸 바와 같이, 테이블 마스터는 병합된 파티션(P3)을 테이블 서버에 할당한다. 병합된 파티션이 할당되는 테이블 서버는 시스템 내의 어떤 테이블 서버라도 될 수 있다. 예를 들어, 할당된 테이블 서버는 부모 파티션 중 하나 또는 둘다가 존재했던 테이블 서버일 수 있거나, 시스템 내의 다른 테이블 서버일 수 있다.
할당 시에, 블록(816)에 나타낸 바와 같이, 테이블 서버는 병합된 파티션을 로드한다. 병합된 파티션의 메타데이터 스트림으로부터, 테이블 서버는 이것이 병합된 파티션이라는 것을 알고, 기본 스트림 계층으로부터의 특징을 사용하여 부모 파티션으로부터 데이터를 효율적으로 복사/하드 링크함으로써 부모 파티션으로부터 병합된 파티션의 스트림을 구축한다. 구축이 완료된 후, 테이블 서버는 (다음에 이 파티션이 로드될 때, 스트림이 다시 구축되지 않도록) 이 이벤트를 병합된 파티션의 메타데이터 스트림에 기록하고, 부모 파티션의 스트림을 삭제한다.
손상된 파티션 상태로부터 복구
지속가능한 구조적 저장 시스템은 시스템 상태에서 버그로부터 복구할 수 있어야만 한다. 이 기능을 달성하기 위해, 본 발명의 일 실시예에서의 구조적 저장 시스템은 추가 전용 저장소(append-only store)에 구축되며, 모든 삭제된 데이터는 시스템에서의 임의의 손상을 발견하는 데 충분히 긴 것으로 생각되는 최소 시간 동안 유지된다.
이제 도 9를 참조하면, 본 발명의 일 실시예에 따른, 손상된 파티션 상태로부터 파티션을 복구하는 방법(900)을 나타낸 흐름도가 제공되어 있다. 먼저, 블록(902)에 나타낸 바와 같이, 손상된 파티션이 식별된다. 파티션이 손상되어 제공될 수 없는 경우, 파티션을 제공되지 않는 것으로 표시하는 경고가 발생된다. 이것으로 인해 그 파티션 내의 데이터가 일시적으로 사용가능성을 상실할 수 있게 될 수 있다.
블록(904)에 나타낸 바와 같이, 손상된 파티션이 일관성있는 파티션 상태로 복구된다. 시스템은 (a) 파티션에 대한 모든 이전의 변경이 추가 전용 저장소에 저장되어 있기 때문에, 파티션을 복구할 수 있거나(이는 어떤 데이터 손실도 없이 파티션을 복구할 것임), (b) 파티션을 이전 시점으로 롤백할 수 있다(이는 어쩌면 롤백시와 오류시 사이에 일어난 변경의 손실을 야기할 수 있음). 파티션이 복구되면, 구조적 데이터의 읽기 및 쓰기를 위해 파티션이 다시 제공될 수 있다.
파티션 롤백 동안, 시스템은 여전히 유효한 상태에 있는 가장 최근의 검사점을 찾고, 검사점을 대응하는 로그(여전히 존재하는 경우)와 함께 사용하여 파티션 상태를 재작성한다.
파티션 롤백 동안, 어떤 경우에, 파티션의 현재 메타데이터 및 데이터 내용이 파티션 상태를 복구하는 데 불충분하다. 그 경우에, 시스템은 다른 관련 파티션(대상 파티션을 수반하는 가장 최근의 분할 또는 병합 동안의 대상 파티션의 부모(들)를 포함함)으로부터의 데이터를 사용한다. 보다 구체적으로는, 시스템은 부모 파티션과 대상 파티션으로부터의 가장 최근의 유효한 검사점의 상태를 병합함으로써 파티션의 상태를 재생성한다.
모든 파티션이 복구 또는 재작성된 후에, 블록(906)에 나타낸 바와 같이, 재생성된 시스템에서의 모든 파티션의 키 범위와 일치하도록 파티션 맵이 수정된다. 이것은 시스템을 다시 전역적으로 일관성있는 상태로 되게 한다.
파티션 버전 관리 및 업그레이드
테이블 서버 코드의 업그레이드를 수행할 때, 한번에 테이블 서버의 부분집합에 대해서만 업그레이드가 수행된다. 그에 따라, 테이블 서버는 N개의 업그레이드 영역으로 나누어지고, 각각의 업그레이드 영역이 한번에 하나씩 업그레이드될 수 있다.
도 10을 참조하면, 본 발명의 일 실시예에 따른, 업그레이드 동안의 파티션 버전 관리 방법(1000)을 나타낸 흐름도가 제공되어 있다. 블록(1002)에 나타낸 바와 같이, 파티션이 다음에 업그레이드 프로세스 동안 업그레이드되어야 하는 대상 업그레이드 영역 내의 테이블 서버로부터 이동될 수 있다. 블록(1004)에 나타낸 바와 같이, 새로운 테이블 서버 코드 버전이 대상 업그레이드 영역 내의 테이블 서버에 배포된다.
업그레이드 프로세스 동안, 블록(1006)에 나타낸 바와 같이, 파티션이 새 테이블 서버 코드 버전을 가지는 테이블 서버에 할당될 수 있고, 어쩌면 새 데이터 형식으로 수정되기 시작할 수 있다. 이 수정 이후에, 파티션은 더 새로운 업그레이드된 테이블 서버에 의해서만 제공될 수 있고 이전 버전의 테이블 서버에 의해서는 제공되지 않을지도 모른다. 그에 따라, 파티션이 버전 N의 테이블 서버에 의해 제공된 경우, 블록(1008)에 나타낸 바와 같이, 시스템은 파티션이 버전 N 또는 그 이후 버전의 테이블 서버(또는 다른 방식으로 호환되는 테이블 서버 버전)에 의해서만 제공되도록 한다.
이것은 본 발명의 실시예의 범위 내에서 다수의 다른 방식으로 달성될 수 있다. 예를 들어, 일 실시예에서, 각각의 파티션, 테이블 서버 및 테이블 마스터에 대해 버전 번호가 추적된다. 업그레이드가 행해질 때, 파티션을 제공하는 테이블 서버가 더 높은 버전 번호인 경우, 파티션은 그 버전 번호를 취한다. 그 시점으로부터, 파티션은 그 버전 또는 그보다 높은 버전의 테이블 서버에 의해서만 제공될 수 있다.
다른 실시예에서, 각각의 테이블 서버가 업그레이드되자마자, 테이블 서버는 자신의 버전을 알려주기 위해 테이블 마스터와 통신을 한다. 테이블 마스터는 최신의 테이블 서버 버전을 추적하고, 할당될 파티션은 최신 버전(또는 다른 방식으로 호환되는 버전)을 가지는 테이블 서버에만 할당될 수 있다.
또 다른 실시예에서, 파티션 버전은 파티션 메타데이터와 함께 보관된다. 테이블 서버는 자신에게 할당된 파티션의 버전을 테이블 마스터에게 통지한다. 테이블 서버는 또한 그 자신의 버전 번호를 테이블 마스터에게 보고한다. 테이블 마스터는 그로써 파티션 버전은 물론 테이블 서버 버전도 추적한다. 그 방식으로, 테이블 마스터는 파티션이 호환 버전의 테이블 서버에 할당될 수 있도록 한다.
결론
본 발명이 모든 점에서 제한적인 것이 아니라 예시적인 것으로 보아야 하는 특정의 실시예에 관해 기술되어 있다. 대안의 실시예가 본 발명의 범위를 벗어나지 않고 본 발명과 관련된 기술 분야의 당업자에게는 명백하게 될 것이다.
이상으로부터, 본 발명이 이 시스템 및 방법에 본질적이고 또 명백한 다른 이점들과 함께 이상에서 기술한 모든 목적을 달성하도록 잘 구성되어 있다는 것을 잘 알 것이다. 어떤 특징 및 서브컴비네이션이 유용하고 또 다른 특징 및 서브컴비네이션을 참조하지 않고 이용될 수 있다는 것을 잘 알 것이다. 이것은 청구항에서 고려되고 있으며 또 청구항의 범위 내에 속한다.
Claims (15)
- 구조적 저장소(structured storage)가 하나 이상의 테이블로 표현되는 구조적 저장 시스템(structured storage system) 내의 하나 이상의 컴퓨팅 장치에 의해 구현되는 방법으로서,
각각의 테이블은 복수의 행을 포함하며, 각각의 행은 상기 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 상기 행을 식별해 주는 하나 이상의 키를 포함하며, 상기 복수의 행은 복수의 파티션 사이에 분배되며, 각각의 파티션은 상기 테이블 내의 상기 복수의 행으로부터의 행들의 범위를 포함하고, 상기 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터가 상기 복수의 테이블 서버에의 파티션 할당을 제어하고,
상기 방법은 파티션을 자식 파티션들로 분할하기 위한 것으로서,
상기 파티션에 대한 로드 정보에 기초하여 분할할 파티션을 식별하는 단계(504) - 상기 로드 정보는 상기 파티션의 2개 이상의 부분 각각에 대한 로드를 지정하는 정보를 포함함 -,
상기 테이블 마스터에 의해, 상기 파티션의 2개 이상의 부분 각각에 대한 로드에 기초하여 상기 파티션을 분할하기 위한 분할비를 결정하는 단계(506),
상기 분할비에 대응하는 상기 파티션 내에서의 실제 위치를 나타내는 키 정보에 대해 상기 테이블 서버에 쿼리하는 단계(508),
상기 테이블 마스터에서 상기 테이블 서버로부터 키 정보를 수신하는 단계(510) - 상기 키 정보는 상기 분할비에 대응하는 상기 파티션 내에서의 실제 위치를 나타냄 -,
상기 테이블 마스터로부터 상기 테이블 서버로 분할 요청을 송신하는 단계(516) - 상기 분할 요청은 상기 키 정보에 기초하여 상기 파티션을 분할하라고 지시함 -,
상기 키 정보에 대응하는 위치에서 상기 파티션을 분할하여 상기 자식 파티션을 생성하는 단계(518, 520, 522),
분할 완료를 상기 테이블 마스터에 통지하는 단계(524), 및
상기 파티션이 상기 자식 파티션들로 분할된 것에 기초하여 파티션 맵을 업데이트하는 단계(526) - 상기 파티션 맵은 복수의 파티션과 상기 복수의 파티션을 제공하는(serving) 복수의 테이블 서버 간의 매핑을 저장함 -
를 포함하는 방법. - 제1항에 있어서,
상기 테이블 마스터에서, 상기 자식 파티션들 중 적어도 하나의 자식 파티션에 대한 스트림을 구축하는 단계를 더 포함하는 방법. - 제1항에 있어서,
상기 파티션을 분할하는 단계는
상기 테이블 서버로부터 상기 파티션을 제공하는 것을 중단하는 단계,
상기 파티션으로부터 상기 자식 파티션들을 작성하는 단계, 및
상기 테이블 서버로부터 상기 자식 파티션들을 로드하여 제공하는 단계를 포함하며,
상기 파티션을 제공하는 것을 중단하는 단계는 상기 파티션의 검사점을 만듦으로써 파티션 리로드(partition reload) 동안 재생되어야 할 로그의 양을 줄이는 것을 포함하고,
상기 파티션의 검사점을 만드는 것은 원자적으로, 새 로그 스트림(new log stream)을 작성하고, 상기 검사점 이후의 익스텐트(extent)를 이전 로그 스트림(old log stream)으로부터 새 로그 스트림으로 하드 링크시키고, 상기 이전 로그 스트림을 삭제하고, 상기 새 로그 스트림을 상기 이전 로그 스트림의 이름으로 이름 변경함으로써, 검사 동안 로그 스트림을 효율적으로 잘라내는 것을 포함하는 방법. - 제3항에 있어서,
상기 파티션으로부터 상기 자식 파티션들을 작성하는 단계는 고비용의 데이터 복사 없이 상기 파티션의 스트림으로부터 익스텐트를 원자적으로 하드 링크시킴으로써 상기 자식 파티션들의 스트림들을 효율적으로 구축하는 단계를 포함하는 방법. - 제1항에 있어서,
상기 자식 파티션들 중 적어도 하나의 자식 파티션을 제2 테이블 서버에 할당하는 단계, 및 상기 자식 파티션들 중 적어도 하나의 자식 파티션이 상기 제2 테이블 서버에 위치되어 있음을 나타내도록 상기 파티션 맵을 업데이트하는 단계를 더 포함하는 방법. - 제1항에 있어서,
로드 모니터링을 위해 상기 파티션의 2개 이상의 부분의 적어도 일부를 병합 또는 분할함으로써 상기 로드 정보에 기초하여 상기 파티션의 2개 이상의 부분의 경계를 조정하는 단계를 더 포함하는 방법. - 하나 이상의 테이블로 표현되는 구조적 저장 시스템을 관리하는 방법을 수행하는 컴퓨터 사용가능 명령어를 저장하는 하나 이상의 컴퓨터 저장 매체로서,
각각의 테이블은 복수의 행을 포함하며, 각각의 행은 상기 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 상기 행을 식별해 주는 하나 이상의 키를 포함하고, 상기 복수의 행은 복수의 파티션 사이에 분배되며, 각각의 파티션은 상기 테이블 내의 복수의 행으로부터의 행들의 범위를 포함하고, 상기 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터가 상기 복수의 테이블 서버에의 파티션 할당을 제어하고,
상기 방법은 상기 테이블의 적어도 2개의 파티션을 병합된 파티션으로 병합하기 위한 것으로서,
상기 복수의 테이블 서버 상의 복수의 파티션에 대한 로드 정보를 추적하는 단계(802),
상기 테이블 마스터에 의해, 상기 로드 정보에 기초하여 병합할 상기 적어도 2개의 파티션을 식별하는 단계(804),
상기 테이블 마스터에 의해, 상기 병합된 파티션에 대한 메타데이터 스트림을 작성하는 단계(808),
상기 적어도 2개의 파티션을 제공하는 적어도 하나의 테이블 서버로부터 상기 적어도 2개의 파티션을 오프로딩하는 단계(810),
상기 테이블 마스터에 의해, 상기 병합된 파티션을 상기 복수의 테이블 서버 중에서 선택된 테이블 서버에 할당하는 단계(814), 및
상기 선택된 테이블 서버에서 상기 병합된 파티션을 로드하여 제공하는 단계(816)
를 포함하는 컴퓨터 저장 매체. - 제7항에 있어서,
상기 적어도 2개의 파티션은 동일한 테이블 서버에 저장되는
컴퓨터 저장 매체. - 제7항에 있어서,
상기 선택된 테이블 서버는 상기 적어도 2개의 파티션 중 적어도 하나가 상기 병합된 파티션으로 병합되기 전에 존재했던 테이블 서버를 포함하는
컴퓨터 저장 매체. - 제7항에 있어서,
상기 방법은 상기 적어도 2개의 파티션이 상기 병합된 파티션으로 병합되는 것에 기초하여 파티션 맵을 업데이트하는 단계를 더 포함하고,
상기 파티션 맵은 상기 복수의 파티션과 상기 복수의 파티션을 제공하는 복수의 테이블 서버 간의 매핑을 저장하는
컴퓨터 저장 매체. - 제7항에 있어서,
상기 방법은 병합 준비 메시지를 상기 테이블 상기 마스터로부터 상기 적어도 2개의 파티션을 제공하는 적어도 하나의 테이블 서버로 송신하는 단계를 더 포함하고,
상기 병합 준비 메시지는, 상기 병합된 파티션에 대한 로드 시간을 줄이기 위해, 적어도 하나의 테이블 서버로 하여금 병합 이전에 적어도 2개의 파티션을 압축(compact)하게 하는
컴퓨터 저장 매체. - 하나 이상의 테이블로 표현된 구조적 저장 시스템을 관리하는 방법을 수행하는 컴퓨터 사용가능 명령어를 저장하는 하나 이상의 컴퓨터 저장 매체로서,
각각의 테이블은 복수의 행을 포함하며, 각각의 행은 상기 구조적 저장 시스템에 의해 저장되는 데이터 엔터티를 나타내고 상기 행을 식별해 주는 하나 이상의 키를 포함하며, 상기 복수의 행이 복수의 파티션 사이에 분배되며, 각각의 파티션은 상기 테이블 내의 상기 복수의 행으로부터의 행들의 인접 범위를 포함하고, 상기 복수의 파티션은 복수의 테이블 서버에 저장되며, 테이블 마스터가 복수의 상기 테이블 서버에의 파티션 할당을 제어하고,
상기 방법은, 상기 테이블의 파티션을 적어도 2개의 자식 파티션으로 분할하기 위한 것으로서,
상기 복수의 테이블 서버 상의 상기 복수의 파티션에 대한 로드 정보를 추적하는 단계(702),
상기 테이블 마스터에 의해, 상기 로드 정보에 기초하여 분할하기 위한 상기 파티션을 식별하는 단계(704) - 상기 파티션에 대한 상기 로드 정보는 상기 파티션의 상이한 부분에 대해 상이한 로드를 식별함 -,
상기 테이블 마스터에서, 상기 파티션을 분할하기 위한 분할비를 결정하는 단계(706) - 상기 분할비는 로드 정보에 기초하여 지정되고, 상기 파티션의 제1 부분이 로드의 제1 분량을 포함하고 상기 파티션의 제2 부분이 로드의 제2 분량을 포함하는 상기 파티션 내의 지점을 나타냄 -,
상기 테이블 마스터로부터 상기 테이블 서버로, 상기 분할비에 대응하는 파티션 내에서의 실제 위치를 식별해 주는 키 정보에 대한 요청을 송신하는 단계(708),
상기 테이블 서버에 의해, 상기 분할비에 대응하는 상기 파티션 내에서의 실제 위치를 식별해 주는 상기 키 정보를 결정하는 단계(710),
상기 키 정보를 상기 테이블 서버로부터 상기 테이블 마스터로 전달하는 단계(712),
상기 테이블 마스터에서, 각각의 자식 파티션들에 대한 메타데이터 스트림을 구축하는 단계(714),
상기 테이블 마스터로부터 상기 테이블 서버로 분할 요청을 송신하는 단계(716),
상기 테이블 서버에서, 상기 파티션으로부터 자식 파티션들을 작성하는 단계(718),
상기 테이블 서버에서 상기 파티션을 제공하는 것을 중단하는 단계(720),
상기 테이블 서버에서 상기 자식 파티션을 로드하여 제공하는 단계(722),
상기 테이블 서버로부터 상기 테이블 마스터로 분할 완료 통지를 송신하는 단계(724), 및
상기 파티션이 상기 자식 파티션들로 분할되는 것에 기초하여 파티션 맵을 업데이트하는 단계(726) - 상기 파티션 맵은 복수의 파티션과 복수의 파티션을 제공하는 복수의 테이블 서버 간의 매핑을 저장함 -
를 포함하는 컴퓨터 저장 매체. - 제12항에 있어서,
상기 방법은 상기 자식 파티션들 중 적어도 하나의 자식 파티션을 제2 테이블 서버에 할당하는 단계, 및 상기 자식 파티션들 중 적어도 하나의 자식 파티션이 상기 제2 테이블 서버에 위치되어 있음을 나타내기 위해 상기 파티션 맵을 업데이트하는 단계를 더 포함하는
컴퓨터 저장 매체. - 제12항에 있어서,
상기 파티션을 제공하는 것을 중단하는 단계는 파티션의 검사점을 만듦으로써 파티션 리로드(partition reload) 동안 재생되어야 할 로그의 양을 줄이는 단계를 포함하고,
상기 파티션의 검사점을 만드는 것은 원자적으로, 새 로그 스트림을 작성하고, 상기 검사점 이후의 익스텐트를 이전 로그 스트림으로부터 새 로그 스트림으로 하드 링크시키고, 상기 이전 로그 스트림을 삭제하고, 상기 새 로그 스트림을 상기 이전 로그 스트림의 이름으로 이름 변경함으로써, 검사 동안에 로그 스트림을 효율적으로 잘라내는 것을 포함하는
컴퓨터 저장 매체. - 제12항에 있어서,
상기 파티션으로부터 자식 파티션들을 작성하는 단계는 고비용의 데이터 복사 없이 원자적으로 상기 파티션의 스트림들로부터 익스텐트를 하드 링크시킴으로써 상기 자식 파티션들의 스트림들을 효율적으로 구축하는 단계를 포함하는
컴퓨터 저장 매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/258,050 US9996572B2 (en) | 2008-10-24 | 2008-10-24 | Partition management in a partitioned, scalable, and available structured storage |
US12/258,050 | 2008-10-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110082529A KR20110082529A (ko) | 2011-07-19 |
KR101597384B1 true KR101597384B1 (ko) | 2016-02-24 |
Family
ID=42118620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117009130A KR101597384B1 (ko) | 2008-10-24 | 2009-10-23 | 분할되고 확장가능하며 사용가능한 구조적 저장소에서의 파티션 관리 |
Country Status (15)
Country | Link |
---|---|
US (1) | US9996572B2 (ko) |
EP (1) | EP2342634B1 (ko) |
JP (1) | JP5607059B2 (ko) |
KR (1) | KR101597384B1 (ko) |
CN (1) | CN102197372B (ko) |
AU (1) | AU2009308176B2 (ko) |
BR (1) | BRPI0914183A2 (ko) |
CA (1) | CA2736586A1 (ko) |
IL (1) | IL211627A (ko) |
MX (1) | MX2011003883A (ko) |
MY (1) | MY165932A (ko) |
RU (1) | RU2011116167A (ko) |
TW (1) | TW201022953A (ko) |
WO (1) | WO2010048595A2 (ko) |
ZA (1) | ZA201101659B (ko) |
Families Citing this family (200)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8028090B2 (en) | 2008-11-17 | 2011-09-27 | Amazon Technologies, Inc. | Request routing utilizing client location information |
US7991910B2 (en) | 2008-11-17 | 2011-08-02 | Amazon Technologies, Inc. | Updating routing information based on client location |
US8606996B2 (en) | 2008-03-31 | 2013-12-10 | Amazon Technologies, Inc. | Cache optimization |
US8601090B1 (en) | 2008-03-31 | 2013-12-03 | Amazon Technologies, Inc. | Network resource identification |
US7970820B1 (en) | 2008-03-31 | 2011-06-28 | Amazon Technologies, Inc. | Locality based content distribution |
US8321568B2 (en) | 2008-03-31 | 2012-11-27 | Amazon Technologies, Inc. | Content management |
US8447831B1 (en) | 2008-03-31 | 2013-05-21 | Amazon Technologies, Inc. | Incentive driven content delivery |
US7962597B2 (en) | 2008-03-31 | 2011-06-14 | Amazon Technologies, Inc. | Request routing based on class |
US9407681B1 (en) | 2010-09-28 | 2016-08-02 | Amazon Technologies, Inc. | Latency measurement in resource requests |
US9996572B2 (en) | 2008-10-24 | 2018-06-12 | Microsoft Technology Licensing, Llc | Partition management in a partitioned, scalable, and available structured storage |
US8886796B2 (en) * | 2008-10-24 | 2014-11-11 | Microsoft Corporation | Load balancing when replicating account data |
KR101207510B1 (ko) * | 2008-12-18 | 2012-12-03 | 한국전자통신연구원 | 클러스터 데이터 관리시스템 및 클러스터 데이터 관리 시스템에서 공유 재수행 로그를 이용한 데이터 재구축 방법 |
US8688837B1 (en) | 2009-03-27 | 2014-04-01 | Amazon Technologies, Inc. | Dynamically translating resource identifiers for request routing using popularity information |
US8412823B1 (en) | 2009-03-27 | 2013-04-02 | Amazon Technologies, Inc. | Managing tracking information entries in resource cache components |
US10127295B2 (en) * | 2009-06-05 | 2018-11-13 | Microsoft Technolofy Licensing, Llc | Geographic co-location service for cloud computing |
US8782236B1 (en) | 2009-06-16 | 2014-07-15 | Amazon Technologies, Inc. | Managing resources using resource expiration data |
US8224787B2 (en) * | 2009-07-23 | 2012-07-17 | Applied Minds, Llc | Redundant, multi-dimensional data partitioning: methods, program product and system |
US8397073B1 (en) | 2009-09-04 | 2013-03-12 | Amazon Technologies, Inc. | Managing secure content in a content delivery network |
US8433771B1 (en) * | 2009-10-02 | 2013-04-30 | Amazon Technologies, Inc. | Distribution network with forward resource propagation |
US9177004B2 (en) * | 2009-11-25 | 2015-11-03 | Bmc Software, Inc. | Balancing data across partitions of a table space during load processing |
US8156304B2 (en) * | 2009-12-04 | 2012-04-10 | Oracle International Corporation | Dynamic data storage repartitioning |
US9495338B1 (en) | 2010-01-28 | 2016-11-15 | Amazon Technologies, Inc. | Content distribution network |
US8484243B2 (en) * | 2010-05-05 | 2013-07-09 | Cisco Technology, Inc. | Order-independent stream query processing |
US9323775B2 (en) | 2010-06-19 | 2016-04-26 | Mapr Technologies, Inc. | Map-reduce ready distributed file system |
US11726955B2 (en) | 2010-06-19 | 2023-08-15 | Hewlett Packard Enterprise Development Lp | Methods and apparatus for efficient container location database snapshot operation |
JP5661355B2 (ja) * | 2010-07-09 | 2015-01-28 | 株式会社野村総合研究所 | 分散キャッシュシステム |
US20120029720A1 (en) * | 2010-07-29 | 2012-02-02 | Spirae, Inc. | Dynamic distributed power grid control system |
US9712484B1 (en) | 2010-09-28 | 2017-07-18 | Amazon Technologies, Inc. | Managing request routing information utilizing client identifiers |
US9003035B1 (en) | 2010-09-28 | 2015-04-07 | Amazon Technologies, Inc. | Point of presence management in request routing |
US8468247B1 (en) | 2010-09-28 | 2013-06-18 | Amazon Technologies, Inc. | Point of presence management in request routing |
US10958501B1 (en) | 2010-09-28 | 2021-03-23 | Amazon Technologies, Inc. | Request routing information based on client IP groupings |
US8805784B2 (en) * | 2010-10-28 | 2014-08-12 | Microsoft Corporation | Partitioning online databases |
US8452874B2 (en) | 2010-11-22 | 2013-05-28 | Amazon Technologies, Inc. | Request routing processing |
US8577885B2 (en) | 2010-12-09 | 2013-11-05 | International Business Machines Corporation | Partitioning management of system resources across multiple users |
US8996463B2 (en) | 2012-07-26 | 2015-03-31 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10977277B2 (en) | 2010-12-23 | 2021-04-13 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US10713280B2 (en) | 2010-12-23 | 2020-07-14 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10262050B2 (en) | 2015-09-25 | 2019-04-16 | Mongodb, Inc. | Distributed database systems and methods with pluggable storage engines |
US10740353B2 (en) | 2010-12-23 | 2020-08-11 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US11544288B2 (en) | 2010-12-23 | 2023-01-03 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US9881034B2 (en) | 2015-12-15 | 2018-01-30 | Mongodb, Inc. | Systems and methods for automating management of distributed databases |
US10346430B2 (en) | 2010-12-23 | 2019-07-09 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
US10614098B2 (en) | 2010-12-23 | 2020-04-07 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
US8572031B2 (en) | 2010-12-23 | 2013-10-29 | Mongodb, Inc. | Method and apparatus for maintaining replica sets |
US9740762B2 (en) | 2011-04-01 | 2017-08-22 | Mongodb, Inc. | System and method for optimizing data migration in a partitioned database |
US10997211B2 (en) | 2010-12-23 | 2021-05-04 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US11615115B2 (en) | 2010-12-23 | 2023-03-28 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10366100B2 (en) | 2012-07-26 | 2019-07-30 | Mongodb, Inc. | Aggregation framework system architecture and method |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
US10467042B1 (en) | 2011-04-27 | 2019-11-05 | Amazon Technologies, Inc. | Optimized deployment based upon customer locality |
US9251021B2 (en) * | 2011-05-23 | 2016-02-02 | Bradley Gene Calder | Asynchronous replication in a distributed storage environment |
US9519555B2 (en) | 2011-05-23 | 2016-12-13 | Microsoft Technology Licensing, Llc | Synchronous replication in a distributed storage environment |
US8572091B1 (en) * | 2011-06-27 | 2013-10-29 | Amazon Technologies, Inc. | System and method for partitioning and indexing table data using a composite primary key |
US8595267B2 (en) * | 2011-06-27 | 2013-11-26 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
US9052831B1 (en) * | 2011-06-30 | 2015-06-09 | Amazon Technologies, Inc. | System and method for performing live partitioning in a data store |
US8676951B2 (en) * | 2011-07-27 | 2014-03-18 | Hitachi, Ltd. | Traffic reduction method for distributed key-value store |
US8645316B2 (en) | 2011-08-16 | 2014-02-04 | International Business Machines Corporation | Storing records in databases in a randomized manner to effectively utilize database servers |
KR101301607B1 (ko) * | 2011-10-31 | 2013-09-10 | 삼성에스디에스 주식회사 | 분산 데이터 저장소를 위한 데이터 파티셔닝 장치 및 방법 |
US9575990B2 (en) * | 2011-11-07 | 2017-02-21 | Sap Se | Partitioning data within a distributed data storage system using virtual file links |
US10372688B2 (en) | 2011-11-07 | 2019-08-06 | Sap Se | Moving data within a distributed data storage system using virtual file links |
US8880565B2 (en) * | 2011-12-23 | 2014-11-04 | Sap Se | Table creation for partitioned tables |
US9753999B2 (en) * | 2012-01-06 | 2017-09-05 | Citus Data Bilgi Islemieri Ticaret A.S. | Distributed database with mappings between append-only files and repartitioned files |
US20130311421A1 (en) * | 2012-01-06 | 2013-11-21 | Citus Data Bilgi Islemleri Ticaret A.S. | Logical Representation of Distributed Database Table Updates in an Append-Only Log File |
US10860563B2 (en) | 2012-01-06 | 2020-12-08 | Microsoft Technology Licensing, Llc | Distributed database with modular blocks and associated log files |
US20130311488A1 (en) * | 2012-01-06 | 2013-11-21 | Citus Data Bilgi Islemleri Ticaret A.S. | Time Stamp Bounded Addition of Data to an Append-Only Distributed Database Table |
US9852010B2 (en) | 2012-02-03 | 2017-12-26 | Microsoft Technology Licensing, Llc | Decoupling partitioning for scalability |
US10860384B2 (en) | 2012-02-03 | 2020-12-08 | Microsoft Technology Licensing, Llc | Managing partitions in a scalable environment |
US10623408B1 (en) | 2012-04-02 | 2020-04-14 | Amazon Technologies, Inc. | Context sensitive object management |
US9154551B1 (en) | 2012-06-11 | 2015-10-06 | Amazon Technologies, Inc. | Processing DNS queries to identify pre-processing information |
US11544284B2 (en) | 2012-07-26 | 2023-01-03 | Mongodb, Inc. | Aggregation framework system architecture and method |
US11403317B2 (en) | 2012-07-26 | 2022-08-02 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10872095B2 (en) | 2012-07-26 | 2020-12-22 | Mongodb, Inc. | Aggregation framework system architecture and method |
US9501483B2 (en) * | 2012-09-18 | 2016-11-22 | Mapr Technologies, Inc. | Table format for map reduce system |
US9323577B2 (en) | 2012-09-20 | 2016-04-26 | Amazon Technologies, Inc. | Automated profiling of resource usage |
US9507837B2 (en) * | 2012-10-01 | 2016-11-29 | Oracle International Corporation | Reference data segmentation from single to multiple tables |
US9507750B2 (en) | 2012-10-12 | 2016-11-29 | A9.Com, Inc. | Dynamic search partitioning |
CN104823169B (zh) * | 2012-10-12 | 2018-12-21 | A9.com股份有限公司 | 用于网络中的可搜索数据的索引配置 |
US9374276B2 (en) | 2012-11-01 | 2016-06-21 | Microsoft Technology Licensing, Llc | CDN traffic management in the cloud |
US9537973B2 (en) * | 2012-11-01 | 2017-01-03 | Microsoft Technology Licensing, Llc | CDN load balancing in the cloud |
WO2014082198A1 (en) * | 2012-11-27 | 2014-06-05 | Nokia Siemens Networks Oy | Multiple fields parallel query method and corresponding storage organization |
US10205698B1 (en) | 2012-12-19 | 2019-02-12 | Amazon Technologies, Inc. | Source-dependent address resolution |
WO2014101070A1 (zh) * | 2012-12-27 | 2014-07-03 | 华为技术有限公司 | 一种分区扩展方法及装置 |
US9485309B2 (en) * | 2013-03-14 | 2016-11-01 | Red Hat, Inc. | Optimal fair distribution among buckets of different capacities |
US9514007B2 (en) * | 2013-03-15 | 2016-12-06 | Amazon Technologies, Inc. | Database system with database engine and separate distributed storage service |
US11030055B2 (en) * | 2013-03-15 | 2021-06-08 | Amazon Technologies, Inc. | Fast crash recovery for distributed database systems |
US9471657B1 (en) | 2013-05-20 | 2016-10-18 | Amazon Technologies, Inc. | Range query capacity allocation |
US9330158B1 (en) * | 2013-05-20 | 2016-05-03 | Amazon Technologies, Inc. | Range query capacity allocation |
US9294391B1 (en) | 2013-06-04 | 2016-03-22 | Amazon Technologies, Inc. | Managing network computing components utilizing request routing |
CN104376025B (zh) * | 2013-08-16 | 2017-10-10 | 华为技术有限公司 | 分布式数据库的数据存储方法和装置 |
US9720989B2 (en) | 2013-11-11 | 2017-08-01 | Amazon Technologies, Inc. | Dynamic partitioning techniques for data streams |
US9794135B2 (en) | 2013-11-11 | 2017-10-17 | Amazon Technologies, Inc. | Managed service for acquisition, storage and consumption of large-scale data streams |
US10635644B2 (en) | 2013-11-11 | 2020-04-28 | Amazon Technologies, Inc. | Partition-based data stream processing framework |
US9858322B2 (en) | 2013-11-11 | 2018-01-02 | Amazon Technologies, Inc. | Data stream ingestion and persistence techniques |
US9639589B1 (en) | 2013-12-20 | 2017-05-02 | Amazon Technologies, Inc. | Chained replication techniques for large-scale data streams |
US10042910B2 (en) | 2014-02-24 | 2018-08-07 | Sap Se | Database table re-partitioning using two active partition specifications |
US9740724B2 (en) | 2014-04-29 | 2017-08-22 | International Business Machines Corporation | Data partitioning for high-efficiency data retrieval |
US9779121B2 (en) * | 2014-06-27 | 2017-10-03 | Sap Se | Transparent access to multi-temperature data |
US9286001B2 (en) | 2014-06-30 | 2016-03-15 | Microsoft Licensing Technology Llc | Effective range partition splitting in scalable storage |
US9800575B1 (en) * | 2014-09-24 | 2017-10-24 | Ebay Inc. | Assigning storage responsibility in a distributed data storage system with replication |
US11095715B2 (en) | 2014-09-24 | 2021-08-17 | Ebay Inc. | Assigning storage responsibility in a distributed data storage system with replication |
CN107357522B (zh) * | 2014-11-05 | 2019-11-15 | 华为技术有限公司 | 数据处理方法和装置 |
US10356150B1 (en) * | 2014-12-15 | 2019-07-16 | Amazon Technologies, Inc. | Automated repartitioning of streaming data |
US10097448B1 (en) | 2014-12-18 | 2018-10-09 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US10169395B2 (en) * | 2015-02-12 | 2019-01-01 | International Business Machines Corporation | Database identifier generation in transaction processing systems |
US10225326B1 (en) | 2015-03-23 | 2019-03-05 | Amazon Technologies, Inc. | Point of presence based data uploading |
US9819567B1 (en) | 2015-03-30 | 2017-11-14 | Amazon Technologies, Inc. | Traffic surge management for points of presence |
US9832141B1 (en) | 2015-05-13 | 2017-11-28 | Amazon Technologies, Inc. | Routing based request correlation |
US10713275B2 (en) | 2015-07-02 | 2020-07-14 | Mongodb, Inc. | System and method for augmenting consensus election in a distributed database |
US10650024B2 (en) | 2015-07-30 | 2020-05-12 | Google Llc | System and method of replicating data in a distributed system |
US10394822B2 (en) | 2015-09-25 | 2019-08-27 | Mongodb, Inc. | Systems and methods for data conversion and comparison |
US10423626B2 (en) | 2015-09-25 | 2019-09-24 | Mongodb, Inc. | Systems and methods for data conversion and comparison |
US10673623B2 (en) | 2015-09-25 | 2020-06-02 | Mongodb, Inc. | Systems and methods for hierarchical key management in encrypted distributed databases |
US10846411B2 (en) | 2015-09-25 | 2020-11-24 | Mongodb, Inc. | Distributed database systems and methods with encrypted storage engines |
US10270878B1 (en) | 2015-11-10 | 2019-04-23 | Amazon Technologies, Inc. | Routing for origin-facing points of presence |
US10348639B2 (en) | 2015-12-18 | 2019-07-09 | Amazon Technologies, Inc. | Use of virtual endpoints to improve data transmission rates |
US10108632B2 (en) * | 2016-05-02 | 2018-10-23 | Google Llc | Splitting and moving ranges in a distributed system |
US10671496B2 (en) | 2016-05-31 | 2020-06-02 | Mongodb, Inc. | Method and apparatus for reading and writing committed data |
US10075551B1 (en) | 2016-06-06 | 2018-09-11 | Amazon Technologies, Inc. | Request management for hierarchical cache |
US10621050B2 (en) | 2016-06-27 | 2020-04-14 | Mongodb, Inc. | Method and apparatus for restoring data from snapshots |
US10110694B1 (en) | 2016-06-29 | 2018-10-23 | Amazon Technologies, Inc. | Adaptive transfer rate for retrieving content from a server |
US9992086B1 (en) | 2016-08-23 | 2018-06-05 | Amazon Technologies, Inc. | External health checking of virtual private cloud network environments |
US10033691B1 (en) | 2016-08-24 | 2018-07-24 | Amazon Technologies, Inc. | Adaptive resolution of domain name requests in virtual private cloud network environments |
US11599541B2 (en) | 2016-09-26 | 2023-03-07 | Splunk Inc. | Determining records generated by a processing task of a query |
US11604795B2 (en) | 2016-09-26 | 2023-03-14 | Splunk Inc. | Distributing partial results from an external data system between worker nodes |
US11314753B2 (en) | 2016-09-26 | 2022-04-26 | Splunk Inc. | Execution of a query received from a data intake and query system |
US11250056B1 (en) | 2016-09-26 | 2022-02-15 | Splunk Inc. | Updating a location marker of an ingestion buffer based on storing buckets in a shared storage system |
US11593377B2 (en) | 2016-09-26 | 2023-02-28 | Splunk Inc. | Assigning processing tasks in a data intake and query system |
US11461334B2 (en) | 2016-09-26 | 2022-10-04 | Splunk Inc. | Data conditioning for dataset destination |
US11580107B2 (en) | 2016-09-26 | 2023-02-14 | Splunk Inc. | Bucket data distribution for exporting data to worker nodes |
US11163758B2 (en) | 2016-09-26 | 2021-11-02 | Splunk Inc. | External dataset capability compensation |
US10353965B2 (en) | 2016-09-26 | 2019-07-16 | Splunk Inc. | Data fabric service system architecture |
US11586627B2 (en) | 2016-09-26 | 2023-02-21 | Splunk Inc. | Partitioning and reducing records at ingest of a worker node |
US11281706B2 (en) | 2016-09-26 | 2022-03-22 | Splunk Inc. | Multi-layer partition allocation for query execution |
US10956415B2 (en) | 2016-09-26 | 2021-03-23 | Splunk Inc. | Generating a subquery for an external data system using a configuration file |
US11860940B1 (en) | 2016-09-26 | 2024-01-02 | Splunk Inc. | Identifying buckets for query execution using a catalog of buckets |
US11550847B1 (en) | 2016-09-26 | 2023-01-10 | Splunk Inc. | Hashing bucket identifiers to identify search nodes for efficient query execution |
US11269939B1 (en) | 2016-09-26 | 2022-03-08 | Splunk Inc. | Iterative message-based data processing including streaming analytics |
US11615104B2 (en) | 2016-09-26 | 2023-03-28 | Splunk Inc. | Subquery generation based on a data ingest estimate of an external data system |
US11567993B1 (en) | 2016-09-26 | 2023-01-31 | Splunk Inc. | Copying buckets from a remote shared storage system to memory associated with a search node for query execution |
US11874691B1 (en) | 2016-09-26 | 2024-01-16 | Splunk Inc. | Managing efficient query execution including mapping of buckets to search nodes |
US11222066B1 (en) | 2016-09-26 | 2022-01-11 | Splunk Inc. | Processing data using containerized state-free indexing nodes in a containerized scalable environment |
US20180089324A1 (en) | 2016-09-26 | 2018-03-29 | Splunk Inc. | Dynamic resource allocation for real-time search |
US11243963B2 (en) | 2016-09-26 | 2022-02-08 | Splunk Inc. | Distributing partial results to worker nodes from an external data system |
US11562023B1 (en) * | 2016-09-26 | 2023-01-24 | Splunk Inc. | Merging buckets in a data intake and query system |
US11294941B1 (en) | 2016-09-26 | 2022-04-05 | Splunk Inc. | Message-based data ingestion to a data intake and query system |
US12013895B2 (en) | 2016-09-26 | 2024-06-18 | Splunk Inc. | Processing data using containerized nodes in a containerized scalable environment |
US11126632B2 (en) | 2016-09-26 | 2021-09-21 | Splunk Inc. | Subquery generation based on search configuration data from an external data system |
US11321321B2 (en) | 2016-09-26 | 2022-05-03 | Splunk Inc. | Record expansion and reduction based on a processing task in a data intake and query system |
US11663227B2 (en) | 2016-09-26 | 2023-05-30 | Splunk Inc. | Generating a subquery for a distinct data intake and query system |
US11232100B2 (en) | 2016-09-26 | 2022-01-25 | Splunk Inc. | Resource allocation for multiple datasets |
US11106734B1 (en) | 2016-09-26 | 2021-08-31 | Splunk Inc. | Query execution using containerized state-free search nodes in a containerized scalable environment |
US11442935B2 (en) | 2016-09-26 | 2022-09-13 | Splunk Inc. | Determining a record generation estimate of a processing task |
US11620336B1 (en) | 2016-09-26 | 2023-04-04 | Splunk Inc. | Managing and storing buckets to a remote shared storage system based on a collective bucket size |
US10469513B2 (en) | 2016-10-05 | 2019-11-05 | Amazon Technologies, Inc. | Encrypted network addresses |
US10831549B1 (en) | 2016-12-27 | 2020-11-10 | Amazon Technologies, Inc. | Multi-region request-driven code execution system |
US10372499B1 (en) | 2016-12-27 | 2019-08-06 | Amazon Technologies, Inc. | Efficient region selection system for executing request-driven code |
US10938884B1 (en) | 2017-01-30 | 2021-03-02 | Amazon Technologies, Inc. | Origin server cloaking using virtual private cloud network environments |
US10503613B1 (en) | 2017-04-21 | 2019-12-10 | Amazon Technologies, Inc. | Efficient serving of resources during server unavailability |
CN107329692B (zh) * | 2017-06-07 | 2020-02-28 | 杭州宏杉科技股份有限公司 | 一种数据重删的方法及存储设备 |
US11075987B1 (en) | 2017-06-12 | 2021-07-27 | Amazon Technologies, Inc. | Load estimating content delivery network |
US10447648B2 (en) | 2017-06-19 | 2019-10-15 | Amazon Technologies, Inc. | Assignment of a POP to a DNS resolver based on volume of communications over a link between client devices and the POP |
US10866868B2 (en) | 2017-06-20 | 2020-12-15 | Mongodb, Inc. | Systems and methods for optimization of database operations |
US10248562B2 (en) | 2017-06-30 | 2019-04-02 | Microsoft Technology Licensing, Llc | Cost-based garbage collection scheduling in a distributed storage environment |
US10241716B2 (en) | 2017-06-30 | 2019-03-26 | Microsoft Technology Licensing, Llc | Global occupancy aggregator for global garbage collection scheduling |
US11921672B2 (en) | 2017-07-31 | 2024-03-05 | Splunk Inc. | Query execution at a remote heterogeneous data store of a data fabric service |
US11989194B2 (en) | 2017-07-31 | 2024-05-21 | Splunk Inc. | Addressing memory limits for partition tracking among worker nodes |
US10896182B2 (en) | 2017-09-25 | 2021-01-19 | Splunk Inc. | Multi-partitioning determination for combination operations |
US10742593B1 (en) | 2017-09-25 | 2020-08-11 | Amazon Technologies, Inc. | Hybrid content request routing system |
CN107943421B (zh) * | 2017-11-30 | 2021-04-20 | 成都华为技术有限公司 | 一种基于分布式存储***的分区划分方法及装置 |
CN108108434A (zh) * | 2017-12-19 | 2018-06-01 | 福建中金在线信息科技有限公司 | 一种管理数据库的方法及装置 |
US10592578B1 (en) | 2018-03-07 | 2020-03-17 | Amazon Technologies, Inc. | Predictive content push-enabled content delivery network |
US11334543B1 (en) | 2018-04-30 | 2022-05-17 | Splunk Inc. | Scalable bucket merging for a data intake and query system |
US11030185B2 (en) | 2018-05-07 | 2021-06-08 | Microsoft Technology Licensing, Llc | Schema-agnostic indexing of distributed databases |
CN109218385B (zh) * | 2018-06-28 | 2021-08-03 | 西安华为技术有限公司 | 处理数据的方法和装置 |
US10956246B1 (en) | 2018-07-16 | 2021-03-23 | Amazon Technologies, Inc. | Isolated read channel management interfaces at streaming data service |
US10768830B1 (en) | 2018-07-16 | 2020-09-08 | Amazon Technologies, Inc. | Streaming data service with isolated read channels |
US10855754B1 (en) | 2018-07-16 | 2020-12-01 | Amazon Technologies, Inc. | Isolated read channel categories at streaming data service |
US10798140B1 (en) | 2018-07-16 | 2020-10-06 | Amazon Technologies, Inc. | Stream data record reads using push-mode persistent connections |
US11075984B1 (en) | 2018-07-16 | 2021-07-27 | Amazon Technologies, Inc. | Workload management at streaming data service supporting persistent connections for reads |
US11070600B1 (en) | 2018-07-16 | 2021-07-20 | Amazon Technologies, Inc. | Optimization techniques to support lagging readers at streaming data service |
US10884820B1 (en) * | 2018-08-31 | 2021-01-05 | Veritas Technologies Llc | Intelligent and automatic replication load score based load balancing and resiliency of replication appliances |
CN111104057B (zh) * | 2018-10-25 | 2022-03-29 | 华为技术有限公司 | 存储***中的节点扩容方法和存储*** |
CN111221857B (zh) * | 2018-11-08 | 2023-04-18 | 华为云计算技术有限公司 | 从分布式***中读数据记录的方法和装置 |
US10862852B1 (en) | 2018-11-16 | 2020-12-08 | Amazon Technologies, Inc. | Resolution of domain name requests in heterogeneous network environments |
US11086840B2 (en) | 2018-12-07 | 2021-08-10 | Snowflake Inc. | Transactional streaming of change tracking data |
US11025747B1 (en) | 2018-12-12 | 2021-06-01 | Amazon Technologies, Inc. | Content request pattern-based routing system |
US10979496B2 (en) * | 2019-04-08 | 2021-04-13 | Microsoft Technology Licensing, Llc | IoT partition management and load balancing |
WO2020220216A1 (en) | 2019-04-29 | 2020-11-05 | Splunk Inc. | Search time estimate in data intake and query system |
US11715051B1 (en) | 2019-04-30 | 2023-08-01 | Splunk Inc. | Service provider instance recommendations using machine-learned classifications and reconciliation |
CN110147944B (zh) * | 2019-04-30 | 2023-08-01 | 创新先进技术有限公司 | 排名方法及装置 |
US11494380B2 (en) | 2019-10-18 | 2022-11-08 | Splunk Inc. | Management of distributed computing framework components in a data fabric service system |
US11481391B1 (en) * | 2019-11-25 | 2022-10-25 | Amazon Technologies, Inc. | Query language operations using a scalable key-item data store |
CN111126589B (zh) * | 2019-12-31 | 2022-05-20 | 昆仑芯(北京)科技有限公司 | 神经网络数据处理装置、方法和电子设备 |
US11922222B1 (en) | 2020-01-30 | 2024-03-05 | Splunk Inc. | Generating a modified component for a data intake and query system using an isolated execution environment image |
US11599516B1 (en) * | 2020-06-24 | 2023-03-07 | Amazon Technologies, Inc. | Scalable metadata index for a time-series database |
US11704313B1 (en) | 2020-10-19 | 2023-07-18 | Splunk Inc. | Parallel branch operation using intermediary nodes |
US11403023B2 (en) * | 2020-10-20 | 2022-08-02 | Micron Technology, Inc. | Method of organizing a programmable atomic unit instruction memory |
US11308066B1 (en) | 2021-02-24 | 2022-04-19 | International Business Machines Corporation | Optimized database partitioning |
US20220318227A1 (en) * | 2021-03-30 | 2022-10-06 | Dropbox, Inc. | Content management system for a distributed key-value database |
CN113297432B (zh) * | 2021-06-01 | 2023-11-07 | 阿里巴巴新加坡控股有限公司 | 用于分区拆分与合并的方法、处理器可读介质和*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060277221A1 (en) | 2005-06-01 | 2006-12-07 | Green Hills Software, Inc. | Transactional file system with client partitioning |
WO2007079303A2 (en) | 2005-12-29 | 2007-07-12 | Amazon Technologies, Inc. | Method and apparatus for a distributed file storage and indexing service |
Family Cites Families (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5313629A (en) * | 1989-10-23 | 1994-05-17 | International Business Machines Corporation | Unit of work for preserving data integrity of a data-base by creating in memory a copy of all objects which are to be processed together |
US5341308A (en) * | 1991-05-17 | 1994-08-23 | Altera Corporation | Methods for allocating circuit elements between circuit groups |
CA2159269C (en) | 1995-09-27 | 2000-11-21 | Chaitanya K. Baru | Method and apparatus for achieving uniform data distribution in a parallel database system |
US5909681A (en) * | 1996-03-25 | 1999-06-01 | Torrent Systems, Inc. | Computer system and computerized method for partitioning data for parallel processing |
US5761500A (en) * | 1996-04-18 | 1998-06-02 | Mci Communications Corp. | Multi-site data communications network database partitioned by network elements |
US5765166A (en) * | 1996-04-23 | 1998-06-09 | Raytheon Company | Use of symmetric multiprocessors for multiple hypothesis tracking |
US5995904A (en) * | 1996-06-13 | 1999-11-30 | Exxon Production Research Company | Method for frequency domain seismic data processing on a massively parallel computer |
US6014656A (en) * | 1996-06-21 | 2000-01-11 | Oracle Corporation | Using overlapping partitions of data for query optimization |
US5946685A (en) * | 1997-06-27 | 1999-08-31 | Sun Microsystems, Inc. | Global mount mechanism used in maintaining a global name space utilizing a distributed locking mechanism |
US5933834A (en) * | 1997-10-16 | 1999-08-03 | International Business Machines Incorporated | System and method for re-striping a set of objects onto an exploded array of storage units in a computer system |
US5987468A (en) * | 1997-12-12 | 1999-11-16 | Hitachi America Ltd. | Structure and method for efficient parallel high-dimensional similarity join |
US6240413B1 (en) * | 1997-12-22 | 2001-05-29 | Sun Microsystems, Inc. | Fine-grained consistency mechanism for optimistic concurrency control using lock groups |
US6173293B1 (en) * | 1998-03-13 | 2001-01-09 | Digital Equipment Corporation | Scalable distributed file system |
US6697846B1 (en) * | 1998-03-20 | 2004-02-24 | Dataplow, Inc. | Shared file system |
US6230151B1 (en) * | 1998-04-16 | 2001-05-08 | International Business Machines Corporation | Parallel classification for data mining in a shared-memory multiprocessor system |
US6163856A (en) * | 1998-05-29 | 2000-12-19 | Sun Microsystems, Inc. | Method and apparatus for file system disaster recovery |
JP4286857B2 (ja) | 1998-11-18 | 2009-07-01 | 富士通株式会社 | ノード間共用ファイル制御方法 |
US6523078B1 (en) * | 1999-11-23 | 2003-02-18 | Steeleye Technology, Inc. | Distributed locking system and method for a clustered system having a distributed system for storing cluster configuration information |
US7281031B1 (en) * | 2000-03-22 | 2007-10-09 | Emc Corporation | Method and apparatus for providing additional resources for a host computer |
US6536024B1 (en) * | 2000-07-14 | 2003-03-18 | International Business Machines Corporation | Method for making integrated circuits having gated clock trees |
AU2002312508B2 (en) * | 2000-09-11 | 2008-01-17 | Agami Systems, Inc. | Storage system having partitioned migratable metadata |
US7082102B1 (en) * | 2000-10-19 | 2006-07-25 | Bellsouth Intellectual Property Corp. | Systems and methods for policy-enabled communications networks |
US7165096B2 (en) * | 2000-12-22 | 2007-01-16 | Data Plow, Inc. | Storage area network file system |
US8195760B2 (en) * | 2001-01-11 | 2012-06-05 | F5 Networks, Inc. | File aggregation in a switched file system |
US7788335B2 (en) * | 2001-01-11 | 2010-08-31 | F5 Networks, Inc. | Aggregated opportunistic lock and aggregated implicit lock management for locking aggregated files in a switched file system |
US7062490B2 (en) * | 2001-03-26 | 2006-06-13 | Microsoft Corporation | Serverless distributed file system |
US20070169336A1 (en) * | 2001-03-26 | 2007-07-26 | Daniel Luch | Electrically conductive patterns, antennas and methods of manufacture |
US20020184327A1 (en) * | 2001-05-11 | 2002-12-05 | Major Robert Drew | System and method for partitioning address space in a proxy cache server cluster |
US20030041097A1 (en) * | 2001-07-11 | 2003-02-27 | Alexander Tormasov | Distributed transactional network storage system |
US6687701B2 (en) * | 2001-09-25 | 2004-02-03 | Hewlett-Packard Development Company, L.P. | Namespace management in a distributed file system |
US7299463B2 (en) | 2001-09-28 | 2007-11-20 | Intel Corporation | Method for atomically updating a plurality of files |
US7035851B1 (en) * | 2001-12-07 | 2006-04-25 | Ncr Corp. | Reorganization of database records using partition merging |
US7406473B1 (en) * | 2002-01-30 | 2008-07-29 | Red Hat, Inc. | Distributed file system using disk servers, lock servers and file servers |
KR100453228B1 (ko) * | 2002-03-21 | 2004-10-15 | 한국전자통신연구원 | 공유 디스크 파일 시스템의 저널링 및 회복 방법 |
US8037181B2 (en) * | 2002-06-28 | 2011-10-11 | Microsoft Corporation | Re-partitioning directories |
US7299239B1 (en) * | 2002-12-02 | 2007-11-20 | Oracle International Corporation | Methods for partitioning an object |
US7146365B2 (en) * | 2003-01-27 | 2006-12-05 | International Business Machines Corporation | Method, system, and program for optimizing database query execution |
US7197490B1 (en) * | 2003-02-10 | 2007-03-27 | Network Appliance, Inc. | System and method for lazy-copy sub-volume load balancing in a network attached storage pool |
US7222119B1 (en) * | 2003-02-14 | 2007-05-22 | Google Inc. | Namespace locking scheme |
CA2422161C (en) * | 2003-03-14 | 2009-10-06 | Ibm Canada Limited - Ibm Canada Limitee | Decoupled object identification for object switching in database systems |
JP4378342B2 (ja) | 2003-05-17 | 2009-12-02 | マイクロソフト コーポレーション | マルチパートファイルに変換を適用する機構 |
US7243089B2 (en) * | 2003-11-25 | 2007-07-10 | International Business Machines Corporation | System, method, and service for federating and optionally migrating a local file system into a distributed file system while preserving local access to existing data |
US7349926B2 (en) * | 2004-03-30 | 2008-03-25 | International Business Machines Corporation | Atomic renaming and moving of data files while permitting lock-free look-ups |
US7428588B2 (en) * | 2004-04-08 | 2008-09-23 | International Business Machines Corporation | Method for distributing and geographically load balancing location aware communication device client-proxy applications |
US7319997B1 (en) * | 2004-06-07 | 2008-01-15 | Ncr Corp. | Dynamic partition enhanced joining |
US7685128B2 (en) * | 2004-06-10 | 2010-03-23 | International Business Machines Corporation | Remote access agent for caching in a SAN file system |
US20050289143A1 (en) * | 2004-06-23 | 2005-12-29 | Exanet Ltd. | Method for managing lock resources in a distributed storage system |
US7359923B2 (en) * | 2004-08-20 | 2008-04-15 | International Business Machines Corporation | Online incremental deferred integrity processing and maintenance of rolled in and rolled out data |
US7650336B1 (en) * | 2004-12-02 | 2010-01-19 | Adobe Systems Incorporated | File system atomic lock |
KR100695395B1 (ko) | 2004-12-07 | 2007-03-15 | 에스케이 텔레콤주식회사 | 다수개의 대용량 저장장치를 갖는 시스템에서의 컨텐츠관리 시스템 |
US8126870B2 (en) * | 2005-03-28 | 2012-02-28 | Sybase, Inc. | System and methodology for parallel query optimization using semantic-based partitioning |
US8661459B2 (en) | 2005-06-21 | 2014-02-25 | Microsoft Corporation | Content syndication platform |
US7870353B2 (en) | 2005-08-15 | 2011-01-11 | International Business Machines Corporation | Copying storage units and related metadata to storage |
US8166020B2 (en) * | 2005-12-22 | 2012-04-24 | Oracle International Corporation | Query generator |
US8392400B1 (en) * | 2005-12-29 | 2013-03-05 | Amazon Technologies, Inc. | Method and apparatus for stress management in a searchable data service |
US7650514B2 (en) * | 2005-12-30 | 2010-01-19 | Microsoft Corporation | Scalable leases |
US7392335B2 (en) * | 2006-02-10 | 2008-06-24 | Oracle International Corporation | Anticipatory changes to resources managed by locks |
US8117153B2 (en) * | 2006-03-28 | 2012-02-14 | Oracle America, Inc. | Systems and methods for a distributed cache |
KR20070111263A (ko) * | 2006-05-17 | 2007-11-21 | 삼성전자주식회사 | 재부팅 없이 영역 분할을 수행하는 장치 및 그 방법 |
US8255420B2 (en) * | 2006-05-23 | 2012-08-28 | Noryan Holding Corporation | Distributed storage |
US7512597B2 (en) * | 2006-05-31 | 2009-03-31 | International Business Machines Corporation | Relational database architecture with dynamic load capability |
US7624118B2 (en) * | 2006-07-26 | 2009-11-24 | Microsoft Corporation | Data processing over very large databases |
US7844851B2 (en) * | 2006-12-13 | 2010-11-30 | Oracle International Corporation | System and method for protecting against failure through geo-redundancy in a SIP server |
US7756889B2 (en) * | 2007-02-16 | 2010-07-13 | Oracle International Corporation | Partitioning of nested tables |
US7792822B2 (en) * | 2007-03-02 | 2010-09-07 | Microsoft Corporation | Systems and methods for modeling partitioned tables as logical indexes |
CN101276364B (zh) | 2007-03-30 | 2010-12-22 | 阿里巴巴集团控股有限公司 | 一种分布式计算数据合并方法、***及其装置 |
WO2008130983A1 (en) * | 2007-04-16 | 2008-10-30 | Attune Systems, Inc. | File aggregation in a switched file system |
CN101145158A (zh) * | 2007-06-06 | 2008-03-19 | 中兴通讯股份有限公司 | 一种数据库表分区的方法 |
US8812333B2 (en) * | 2007-09-17 | 2014-08-19 | Amadeus S.A.S. | Automated split ticketing |
US7870174B2 (en) * | 2007-10-11 | 2011-01-11 | Oracle International Corporation | Reference partitioned tables |
US8392482B1 (en) * | 2008-03-31 | 2013-03-05 | Amazon Technologies, Inc. | Versioning of database partition maps |
US8250130B2 (en) * | 2008-05-30 | 2012-08-21 | International Business Machines Corporation | Reducing bandwidth requirements for matrix multiplication |
US20100082551A1 (en) * | 2008-09-26 | 2010-04-01 | Microsoft Corporation | Data placement transparency for high availability and load balancing |
US9996572B2 (en) | 2008-10-24 | 2018-06-12 | Microsoft Technology Licensing, Llc | Partition management in a partitioned, scalable, and available structured storage |
US8850013B2 (en) * | 2010-05-10 | 2014-09-30 | Jaron Waldman | Server load balancing using geodata |
US20120011176A1 (en) * | 2010-07-07 | 2012-01-12 | Nexenta Systems, Inc. | Location independent scalable file and block storage |
-
2008
- 2008-10-24 US US12/258,050 patent/US9996572B2/en active Active
-
2009
- 2009-10-23 MX MX2011003883A patent/MX2011003883A/es active IP Right Grant
- 2009-10-23 AU AU2009308176A patent/AU2009308176B2/en active Active
- 2009-10-23 KR KR1020117009130A patent/KR101597384B1/ko active IP Right Grant
- 2009-10-23 BR BRPI0914183A patent/BRPI0914183A2/pt not_active IP Right Cessation
- 2009-10-23 WO PCT/US2009/061972 patent/WO2010048595A2/en active Application Filing
- 2009-10-23 MY MYPI2011001308A patent/MY165932A/en unknown
- 2009-10-23 EP EP09822822.4A patent/EP2342634B1/en active Active
- 2009-10-23 CN CN200980142662XA patent/CN102197372B/zh active Active
- 2009-10-23 CA CA2736586A patent/CA2736586A1/en not_active Abandoned
- 2009-10-23 TW TW098135992A patent/TW201022953A/zh unknown
- 2009-10-23 JP JP2011533395A patent/JP5607059B2/ja active Active
- 2009-10-23 RU RU2011116167/08A patent/RU2011116167A/ru not_active Application Discontinuation
-
2011
- 2011-03-03 ZA ZA2011/01659A patent/ZA201101659B/en unknown
- 2011-03-08 IL IL211627A patent/IL211627A/en active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060277221A1 (en) | 2005-06-01 | 2006-12-07 | Green Hills Software, Inc. | Transactional file system with client partitioning |
WO2007079303A2 (en) | 2005-12-29 | 2007-07-12 | Amazon Technologies, Inc. | Method and apparatus for a distributed file storage and indexing service |
Also Published As
Publication number | Publication date |
---|---|
CA2736586A1 (en) | 2010-04-29 |
RU2011116167A (ru) | 2012-10-27 |
CN102197372B (zh) | 2013-11-20 |
JP2012507086A (ja) | 2012-03-22 |
EP2342634A4 (en) | 2016-05-11 |
CN102197372A (zh) | 2011-09-21 |
MY165932A (en) | 2018-05-18 |
TW201022953A (en) | 2010-06-16 |
BRPI0914183A2 (pt) | 2015-10-20 |
US20100106934A1 (en) | 2010-04-29 |
IL211627A (en) | 2017-02-28 |
WO2010048595A3 (en) | 2010-07-29 |
KR20110082529A (ko) | 2011-07-19 |
AU2009308176B2 (en) | 2014-05-15 |
MX2011003883A (es) | 2011-05-03 |
US9996572B2 (en) | 2018-06-12 |
AU2009308176A1 (en) | 2010-04-29 |
EP2342634B1 (en) | 2019-12-11 |
IL211627A0 (en) | 2011-05-31 |
ZA201101659B (en) | 2012-05-30 |
WO2010048595A2 (en) | 2010-04-29 |
EP2342634A2 (en) | 2011-07-13 |
JP5607059B2 (ja) | 2014-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101597384B1 (ko) | 분할되고 확장가능하며 사용가능한 구조적 저장소에서의 파티션 관리 | |
US11153380B2 (en) | Continuous backup of data in a distributed data store | |
US11120152B2 (en) | Dynamic quorum membership changes | |
US9965203B1 (en) | Systems and methods for implementing an enterprise-class converged compute-network-storage appliance | |
US10229011B2 (en) | Log-structured distributed storage using a single log sequence number space | |
EP3433741B1 (en) | Hybrid garbage collection in a distrubuted storage system | |
JP5068081B2 (ja) | 管理装置および管理方法 | |
US7257690B1 (en) | Log-structured temporal shadow store | |
US9460008B1 (en) | Efficient garbage collection for a log-structured data store | |
US8818951B1 (en) | Distributed file system having separate data and metadata and providing a consistent snapshot thereof | |
CN111078121A (zh) | 一种分布式存储***数据迁移方法、***、及相关组件 | |
US11314459B2 (en) | Distributed metadata management in a distributed storage system | |
EP3788489B1 (en) | Data replication in a distributed storage system | |
KR100936238B1 (ko) | 파일 입출력과 복제의 균형적 수행을 위한 지연복제 시스템및 방법 | |
US11194501B2 (en) | Standby copies withstand cascading fails | |
US20210089228A1 (en) | Storage system with a partial replica | |
Alapati et al. | Cassandra Architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
N231 | Notification of change of applicant | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190116 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20200115 Year of fee payment: 5 |