KR20010066737A - A concurrency control method for high-dimensional index structures - Google Patents

A concurrency control method for high-dimensional index structures Download PDF

Info

Publication number
KR20010066737A
KR20010066737A KR1020000008238A KR20000008238A KR20010066737A KR 20010066737 A KR20010066737 A KR 20010066737A KR 1020000008238 A KR1020000008238 A KR 1020000008238A KR 20000008238 A KR20000008238 A KR 20000008238A KR 20010066737 A KR20010066737 A KR 20010066737A
Authority
KR
South Korea
Prior art keywords
node
reinsert
lock
determining whether
current
Prior art date
Application number
KR1020000008238A
Other languages
Korean (ko)
Other versions
KR100349667B1 (en
Inventor
이장선
이진수
이훈순
김명준
유재수
송석일
이석희
Original Assignee
오길록
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 오길록, 한국전자통신연구원 filed Critical 오길록
Priority to KR1020000008238A priority Critical patent/KR100349667B1/en
Publication of KR20010066737A publication Critical patent/KR20010066737A/en
Application granted granted Critical
Publication of KR100349667B1 publication Critical patent/KR100349667B1/en

Links

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

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

PURPOSE: A method for controlling a consistency of a higher-order index structure is provided to increase the performance of a search by obtaining a latch of a common mode in case that a search operation is performed, thereby preventing a delay from being generated from an insertion to a node or a lock of a deletion operation. CONSTITUTION: A route node is stored in a queue(910). A common lock is obtained(912). It is judged whether the queue is empty(914). In case that the queue isn't empty, a node is picked out from the queue and set as a current node(916). In case that the queue is empty, a lock to a reinsertion node is released. In addition, a search is terminated(938). It is judged whether a level of the current node is lower than a present level(918). A common latch is obtained(928). It is judged whether the current node is a terminal(930). In case that the current node isn't the terminal, child nodes in a range of question are put in(932). The common latch is released(936).

Description

고차원 색인구조의 동시성 제어방법{A concurrency control method for high-dimensional index structures}A concurrency control method for high-dimensional index structures

본 발명은 데이터베이스의 동시성 제어방법에 관한 것이며, 특히, 노드의 용량이 초과하여 넘침이 발생할 때에 노드 내의 일부 객체에 대한 재 삽입을 수행하는 기존의 고차원 색인구조(R*-트리, SS-트리, TV-트리, X-트리, CIR-트리)를 위한 동시성 제어방법에 관한 것이다. 보다 구체적으로 설명하면, 재 삽입 연산 중 재 삽입을 위해 색인 트리의 어떤 노드에서 삭제된 객체들에 대해서도 탐색이 가능하도록 하는 기법에 관한 것이다.The present invention relates to a method for controlling concurrency of a database. In particular, an existing high-dimensional index structure (R * -tree, SS-tree, which performs reinsertion of some objects in a node when the capacity of the node is exceeded and overflow occurs. TV-Tree, X-Tree, CIR-Tree). More specifically, the present invention relates to a technique for searching for objects deleted from any node of the index tree for reinsertion during a reinsertion operation.

지난 수년 동안 다차원의 특징벡터를 기반으로 하는 유사성 검색이 데이터 베이스 분야에서 매우 중요한 과제로 부각되어 왔다. 이의 응용분야는 지리정보 시스템부터 의료 데이터 저장 시스템, 멀티미디어 데이터 베이스 시스템에 이르기까지 매우 폭 넓게 분포되어있다. 이런 유사성 검색의 가장 핵심적인 문제 중 하나가 바로 수많은 다차원의 데이타 중에서 어떻게 질의와 유사한 객체를 효율적으로 찾아내는가 하는 것이다. 이 문제를 해결하기 위해 다차원 색인구조에 대한 연구가 매우 활발히 진행되어 왔고 그 결과 Grid File, Multi-level Grid File, R-Tree, R*-Tree, TV-Tree, X-Tree, SS-Tree, SR-Tree, CIR-Tree, Hybrid-Tree등의 수많은 색인구조들이 제안되었다. 기존의 다차원 색인구조들이 실제 응용에 사용되기 위해서는 여러 사용자가 삽입 및 탐색을 동시에 수행할 수 있는 다중 사용자환경이 고려되어야 한다. 즉, 색인 구조에 대한 적절한 동시성 제어 알고리즘이 있어야 한다는 것이다.Over the last few years, similarity search based on multidimensional feature vectors has been a very important task in the database field. Its applications range from geographic information systems to medical data storage systems to multimedia database systems. One of the most important problems of this similarity search is how to efficiently find queries and similar objects among numerous multidimensional data. In order to solve this problem, researches on multidimensional index structures have been actively conducted, and as a result, Grid File, Multi-level Grid File, R-Tree, R * -Tree, TV-Tree, X-Tree, SS-Tree, Many index structures have been proposed, such as SR-Tree, CIR-Tree and Hybrid-Tree. In order for existing multidimensional index structures to be used in actual applications, a multi-user environment in which multiple users can insert and search simultaneously must be considered. In other words, there should be an appropriate concurrency control algorithm for the index structure.

대부분의 색인구조는 트리 형태로 표현된다(이하 색인트리라 부른다). 색인트리를 이루는 각 구성요소는 노드라 부르며, 이들은 계층적인 구조로 색인트리를 구성한다. 색인트리는 객체의 삽입, 삭제 등의 연산을 통하여 구성되며, 삽입되는 객체는 트리내의 노드에 일정한 규칙에 의해 삽입되게 된다.Most index structures are represented in tree form (hereinafter referred to as index tree). Each component of an index tree is called a node, and they form an index tree in a hierarchical structure. The index tree is composed of operations such as inserting and deleting objects, and the inserted objects are inserted by nodes according to a predetermined rule.

그리고, 색인트리 내의 각 노드에는 일정한 수만큼의 객체만을 삽입할 수 있으며, 용량 초과시에 노드에 넘침이 발생했다고 한다. 이때 넘침이 발생한 노드내의 일부 객체를 선택하여 이들을 하나씩 색인트리 내에 재 삽입하여 성능을 향상시킬 수 있다.In addition, only a certain number of objects can be inserted into each node of the index tree, and when the capacity is exceeded, the node overflows. At this time, some objects in the overflowed node can be selected and reinserted into the index tree one by one to improve performance.

한편, 종래의 색인구조에 대한 동시성 제어방법에 대한 연구로는 1차원 데이터를 대상으로 하는 B-트리에 대한 것이 주를 이루고 있으며, 고차원 데이터를 관리하는 색인구조인 R-트리에 대한 동시성 제어 방법이 얼마 전부터 연구되기 시작했다.On the other hand, the study on the concurrency control method for the conventional index structure is mainly about the B-tree targeting the one-dimensional data, the concurrency control method for the R-tree which is an index structure for managing high-dimensional data This began to be studied some time ago.

기존의 다차원 색인구조에 대한 동시성 제어 알고리즘은 크게 잠금 결합기법(Lock-Coupling Technique)을 기반으로 하는 방법과 링크기법(Link-Technique)을 기반으로 하는 방법으로 분류할 수 있다. 잠금 결합 기반의 동시성 제어 알고리즘은 트리를 순회할 때 현재 노드의 잠금을 해제하기 전에 다음에 방문할 노드에 잠금을 획득한다. 그리고, 노드 분할을 수행하거나 최소경계영역(MBR; Minimum Bounding Region)변경을 상위 노드에 반영할 때에는 변경에 참여하는 모든 노드들에 대한 잠금을 획득해야 한다. 이 방법은 탐색이나 삽입 연산시에 하나의 트랜잭션(Transaction)이 동시에 여러 노드에 잠금을 유지해야 하므로 동시성 성능의 저하를 초래하게 된다.The concurrency control algorithms for the existing multidimensional index structures can be classified into two methods, one based on the locking coupling technique and the other based on the link technique. Lock concurrency-based concurrency control algorithms acquire locks on the next node to visit before releasing the lock of the current node when traversing the tree. In addition, when performing node splitting or reflecting a minimum bounding region (MBR) change to a higher node, locks on all nodes participating in the change should be obtained. This method results in a decrease in concurrency performance because a transaction must hold a lock on multiple nodes at the same time during a search or insert operation.

이에 대한 문제점을 해결하기 위해 링크기법을 기반으로 하는 동시성 제어 알고리즘이 제안되었다. 이런 종래의 연구로부터 잠금결합 기법보다는 링크 기법을 사용한 동시성 제어방법이 그 성능면에서 우수함이 입증되었다. 링크 기법 기반의 동시성 제어 알고리즘은 잠금 결합을 수행할 필요가 없다. 즉, 트리를 순회하는 동안에 최대 하나의 노드에만 잠금을 획득하면 된다. 하지만 여전히 최소경계영역 변경이나 분할 연산을 수행할 때에는 동시에 여러 노드에 잠금을 획득해야 한다.In order to solve this problem, a concurrency control algorithm based on link technique has been proposed. From these conventional studies, the concurrency control method using the link method rather than the lock coupling method has proved to be superior in performance. The concurrency control algorithm based on the link technique does not need to perform lock combining. That is, only one node needs to acquire a lock while traversing the tree. However, it is still necessary to acquire locks on multiple nodes at the same time when performing a minimum boundary change or partition operation.

링크 기법의 기본 개념은 각 레벨의 모든 노드들을 오른쪽 링크를 통해 연결하여 탐색 연산시에 잠금 결합을 수행하지 않아도 상위 노드에 반영되지 않은 하위 노드의 분할을 감지하여 이를 보상할 수 있도록 하는 것이다. R LINK -Tree에서는 R-Tree와 B-Tree의 구조적인 차이로 인해 B LINK -Tree의 링크기법을 수정 및 보완하였다. 이 과정에서 노드일련번호를 도입하여 이를 각 노드에 할당하게 되었고 엔트리의 구조도 <MBR, Child_Page>에서 <MBR, Child_Page, NSN>로 수정되었다. 노드일련번호라는 것은 노드가 새로 생성될 때 증가하는 값으로, 각 노드는 유일한 노드일련번호를 부여받는다. 노드가 분할되면 새로운 노드에 기존의 노드가 가지고 있던 노드일련번호를 할당하고 기존의 노드에는 새로운 노드일련번호를 할당한다. 이때 새로 생성되는 노드는 항상 기존 노드의 오른쪽에 위치하게 된다. 따라서 탐색연산은 트리를 순회할 때 자식노드의 분할 여부를 이 노드일련번호 값을 가지고 판단할 수 있다. 즉, 부모 노드의 엔트리 <MBR, Child_Page, NSN>에 기록된 노드일련번호를 기억하고 있는 탐색 프로세서는 그 엔트리에 대응하는 자식노드(Child_Page)의 실제 노드일련번호 값이 기억하고 있는 값보다 크면 오른쪽으로 이동한다. 이동하면서 기억하고 있는 노드일련번호를 가진 노드들을 만나면 옆으로의 이동을 멈추고 다시 하위 노드로 탐색을 진행하게 된다.The basic concept of the linking scheme is to connect all nodes of each level through the right link so that the partition of the lower node that is not reflected in the upper node can be compensated for without compromising the lock even during the search operation. In R LINK -Tree, due to structural differences between R-Tree and B-Tree, the linking technique of B LINK -Tree has been modified and supplemented. In this process, the node serial number was introduced and assigned to each node, and the structure of the entry was changed from <MBR, Child_Page> to <MBR, Child_Page, NSN>. The node serial number is incremented when a node is newly created. Each node is assigned a unique node serial number. When a node is split, it assigns the node serial number of the old node to the new node and the new node serial number to the existing node. The newly created node is always located to the right of the existing node. Therefore, the search operation can determine whether the child node is split when traversing the tree with this node serial number. That is, the search processor that stores the node serial number recorded in the parent node's entry <MBR, Child_Page, NSN> is right if the actual node serial number of the child node (Child_Page) corresponding to the entry is larger than the stored value. Go to. When you meet the nodes with the node serial number that you remember while moving, it stops moving to the side and proceeds to the lower node again.

이 방법은 몇 가지 단점이 있다. 첫째는 어떤 트랜잭션이 트리 구조를 변경하는 연산(노드 분할과 최소경계영역 변경)을 수행할 때에는 동시에 둘 이상 레벨의 노드들에 잠금을 유지해야 하며 이로 인해 탐색연산이 다음 노드로 탐색을 진행할 때 입출력시간 동안 지연될 수 있다는 것이다. 둘째는 엔트리를 표현하는 자료구조가 <MBR, Child_Page, NSN>로 바뀌게 되면서 부가적인 정보인 노드일련번호로 인해 저장공간 이용률이 저하되어 비단말 노드의 팬-아웃(Fan Out)이 작아진다는 것이다.This method has some disadvantages. First, when a transaction performs operations that change the tree structure (node split and minimum boundary change), locks must be held on more than one level of nodes at the same time, which causes the I / O when the search operation proceeds to the next node. May be delayed over time. Second, as the data structure representing the entry is changed to <MBR, Child_Page, NSN>, additional information of the node serial number decreases the storage space utilization and reduces the fan out of non-terminal nodes. .

개선된 방법으로 위의 방법에서 문제점으로 지적된 엔트리의 자료구조에 노드일련번호가 추가되어 저장공간을 낭비하는 문제를 해결하고 있다. 개선된 방법에서도 역시 R LINK -Tree에서와 같이 각각의 노드에 노드일련번호를 할당하고 오른쪽 링크를 두어 분할을 검사하고 어디까지 오른쪽 링크를 따라 순회할 것인지를 판별한다. 하지만, R LINK -Tree와는 다르게 비단말 노드의 엔트리에 하위 노드의 노드일련번호를 기록해두지 않고도 하위 노드의 분할을 판별할 수 있는 방법을 제안하고 있다. 이것은 전역계수기를 이용해 노드일련번호를 할당함으로써 가능해 진다.An improved method solves the problem of wasting storage space by adding the node serial number to the data structure of the entry pointed out as a problem in the above method. As with R LINK -Tree, the improved method also assigns a node serial number to each node, places a right link to check for partitioning, and determines how far along the right link to traverse. However, unlike R LINK -Tree, it is proposed a method of determining the division of a lower node without recording the node serial number of the lower node in the entry of the non-terminal node. This is done by assigning a node serial number using the global counter.

노드가 분할될 때 노드에는 원래 노드의 노드일련번호 값이 주어지고 원래 노드에는 새로운 노드일련번호 값이 할당된다. 이때, 트리 순회 연산은 노드를 방문할 때 전역 계수기의 값을 기억하고 다시 하위 노드를 방문할 때 기억했던 전역계수기의 값과 현재 노드의 노드일련번호를 비교하여 현재 노드의 노드일련번호가 더 크면 상위 노드에 반영되지 않은 분할로 판단하고, 오른쪽 링크를 따라서 이동한다. 이동하다가 기억했던 전역계수기 값보다 작은 노드일련번호를 갖는 노드를 만나면 이웃 노드로의 이동을 멈추고 다시 하위 노드로의 순회를 계속하게 된다. 이 방법 역시 문제가 있다. 전역계수기를 사용하면 노드 분할을 할 때 현재 노드를 분할하기 전에 먼저 상위 노드에 잠금을 획득하고 분할을 진행해야 한다. 이외에도 회복 목적을 위해 분할이 끝날 때까지 분할에 참여하는 모든 노드들에 잠금을 유지한다. 이로 인해 보다 더 오랜 시간 동안 탐색연산이 지연될 수 있다.When a node is partitioned, the node is given the node serial number value of the original node and the original node is assigned a new node serial number value. At this time, the tree traversal operation remembers the value of the global counter when visiting a node and compares the value of the global counter remembered when visiting a lower node with the node serial number of the current node. It determines that the partition is not reflected in the upper node, and moves along the right link. When a node encounters a node with a node serial number smaller than the global counter value it remembers, it stops moving to the neighbor node and continues to traverse to the lower node. This method also has a problem. When using the global counter, when dividing a node, it is necessary to acquire a lock on the parent node and proceed with partitioning before partitioning the current node. In addition, for recovery purposes, a lock is held on all nodes participating in the partition until the partition is finished. This may delay the search operation for a longer time.

따라서, 본 발명의 목적은 전역계수기로 로그일련번호를 사용하여 단말 노드의 엔트리에 노드일련번호가 포함되어 저장 효율을 떨어뜨리는 문제를 방지하는 방법을 제공하고, 재 삽입을 위하여 트리에서 삭제한 엔트리를 특정노드(재 삽입 노드)에 보관하여 탐색연산이 이를 참조할 수 있도록 해 준다.Accordingly, an object of the present invention is to provide a method of preventing the problem of deteriorating storage efficiency by including a node serial number in an entry of a terminal node using a log serial number as a global counter, and deleting an entry from a tree for reinsertion. Is stored in a specific node (reinsertion node) so that the search operation can refer to it.

또한, 본 발명의 또 다른 목적은 래치와 잠금을 혼용하여 색인노드에 대한 잠금은 탐색연산에 전혀 영향을 미치지 않도록 하는 방법을 제공하는 것이다.It is still another object of the present invention to provide a method in which a lock on an index node does not affect the search operation at all by using a latch and a lock.

또한, 본 발명의 또 다른 목적은 탐색 연산이 수행될 때 접근하려는 노드에 공유모드의 래치만 획득하므로 노드에 대한 삽입 또는 삭제 연산의 잠금으로 인한 지연이 발생하지 않아 높은 탐색 성능을 제공하는 것이다.In addition, another object of the present invention is to provide a high search performance because no delay occurs due to locking of an insert or delete operation to a node because only a latch of a shared mode is obtained to a node to be accessed when a search operation is performed.

도 1은 본 발명에 따른 삽입, 삭제 및 재 삽입 연산이 동시에 수행될 경우에 나타나는 경로유실의 문제를 보여주는 트리구성을 나타낸 도면.1 is a diagram illustrating a tree structure showing a problem of path loss when an insert, delete, and reinsert operation is simultaneously performed according to the present invention.

도 2는 본 발명에 따른 삽입 연산을 구성하는 서브 루틴의 구성을 나타낸 도면.2 is a diagram showing the configuration of a subroutine constituting an insert operation according to the present invention;

도 3은 본 발명에 따른 삽입 연산의 동작을 설명하는 순서도.3 is a flow chart illustrating the operation of an insert operation in accordance with the present invention.

도 4는 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 단말노드를 찾는 연산(FindNode)의 동작을 설명하는 순서도.4 is a flow chart illustrating the operation of a find node (FindNode) that is one of the subroutines of an insert operation according to the present invention.

도 5는 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 노드의 넘침을 처리하는 연산(TreatOverflow)의 동작을 설명하는 순서도.FIG. 5 is a flowchart illustrating the operation of an operation (TreatOverflow) for handling the overflow of a node which is one of the subroutines of an insert operation according to the present invention. FIG.

도 6은 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 재 삽입을 위한 연산(Reinsert)의 동작을 설명하는 순서도.6 is a flow chart illustrating the operation of an operation Reinsert for reinsertion, which is one of the subroutines of an insert operation in accordance with the present invention.

도 7은 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 노드를 분할하는 연산(Split)의 동작을 설명하는 순서도.7 is a flow chart illustrating the operation of Split, which splits a node which is one of the subroutines of an insert operation in accordance with the present invention.

도 8은 본 발명에 따른 비단말 노드에서 넘침 연산 처리시 경로 스택에 있는부모 노드에 조건부 배타잠금을 요청하는 과정을 설명하는 트리 구성을 나타낸 도면.8 is a diagram illustrating a tree structure for explaining a process of requesting a conditional exclusive lock to a parent node in a path stack during a overflow operation in a non-terminal node according to the present invention.

도 9는 본 발명에 따른 탐색(Search) 연산의 동작을 설명하는 순서도.9 is a flow chart illustrating the operation of a Search operation in accordance with the present invention.

도 10은 삭제 연산의 동작을 설명하는 순서도.10 is a flowchart illustrating the operation of the delete operation.

<도면의 주요 부분에 대한 부호의 설명><Explanation of symbols for the main parts of the drawings>

200…삽입 연산의 모듈200... Module of insert operation

상기 목적을 달성하기 위하여, 본 발명의 일 실시예에 따르면, 큐에 루트 노드를 저장하는 단계; 재 삽입 노드에 공유 잠금을 획득하는 단계; 큐가 비었는지를 판단하여 비어 있지 않으면 큐로부터 하나의 노드를 가져와서 현재 노드로 하고, 큐가 비어 있으면 재 삽입 노드에의 잠금을 해제하고 탐색을 종료하는 단계; 현재 노드에서 공유 래치를 획득하고 질의 범위에 있는 하위 노드들을 선택한 후 큐에 넣는 단계; 상기 큐가 비어있는지 판단하는 단계로 돌아가서 수행하는 단계를 포함하는 동시성이 제어된 탐색방법이 제공된다.In order to achieve the above object, according to an embodiment of the present invention, storing the root node in a queue; Obtaining a shared lock on the reinsert node; Determining whether the queue is empty and taking one node from the queue as the current node if it is not empty, and if the queue is empty, unlocking the reinsert node and ending the search; Acquiring a shared latch at the current node, selecting subqueues in the query range, and enqueuing; A concurrency controlled search method is provided which comprises returning to performing the step of determining whether the queue is empty.

본 발명의 일 실시예에 따르면, 새로운 엔트리를 삽입할 단말노드를 찾는제1단계; 상기 찾은 단말노드에 엔트리 삽입시 넘침이 발생하는지 판단하는 단계; 상기 판단 단계의 판단 결과, 넘침이 발생하면 트리잠금을 획득한 후, 상기 삽입할 단말노드의 노드 넘침을 처리하고 트리 잠금을 해제하는 단계 및 상기 판단 단계의 판단 결과, 넘침이 발생하지 않으면 상기 삽입할 단말노드에 새로운 엔트리를 삽입하고, 만약 삽입으로 인해 최소 경계 영역이 변경되었으면 트리 잠금을 획득하고 최소경계영역의 변경을 상위로 전파한 후 트리잠금을 해제하는 단계를 포함하는 동시성이 제어된 삽입방법을 제공한다.According to an embodiment of the present invention, a first step of finding a terminal node to insert a new entry; Determining whether an overflow occurs when an entry is inserted into the found terminal node; As a result of the determination of the determination step, if overflow occurs, a tree lock is obtained, the node overflow of the terminal node to be inserted is processed, the tree lock is released, and as a result of the determination of the determination step, the insertion is not performed. Inserting a new entry into the terminal node to be performed, and if the minimum boundary region is changed due to the insertion, acquiring the tree lock, propagating the change of the minimum boundary region to the upper side, and then releasing the tree lock. Provide a method.

본 발명의 또 다른 실시예에 따르면, 데이터 처리 장치에 의해 판독가능한 구조를 가지며, 큐에 루트 노드를 저장하는 기능; 재 삽입 노드에 공유 잠금을 획득하는 기능; 큐가 비었는지를 판단하여 비어 있지 않으면 큐로부터 하나의 노드를 가져와서 현재 노드로 하고, 큐가 비어 있으면 재 삽입 노드에의 잠금을 해제하고 탐색을 종료하는 기능; 현재 노드에서 공유 래치를 획득하고 질의 범위에 있는 하위 노드들을 선택한 후 큐에 넣는 단계; 상기 큐가 비어있는지 판단하는 단계로 돌아가서 수행하는 기능을 실현시킬 수 있는 프로그램을 기록한 저장 매체를 제공한다.According to another embodiment of the present invention, there is provided a structure readable by a data processing apparatus, the function of storing a root node in a queue; Obtaining a shared lock on the reinsert node; Determining whether the queue is empty and taking one node from the queue as the current node if it is not empty, and if the queue is empty, unlocking the reinsert node and ending the search; Acquiring a shared latch at the current node, selecting subqueues in the query range, and enqueuing; A storage medium for recording a program capable of realizing a function of returning to the step of determining whether the queue is empty is provided.

본 발명의 또 다른 실시예에 따르면, 데이터 처리 장치에 의해 판독가능한 구조를 가지며, 새로운 엔트리를 삽입할 단말노드를 찾는 기능; 상기 찾은 단말노드에 엔트리 삽입시 넘침이 발생하는지 판단하는 기능; 상기 판단 기능의 판단 결과, 넘침이 발생하면 트리잠금을 획득한 후, 상기 삽입할 단말노드의 노드 넘침을 처리하고 트리잠금을 해제하는 기능; 및 상기 판단 기능의 판단 결과, 넘침이 발생하지 않으면 상기 삽입할 단말노드에 새로운 엔트리를 삽입하고, 만약 삽입으로 인해 최소 경계 영역이 변경되었으면 트리 잠금을 획득하고 최소경계영역의 변경을 상위로 전파한 후 트리잠금을 해제하는 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 저장 매체를 제공한다.According to still another embodiment of the present invention, there is provided an apparatus, which has a structure readable by a data processing apparatus, the function of finding a terminal node into which a new entry is to be inserted; Determining whether an overflow occurs when an entry is inserted into the found terminal node; A function of processing a node overflow of the terminal node to be inserted and releasing the tree lock after acquiring a tree lock when the overflow occurs as a result of the determination of the determination function; And if it is determined that the overflow does not occur, a new entry is inserted into the terminal node to be inserted. If the minimum boundary region is changed due to the insertion, a tree lock is acquired and the change of the minimum boundary region is propagated upward. A computer readable storage medium having recorded thereon a program for realizing a function of releasing a tree lock is provided.

최근 제안되고 있는 고차원 색인구조(R*-트리, TV-트리, X-트리, SS-트리, CIR-트리)들은 성능을 향상시키기 위하여 노드에 넘침 시 그 노드에 포함된 엔트리의 일부를 선택하여 하나씩 색인트리에 재 삽입한다. 이때 재 삽입을 위해 선택된 엔트리들은 사실상 색인트리에서 삭제된 것이며, 재 삽입 중에 있는 엔트리들은 탐색을 할 수 없게 된다. 일반적으로 재 삽입시간은 매우 긴 시간이며 재 삽입되는 객체들을 이 시간 동안 탐색할 수 없게 된다면 심각한 오류를 발생시킬 것이다.Recently proposed high-dimensional index structures (R * -tree, TV-tree, X-tree, SS-tree, CIR-tree) select some of the entries included in the node when it overflows to improve performance. Reinsert them into the index tree one by one. At this time, the entries selected for reinsertion are actually deleted from the index tree, and the entries during reinsertion cannot be searched. In general, the reinsertion time is very long and will cause serious errors if the reinserted objects cannot be navigated during this time.

본 발명은 고차원 색인구조에 대한 효과적인 동시성 제어방법에 대한 것으로, 재 삽입 연산 중에도 재 삽입되는 엔트리에 대한 탐색이 가능하도록 하기 위해 재 삽입을 위해 삭제한 엔트리들을 재 삽입노드에 저장한 후 재삽입 노드를 탐색함으로써 탐색을 할 수 있게 한다.The present invention relates to an effective concurrency control method for a high-dimensional index structure. In order to enable retrieval of entries to be reinserted even during a reinsert operation, the reinsert node after storing the deleted entries in the reinsert node Search by allowing to search.

본 발명에서는 R LINK -트리에서 사용하였던 링크기법을 기반으로 한다. 즉, 전역계수기를 사용하여 노드일련번호를 할당하는 방법을 사용함으로써 비단말노드의 엔트리에 논리일련번호가 포함되어 저장효율을 떨어뜨리는 문제를 방지한다. 그러나, 본 발명은 기존의 방법과 다르게 전역계수기로서 로그일련번호를 이용하는 방법을 제공한다. 로그일련번호는 논리일련번호처럼 단조증가하며 절대 감소하지 않는 특성을 갖는다.The present invention is based on the link technique used in the R LINK -tree. In other words, by using a method of assigning a node serial number using a global counter, a logical serial number is included in an entry of a non-terminal node, thereby preventing a problem of reducing storage efficiency. However, the present invention provides a method of using a log serial number as a global counter unlike the existing method. The log serial number is monotonically increasing like the logical serial number and never decreases.

기존의 링크기법을 사용하는 R LINK -트리에서는 트리의 구조를 변경하는 삽입 또는 삭제 연산을 수행할 때에는 R-트리 계열의 구조적 특성상 트리의 일관성을 보장하기 위하여 색인노드에 잠금을 해야한다. 왜냐하면, 색인노드에 잠금을 하지 않으면, 재 삽입 연산이 수행되는 노드를 루트노드로 하는 하부 트리 내에서 수행중인 삽입이나 삭제 연산이 트리를 거슬러 올라가면서 삽입이나 삭제로 인한 최소경계영역 정보를 변경하려고 할 때 경로를 유실할 수 있기 때문이다.In the R LINK -tree using the existing linking technique, when performing an insert or delete operation that changes the structure of the tree, the structure of the R-tree family must lock the index node to ensure the tree consistency. Because, if you do not lock the index node, the insert or delete operation in the subtree that is the root node of the node where the reinsert operation is performed attempts to change the minimum boundary area information due to the insertion or deletion as it goes up the tree. This is because the path can be lost.

본 발명에서는 상기 경로 유실 문제를 해결하기 위해 색인노드에 잠금과 래치를 혼용한다. 색인구조의 노드에 대한 래치는 여러 트랜잭션(또는 프로세스)들이 색인구조의 한 노드를 접근할 때 이들간의 동기화를 이루어 주며 노드의 물리적 일관성을 보장하기 위한 것이다. 본 발명에서는 삽입과 삭제를 위해 하위노드로 트리를 순회할 때 거치는 모든 노드에 공유잠금을 획득하고, 트랜잭션이 끝나는 시점에서 상기 공유잠금을 해제한다. 이후, 트리를 거슬러 올라가면서 삽입이나 삭제로 인한 최소경계영역을 변경하려고 하는 과정에서 재 삽입이 발생하면 경로 유실문제가 생길 수 있다. 따라서, 본 발명에서는 상기 재 삽입으로 인한 경로 유실을 막기 위해 재 삽입이 일어나기 전에 재 삽입할 노드에 배타모드의 잠금(이하 배타잠금)을 획득할 것을 요구하고, 배타잠금을 획득하지 못했을 때는 재 삽입을 수행하지 않고 분할을 수행한다. 본 발명에서는 색인 노드에 대한 잠금은 탐색연산에 전혀 영향을 미치지 않는다. 본 발명에서는 탐색연산은 자신이 접근하려는 노드에 공유모드의 래치(이하 공유래치)만 획득하므로 색인노드에 대한 삽입 또는 삭제 연산의 잠금으로 인한 지연은 발생하지 않는다. 본 발명에서 색인노드 중루트노드에 행하는 잠금은 특별한 의미를 갖는다. 상기 루트잠금은 트리잠금을 구현하기 위해 사용된다. 본 발명이 제공하는 동시성 제어 기법은 넘침처리연산(재 삽입 연산 또는 분할연산을 포함)이나 최소경계영역 변경 연산을 직렬로 수행한다. 이때 이들을 직렬로 수행시키는 방법으로 트리잠금을 사용한다. 즉, 한 트랜잭션이 삽입연산 수행도중 노드에 넘침을 발생시키고 이를 처리하기 위하여 먼저 쓰기모드의 트리잠금을 획득한다. 상기 트리잠금을 획득하면 상기 트랜잭션이 수행되는 동안 다른 트랜잭션은 넘침이 발생하거나 최소경계영역이 변경되어도 수행하지 않고 기다리게 된다. 기타 넘침을 발생시키지 않는 다른 삽입 연산은 트리잠금을 획득하지 않고도 수행이 가능하며 탐색연산도 수행이 가능하다.In the present invention, in order to solve the path loss problem, a lock and a latch are mixed with an index node. A latch on a node of an index structure is intended to synchronize the multiple transactions (or processes) when accessing a node of the index structure and to ensure physical consistency of the node. In the present invention, a shared lock is obtained at all nodes passing through the tree to insert and delete nodes, and the shared lock is released at the end of the transaction. Subsequently, if a reinsertion occurs while attempting to change the minimum boundary area due to insertion or deletion while going up the tree, a path loss problem may occur. Accordingly, in the present invention, in order to prevent the loss of the path due to the reinsertion, it is required to acquire the exclusive mode lock (hereinafter exclusive lock) to the node to be reinserted before the reinsertion occurs, and when the exclusive lock is not obtained, the reinsertion is performed. Perform the split without doing In the present invention, the lock on the index node does not affect the search operation at all. In the present invention, since the search operation acquires only the latch of the shared mode (hereinafter referred to as the shared latch) to the node to which the node tries to access, there is no delay due to the lock of the insert or delete operation on the index node. In the present invention, the locking on the index node middle root node has a special meaning. The root lock is used to implement a tree lock. The concurrency control technique provided by the present invention performs an overflow processing operation (including a reinsert operation or a division operation) or a minimum boundary area change operation in series. At this time, the tree lock is used as a method of performing them in series. In other words, a transaction causes the node to overflow during the execution of the insert operation and first acquires the tree lock in the write mode. Acquiring the tree lock causes other transactions to wait while the transaction is being executed, even if the overflow occurs or the minimum boundary is changed. Other insert operations that do not cause overflow can be performed without acquiring a tree lock, and search operations can also be performed.

본 발명은 재 삽입 노드를 사용하여 동시성이 제어된 재삽입 연산을 제공한다. 재 삽입을 위해 트리에서 삭제한 엔트리들을 일정 영역에 저장하고 이를 탐색연산이 참조할 수 있도록 한다. 본 발명에서는 삭제한 엔트리들을 특정노드(재 삽입노드)에 보관하고 탐색연산이 이를 참조할 수 있도록 하고 있다. 본 발명에서 상기 재 삽입노드는 각 색인 구조마다 하나씩만 할당된다. 왜냐하면, 동시에 발생할 수 있는 넘침처리 연산이나 최소경계영역 변경 연산을 하나로 제한하고 있기 때문이다. 즉, 동시에 발생할 수 있는 재 삽입연산의 수가 하나로 제한되기 때문이다.The present invention provides a reinsert operation with concurrency controlled using a reinsert node. Stores entries deleted from the tree for reinsertion in a given area so that the search operation can refer to them. In the present invention, deleted entries are stored in a specific node (reinsertion node), and the search operation can refer to this. In the present invention, only one reinsert node is allocated to each index structure. This is because an overflow processing operation or a minimum boundary area change operation that can occur at the same time is limited to one. That is, because the number of re-insertion operations that can occur at the same time is limited to one.

본 발명에서는 삽입연산을 수행하는 트랜잭션은 최대 한 레벨(level)의 노드에만 래치를 유지하면 되도록 보장한다. 전역계수기를 사용하여 논리일련번호를 노드에 부여하지만 트리잠금을 통해 분할과 최소경계영역 변경 연산의 수행이 동시에 하나로만 제한되므로 분할을 위해 부모노드에 래치를 미리 획득할 필요가 없다. 이는 탐색연산시 지연시간이 길어지는 것을 막아준다.In the present invention, a transaction performing an insert operation is guaranteed to hold a latch only at a node of at most one level. Although the logical serial number is assigned to the node using the global counter, the tree lock does not need to acquire the latch in advance in the parent node because the partition and the minimum boundary area change operation are limited to one at the same time. This prevents the long delay time during the search operation.

이어서, 첨부한 도면들을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.Next, preferred embodiments of the present invention will be described in detail with reference to the accompanying drawings.

도 1은 본 발명에 따른 삽입(Insert), 삭제(Delete) 및 재 삽입(Reinsert) 연산이 동시에 수행될 경우에 나타나는 경로유실의 문제를 보여주는 트리구성을 나타낸다.1 illustrates a tree structure showing a problem of path loss that occurs when insert, delete, and reinsert operations according to the present invention are performed at the same time.

도 1을 참조하면, 트랜잭션 T1, T2, T3에서 경로 유실이 일어나는 경우를 보여준다. 트랜잭션 T1에서는 P4 노드에 새로운 엔트리를 삽입하고, P4 노드에 대한 엔트리를 수정하기 위해 P2 노드에 접근한다. 트랜잭션 T2에서는 P2 노드에 재 삽입 연산을 수행하면서 P4 노드에 대한 엔트리를 삭제한다. 트랜잭션 T1에서는 P2 노드에서 P4 노드에 대한 엔트리를 찾을 수 없어 경로가 유실된다.Referring to FIG. 1, a path loss occurs in transactions T1, T2, and T3. In transaction T1, a new entry is inserted into node P4, and the node P2 is accessed to modify the entry for node P4. In transaction T2, the entry for the node P4 is deleted while performing the reinsert operation on the node P2. In transaction T1, the entry is lost for node P4 at node P2, and the path is lost.

도 2는 본 발명에 따른 삽입 연산의 구성을 나타낸다.2 shows a configuration of an insert operation according to the present invention.

도 2를 참조하면, 상기 삽입 연산(300)은 단말노드찾기(FindNode)(400), 넘침처리(TreatOverflow)(500), 재 삽입(Reinsert)(600), 분할(Split)(700), 재 삽입 연산 중의 분할(SplitAll) 및 최소경계영역 변경(FixMBR) 연산으로 구성된다.Referring to FIG. 2, the insert operation 300 includes a findNode 400, a overflowover 500, a reinsert 600, a split 700, and a reinsert. It consists of SplitAll and Minimum Boundary Area Change (FixMBR) operations during an insert operation.

상기 단말노드찾기(FindNode) 연산(400)은 삽입할 엔트리가 위치할 적당한 노드를 찾아 주는 기능을 한다. 상기 넘침처리(TreatOverflow) 연산(500)은 어떤 노드에 넘침이 발생할 때 분할(Split)을 수행할 것인지 재삽입(Reinsert) 연산을 수행할 것인지를 판단해서 이를 수행하는 기능을 한다. 상기 재 삽입(Reinsert) 연산(600)은 넘침처리(TreatOverflow) 연산(500)에서 발생한 넘침을 재 삽입으로 처리하고자 할 때 호출하는 함수이다. 상기 함수에서는 넘침이 발생한 노드에서 재삽입 엔트리들을 선택하여 삭제한 후 색인트리에 삽입한다. 상기 재 삽입 연산 중의 분할(SplitAll) 연산은 재 삽입 도중에 넘침이 발생했을 때 이를 분할로 처리하는 것으로 잠금을 할당받지 않는 것을 제외하면 상기 분할(Split) 연산(700)과 동일하다. 상기 재 삽입 연산 중의 분할(SplitAll) 연산에서 잠금을 할당받지 않아도 되는 이유는 재 삽입 연산과정에서 발생하는 연산이기 때문에 이미 잠금을 얻고 있기 때문이다.The findNode operation 400 functions to find an appropriate node where an entry to be inserted is to be located. The overflow processing 500 performs a function of determining whether to perform a split or a reinsert operation when a node overflows. The reinsert operation 600 is a function that is called when the overflow generated in the overflowover operation 500 is to be processed by reinsertion. This function selects and deletes reinsert entries from the overflowed node and inserts them into the index tree. The SplitAll operation in the reinsert operation is the same as the Split operation 700 except that a lock is not allocated by treating a split when the overflow occurs during the reinsertion. The reason why the lock is not allocated in the splitAll operation during the reinsert operation is that the lock is already acquired because the operation occurs during the reinsert operation.

도 3은 본 발명에 따른 삽입(Insert) 연산의 동작을 설명하는 순서도이다.3 is a flow chart illustrating the operation of an Insert operation in accordance with the present invention.

도 3을 참조하면, 삽입(Insert) 알고리즘은 새로운 엔트리를 삽입할 단말노드를 찾는 것부터 시작된다(FindNode)(310). 단계 312에서는 새로 찾은 단말노드에 엔트리를 삽입할 충분한 공간이 있는지를 판단한다. 상기 판단 결과 새로 찾은 단말노드에 충분한 공간이 없으면 단계 314에서 트리잠금을 획득하고 단계 316에서 넘침처리를 수행한다(TreatOverflow). 그리고, 단계 318에서 트리 잠금을 해제한 후, 단계 334에서 획득한 모든 노드에의 잠금을 해제한다. 만약 새로 찾은 단말노드에 엔트리를 삽입할 충분한 공간이 있으면 다음과 같은 처리를 수행한다. 단계 320에서 새로운 엔트리를 단말노드에 삽입한다. 단계 322에서는 단말노드의 최소경계영역이 변경되었는지 판단한다. 최소경계영역이 변경되었으면 단계 324에서 트리잠금을 획득하고, 단계 326에서 단말노드의 배타래치를 해제하며, 단계 328에서 최소경계영역 변경을 수행하고(FixMBR), 단계 330에서 트리잠금을 해제한 후에,단계 334에서 획득한 모든 노드에의 잠금을 해제하고 삽입 연산을 종료한다. 만약 최소경계영역이 변경되지 않았으면 단계 332에서 단말 노드의 배타래치를 해제한 후에 단계 334에서 획득한 모든 잠금을 해제하고 삽입연산을 종료한다.Referring to FIG. 3, the Insert algorithm begins by finding a terminal node to insert a new entry (FindNode) 310. In step 312, it is determined whether there is enough space to insert an entry in the newly found terminal node. If there is not enough space in the newly found terminal node as a result of the determination, a tree lock is acquired in step 314 and overflow processing is performed in step 316 (TreatOverflow). Then, after unlocking the tree in step 318, all the nodes obtained in step 334 are unlocked. If there is enough space to insert an entry in the newly found terminal node, the following processing is performed. In step 320, a new entry is inserted into the terminal node. In step 322, it is determined whether the minimum boundary area of the terminal node has changed. If the minimum boundary area has been changed, the tree lock is acquired in step 324, the exclusive latch of the terminal node is released in step 326, the minimum boundary area change is performed in step 328 (FixMBR), and the tree lock is released in step 330. In step 334, all the nodes obtained in the lock are released and the insertion operation is terminated. If the minimum boundary area has not been changed, after releasing the exclusive latch of the terminal node in step 332, all locks acquired in step 334 are released and the insertion operation is terminated.

도 4는 새로운 엔트리를 삽입할 단말노드를 찾는 방법(FindNode)(400)을 나타내는 순서도이다.4 is a flowchart illustrating a method (FindNode) 400 for finding a terminal node into which a new entry is to be inserted.

도 4를 참조하면, 상기 방법은 현재노드(CurNode)에서 새로 삽입할 엔트리를 위해 가장 적절한 자식노드(ChildNode)를 찾는 방법을 제공한다. 단계 410에서 현재노드를 루트노드(RootNode)로 설정하고, 현재 노드에 공유 래치를 획득한다. 단계 412에서는 현재노드에서 엔트리를 삽입할 가장 적절한 자식노드를 찾은 후 단계 414에서 현재노드의 공유래치를 해제한다. 단계 416에서 자식노드의 레벨이 찾고자 하는 목표(target) 레벨과 동일한지를 판단한다. 상기 판단결과 동일하면, 단계 418에서 자식노드에 배타래치 및 배타잠금을 획득하고, 상기 판단 결과 동일하지 않으면, 단계 420에서 자식노드에 공유래치 및 공유잠금을 획득한다. 단계 422에서 자식노드의 논리일련번호가 현재노드의 로그일련번호보다 큰지를 판단한다. 상기 판단 결과, 크면 상위로 반영되지 않은 분할이 있는 경우이므로 단계 424에서 자식노드의 오른쪽 링크를 따라가면서 분할 된 노드 중 더 적절한 노드를 선택하고, 단계 426에서 선택한 노드를 자식노드로 한 후 배타 래치와 배타 잠금 또는 공유 래치와 공유 잠금을 획득한다. 래치 및 잠금을 획득하는 모드는 단계 416의 판단 결과와 같다. 단계 428에서 자식노드의 레벨이 목표 레벨과 동일한지 판단한다. 상기 판단 결과 동일하지 않으면, 단계 430에서 자식노드를 경로 스택에 넣고, 단계 432에서 현재노드를 자식노드로 설정한 후 단계 412로 되돌아간다. 상기 단계 428의 판단 결과 동일하면 단계 432에서 자식노드 및 경로 스택(path stack)을 반환한다. 상기 단말노드찾기(FindNode) 연산(400)의 수행 결과 반환되는 경로 스택에 들어 있는 루트노드를 제외한 모든 노드에는 잠금이 걸리게 된다. 즉, 단말노드에는 쓰기모드의 잠금이 걸리게 되며, 비단말노드에는 공유모드의 잠금이 걸린다. 또한, 단말 노드에는 배타래치가 걸리게 된다.Referring to FIG. 4, the method provides a method of finding a child node most appropriate for an entry to be newly inserted in a current node CurNode. In step 410, the current node is set as a root node, and a shared latch is obtained at the current node. In step 412, after finding the most appropriate child node to insert an entry in the current node, in step 414, the shared latch of the current node is released. In step 416, it is determined whether the level of the child node is the same as the target level to be found. If the determination result is the same, the exclusive latch and the exclusive lock are obtained at the child node in step 418. If the determination result is not the same, the sharing latch and the sharing lock is acquired at the child node in step 420. In step 422, it is determined whether the logical serial number of the child node is greater than the log serial number of the current node. As a result of the determination, if there is a partition that is not reflected to the upper side, a more appropriate node among the divided nodes is selected while following the right link of the child node in step 424, and the exclusive node is selected after the node selected in step 426 is a child node. Acquire exclusive locks or shared latches and shared locks. The mode of acquiring the latch and the lock is the same as the determination result of step 416. In step 428, it is determined whether the level of the child node is the same as the target level. If the determination is not the same, in step 430, the child node is put in the path stack, in step 432, the current node is set as the child node, and the process returns to step 412. If the result of the determination of step 428 is the same, the child node and the path stack are returned in step 432. All nodes except the root node included in the path stack returned as a result of performing the find node operation 400 are locked. That is, the terminal node is locked in the write mode, and the non-terminal node is locked in the shared mode. In addition, the terminal node is subjected to exclusive latch.

도 5는 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 노드의 넘침을 처리하는 연산(TreatOverflow)의 동작을 설명하는 순서도이다.FIG. 5 is a flowchart illustrating an operation of an operation (TreatOverflow) for handling overflow of a node which is one of subroutines of an insert operation according to the present invention.

도 5를 참조하면, 상기 넘침처리 연산(500)은 노드에 새로운 엔트리를 수용할 여유공간이 없을 때 처리하는 방법을 제공한다.Referring to FIG. 5, the overflow processing operation 500 provides a method of processing when a node does not have free space to accommodate a new entry.

단계 510에서 현재노드가 루트노드인지를 판단하고, 상기 판단 결과 루트노드이면 단계 534에서 루트분할을 수행하고, 단계 536에서 넘침을 일으켜 분할을 수행토록 만든 엔트리를 삽입한 후 종료한다. 상기 판단 결과 루트노드가 아니면 단계 512에서 현재노드에 조건부 배타잠금을 요청한다. 단계 514에서는 현재노드가 배타잠금을 획득하였는지를 판단한다. 상기 판단 결과 배타 잠금을 획득하였으면 단계 518에서 재 삽입 연산(600)을 호출하고, 획득하지 못하였으면 단계 516에서 분할(Split) 연산(700)을 호출한다. 단말 노드의 경우 상기 단말노드찾기(FindNode) 연산(400) 수행시 단말노드에는 배타잠금을 획득하기 때문에 모든 넘침은 재 삽입으로 이어진다. 비단말노드에서는 해당 비 단말노드를 루트노드로 하는 하부 트리내에서 다른 트랜잭션이 삽입이나 삭제연산을 수행하는 경우에는 재 삽입을 수행하지 않고 분할을 수행한다. 만약, 재 삽입 연산(600)을 호출하였다면 상기 재 삽입 연산(600)이 어떻게 종료하였느냐에 따라 다음 수행할 작업을 결정한다. 먼저 단계 520에서 현재노드가 단말노드인지를 판단하여 단말노드이면 현재노드의 배타래치를 해제하고 비 단말노드이면 현재노드의 배타잠금을 해제한다. 만일 상기 재 삽입 연산(600)에서 현재노드에 넘침이 발생하지 않았으면 종료한다. 만약, 현재노드에 넘침이 발생하여 분할(SplitAll)을 수행하였으면 단계 524에서 경로스택에서 부모노드(ParentNode)를 읽어온다. 단계 526에서 상기 부모노드에 분할된 엔트리를 삽입할 여유공간이 있는지를 검사한다. 상기 부모노드에서 분할을 반영할 여유공간이 없으면 단계 528에서 현재노드를 부모노드로 설정한 후 다시 넘침처리 연산(500)의 처음(단계 510)으로 되돌아가서 다시 재 삽입을 할 것인지 분할을 할 것인지를 결정한다. 상기 부모노드에서 분할을 반영할 충분한 여유공간이 있는 경우에는 단계 530에서 상기 부모노드에 상기 분할된 엔트리를 삽입하고, 단계 532에서 조상노드에 그에 대한 최소경계영역 변경 연산을 수행하고, 단계 536에서 넘침을 일으켜 분할을 수행하도록 만든 엔트리를 삽입하고 종료한다.In step 510, it is determined whether the current node is the root node. If it is determined that the root node is the root node, the root split is performed in step 534, and in step 536, the entry made to perform the split is inserted and terminated. If the determination result is not the root node, in step 512, a conditional exclusive lock is requested to the current node. In step 514, it is determined whether the current node has obtained the exclusive lock. If the exclusive lock is obtained as a result of the determination, the reinsert operation 600 is called at step 518, and if not, the split operation 700 is called at step 516. In the case of the terminal node, when the find node operation (FindNode) operation 400 is performed, an exclusive lock is obtained in the terminal node, so that all overflows lead to reinsertion. In the non-terminal node, when another transaction performs an insert or delete operation in the subtree having the non-terminal node as the root node, the non-terminal node performs partitioning without performing reinsertion. If the reinsert operation 600 is called, the next operation is determined according to how the reinsert operation 600 ends. First, in step 520, it is determined whether the current node is a terminal node, and if it is a terminal node, the exclusive latch of the current node is released, and if it is a non-terminal node, the exclusive lock of the current node is released. If the overflow occurs in the current node in the reinsert operation 600, the process ends. If the current node overflows and Split is performed, in step 524, a parent node is read from the path stack. In step 526, it is checked whether there is free space for inserting a divided entry in the parent node. If there is no free space to reflect the division in the parent node, in step 528, the current node is set as the parent node, and then the flow returns to the beginning of the overflow processing operation 500 (step 510), and reinsertion or division is performed. Determine. If there is sufficient free space to reflect the division in the parent node, insert the divided entry in the parent node in step 530, perform a minimum boundary area change operation on the ancestor node in step 532, and in step 536 Insert and exit the entry that caused the overflow to perform the split.

만약 상기 단계 514에서 현재노드에 잠금을 획득하지 못하여 분할(Split) 연산(700)을 호출하였다면(516) 단계 524에서 경로 스택에서 부모노드를 읽어오고, 분할 결과를 반영하는 단계 526 이하를 수행한다.If the split operation 700 is called because the lock is not acquired on the current node in step 514, the parent node is read from the path stack in step 524, and the following operation 526 is performed to reflect the split result. .

도 6은 본 발명에 따른 삽입 연산 중 하나의 연산인 재 삽입 연산의 동작을 설명하는 순서도이다.6 is a flowchart illustrating an operation of a reinsert operation, which is one operation of an insert operation according to the present invention.

도 6을 참조하면, 상기 재 삽입 연산(600)은 먼저 단계 610에서 색인 구조에 하나씩 할당되어 있는 재 삽입 노드에 조건부 배타잠금을 요청한 후, 상기 요청 결과 배타잠금을 획득하면 재 삽입을 수행하고, 획득하지 못하면 단계 612에서 현재노드에 배타래치를 해제하고 무조건부 배타잠금을 현재노드에 요청하여 획득한 다음 다시 현재노드에 배타래치를 획득하고 재 삽입을 진행한다.Referring to FIG. 6, the reinsert operation 600 first requests conditional exclusive locks to the reinsert nodes allocated to the index structure one by one in step 610, and then performs reinsertion when the exclusive lock is obtained as a result of the request. If not, in step 612, the exclusive latch is released to the current node, and an unconditional exclusive lock is requested to the current node to acquire it, and then the exclusive latch is acquired to the current node and reinsertion is performed.

단계 614에서는 재 삽입 엔트리를 선택하여 이를 현재노드에서 삭제한 후 상기 삭제한 엔트리들을 재 삽입 노드에 기록한다. 이때 재삽입 노드의 첫 번째 레코드에 현재 재 삽입이 발생하고 있는 레벨, 노드의 식별자 및 재 삽입 엔트리들의 최소경계영역을 계산하여 저장한다. 단계 616에서는 현재노드에 상기 삭제된 재 삽입 엔트리들의 개수를 기록한다. 상기 개수는 상기 삭제된 재 삽입 엔트리들을 한 개 씩 색인트리에 삽입하는데 필요한 카운터의 역할을 한다. 단계 618에서 재 삽입 노드와 현재노드의 배타래치를 해제한다. 단계 620에서 현재노드의 변경된 최소경계영역을 조상노드에 반영한다(즉, FixMBR 연산을 호출한다). 이것이 끝나면 재 삽입 엔트리들을 하나씩 색인 트리에 삽입한다. 단계 622에서 상기 삭제된 엔트리들이 모두 색인 트리에 삽입되었는지를 판단한다. 상기 판단은 현재노드의 재삽입 엔트리 수 필드 값이 0 이 되었는지를 판단함으로써 할 수 있다. 상기 판단 결과 모든 엔트리들이 삽입된 경우에는 단계 640에서 재 삽입노드의 배타 잠금을 해제 한 후 재 삽입(ReInsertion) 연산(600)을 종료한다. 상기 판단 결과 모든 엔트리들이 삽입되지 않은 경우에는 단계 624에서 삽입할 엔트리를 위한 적절한 노드를 찾는 연산(FindNode)을 호출한다. 단계 626에서 상기 찾은 페이지에 엔트리를삽입할 충분한 공간이 있는지를 판단한다. 상기 판단 경과 충분한 공간이 있으면 단계 628에서 찾은 노드에 엔트리를 삽입하고, 단계 630에서 조상 노드에 최소경계영역 변경을 반영한다. 단계 632에서 현재 노드의 재삽입 엔트리 카운트를 하나 감소시킨 후 단계 622로 돌아가서 재삽입 완료를 판단하는 것을 수행한다. 상기 단계 626의 판단 결과 충분한 공간이 없으면 단계 634에서 찾은 노드가 재삽입 연산이 진행 중인 현재노드인지를 판단한다. 상기 634의 판단 결과 현재 노드이면 현재 노드를 분할하고 재삽입 노드의 배타 잠금을 해제 후 종료한다. 상기 634의 판단 결과 현재 노드가 아니면 단계 636에서 찾은 노드를 분할하고 분할을 상위로 반영한(FixMBR) 후 엔트리를 삽입하고, 단계 622로 돌아가서 재삽입 완료여부를 판단한다.In step 614, the reinsertion entry is selected, deleted from the current node, and the deleted entries are recorded in the reinsertion node. At this time, the first record of the reinsert node is calculated and stored at the level where the current reinsert occurs, the identifier of the node, and the minimum boundary area of the reinsert entry. In step 616, the number of the deleted reinsert entries is recorded in the current node. The number serves as a counter for inserting the deleted reinsert entries into the index tree one by one. In step 618, the exclusive latch of the reinsert node and the current node is released. In step 620, the changed minimum boundary area of the current node is reflected to the ancestor node (that is, calling the FixMBR operation). When this is done, insert reinsert entries into the index tree one by one. In step 622, it is determined whether all deleted entries have been inserted into the index tree. The determination can be made by determining whether the reinsertion entry number field value of the current node is zero. If all of the entries are inserted as a result of the determination, in step 640, the exclusive lock of the reinsert node is released, and then the reinsertion operation 600 is terminated. If all the entries are not inserted as a result of the determination, the operation FindFindNode is called in step 624 to find an appropriate node for the entry to be inserted. In step 626, it is determined whether there is enough space to insert an entry in the found page. If there is enough space after the determination, an entry is inserted into the node found in step 628, and the change of the minimum boundary area is reflected in the ancestor node in step 630. In step 632, the reinsertion entry count of the current node is decreased by one, and then the flow returns to step 622 to determine completion of the reinsertion. If there is not enough space as a result of the determination of step 626, it is determined whether the node found in step 634 is the current node that is undergoing the reinsert operation. If it is determined in step 634 that the current node is split, the current node is split, and the exclusive lock of the reinsert node is released and then terminated. If it is determined in step 634 that the node is not the current node, the node found in step 636 is divided, the partition is reflected upward (FixMBR), and then an entry is inserted, and the process returns to step 622 to determine whether reinsertion is completed.

도 7은 본 발명에 따른 삽입 연산의 서브 루틴 중 하나인 노드를 분할하는 연산(Split)의 동작을 설명하는 순서도이다.7 is a flowchart illustrating an operation of splitting a node which is one of subroutines of an insert operation according to the present invention.

도 7을 참조하면, 상기 분할(Split) 연산(700)은 먼저 단계 710에서 새로운 노드(NewNode)를 하나 할당하고 배타래치를 획득한다. 단계 712에서 상기 분할되는 현재노드가 단말노드인지를 판단한다. 상기 판단 결과, 단말노드이면 단계 714에서 상기 새로운 노드에 배타잠금을 획득한다. 단계 716에서는 현재노드에서 새로운 노드로 옮길 엔트리를 선택해 새로운 노드에 삽입하고 현재노드에서 삭제한다. 단계 718에서 새로운 노드의 논리일련번호에 현재노드의 논리일련번호를 할당한다. 단계 720에서 현재노드의 논리일련번호에 새로운 노드의 로그일련번호(LSN)을 할당한다. 단계 722에서 현재 노드의 다음 노드로 새로운 노드를 연결한다. 단계 724에서 현재노드 및 새로운 노드의 배타잠금과 배타래치를 해제한 후 종료한다.Referring to FIG. 7, the split operation 700 first allocates a new node NewNode and obtains an exclusive latch in step 710. In step 712, it is determined whether the current node is divided as a terminal node. As a result of the determination, if it is a terminal node, an exclusive lock is obtained at the new node in step 714. In step 716, an entry to be moved from the current node to a new node is selected, inserted into the new node, and deleted from the current node. In step 718, the logical serial number of the current node is assigned to the logical serial number of the new node. In step 720, the log serial number (LSN) of the new node is assigned to the logical serial number of the current node. In step 722, a new node is connected to the next node of the current node. In step 724, the exclusive lock and exclusive latch of the current node and the new node are released and then terminated.

도 8은 본 발명에 따른 비단말 노드에서 넘침 연산 처리 시 경로 스택에 있는 부모 노드에 조건부 배타잠금을 요청하는 과정(800)을 설명하는 트리 구성을 나타낸다.FIG. 8 illustrates a tree structure illustrating a process 800 of requesting conditional exclusive lock to a parent node in a path stack during an overflow operation in a non-terminal node according to the present invention.

도 8을 참조하면, 상기 배타잠금을 요청하는 과정(800)은 배타잠금을 획득하게 되면 다시 재 삽입을 수행하고 그렇지 않으면 분할을 수행한다.Referring to FIG. 8, in the request for exclusive lock 800, when the exclusive lock is obtained, the exclusive lock is reinserted, otherwise the split is performed.

상기 T1, T2, T3는 모두 엔트리를 삽입하는 트랜잭션들이다. 먼저 T1이 엔트리를 삽입하기 위해 N5 노드를 거쳐 N3 노드에 도달한다. 이때 N5에는 공유잠금을 획득하고, N3에는 배타잠금을 획득한다. T2와 T3 역시 뒤이어 엔트리를 삽입하기 위해 N5를 거쳐 각각 N2와 N1에 도달한다. 이때, N5에는 T1과 마찬가지로 T2와 T3가 연속으로 공유잠금을 획득한다. 이후에 T1이 N3에 엔트리를 삽입하는 과정에서 넘침이 발생하여 트리잠금을 획득한 후 재 삽입을 수행하고 이어 N3을 분할한다. 다시 이를 상위노드 N5에 반영하는 과정에서 넘침이 발생하고 재 삽입을 수행하기 위해 N5에 조건부 배타잠금을 요청한다. 하지만, T2와 T3가 이미 공유잠금을 획득하고 있기 때문에 배타잠금을 얻지 못하고 분할을 수행한다. 분할을 수행하고 T1은 트리잠금을 해제하고 종료하게 된다. 이후에 T3가 N1에 엔트리를 삽입하고 최소경계영역(MBR)이 변경되어 이를 상위노드에 반영하기 위해 트리잠금을 요청한다. 이 보다 조금 앞서 T2는 N2에 엔트리를 삽입하는 과정에서 넘침이 발생하여 트리잠금을 획득하고 재삽입을 수행한다. 재 삽입을 수행하고 다시 N2를 분할한다. 이를 N5'에 반영하는 과정에서 N5'에 다시 넘침이 발생하여 조건부 배타잠금을 N5에 요청한다. 하지만, T3가 여전히 공유잠금을 N5에 유지하고 있기 때문에 재 삽입을 수행하지 못하고 분할을 수행한다. 만일 이 상황에서 T3가 조건부 배타잠금을 N5'에 요청한다면 T3는 이를 획득할 것이고 N5'에서 재 삽입을 수행할 것이다. 하지만, 이것은 N2가 변경된 최소경계영역을 상위노드에 반영하는 과정에서 경로를 유실할 수 있다.The T1, T2, and T3 are all transactions for inserting an entry. First, T1 arrives at node N3 via node N5 to insert an entry. At this time, N5 acquires a shared lock, and N3 acquires an exclusive lock. T2 and T3 also follow N5 and N1 respectively through N5 to insert an entry. At this time, like T1, T2 and T3 continuously acquire a shared lock in N5. Thereafter, overflow occurs while T1 inserts an entry into N3, acquires a tree lock, reinserts it, and then divides N3. Again, overflow occurs in the process of reflecting this to the upper node N5, and a conditional exclusive lock is requested to N5 to perform reinsertion. However, since T2 and T3 have already acquired the shared lock, they do not obtain the exclusive lock and perform the split. Partitioning is performed and T1 unlocks the tree and ends. Afterwards, T3 inserts an entry into N1 and the minimum boundary area (MBR) is changed to request a tree lock to reflect this to the upper node. A little earlier than this, T2 overflows in the process of inserting an entry into N2 to acquire a tree lock and perform reinsertion. Perform reinsertion and split N2 again. In the process of reflecting this to N5 ', overflow occurs again in N5' and requests N5 for conditional exclusive lock. However, since T3 still holds the shared lock at N5, it does not perform reinsertion and performs partitioning. If T3 requests a conditional exclusive lock on N5 'in this situation, T3 will acquire it and perform reinsertion on N5'. However, this may cause a loss of path in the process of reflecting the minimum boundary region changed by N2 to the upper node.

도 9는 본 발명에 따른 범위(range) 질의에 대한 탐색(Search) 연산(900)의 동작을 설명하는 순서도이다.9 is a flow chart illustrating the operation of a search operation 900 for a range query in accordance with the present invention.

도 9를 참조하면, 상기 탐색(Search) 연산(900)은 수행 중에 항상 한 레벨에 있는 노드에만 공유래치를 유지하고, 링크 기법을 사용하여 현재 방문하는 노드의 하위 노드의 분할을 감지한다.Referring to FIG. 9, the search operation 900 maintains a shared latch only at a node at one level during execution, and detects a division of a lower node of a currently visited node using a link technique.

단계 910에서는 최초의 현재 레벨(CurLevel)에 루트노드의 레벨을 할당하고 루트노드를 큐에 삽입한다. 상기 범위 질의 또는 K-근접점 질의는 모두 탐색을 시작하기 전에 재삽입노드에 공유잠금을 획득한다. 이것은 탐색도중에 재 삽입노드에 변경이 생기는 것을 막기 위해서이다. 탐색 도중 재 삽입 노드에 변경이 생기게 되면 재 삽입 엔트리들을 탐색 대상에서 제외하는 경우가 생기는 데 이를 방지하기 위함이다. 따라서, 단계 912에서 재 삽입 노드에 공유잠금을 요청하여 이를 획득한다. 단계 914에서 큐가 비었는지를 판단한다. 상기 단계 914의 판단결과 큐가 비었으면 재삽입 노드의 공유잠금을 해제 후 결과집합을 반환하며 종료한다. 상기 단계 914의 판단 결과 큐가 비어있지 않으면 단계 916에서 큐에서 노드를 하나꺼내어 현재노드로 하고 공유래치를 획득한다. 현재노드의 레벨로 레벨을 일치시키기 위해 다음 단계를 수행한다. 단계 918에서 현재노드의 레벨 값과 현재 레벨(CurLevel)의 값의 크기를 비교한다. 상기 비교 결과, 현재노드의 레벨 값이 현재 레벨 값보다 작으면 단계 920에서 현재 레벨에 현재노드의 레벨 값을 할당한 후 단계 922에서 현재 재삽입이 일어나는 레벨과 현재 레벨이 같은 지를 판단하여 판단 결과 같으면 단계 924에서 재삽입 노드에 공유래치를 획득한 후 질의 범위에 있는 재삽입 노드의 엔트리들을 현재 노드가 단말이면 결과집합에, 비단말이면 큐에 삽입하고 재삽입 노드에의 공유 래치를 해제한다. 단계 928에서 현재노드에 공유래치를 획득한다. 단계 930에서 현재노드가 단말노드(terminal node 또는 leaf node)인지를 판단한다. 상기 판단 결과 단말노드가 아닌 경우에는 단계 932에서 현재노드에서 질의 범위에 있는 자식노드(ChildNode)들을 큐에 넣는다. 한편, 상기 판단 결과 단말노드인 경우에는 단계 934에서 현재노드에서 질의 범위 안에 있는 단말노드의 엔트리들을 검색 결과 집합에 넣는다.In step 910, the root node is assigned a level at the first current level CurLevel, and the root node is inserted into the queue. Both the range query or the K-proximity query acquire a shared lock on the reinsert node before starting the search. This is to prevent changes to the reinsert node during the search. If a change is made to the reinsert node during the search, the reinsert entries are excluded from the search. This is to prevent this. Therefore, in step 912, a shared lock is requested to the reinsertion node to obtain this. In step 914, it is determined whether the queue is empty. If the queue is empty as a result of the determination of step 914, the lock is released and the result set is returned. If the queue is not empty as a result of the determination of step 914, a node is taken out of the queue as a current node in step 916, and a shared latch is obtained. To match the level to the level of the current node, follow these steps: In step 918, the level of the current node is compared with the magnitude of the value of the current level (CurLevel). As a result of the comparison, if the level value of the current node is smaller than the current level value, in step 920, the level value of the current node is assigned to the current level, and in step 922, it is determined whether the current level is equal to the level where the current reinsertion occurs. If it is the same, in step 924, after the shared latch is obtained to the reinsert node, the entries of the reinsert node in the query range are inserted into the result set if the current node is the terminal and queued to the non-terminal, and the shared latch is released to the reinsert node. . In step 928, a shared latch is acquired at the current node. In step 930, it is determined whether the current node is a terminal node or a leaf node. If it is determined that the terminal node is not the terminal node, in step 932, the child nodes in the query range are enqueued at the current node. In the case where the determination result is a terminal node, in step 934, entries of the terminal node within the query range from the current node are included in the search result set.

단계 936에서는 현재노드(CurNode)의 공유래치를 해제하고, 다시 단계 914로 되돌아간다.In step 936, the shared latch of the current node (CurNode) is released, and the process returns to step 914 again.

큐에 자식노드의 엔트리와 부모노드의 로그일련번호를 함께 저장한 후 나중에 단계 932/934에서 엔트리를 삽입한 후 노드의 현재노드의 논리일련번호와 부모 노드의 로그일련번호를 비교하여 분할이 탐지되면 오른쪽 링크를 따라가도록 함으로써 상위로 반영되지 않은 분할에 포함되는 엔트리들도 탐색할 수 있다.After storing the child node's entry and the parent node's log serial number together in the queue, and later inserting an entry in steps 932/934, the partition is detected by comparing the node's current node's logical serial number and the parent node's log serial number. If you follow the right link, you can search for entries included in the partition that is not reflected above.

도 10은 삭제 연산(1000)의 동작을 설명하는 순서도이다.10 is a flowchart illustrating the operation of the delete operation 1000.

도 10을 참조하면, 상기 삭제 연산(1000)의 수행은 가장 먼저 단계 1010에서 삭제할 엔트리가 어느 단말 노드에 위치하는 지부터 파악한 후 배타래치를 획득한다. 삭제할 엔트리가 존재하는 단말노드가 파악되면 단계 1012에서 그 노드에서 삭제할 엔트리를 삭제한다. 단계 1014에서 단말노드의 삭제 후 나머지 엔트리들이 전체의 20% 이상이거나 비어있는지(empty)를 판단한다. 상기 판단 결과 20% 이상인 경우에는 단계 1016에서 트리잠금을 획득하고, 단계 1018에서 단말노드의 배타래치를 해제한다. 단계 1020에서 엔트리 삭제 후 빈 노드가 되는지 판단한다. 상기 판단 결과 빈 노드가 되는 경우에는 단계 1022에서 상위노드의 현재 노드에 대한 최소경계영역을 음수로 변환한다. 탐색 연산에서는 이 음수 최소경계영역을 갖는 엔트리는 탐색 대상에서 제외한다. 왜냐하면, 비어있는 노드를 탐색하는 것을 방지하기 위함이다. 삽입 연산의 경우에는 단말노드찾기(FindNode) 연산(400)에서 음수 최소경계영역의 경우에는 양수로 바꾸어 새로운 엔트리가 삽입될 가능성이 있는 노드로 고려한다. 이렇게 하여 비어 있는 노드가 다시 사용될 수 있는 가능성을 주게 된다.Referring to FIG. 10, the performing of the delete operation 1000 first determines in which terminal node an entry to be deleted is located in step 1010, and then obtains an exclusive latch. If the terminal node in which the entry to be deleted exists is found, the entry to be deleted is deleted at step 1012. In step 1014, it is determined whether the remaining entries after the deletion of the terminal node are more than 20% or empty. If the determination result is 20% or more, the tree lock is acquired in step 1016, and the exclusive latch of the terminal node is released in step 1018. In step 1020, it is determined whether to become an empty node after deleting an entry. If the determination result is an empty node, in step 1022, the minimum boundary area for the current node of the upper node is converted to a negative number. The search operation excludes entries with this negative minimum boundary area from being searched. This is to prevent searching for empty nodes. In the case of the insert operation, in the find node operation 400, the negative minimum boundary area is changed to a positive value and considered as a node in which a new entry may be inserted. This gives the possibility that an empty node can be used again.

또한, 상기 단계 1014와 1020의 판단 결과 20% 이상 남는 경우에는 단계 1024에서 조상노드에 엔트리 삭제로 인해 변경된 최소경계영역을 반영한다. 단계 1026에서 트리잠금을 해제하고 삭제 연산을 종료한다.In addition, if more than 20% is left as a result of the determination of steps 1014 and 1020, the minimum boundary area changed due to deletion of an entry in the ancestor node is reflected in step 1024. In step 1026, the tree is unlocked and the delete operation ends.

상기 단계 1014의 판단 결과 20%이하가 남는 경우에는 최소경계영역 변경을 상위로 반영하지 않고 단계 1028에서 단말 노드에의 배타래치만 해제 후 종료한다.If less than 20% is left as a result of the determination of step 1014, only the exclusive latch to the terminal node is terminated in step 1028 without reflecting the change of the minimum boundary area as an upper level.

본 발명은 상기 실시예에 한정되지 않으며, 많은 변형이 본 발명의 사상 내에서 당 분야에서 통상의 지식을 가진 자에 의하여 가능함은 물론이다.The present invention is not limited to the above embodiments, and many variations are possible by those skilled in the art within the spirit of the present invention.

상술한 바와 같이 본 발명에 따른 데이터베이스의 동시성 제어방법은 전역계수기로 로그일련번호를 사용하여 논리일련번호를 할당하는 방법을 사용함으로써 비단말 노드의 엔트리에 논리일련번호가 포함되어 저장 효율을 떨어뜨리는 문제를 방지한다.As described above, the method for controlling concurrency of a database according to the present invention uses a method of allocating a logical serial number using a log serial number as a global counter to reduce the storage efficiency by including a logical serial number in an entry of a non-terminal node. Prevent problems.

또한, 본 발명에 따른 데이터베이스의 동시성 제어방법은 래치와 잠금을 혼용하여 색인노드에 대한 잠금은 탐색연산에 전혀 영향을 미치지 않고, 탐색 연산이 수행될 때 접근하려는 노드에 공유모드의 래치만 획득하므로 노드에 대한 삽입 또는 삭제 연산의 잠금으로 인한 지연이 발생하지 않아 높은 탐색 성능을 제공할 수 있다.In addition, the concurrency control method of the database according to the present invention uses a combination of a latch and a lock, so that the lock on the index node has no influence on the search operation, and acquires only the latch of the shared mode to the node to be accessed when the search operation is performed. Since there is no delay caused by locking the insert or delete operation on the node, high search performance can be provided.

또한, 본 발명에 따른 데이터베이스의 동시성 제어방법은 재 삽입을 위하여 트리에서 삭제한 엔트리를 특정노드(재 삽입 노드)에 보관하고 탐색연산이 이를 참조할 수 있도록 해 준다.In addition, the method for controlling concurrency of a database according to the present invention keeps entries deleted from a tree for reinsertion in a specific node (reinsertion node) and allows the search operation to refer to them.

Claims (14)

데이터베이스에 적용되는 고차원 색인 구조의 동시성 제어방법에 있어서,In the concurrency control method of a high dimensional index structure applied to a database, 큐에 루트 노드를 저장하는 단계;Storing the root node in a queue; 재 삽입 노드에 공유 잠금을 획득하는 단계;Obtaining a shared lock on the reinsert node; 큐가 비었는지를 판단하여 비어 있지 않으면 큐로부터 하나의 노드를 가져와서 현재 노드로 하고, 큐가 비어 있으면 재 삽입 노드에의 잠금을 해제하고 탐색을 종료하는 단계; 및Determining whether the queue is empty and taking one node from the queue as the current node if it is not empty, and if the queue is empty, unlocking the reinsert node and ending the search; And 현재 노드에서 공유 래치를 획득하고 질의 범위에 있는 하위 노드들을 선택한 후 큐에 넣고 상기 큐가 비어있는지 판단하는 단계부터 반복 수행하는 단계Acquiring a shared latch from the current node, selecting subnodes in the query range, placing the queue, and determining whether the queue is empty 를 포함하는 것을 특징으로 하는 동시성이 제어된 탐색 방법Simultaneous controlled search method comprising a 제 1항에 있어서,The method of claim 1, 재 삽입 노드에 있는 질의 범위에 들어가는 엔트리들도 탐색하기위해, 트리를 순회할 때 접근하고 있는 노드에 대한 레벨 정보를 유지하면서 레벨이 변할 때마다 현재 재삽입이 일어나고 있는 노드의 레벨과 같은지를 판단 후 같으면 재삽입 노드를 탐색하도록 하는 단계To traverse the tree to search for entries that fall within the query scope, it determines whether the level is equal to the level of the node that is currently being reinserted as the level changes, while maintaining the level information about the node being accessed when traversing the tree. To search for reinsert nodes if same 를 더 포함하는 동시성이 제어된 탐색 방법.Concurrency-controlled search method further comprising. 제 1항에 있어서,The method of claim 1, 하위 노드가 가지고 있는 로그일련 번호로 된 논리일련번호가 상위노드에 저장되어 있는 로그일련번호로 된 예상 논리일련번호보다 큰지를 판단하여 상위로 반영되지 않은 분할이 탐지되면 이웃노드로 이동하면서 노드를 선택하는 단계It determines whether the logical serial number with the log serial number of the lower node is larger than the expected logical serial number with the log serial number stored in the parent node. Step to choose 를 더 포함하는 동시성이 제어된 탐색 방법.Concurrency-controlled search method further comprising. 제 1항에 있어서,The method of claim 1, 레벨을 현재 노드와 일치시켜 항상 1개의 레벨에 있는 노드에만 공유 래치를 유지하도록 하는 단계Match the level to the current node so that the shared latch is always kept only on nodes at one level 를 더 포함하는 것을 특징으로 하는 동시성이 제어된 탐색 방법.Simultaneous controlled search method further comprises. 데이터베이스에 적용되는 고차원 색인 구조의 동시성 제어방법에 있어서,In the concurrency control method of a high dimensional index structure applied to a database, 새로운 엔트리를 삽입할 단말노드를 찾는 단계;Finding a terminal node into which a new entry is to be inserted; 상기 찾은 단말노드에 엔트리 삽입시 넘침이 발생하는지 판단하는 단계;Determining whether an overflow occurs when an entry is inserted into the found terminal node; 상기 판단 결과, 넘침이 발생하면 트리잠금을 획득하고 상기 삽입할 단말노드의 노드 넘침을 처리한 후 트리 잠금을 해제하는 단계; 및As a result of the determination, when overflow occurs, acquiring a tree lock and processing a node overflow of the terminal node to be inserted, and then releasing the tree lock; And 상기 판단 결과, 넘침이 발생하지 않으면 상기 삽입할 단말노드에 새로운 엔트리를 삽입하고, 삽입으로 인해 최소 경계 영역이 변경되었는지를 확인하여 트리 잠금을 획득하고 변경을 상위로 전파한 후 트리 잠금을 해제하는 단계As a result of the determination, if no overflow occurs, a new entry is inserted into the terminal node to be inserted, and the tree boundary is obtained by checking whether the minimum boundary region has changed due to the insertion, propagating the change to the upper level, and then releasing the tree lock. step 를 포함하는 것을 특징으로 하는 동시성이 제어된 삽입방법.Concurrency-controlled insertion method comprising a. 제 5항에 있어서,The method of claim 5, 상기 새로운 엔트리를 삽입할 단말노드를 찾는 단계는,Finding the terminal node to insert the new entry, 현재 노드의 자식 노드가 단말 노드인지 판단하는 단계;Determining whether a child node of the current node is a terminal node; 상기 판단 결과, 단말 노드이면 자식 노드에 대한 배타 잠금 및 배타 래치를 획득하는 단계;Acquiring an exclusive lock and an exclusive latch on the child node if it is a terminal node; 상기 판단 결과, 비단말 노드이면 상기 자식 노드에 공유 래치 및 공유 잠금을 획득하는 단계;Acquiring a shared latch and a shared lock on the child node if it is a non-terminal node; 자식 노드의 로그일련번호로 된 논리일련번호가 현재 노드의 로그일련 번호로 된 예상 논리일련번호보다 큰지를 판단하는 단계;Determining whether the logical serial number as the log serial number of the child node is greater than the expected logical serial number as the log serial number of the current node; 상기 예상 논리일련번호보다 큰지 여부의 판단 결과, 크면 자식 노드에의 래치 및 잠금을 해제 후 자식 노드의 오른쪽 링크를 따라 가면서 보다 상위로 반영되지 않은 분할된 노드 중 적절한 노드를 선택한 후 래치 및 잠금을 획득하는 단계;As a result of determining whether it is larger than the expected logical serial number, if it is large, the latch and lock on the child node are released, and the right node of the child node is followed, and the appropriate node is selected among the divided nodes not reflected higher, and then latch and lock are performed. Obtaining; 상기 예상 논리일련번호보다 큰지 여부의 판단 결과, 크지 않으면 자식 노드가 단말 노드인지 판단하는 단계;Determining whether a child node is a terminal node if it is not greater than a result of the determination of whether it is greater than the expected logical serial number; 상기 자식 노드가 단말 노드인지 여부의 판단 결과, 단말 노드이면 루트 노드부터 상기 자식 노드까지의 경로를 저장하는 경로 스택과 자식 노드를 반환하는 단계; 및If it is determined that the child node is a terminal node, returning a path stack and a child node storing a path from a root node to the child node if the terminal node is a terminal node; And 상기 자식 노드가 단말 노드인지 여부의 판단 결과, 비단말 노드이면 자식 노드를 현재노드로 하고 상기 자식 노드가 단말 노드인지 판단하는 단계로 되돌아가 다시 수행하는 단계As a result of determining whether the child node is a terminal node, if the non-terminal node is a non-terminal node, returning to the step of determining whether the child node is the current node and performing the process again, and performing the step again. 인 것을 특징으로 하는 동시성이 제어된 단말노드를 찾는 방법.A method for finding a terminal node whose concurrency is controlled, characterized by 제5항에 있어서,The method of claim 5, 상기 노드 넘침을 처리하는 단계는,Processing the node overflow, 현재노드가 루트노드인지를 판단하는 단계;Determining whether the current node is a root node; 상기 현재노드가 루트노드인지 여부의 판단 결과, 루트노드이면 루트 분할을 수행하고 루트노드가 아니면 현재노드에 조건부 배타잠금을 요청하는 단계;As a result of determining whether the current node is a root node, performing a root split if the root node is requested and requesting conditional exclusive lock on the current node if the root node is not the root node; 상기 현재노드에 조건부 배타잠금을 요청한 결과 현재노드가 배타잠금을 획득했는지 판단하는 단계;Determining whether the current node has obtained the exclusive lock as a result of requesting the conditional exclusive lock on the current node; 상기 현재노드가 배타잠금을 획득했는지 여부의 판단 결과, 배타잠금을 획득했으면 재 삽입(Reinsert) 함수를 호출하는 단계; 및Calling a reinsert function if the current node acquires an exclusive lock as a result of determining whether the current node has obtained an exclusive lock; And 상기 현재노드가 배타잠금을 획득했는지 여부의 판단 결과, 배타잠금을 획득하지 못하면 분할(Split) 함수를 호출하는 단계Calling a split function if the current node does not acquire the exclusive lock as a result of determining whether the current node has obtained the exclusive lock; 인 것을 특징으로 하는 동시성이 제어된 넘침 처리 방법.The overflow handling method of which concurrency is controlled, characterized in that 제7항에 있어서,The method of claim 7, wherein 상기 현재노드에 배타잠금을 획득하지 못해서 분할(Split) 함수를 호출하는 단계는,Calling a split function because the exclusive lock is not obtained at the current node may include: 경로 스택에서 현재노드의 부모노드를 읽어온 후, 부모노드에 분할된 엔트리를 삽입할 여유공간이 있는지를 판단하는 단계;Reading the parent node of the current node from the path stack and determining whether there is free space for inserting a divided entry in the parent node; 상기 부모노드에 분할된 엔트리를 삽입할 여유공간이 있는지 여부의 판단 결과, 여유공간이 없으면 부모노드를 현재노드로 설정한 후 제7항의 현재노드가 루트노드인지를 판단하는 단계로 다시 되돌아간 후 다시 재삽입을 할 것인지 분할을 할 것인지를 결정하는 단계; 및As a result of determining whether there is free space for inserting the divided entry in the parent node, if there is no free space, the parent node is set as the current node, and the process returns to the step of determining whether the current node of claim 7 is the root node. Determining whether to reinsert or split again; And 상기 부모노드에 분할된 엔트리를 삽입할 여유공간이 있는지 여부의 판단 결과, 여유공간이 있으면 상기 부모노드에 상기 분할된 엔트리를 삽입하고 조상노드에 최소경계영역 변경을 반영한 후 넘침 처리를 종료하는 단계As a result of determining whether there is free space for inserting the divided entry in the parent node, if there is free space, inserting the divided entry in the parent node, reflecting the change of the minimum boundary area in the ancestor node, and ending the overflow process; 를 더 포함하는 것을 특징으로 하는 동시성이 제어된 넘침 처리 방법.Concurrency-controlled overflow processing method further comprising a. 제7항에 있어서,The method of claim 7, wherein 상기 현재노드에 배타잠금을 획득하여 재 삽입(Reinsert) 함수를 호출하는 단계는,Acquiring an exclusive lock on the current node and calling a reinsert function may include: 재 삽입노드에 배타잠금을 획득하는 단계;Obtaining an exclusive lock on the reinsert node; 재 삽입 엔트리를 현재노드에서 삭제한 후, 상기 삭제한 엔트리들을 재 삽입노드에 저장하는 단계;Deleting the reinsert entry from the current node and storing the deleted entries in the reinsert node; 상기 현재노드에서의 재삽입 엔트리 삭제로 인해 변경된 최소경계영역을 조상노드에 반영하는 최소경계영역 변경연산을 처리하는 함수를 호출하는 단계;Invoking a function for processing a minimum boundary region change operation that reflects a minimum boundary region changed in an ancestor node due to deletion of a reinsert entry in the current node; 상기 최소경계영역 변경연산을 처리한 후에 재 삽입 노드에 있는 엔트리들을 색인트리에 삽입하는 단계; 및Inserting entries in a reinsert node into an index tree after processing the minimum boundary change operation; And 재 삽입노드에 있는 모든 엔트리들을 색인트리에 삽입한 후에는 재 삽입 연산을 종료하고, 아직 삽입할 엔트리가 남은 경우에는 삽입할 적절한 노드를 찾아 상기 재삽입 노드에 있는 엔트리들을 색인 트리에 삽입하는 단계로 되돌아가 다시 수행하는 단계After all the entries in the reinsert node have been inserted into the index tree, the reinsert operation is terminated, and if there are still entries to insert, finds the appropriate node to insert and inserts the entries in the reinsert node into the index tree. To go back and perform again 인 것을 특징으로 하는 동시성이 제어된 재 삽입 연산을 처리하는 방법.And a concurrency controlled reinsert operation. 제9항에 있어서,The method of claim 9, 상기 재 삽입 엔트리를 현재노드에서 삭제한 후, 상기 삭제한 엔트리들을 재 삽입노드에 저장하는 단계는,After deleting the reinsert entry in the current node, storing the deleted entries in the reinsert node, 상기 현재노드에 상기 삭제된 엔트리 개수를 기록하는 단계를 더 포함하는 것을 특징으로 하는 동시성이 제어된 재 삽입 연산을 처리하는 방법.And recording the number of deleted entries in the current node. 제9항에 있어서,The method of claim 9, 재 삽입노드에 있는 모든 엔트리들을 색인트리에 삽입한 후에는 재 삽입 연산을 종료하고, 아직 삽입할 엔트리가 남은 경우에는 삽입할 적절한 노드를 찾아 상기 재삽입 노드에 있는 엔트리들을 색인 트리에 삽입하는 단계로 되돌아가 다시 수행하는 단계는,After all the entries in the reinsert node have been inserted into the index tree, the reinsert operation is terminated, and if there are still entries to insert, finds the appropriate node to insert and inserts the entries in the reinsert node into the index tree. Returning to and performing again, 상기 삽입할 노드를 찾아 삽입하는 과정에서 삽입할 노드에 넘침이 발생하는지 판단하는 단계;Determining whether an overflow occurs in a node to be inserted in the process of finding and inserting the node to be inserted; 상기 삽입할 노드를 찾아 삽입하는 과정에서 삽입할 노드에 넘침이 발생하는지 여부의 판단 결과, 넘침이 발생한 때에는 상기 삽입할 노드를 분할(SplitAll)하는 연산을 호출하는 단계;Invoking an operation to split the node to be inserted when overflow occurs, as a result of determining whether the node to be inserted is overflowed in the process of finding and inserting the node to be inserted; 상기 삽입할 노드를 찾아 삽입하는 과정에서 삽입할 노드에 넘침이 발생하는지 여부의 판단 결과, 넘침이 발생하지 않은 경우에는 상기 삽입할 노드에 재 삽입 노드에 저장된 엔트리를 삽입한 후 상기 삽입할 노드의 최소경계영역(MBR)의 변경이 있는 경우에 제9항의 현재노드의 변경된 최소경계영역을 조상노드에 반영하는 최소경계영역 변경연산을 처리하는 함수를 호출하는 단계로 되돌아가 다시 수행하는 단계As a result of determining whether or not overflow occurs in the node to be inserted in the process of finding and inserting the node to be inserted, if no overflow occurs, an entry stored in the reinsert node is inserted into the node to be inserted, and then If there is a change in the minimum boundary area (MBR), returning to the step of calling a function for processing the minimum boundary area change operation that reflects the changed minimum boundary area of the current node of claim 9 to the ancestor node, and then performs the step again. 를 더 포함하는 것을 특징으로 하는 동시성이 제어된 재 삽입 연산을 처리하는 방법.And a concurrency-controlled reinsert operation further comprising. 제7항 또는 제8항에 있어서,The method according to claim 7 or 8, 상기 현재노드가 배타잠금을 획득했는지 여부의 판단 결과, 배타잠금을 획득하지 못하면 분할(Split) 함수를 호출하는 단계는,If the current node does not acquire the exclusive lock as a result of determining whether the exclusive lock has been acquired, calling the split function may include: 새로운 노드를 하나 할당하여 새로운 노드에 배타래치를 획득하는 단계;Allocating a new node to obtain exclusive latch on the new node; 상기 새로운 노드가 단말노드인지 판단하는 단계;Determining whether the new node is a terminal node; 상기 새로운 노드가 단말노드인지 여부의 판단 결과, 새로운 노드가 단말노드이면 새로운 노드에 배타잠금을 획득하는 단계;As a result of determining whether the new node is a terminal node, if the new node is a terminal node, obtaining an exclusive lock on the new node; 분할될 현재노드에서 분할되는 새로운 노드로 옮길 엔트리를 선택하여 새로운 노드에 삽입하고 상기 옮긴 엔트리는 현재노드에서 삭제하는 단계;Selecting an entry to be moved from the current node to be split to a new node to be split, inserting the entry into the new node and deleting the moved entry from the current node; 현재노드의 노드일련번호를 새로운 노드의 노드일련번호에 할당하고, 현재 노드의 노드 일련 번호에는 새로 할당된 노드의 로그 일련 번호로 할당하는 단계; 및Assigning the node serial number of the current node to the node serial number of the new node, and assigning the node serial number of the current node to the log serial number of the newly assigned node; And 현재노드 및 새로운 노드의 배타래치와 배타잠금을 해제한 후에 분할 연산을 종료하는 단계Terminating the partitioning operation after releasing exclusive latch and exclusive locking of the current node and the new node. 인 것을 특징으로 하는 동시성이 제어된 분할 연산을 처리하는 방법.A method for processing partitioned operations in which concurrency is controlled. 프로세서를 구비한 데이터베이스 시스템에,In a database system with a processor, 큐에 루트 노드를 저장하는 기능;Storing the root node in a queue; 재 삽입 노드에 공유 잠금을 획득하는 기능;Obtaining a shared lock on the reinsert node; 큐가 비었는지를 판단하여 비어 있지 않으면 큐로부터 하나의 노드를 가져와서 현재 노드로 하고, 큐가 비어 있으면 재 삽입 노드에의 잠금을 해제하고 탐색을 종료하는 기능; 및Determining whether the queue is empty and taking one node from the queue as the current node if it is not empty, and if the queue is empty, unlocking the reinsert node and ending the search; And 현재 노드에서 공유 래치를 획득하고 질의 범위에 있는 하위 노드들을 선택한 후 큐에 넣고 상기 큐가 비어있는지 판단하는 단계부터 반복 수행하는 기능Acquiring a shared latch from the current node, selecting subnodes in the query range, placing it in a queue, and repeatedly performing the step of determining whether the queue is empty 을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 저장 매체.A computer-readable storage medium having recorded a program for realizing the problem. 프로세서를 구비한 데이터베이스 시스템에,In a database system with a processor, 새로운 엔트리를 삽입할 단말노드를 찾는 기능;Finding a terminal node into which a new entry is to be inserted; 상기 찾은 단말노드에 엔트리 삽입시 넘침이 발생하는지 판단하는 기능;Determining whether an overflow occurs when an entry is inserted into the found terminal node; 상기 판단 결과, 넘침이 발생하면 트리 잠금을 획득하고 상기 삽입할 단말노드의 노드 넘침을 처리한 후 트리 잠금을 해제하는 기능; 및A function of acquiring a tree lock and processing a node overflow of the terminal node to be inserted and releasing the tree lock when overflow occurs; And 상기 판단 결과, 넘침이 발생하지 않으면 상기 삽입할 단말노드에 새로운 엔트리를 삽입하고, 삽입으로 인해 최소 경계 영역이 변경되었는지를 확인하여 트리 잠금을 획득하고 변경을 상위로 전파한 후 트리 잠금을 해제하는 기능As a result of the determination, if no overflow occurs, a new entry is inserted into the terminal node to be inserted, and the tree boundary is obtained by checking whether the minimum boundary region has changed due to the insertion, propagating the change to the upper level, and then releasing the tree lock. function 을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 저장 매체.A computer-readable storage medium having recorded a program for realizing the problem.
KR1020000008238A 1999-12-24 2000-02-21 A concurrency control method for high-dimensional index structures KR100349667B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020000008238A KR100349667B1 (en) 1999-12-24 2000-02-21 A concurrency control method for high-dimensional index structures

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR19990062171 1999-12-24
KR1019990062171 1999-12-24
KR1020000008238A KR100349667B1 (en) 1999-12-24 2000-02-21 A concurrency control method for high-dimensional index structures

Publications (2)

Publication Number Publication Date
KR20010066737A true KR20010066737A (en) 2001-07-11
KR100349667B1 KR100349667B1 (en) 2002-08-23

Family

ID=26636545

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000008238A KR100349667B1 (en) 1999-12-24 2000-02-21 A concurrency control method for high-dimensional index structures

Country Status (1)

Country Link
KR (1) KR100349667B1 (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100709275B1 (en) * 2004-11-05 2007-04-19 인하대학교 산학협력단 A concurrency control method for non-blocking search operation based on r-tree
KR100832222B1 (en) * 2001-06-09 2008-05-23 자프 아게 Cache-conscious concurrency control scheme for index structures in main-memory database systems
KR20150096199A (en) * 2014-02-14 2015-08-24 국립대학법인 울산과학기술대학교 산학협력단 Apparatus and method for saving data using multi-version based data structures that improves storage io performance

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100832222B1 (en) * 2001-06-09 2008-05-23 자프 아게 Cache-conscious concurrency control scheme for index structures in main-memory database systems
KR100709275B1 (en) * 2004-11-05 2007-04-19 인하대학교 산학협력단 A concurrency control method for non-blocking search operation based on r-tree
KR20150096199A (en) * 2014-02-14 2015-08-24 국립대학법인 울산과학기술대학교 산학협력단 Apparatus and method for saving data using multi-version based data structures that improves storage io performance

Also Published As

Publication number Publication date
KR100349667B1 (en) 2002-08-23

Similar Documents

Publication Publication Date Title
CN109933570B (en) Metadata management method, system and medium
US6792432B1 (en) Database system with methods providing high-concurrency access in B-Tree structures
US4914569A (en) Method for concurrent record access, insertion, deletion and alteration using an index tree
US9262458B2 (en) Method and system for dynamically partitioning very large database indices on write-once tables
KR930002331B1 (en) Method and apparatus for concurrent modification of an index tree
JP3441807B2 (en) B-tree index management method and system
US4823310A (en) Device for enabling concurrent access of indexed sequential data files
US5430869A (en) System and method for restructuring a B-Tree
US9208258B2 (en) Locking and traversal methods for ordered tree data structures
US6751617B1 (en) Method, system, and data structures for implementing nested databases
Lomet et al. Concurrency and recovery for index trees
US6484172B1 (en) Concurrency control method for high-dimensional index structure using latch and lock
KR100289331B1 (en) Concurrency Control Method of High Dimensional Index Structures
Viglas Adapting the B+-tree for asymmetric I/O
US6647386B2 (en) Method, system, and program for reverse index scanning
CN114282074B (en) Database operation method, device, equipment and storage medium
Wang et al. The concurrent learned indexes for multicore data storage
Zhang B trees
US6571250B1 (en) Method and system for processing queries in a data processing system using index
KR100349667B1 (en) A concurrency control method for high-dimensional index structures
US7321898B1 (en) Locking mechanism for materialized views in a database system
WO2002010978A9 (en) Method, system and data structures for implementing nested databases
US7565217B2 (en) Traversal of empty regions in a searchable data structure
KR100507782B1 (en) Database management system and the method of controlling consistency of system table in DBMS
KR102404174B1 (en) Data structures for nosql, inserting method for nodes, and processing method for range queries

Legal Events

Date Code Title Description
A201 Request for examination
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: 20120730

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20130801

Year of fee payment: 12

LAPS Lapse due to unpaid annual fee