KR100709275B1 - A concurrency control method for non-blocking search operation based on r-tree - Google Patents

A concurrency control method for non-blocking search operation based on r-tree Download PDF

Info

Publication number
KR100709275B1
KR100709275B1 KR1020040089888A KR20040089888A KR100709275B1 KR 100709275 B1 KR100709275 B1 KR 100709275B1 KR 1020040089888 A KR1020040089888 A KR 1020040089888A KR 20040089888 A KR20040089888 A KR 20040089888A KR 100709275 B1 KR100709275 B1 KR 100709275B1
Authority
KR
South Korea
Prior art keywords
entry
node
tree
deletion
deleted
Prior art date
Application number
KR1020040089888A
Other languages
Korean (ko)
Other versions
KR20060040330A (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 KR1020040089888A priority Critical patent/KR100709275B1/en
Publication of KR20060040330A publication Critical patent/KR20060040330A/en
Application granted granted Critical
Publication of KR100709275B1 publication Critical patent/KR100709275B1/en

Links

Images

Landscapes

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

Abstract

본 발명은 논 블록킹 검색연산을 위한 알-트리 기반의 동시성 제어 방법에 관한 것으로, 본 발명은 공간 데이터 베이스 시스템을 이용한 다양한 서비스 환경에서의 공간 객체의 검색의 빠른 응답시간을 보장하며, 검색연산이 노드를 읽고 있는 동안에도 같은 노드에 갱신 연산을 할 수 있는 링크드 리스트 기반의 동시성 제어 기법과 검색연산이 락이나 래치 없이 색인을 탐색할 수 있는 버전 기반의 동시성 제어기법을 포함하는 것으로, 본 발명에 의하면, 공간 데이터 베이스 시스템의 검색 연산이 블록킹이 없이 진행할 수 있기 때문에 충돌이 잦은 환경에서의 검색연산이 2배에서 4배 향상되는 특성을 가지게 된다.The present invention relates to an Al-tree based concurrency control method for a non-blocking search operation. The present invention ensures fast response time of the search of a spatial object in various service environments using a spatial database system. The linked list-based concurrency control technique, which can perform update operations on the same node while the node is being read, and the version-based concurrency control technique, in which the search operation can search the index without locking or latching, According to the present invention, since the search operation of the spatial database system can proceed without blocking, the search operation in a collision-prone environment is improved by 2 to 4 times.

공간 데이터 베이스 관리시스템, 다차원 색인구조, 동시성 제어 기법Spatial database management system, multidimensional index structure, concurrency control technique

Description

논 블록킹 검색연산을 위한 알-트리 기반의 동시성 제어 방법{A CONCURRENCY CONTROL METHOD FOR NON-BLOCKING SEARCH OPERATION BASED ON R-TREE} Al-tree-based concurrency control method for non-blocking search operation {A CONCURRENCY CONTROL METHOD FOR NON-BLOCKING SEARCH OPERATION BASED ON R-TREE}             

도 1은 본 발명의 공간 데이터 베이스 시스템을 위한 R-Tree의 구성을 보인 예시도.1 is an exemplary view showing the configuration of an R-Tree for a spatial database system of the present invention.

도 2는 도 1에서 비단말 노드의 구성을 보인 예시도.2 is an exemplary view showing the configuration of a non-terminal node in FIG.

도 3은 도 1에서 단말 노드의 구성을 보인 예시도.3 is an exemplary view showing the configuration of a terminal node in FIG.

도 4는 링크드 리스트 기반의 삽입 변경의 과정을 보인 예시도.4 is an exemplary view showing a process of insertion change based on a linked list.

도 5는 링크드 리스트 기반의 삭제 변경의 과정을 보인 예시도.5 is an exemplary view illustrating a process of deleting and deleting based on a linked list.

도 6a 내지 도 6c는 링크드 리스트 기반의 엔트리 재활용의 과정을 보인 예시도.6A to 6C are exemplary views illustrating a process of recycling an entry based on a linked list.

도 7은 버전 기반의 검색(FindFirst)의 동작 흐름을 보인 예시도.7 is an exemplary view illustrating an operation flow of version-based search (FindFirst).

도 8은 버전 기반의 검색(FindNext)의 동작 흐름을 보인 예시도.8 is an exemplary view illustrating an operation flow of a version-based search (FindNext).

도 9는 버전 기반의 삽입(insert)의 동작 흐름을 보인 예시도.9 is an exemplary view showing an operation flow of version based insert.

도 10은 버전 기반의 삽입(FindLeaf)의 동작 흐름을 보인 예시도.10 is an exemplary view showing an operation flow of version-based insertion (FindLeaf).

도 11은 버전 기반의 삽입(UpdateParent)의 동작 흐름을 보인 예시도.11 is an exemplary view illustrating an operation flow of version based insertion (UpdateParent).

도 12는 버전 기반의 삽입(FindLatestNode)의 동작 흐름을 보인 예시도.12 is an exemplary view showing an operation flow of version based insertion (FindLatestNode).

도 13은 버전 기반의 삽입(SplitLeafNode)의 동작 흐름을 보인 예시도.13 is an exemplary view showing an operation flow of version-based insertion (SplitLeafNode).

도 14은 버전 기반의 삽입(SplitInternalNode)의 동작 흐름을 보인 예시도.14 illustrates an operation flow of version-based insertion (SplitInternalNode).

도 15은 버전 기반의 삽입(UpdateEntry1)의 동작 흐름을 보인 예시도.15 is an exemplary diagram illustrating an operation flow of version-based insertion (UpdateEntry1).

도 16은 버전 기반의 삽입(UpdateEntry2)의 동작 흐름을 보인 예시도.16 is an exemplary view illustrating an operation flow of version-based insertion (UpdateEntry2).

도 17은 버전 기반의 삭제(Delete)의 동작 흐름을 보인 예시도.17 is an exemplary view illustrating an operation flow of version based delete.

도 18은 버전 기반의 삭제(DeleteParent)의 동작 흐름을 보인 예시도.18 is an exemplary view showing an operation flow of version-based delete (DeleteParent).

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

100 : 비단말 노드 101 : 비단말 노드의 엔트리 100: non-terminal node 101: entry of non-terminal node

103 : 비단말 헤더 200 : 단말 노드103: non-terminal header 200: terminal node

201 : 단말 노드의 엔트리 203 : 단말 헤더201: entry of terminal node 203: terminal header

본 발명은 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법에 관한 것으로, 특히 노드의 엔트리들을 연결하여 노드에 엔트리를 삽입하고 있는 중에도 락이나 래치를 획득하지 않고 검색연산을 할 수 있도록 하며, 노드 분할이 진행 중에 있는 노드에도 검색연산이 락이나 래치를 획득하지 않고 노드를 탐색할 수 있도록 하여 사용자의 질의 처리시 더욱 빠른 응답 시간을 보장할 수 있도록 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법에 관한 것이다.The present invention relates to an R-tree-based concurrency control method for non-blocking search operations. In particular, the present invention provides a method for performing search operations without acquiring locks or latches even while inserting entries into nodes by connecting entries of nodes. In addition, R-tree for non-blocking search operation that guarantees faster response time in user query processing by enabling search operation to search nodes without acquiring lock or latch even for nodes in which node splitting is in progress. It relates to a method based on concurrency control.

일반적으로 다차원 색인의 동시성 제어 기법들은 검색연산이 최소한의 락이나 래치를 획득하기 위한 연구를 진행하였으며, 일차원 색인의 동시성 제어 기법 중에는 검색연산이 락이나 래치를 획득하지 않고 색인을 탐색하는 T-tree 기반의 동시성 제어 기법이 제안되었다. In general, the concurrency control schemes of multidimensional indexes have been studied to acquire the minimum locks or latches in search operations. Among the concurrency control techniques of one-dimensional indexes, T-trees in which search operations search indexes without acquiring locks or latches Based concurrency control technique has been proposed.

종래의 다차원 색인은 탐색 경로의 변경 문제점을 가진다. 탐색 경로의 변경 문제를 해결하기 위한 종래의 동시성 제어 기법들은 두 가지 형태로 나눌 수 있는데, 첫 번째는 자신이 탐색한 경로상의 변경을 허용하지 않는 방법이고, 두 번째는 탐색한 경로상의 변경을 허용하지만 변경을 검출하고 나서 이를 바로 잡는 방법이다.Conventional multidimensional indexes have a problem of changing the search path. Conventional concurrency control techniques for solving the change of the search path can be divided into two types. The first is the method which does not allow the change of the searched route and the second is the change which allows the change of the searched route. But it's a way to detect changes and then fix them.

첫 번째 방법의 대표적인 기법은 락 결합(Lock Coupling)방식으로써 현재 노드의 락을 획득하고 나서 자식 노드로 이동하기 전에 현재 노드의 락을 해제하지 않고, 자식노드를 탐색하는 방법이다. 이러한 방식은 삽입연산 시 단말 노드의 변경된 MBR(Minimum Bounding Rectangle)을 부모노드에 반영해야 하는 R-Tree계열의 동시성 제어 기법으로는 적합하지 않은 방식이며, 갱신연산으로 인하여 락이 장시간 유지됨으로써 검색연산의 효율을 떨어뜨리는 문제를 갖는다.The representative technique of the first method is a lock coupling method, in which a child node is searched without acquiring a lock of the current node and then unlocking the current node before moving to the child node. This method is not suitable for the concurrency control technique of the R-Tree series, which must reflect the changed MBR (Minimum Bounding Rectangle) of the terminal node to the parent node during the insertion operation, and the lock operation is maintained for a long time due to the update operation. There is a problem of lowering the efficiency.

두번 째 방법은 자식노드가 변경되었음을 판단할 수 있는 방법과 잘못된 경로를 바로 잡을 수 있는 방법이 필요하며, 이러한 대표적인 기법은 Rlink-Tree이다.The second method needs a method to determine that the child node has changed and a method to correct the wrong path. The typical technique is R link- Tree.

Rlink-Tree는 자식노드가 변경되었음을 판단하기 위하여 LSN(Logical Sequence Number)를 이용하며, 노드 간 링크를 유지함으로써 잘못된 경로의 문제를 해결한다. Rlink-Tree는 Blink-Tree를 다차원 색인에 적용한 색인 기법이며, R-Tree는 엔트리들 간 순서가 없다는 특징을 가지고 있기 때문에 Blink-Tree의 최대키와 같은 역할을 LSN이 담당한다. 부모노드의 엔트리에 각각 자식노드의 LSN을 유지하고 있으며, 부모노드에서 읽어온 엔트리 LSN이 자식노드에 저장되어 있는 노드 LSN과 틀릴 경우, 부모노드에서 읽어온 LSN을 만날 때까지 같은 레벨의 링크를 따라감으로써 탐색경로의 변경문제를 해결한다. R link- Tree uses Logical Sequence Number (LSN) to determine if a child node has changed, and solves the problem of wrong path by maintaining link between nodes. R link -Tree is an indexing technique that applies B link -Tree to a multidimensional index. Since R-Tree is characterized by no order between entries, the LSN plays the same role as the maximum key of B link -Tree. If the parent node's entry maintains the child node's LSN, and if the entry LSN read from the parent node is different from the node LSN stored in the child node, the same level of link is encountered until the LSN read from the parent node is encountered. Following this solves the problem of changing the search path.

이러한 방식은 노드에 자식노드들의 LSN을 저장함으로써 노드의 팬 아웃(Fan-out)을 감소시키는 문제를 가지고 있으며, 단말 노드의 MBR이 변경되었을 경우 부모노드에 반영하기 위하여 락 결합방식을 이용하여 반영하여야 하기 때문에 검색연산의 효율을 떨어뜨리는 문제를 갖는다.This method has a problem of reducing the fan-out of the node by storing the LSN of the child nodes in the node, and reflects it using the lock coupling method to reflect the parent node when the MBR of the terminal node is changed. Because of this, there is a problem of reducing the efficiency of the search operation.

상기 언급한 다차원 동시성 제어기법들은 검색연산이 락이나 래치를 적어도 한번 이상은 노드에 획득하고 색인을 탐색하여야 하며, 이로 인하여 노드의 탐색시간이 길어지는 문제를 갖는다. 과거 일차원 색인을 위한 동시성 제어 기법 중에서 검색연산이 락이나 래치를 획득하지 않고 색인을 탐색할 수 있는 기법이 제안되었었다. 이는 갱신연산이 노드에 엔트리를 삽입하고자 할 경우 노드의 엔트리들을 새로운 노드에 복사한 다음, 복사된 노드에 엔트리를 삽입하는 방법을 사용하여 검색연산이 락이나 래치를 획득해야 하는 문제점을 해결하였다. In the above-mentioned multidimensional concurrency control schemes, a search operation must acquire a lock or latch at least once in a node and search an index, which leads to a long search time of the node. In the past, a concurrency control scheme for one-dimensional indexes has been proposed that allows search operations to search indexes without acquiring locks or latches. This solves the problem that the search operation must acquire a lock or latch by using a method of copying the entries of the node to a new node and then inserting the entry in the copied node when the update operation tries to insert an entry in the node.

그러나 이와 같은 기법은 하나의 삽입연산으로 인하여 쓰레기 노드가 하나씩 생김으로써, 많은 쓰레기 노드를 삭제하기 위한 부가적인 비용이 드는 문제점이 있었다.However, such a technique has a problem that additional garbage is deleted because many garbage nodes are generated one by one because of one insertion operation.

본 발명은 종래 기술의 문제점을 해결하기 위해 제안된 것으로써, 본 발명의 목적은 삽입연산이 노드에 엔트리를 삽입할 때마다 새로운 버전을 생성하지 않고 분할 시에만 새로운 버전을 생성하고 생성된 버전을 이용하여 분할을 수행하여 과도한 쓰레기 노드로 인해 생기는 문제점을 해결할 수 있도록 한 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법을 제공함에 있다.The present invention has been proposed to solve the problems of the prior art, and an object of the present invention is to generate a new version only at the time of partitioning and not to generate a new version every time an insert operation inserts an entry into a node. It is to provide an R-tree based concurrency control method for non-blocking search operation that can solve the problem caused by excessive garbage nodes by performing partitioning.

본 발명의 다른 목적은 각 노드의 엔트리를 링크드 리스트로 연결하여 노드 탐색 시 락이나 래치를 요청하지 않는 구조를 사용함으로써 검색위주의 공간 데이터베이스 시스템에서 빠른 응답시간을 보장할 수 있도록 한 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법을 제공함에 있다.
Another object of the present invention is a non-blocking search operation that ensures fast response time in a search-oriented spatial database system by using a structure that does not request locks or latches when searching for nodes by connecting entries of each node to a linked list. An R-tree based concurrency control method is provided for the present invention.

상기 본 발명의 목적을 달성하기 위한 본 발명의 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법은, 다차원 색인을 위한 R-tree 기반의 동시성 제어 방법에 있어서, 노드 구조의 각 엔트리 간에 링크드 리스트 구조를 포함하고, 엔트리 삽입, 삭제, 변경시에 상기 링크드 리스트를 구성하는 순서를 조정하여 검색 연산이 락이나 래치를 획득하지 않고 연산을 처리하도록 하는 것을 특징으로 한 다.The R-tree based concurrency control method for the non-blocking search operation of the present invention for achieving the object of the present invention, in the R-tree-based concurrency control method for a multi-dimensional index, linked between each entry of the node structure It includes a list structure, and adjusts the order of constructing the linked list upon entry insertion, deletion, and modification so that the search operation can process the operation without acquiring locks or latches.

또한, 상기 목적을 달성하기 위한 본 발명의 논 블록킹 검색연산을 위한 R-tree 기반의 동시성이 제어된 엔트리의 재활용 방법은, 색인마다 하나씩 유지하며, 삭제연산을 하기 위해 링크를 해제하고 난 후 그 값이 증가되며 증가된 값을 해당 노드의 엔트리에 유지하기 위해 사용되는 전역 엔트리 삭제계수; 소정 연산을 수행하기 전에 가장 최근의 전역 엔트리 삭제계수를 기록해 놓은 값으로 색인 연산 테이블에 유지되며, 각 연산들 마다 하나씩 유지되는 지역 엔트리 삭제계수; 및 색인에 수행되고 있는 연산들을 관리하는 색인 연산 테이블;을 이용하여 삭제 표시된 엔트리를 재활용하는 R-tree 기반의 동시성이 제어된 엔트리 재활용 방법에 있어서, 엔트리의 재활용은 소정 노드가 삭제되고, 상기 노드에 대한 전역 엔트리 삭제 계수가 저장된 상태에서 삽입연산 수행시, 상기 색인 연산 테이블의 지역 엔트리 삭제계수들 중에 최소 지역 엔트리 삭제계수와 상기 노드의 전역 엔트리 삭제계수의 크기를 비교하는 단계; 및 상기 전역 엔트리 삭제계수가 지역 엔트리 삭제계수보다 크면 상기 삭제된 노드에 곧바로 삽입을 행하지 않고, 삽입될 노드의 다음 엔트리들에 대하여 삽입이 가능한지를 검사를 수행하여 삽입 가능한 노드에 삽입 연산을 수행하는 단계;로 이루어짐을 특징으로 한다.
또한, 상기 목적을 달성하기 위한 본 발명의 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법은, 버전을 생성하여 R-tree 기반의 동시성을 제어하는 방법에 있어서, 삽입연산이 노드에 엔트리를 삽입할 때마다 새로운 버전을 생성하지 않고 분할 시에만 새로운 버전을 생성하고, 생성된 버전을 이용하여 분할을 수행토록 된 것을 특징으로 한다.
상기 목적을 달성하기 위한 본 발명의 논 블록킹 검색연산을 위한 R-tree기반의 동시성이 제어된 삭제 방법은, 엔트리를 삭제함에 있어서, 삭제하여야할 엔트리가 있는 단말 노드를 찾고 해당 단말 노드 안에서 엔트리를 삭제하되, 상기 삭제하여야할 엔트리가 있는 단말 노드는 단말노드까지의 경로를 저장하고 있는 삭제 스택 및 삭제할 엔트리와 겹치는 엔트리들을 저장하고 있는 검색 스택을 동시에 사용하여 찾는 것을 특징으로 한다.
In addition, the R-tree-based concurrency-controlled entry recycling method for the non-blocking search operation of the present invention for achieving the above object is maintained after each index, and after the link is released for deletion operation, A global entry deletion factor that is incremented and used to maintain the increased value in the entry of the node; A local entry deletion factor, which is maintained in the index operation table with a value recording the most recent global entry deletion factor before performing a predetermined operation, and maintained one by one for each operation; And an index operation table for managing operations being performed on the index. An R-tree-based concurrency-controlled entry recycling method for recycling an entry marked for deletion using the method, wherein the recycling of entries is performed by deleting a predetermined node. Comparing the minimum local entry deletion coefficient among the local entry deletion coefficients of the index operation table with the size of the global entry deletion coefficient of the node when performing an insert operation with a global entry deletion coefficient stored in the index operation table; And if the global entry deletion factor is greater than a local entry deletion factor, without inserting directly into the deleted node, checking whether insertion is possible for the next entries of the node to be inserted, and performing an insert operation on the insertable node. Characterized in that consisting of;
In addition, the R-tree-based concurrency control method for the non-blocking search operation of the present invention for achieving the above object, in the method for generating a version to control the R-tree-based concurrency, insert operation is entered in the node It is characterized in that the new version is generated only at the time of splitting without creating a new version every time the insert is inserted, and the splitting is performed using the generated version.
In order to achieve the above object, the R-tree-based concurrency-controlled deletion method for the non-blocking search operation of the present invention, in deleting an entry, searches for a terminal node with an entry to be deleted and searches for an entry in the corresponding terminal node. The terminal node having an entry to be deleted may be deleted by simultaneously using a deletion stack storing a path to the terminal node and a search stack storing entries overlapping with the entry to be deleted.

삭제delete

이하, 본 발명의 바람직한 실시 예를 첨부된 도면을 참조하여 보다 상세하게 설명한다. 단, 하기 실시 예는 본 발명을 예시하는 것일 뿐 본 발명의 내용이 하기 실시 예에 한정되는 것은 아니다.
본 발명은 도시하지는 않았지만 질의 처리기를 통해 입력되는 사용자 질의에 대하여 데이터 베이스로부터 질의 결과를 검색하는 검색 엔진 및 객체의 삽입, 삭제 등의 동시성 제어 기능을 수행하기 위한 동시성 제어 유닛을 구비하는 공간 데이터 베이스 시스템에서 구현된다.
Hereinafter, exemplary embodiments of the present invention will be described in detail with reference to the accompanying drawings. However, the following examples are merely to illustrate the present invention is not limited to the contents of the present invention.
Although the present invention is not shown, a spatial database includes a search engine that retrieves query results from a database for a user query input through a query processor, and a concurrency control unit for performing concurrency control functions such as insertion and deletion of objects. Implemented on the system.

도 1은 본 발명의 공간 데이터 베이스 시스템을 위한 R-Tree의 구성을 보인 예시도이다.1 is an exemplary view showing the configuration of an R-Tree for a spatial database system of the present invention.

도시한 바와 같이, 본 발명에 의한 공간 데이터 베이스 시스템을 위한 R-Tree는 비단말 노드(100)와 단말 노드(200)으로 구성된다. 비단말 노드(100)는 비단말 엔트리(101)를 포함하고, 단말 노드(200)는 단말 엔트리(201)를 포함한다.As shown, the R-Tree for the spatial database system according to the present invention is composed of a non-terminal node 100 and a terminal node 200. The non-terminal node 100 includes a non-terminal entry 101, and the terminal node 200 includes a terminal entry 201.

도 2는 도 1에서 비단말 노드의 구성을 보인 예시도로, 비단말 노드(100)는 비단말 헤더(103)와 비단말 엔트리(101)로 구성되며, 엔트리들 간 링크드 리스트로 연결된 구조이다. FIG. 2 is a diagram illustrating a configuration of a non-terminal node in FIG. 1, wherein the non-terminal node 100 includes a non-terminal header 103 and a non-terminal entry 101, and is connected to a linked list between entries.

도 3은 도 1에서 단말 노드의 구성을 보인 예시도로, 단말 노드(200)는 단말 헤더(203)와 단말 엔트리(201)로 구성되며, 엔트리들 간 링크드 리스트로 연결된 구조이다. 3 is a diagram illustrating a configuration of a terminal node in FIG. 1, wherein the terminal node 200 includes a terminal header 203 and a terminal entry 201, and is connected to a linked list between entries.

위와 같은 도 2와 도 3의 구조에서 삽입연산은 단위 연산을 보장한다. 왜냐하면, 링크의 크기는 워드 얼라인(Word-Align)에 맞춘 크기를 가지고 있고, 링크를 연결하는 연산은 하나의 명령어(Instruction)로 가능하기 때문에 링크를 연결하는 연산 중에 인터럽트가 발생할 수가 없기 때문이다.In the structure of FIGS. 2 and 3 as described above, the insert operation guarantees a unit operation. Because the size of the link has the size to match the word alignment, and the link linking operation is possible with one instruction, the interrupt cannot occur during link linking operation. .

도 4는 링크드 리스트 기반의 삽입 변경의 과정을 보인 예시도로, 도 4a는 엔트리를 삽입하기 전의 노드의 상태를, 도 4b는 새로운 엔트리를 삽입하는 상태를 나타낸 것이다.4 illustrates an example of a linked list-based insertion change process, FIG. 4A illustrates a state of a node before inserting an entry, and FIG. 4B illustrates a state of inserting a new entry.

도시한 바와 같이, 최대 5개의 엔트리를 가질 수 있는 노드에서 3개의 노드를 사용하고 2개의 노드가 비어있는 상태(300 : 사용중인 노드는 sltFst의 연결 리스트로 구성되어 있고, 비어있는 노드는 sltFree의 연결 리스트로 구성되어 있음) 에서 먼저, 삽입할 엔트리의 내용을 엔트리4에 넣고 엔트리4 다음에 엔트리 3을 연결 하고 나서 엔트리2 다음에 엔트리 4을 연결하여 엔트리2와 엔트리3사이에 삽입 연산을 한 후, 최대 5개의 엔트리를 가질 수 있는 노드에서 4개의 노드를 사용하고 1개의 노드가 비어있는 상태(400)가 된다. sltFst는 노드의 첫 번째 슬롯(slot)을 말하고, sltFree는 노드의 첫 번째 빈 슬롯을 가리킨다. ① 빈 슬롯을 찾은 다음, OID(Object Identification Number)와 MBR(Minimum Bounding Rectangle)을 복사한다. ② 엔트리3과 엔트리4의 데이터 링크를 연결하고, ③ 마지막으로 엔트리2를 엔트리4와 연결한다. ③의 과정이 ②보다 먼저 일어난다면 검색연산은 엔트리4를 읽을 수 있고, 엔트리3으로의 링크가 아직 연결되어 있지 않기 때문에 엔트리3을 읽을 수 없는 문제가 생긴다. 따라서 ②와 같은 과정은 ③전에 수행되어야 한다. As shown, three nodes are used in a node that can have up to five entries, and two nodes are empty (300: the active node consists of a linked list of sltFst, and the empty node is a sltFree First, insert the contents of the entry to be inserted into entry 4, connect entry 4 to entry 3, then connect entry 2 to entry 4, and perform an insert operation between entry 2 and entry 3. Thereafter, four nodes are used in a node that can have a maximum of five entries, and one node becomes empty (400). sltFst refers to the first slot of the node, and sltFree refers to the first empty slot of the node. ① Find an empty slot and copy the object identification number (OID) and minimum bounding rectangle (MBR). ② connect the data link of entry 3 and entry 4, and ③ finally connect entry 2 to entry 4. If the process of ③ occurs before ②, the search operation can read entry 4, and the entry 3 cannot be read because the link to entry 3 is not yet connected. Therefore, the same process as ② should be performed before ③.

즉, 상기의 순서로 연결함으로써 새로운 엔트리(Entry4)를 엔트리2와 엔트리3 사이에 넣을 수 있으며, 이 순서대로 연결하면 새로운 엔트리를 노드에 추가할 때도 검색 연산은 아무런 지장 없이 검색을 수행할 수 있는 장점이 있다. In other words, by connecting in the above order, a new entry (Entry4) can be inserted between entry 2 and entry 3, and in this order, the search operation can be performed without any problem even when adding a new entry to the node. There is an advantage.

도 5는 링크드 리스트 기반의 삭제 변경의 과정을 보인 예시도로, 엔트리2를 삭제한 후의 노드의 상태를 나타낸 것이다.5 is a diagram illustrating a process of a change of deletion based on a linked list, and shows a state of a node after deleting entry 2. FIG.

즉, 도 4a의 상태에서 도4b의 상태와 도 5의 상태가 되는 것으로, 이에 의하면, 최대 5개의 엔트리를 가질 수 있는 노드에서 3개의 노드를 사용하고 2개의 노드가 비어있는 상태(300)에서 엔트리2를 삭제 연산을 한 후, 최대 5개의 엔트리를 가지는 노드에서 2개의 엔트리를 사용하고 3개의 노드가 비어 있는 상태(500)가 된다.In other words, the state of FIG. 4A becomes the state of FIG. 4B and the state of FIG. 5, whereby three nodes are used in a node that can have up to five entries, and two nodes are empty 300. After the entry 2 is deleted, two entries are used in a node having up to five entries, and three nodes become empty (500).

즉, ① 삭제할 슬롯을 찾고, ② 엔트리1과 엔트리3을 연결한다. 만약 엔트리2와 엔트리3의 데이터 링크를 해제한다면, 삭제하기 전 이미 엔트리2를 읽고 있는 검색연산은 엔트리3으로 이동할 수 없는 문제가 생기기 때문에 엔트리2와 엔트리3의 데이터 링크를 해제해서는 안 된다.That is, ① find the slot to delete and ② connect entry1 and entry3. If you break the data link between entry 2 and entry 3, you should not release the data link between entry 2 and entry 3, because the search operation that is already reading entry 2 before you delete it will not move to entry 3.

상기 삭제 연산은 해당 엔트리에 삭제표시만 함으로써 이루어진다.The delete operation is performed by simply marking a delete on the entry.

도 6은 링크드 리스트 기반의 엔트리 재활용의 과정을 보인 예시도로, 상기 도 5에 의해 삭제 표시를 해둔 엔트리의 재사용에 대한 내용이다.FIG. 6 illustrates an example of a linked list-based entry recycling process. FIG. 6 illustrates reuse of entries marked for deletion by FIG. 5.

도 6에 의하면, 엔트리 삭제계수(EDSN : Entry Delete Sequence Number)를 이용한 삭제 후 삽입에 대한 과정을 보인다. 엔트리 재사용의 근본적인 문제는 삭제된 엔트리에 대해서 검색연산이 읽고 있을지 모르기 때문에 삭제된 엔트리를 재사용할 수 없다는 것이다. 따라서 본 발명에서는 삭제된 엔트리에 검색연산이 읽고 있지 않다는 것을 보장하기 위한 방법을 고려한다.6 shows a process for insertion after deletion using an Entry Delete Sequence Number (EDSN). The fundamental problem with entry reuse is that deleted entries cannot be reused because the search operation may be reading about deleted entries. Thus, the present invention considers a method for ensuring that a search operation is not reading on deleted entries.

엔트리 삭제계수를 노드의 각 엔트리에 유지하고, 색인에 수행되고 있는 연산들을 관리하는 색인연산테이블(IOT : Index Operation Table)을 이용함으로써 이러한 문제를 해결한다. EDSN은 순차적으로 증가하는 값이며, 전역 엔트리 삭제계수(G-EDSN : Global EDSN)와 지역 엔트리삭제계수(L-EDSN: Local EDSN)가 있다. This problem is solved by using an index operation table (IOT) that maintains the entry deletion coefficient in each entry of the node and manages the operations being performed on the index. EDSN is a sequentially increasing value, and there is a global entry deletion coefficient (G-EDSN) and a local entry deletion coefficient (L-EDSN: Local EDSN).

G-EDSN은 색인마다 하나씩 유지하며, 삭제연산을 하기 위해 링크를 해제하고 난 후 G-EDSN을 증가하고, 증가된 G-EDSN을 엔트리에 저장하기 위해 사용한다. One G-EDSN is maintained for each index. The G-EDSN is incremented after the link is released for the delete operation. The G-EDSN is used to store the increased G-EDSN in the entry.

L-EDSN은 연산을 수행하기 전에 가장 최근의 G-EDSN을 기록해 놓은 값이다. L-EDSN은 IOT에 유지되며, 각 연산들마다 하나씩 유지된다. The L-EDSN is a value that records the most recent G-EDSN before performing an operation. The L-EDSN is maintained in the IOT, one for each operation.

IOT에서 관리되는 연산들의 생명주기(Lifetime)는 하나의 노드를 검색하고, 종료되는 시점까지이며, 다음 노드를 탐색하기 위해서는 새로운 G-EDSN을 IOT의 L-EDSN으로 복사하여야 한다. 이는 연산들의 생명주기를 아주 짧게 만듦으로 엔트리 재사용을 빠르게 하기 위함이다. 검색연산을 제외한 갱신연산들의 L-EDSN은 ∞이다. L-EDSN은 삽입연산이 수행될 때 삽입되어질 엔트리의 EDSN을 확인하고 EDSN보다 작은 L-EDSN을 가진 연산이 IOT에 존재한다면, 그 엔트리는 검색연산에 의해서 검색되고 있는 엔트리일지도 모르기 때문에 그 엔트리에 삽입하지 않기 위해 사용된다. 각 엔트리의 EDSN 초기 값은 -∞이다. The lifetime of operations managed in the IOT is until one node is searched and terminated. To discover the next node, the new G-EDSN must be copied to the L-EDSN of the IOT. This is to speed up entry reuse by making the life cycle of operations very short. L-EDSN of update operations except search operation is ∞. The L-EDSN checks the EDSN of the entry to be inserted when the insert operation is performed, and if there is an operation in the IOT with an L-EDSN smaller than the EDSN, the entry may be the entry being searched for by the search operation. Used to not insert. The EDSN initial value of each entry is -∞.

도 6a에서 초기 G-EDSN은 5이고, 3개의 연산이 동시에 실행되고 있다. O1은 L-EDSN값이 5이고, 검색연산을 한다. O2는 삭제연산을 하고, O3는 삽입연산을 하며, O1이 R2에 대하여 키를 비교하는 시점이라고 가정하자. 이때 O2가 R2를 삭제한다고 하면 먼저 R1에서 R2로의 링크를 해제하고 난후 R2의 EDSN은 G-EDSN을 증가시킨 값인 6으로 저장한다. In FIG. 6A, the initial G-EDSN is 5, and three operations are executed at the same time. O1 has an L-EDSN value of 5 and performs a search operation. Suppose that O2 deletes, O3 inserts, and O1 compares keys against R2. At this time, if O2 deletes R2, first releases the link from R1 to R2, and then stores the EDSN of R2 as 6, which is an increase value of G-EDSN.

도 6b는 R2가 삭제되고, EDSN이 저장된 모습을 보여준다. 그 다음으로 도 6b의 상태에서 삽입연산이 수행되면 sltFree는 R2를 가리키기 때문에 R2에 삽입하려고 할 것이다. 그러나 IOT의 L-EDSN들 중에 최소 L-EDSN인 5보다 R2의 EDSN 6이 크기 때문에 R2에 삽입을 해서는 안 된다. EDSN이 작다는 것은 연산들 중 누군가가 삭제연산으로 링크를 해제하기 전에 그 엔트리를 검색하고 있었을 수도 있다는 가능성을 가지고 있기 때문에 그 엔트리에 삽입을 해서는 안 되는 것이다. 따라서 도 6c와 같이 각 엔트리는 연결된다. O1이 연산을 종료한 이후에 삽입연산을 수행한다 면 R2에 삽입되어 질 수 있다.6B shows a state in which R2 is deleted and an EDSN is stored. Next, if the insert operation is performed in the state of FIG. 6B, sltFree points to R2 and will try to insert into R2. However, since the EDSN 6 of R2 is larger than the minimum L-EDSN of 5 among the L-EDSNs of the IOT, it should not be inserted into R2. A small EDSN should not be inserted into the entry because it has the possibility that some of the operations may have been searching for the entry before unlinking it by the delete operation. Therefore, each entry is connected as shown in FIG. 6C. If O1 performs an insert operation after finishing the operation, it can be inserted into R2.

도 7은 버전 기반의 검색(FindFirst)의 동작 흐름을 보인 예시도로, 검색(FindFirst)은 질의 범위에 속하는 첫 번째 엔트리를 찾는 과정이다. 루트 노드를 스택에 푸쉬(push)하고 엔트리를 찾는 과정을 통해 첫 번째 엔트리를 찾아낸다.7 is a diagram illustrating an operation flow of a version-based search (FindFirst), the search (FindFirst) is a process of finding the first entry belonging to the query range. The first entry is found by pushing the root node onto the stack and looking for an entry.

즉, 로트노드를 검색 스택에 넣은 후(단계701), 검색 스택이 비어있는지를 조사하며(단계702), 검색 스택이 비어있으면 종료하고, 비어있지 않으면 검색 스택에서 아이템을 하나 꺼낸다(단계703),That is, after putting a lotnode into the search stack (step 701), it checks if the search stack is empty (step 702), exits if the search stack is empty, and pulls out one item from the search stack if it is not empty (step 703). ,

이후, RID(Record Identification Number)인지를 조사하여(단계704) RID라 판단되면 결과를 반환하고(단계708), 단계(단계702)로 진행하며, RID가 아니라 판단되면 검색하고자 하는 MBR과 현재 엔트리의 MBR이 겹치는가를 조사하여(단계706) 겹치지 않는 것으로 판단되면 다른 엔트리로 이동하여(단계705) 다시 단계(706)를 수행하며, 겹치는 것으로 판단되면 검색 스택에 아이템 하나를 삽입하고(단계707) 상기 단계(705)로 진행한다.Thereafter, it is determined whether it is a record identification number (RID) (step 704), and if it is determined that the RID is returned (step 708), the process proceeds to step (702). If it is determined that the MBRs of the overlap do not overlap (step 706), and if it is determined that there is no overlap (step 706), it moves to another entry (step 705) and performs step 706 again. Proceed to step 705.

도 8은 버전 기반의 검색(FindNext)의 동작 흐름을 보인 예시도로, 검색(FindNext)은 스택이 비어있을 때까지 반복하면서 노드를 순회하는 과정을 수행한다.8 is a diagram illustrating an operation flow of a version-based search (FindNext), the search (FindNext) iterates until the stack is empty while iterating through the nodes.

즉, 검색 스택이 비어있는지 조사하여(단계801) 비어 있으면 종료하고 비어 있지 않으면 검색 스택에서 아이템을 하나 꺼낸다(단계802). 그리고 RID여부를 판단하여(단계803) RID이면 결과를 반환하고(단계806), 단계(801)로 진행하며, RID가 아니면 검색하고자 하는 MBR과 현재 엔트리의 MBR이 겹치는가를 판단하여(단계805) 겹치지 않는 것으로 판단되면 다른 엔트리로 이동하여(단계804) 다시 단계(805)를 수행하며, 겹치는 것으로 판단되면 검색 스택에 아이템 하나를 삽입하고(단계806) 상기 단계(804)로 진행한다.In other words, the search stack is checked for empty (step 801), if it is empty, it exits, and if it is not empty, one item is taken out of the search stack (step 802). If the RID is determined (step 803), if the RID is returned (step 806), the process proceeds to step 801, and if it is not the RID, it is determined whether the MBR to be searched and the MBR of the current entry overlap (step 805). If it is determined that there is no overlap (step 804), it moves to another entry and performs step 805 again. If it is determined to overlap, one item is inserted into the search stack (step 806) and the process proceeds to step 804.

도 9는 버전 기반의 삽입(Insert)의 동작 흐름을 보인 예시도로, 삽입(Insert)은 객체를 삽입할 단말 노드를 찾는 삽입(FindLeaf) 과정과 단말 노드에 객체를 삽입하는 과정으로 나누어 볼 수 있다. FIG. 9 is an exemplary view illustrating an operation flow of a version-based Insert. Insert may be divided into a FindLeaf process of finding a terminal node to insert an object and a process of inserting an object into the terminal node. .

단말 노드 분할로 반환되게하는 리트라이(Retry) 값을 먼저 초기값을 투루(True)로 설정한 후(단계901) 리트라이 값이 투루이면 삽입을 종료하고 폴스(False)이면(단계902) 리트라이를 폴스로 설정(단계903)한 다음 삽입(FindLeaf)(단계904)을 수행한다. 삽입(FindLeaf) 과정 중에 사용한 삽입스택에서 아이템을 하나 꺼내게 되는데 이것은 단말노드이다(단계905). 이 단말 노드에 삽입을 수행하여야 하기 때문에 노드가 가득 차 있는지 판단을 한 후(단계906), 가득 차 있다면 단계(907)를 수행하고, 그렇지 않다면 단말 노드에 직접 엔트리를 삽입한다(단계908). Retry value to be returned to the terminal node split is set first to True (step 901). If the retry value is True, the insertion is terminated and if it is False (Step 902). Set Tri to Fall (step 903) and then perform FindLeaf (step 904). One item is taken out from the insertion stack used during the FindLeaf process, which is a terminal node (step 905). Since it is necessary to insert the terminal node, it is determined whether the node is full (step 906), and if it is full, step 907 is performed. Otherwise, an entry is directly inserted into the terminal node (step 908).

먼저 분할이 일어났을 경우(단계907) 그 결과를 리트라이에 설정한 후 만약 이 값이 투루이면(단계911) 이 단말 노드를 버전표시 하고 쓰레기 수집기에 추가하고(단계912) 그렇지 않으면 단말노드 락을 해제하고(단계913) 종료한다. If splitting occurs first (step 907), the result is set in the retry, and if this value is true (step 911), this terminal node is versioned and added to the garbage collector (step 912) otherwise terminal node lock. Is released (step 913) and ends.

다음으로 단말노드에 바로 삽입을 하였을 경우(단계908) 삽입의 대표 MBR이 변경되었을 경우 삽입(UpdataParent)(단계910)을 수행하고 그렇지 않으면 단말노드 락을 해제(단계913)하고 종료한다.Next, when the terminal node is directly inserted (step 908), when the representative MBR of the insertion is changed, an insertion (UpdataParent) (step 910) is performed. Otherwise, the terminal node lock is released (step 913), and the process ends.

도 10은 버전 기반의 삽입(FindLeaf)의 동작 흐름을 보인 도로, 삽입 연산 수행시 삽입하여야 할 단말 노드를 찾는 예시도이다.FIG. 10 is an exemplary view illustrating an operation flow of version-based insertion (FindLeaf) and finding a terminal node to be inserted when performing an insertion operation.

도 10에 의하면, 삽입(단계904)은 비단말 노드의 MBR을 최소로 늘릴 수 있는 엔트리를 찾으면서(단계1006) 단말 노드 방향으로 색인을 탐색하며, 단말 노드를 만나면(단계1003) 함수를 종료한다. 삽입(단계904)이 단말 노드를 찾기 위해 탐색하면서 탐색된 비단말 노드와 단말 노드를 스택에 쌓는 과정을 수행하는데, 이는 삽입연산 시 부모노드의 MBR을 확장하거나(단계910) 노드의 분할이 일어나는 경우에(단계907) 사용되어진다. 단계(1004)에서 처럼 만약 노드가 버전되어 있다면 노드의 락을 획득하기 위하여 기다리는 중에 다른 연산에 의해서 노드가 분할되어진 경우이다. 이러한 경우는 스택을 이용하여(1007) 부모노드를 다시 탐색하게 된다. 10, insertion (step 904) searches for an index in the direction of the terminal node, looking for an entry that can increase the MBR of the non-terminal node to the minimum (step 1006), and terminates the function if it encounters the terminal node (step 1003). do. The insertion (step 904) performs a process of stacking the searched non-terminal node and the terminal node on the stack while searching for the terminal node, which expands the MBR of the parent node (step 910) or the splitting of the node occurs. In that case (step 907). If the node is versioned as in step 1004, then the node has been partitioned by another operation while waiting to acquire the lock of the node. In this case, the parent node is searched again using the stack 1007.

도 11은 버전 기반의 삽입(UpdateParent)의 동작 흐름을 보인 도로, 도 9에서 삽입 연산으로 인해 부모 노드들의 MBR을 변경시켜 주어야 할 경우 스택에서 부모 노드들을 하나씩 꺼내어 변경시켜주는 것을 나타낸 것이다.FIG. 11 illustrates an operation flow of version-based insertion (UpdateParent). In FIG. 9, when the MBR of parent nodes is to be changed due to the insertion operation, the parent nodes are removed from the stack one by one.

도 11에 의하면, 삽입연산 시 부모노드의 MBR을 확장하는 경우(단계910)의 과정이다. 삽입(UpdateParent)은 스택을 이용하여 부모노드 방향으로 이동하면서(단계1102) 자식노드의 노드 MBR이 변경되었을 경우 부모노드의 엔트리 MBR을 변경시키는 작업(단계1104)을 수행한다. 만약 스택에 저장되어 있는 부모노드들이 버전되었다면 삽입(FindLatestNode)함수를 호출하여 버전되어 있는 노드를 위한 최신버전을 찾는다(단계1103). 최신 버전을 찾은 다음 삽입(UpdateEntry1)(단계1104)을 이용하여 노드의 엔트리 MBR을 변경한다. 삽입(UpdateParent)은 엔트리 재사용문제로 인하여 노드에 빈 엔트리가 있지만 삽입을 못하는 경우가 발생할 수 있다. 이러 한 경우는 잠시 다른 연산으로 제어를 넘겨주고 나서 다시 엔트리를 재사용할 수 있는지 재 시도를 마칠 때까지 기다린다. Referring to FIG. 11, the MBR of the parent node is expanded (step 910) during the insertion operation. Insertion (UpdateParent) moves to the parent node direction using the stack (step 1102) and changes the entry MBR of the parent node (step 1104) when the node MBR of the child node is changed. If the parent nodes stored in the stack are versioned, the findLatestNode function is called to find the latest version for the versioned node (step 1103). The latest version is found and the entry MBR of the node is changed using insert (UpdateEntry1) (step 1104). Insertion (UpdateParent) may have an empty entry in the node due to an entry reuse problem, but can not insert. In this case, you can pass control to another operation for a while and wait until you have finished retrying to re-use the entry.

검색연산은 락이나 래치를 요청하지 않는 연산이며, 또한 IOT에 기록되는 검색연산의 L-EDSN은 아주 짧은 생명주기를 갖기 때문에 삽입(UpdateParent)은 장시간 기다리지 않고 엔트리를 재사용할 수가 있다. A search operation is an operation that does not require a lock or latch, and since the L-EDSN of the search operation written to the IOT has a very short life cycle, UpdateParent can reuse an entry without waiting for a long time.

도 12a는 버전 기반의 삽입(FindLatestNode)의 동작 흐름을, 도 12b는 도 12a의 이해를 돕기 위한 도면을 나타낸 것이다.FIG. 12A illustrates an operation flow of version-based insertion (FindLatestNode), and FIG. 12B illustrates a diagram for better understanding of FIG. 12A.

자식노드의 단순 삽입 또는 삽입 후 분할이 이루어진 경우 부모 노드안의 자식노드의 해당 엔트리를 변경해주어야 하는데 이때, 스택에 저장되어 부모라고 알고 있는 노드가 분할이 되어 해당 엔트리가 옆의 다른 노드로 옮겨 갔을 경우를 대비하여 적절한 노드를 찾는 과정이다.In case of splitting after simple insertion or insertion of a child node, the corresponding entry of the child node in the parent node should be changed.In this case, when the node stored in the stack and known as the parent is split, the entry is moved to another node next to it. This is the process of finding the appropriate node in preparation for it.

즉, 삽입(FindLatestNode)함수는 포인터의 엔트리를 포함하는 버전이 안 된 최신 노드를 찾는 과정을 수행한다. 도 12b에서 N3이 버전되어 있다고 할 경우 찾아야할 검색공간(Search Space)은 N5와 N6이기 때문에 N3의 오른쪽 링크를 따라 N5와 N6로 이동하면서 찾고자 하는 엔트리를 갖는 최신 버전을 찾는다.In other words, the FindLatestNode function searches for the latest non-versioned node including the entry of the pointer. In FIG. 12B, if N 3 is versioned, the search space to be searched is N 5 and N 6 , so the latest version having the entry to be searched while moving to N 5 and N 6 along the right link of N 3 is found. Find.

도 13a 및 도 13b는 버전 기반의 삽입(SplitLeafNode)의 동작 흐름을 나타낸 도로, 삽입하여야 할 알맞은 단말 노드를 찾았으나 해당 노드가 가득 차 노드를 분할해야 하는 경우로, 새로운 노드 2개를 생성하여 해당 노드의 엔트리들을 나눠 갖고 부모 노드들의 MBR을 변경시켜 주어야 할 경우에 대한 처리도 포함한다.13A and 13B are diagrams illustrating an operation flow of version-based insertion (SplitLeafNode), in which case a suitable terminal node to be inserted is found, but the corresponding node is full and the node needs to be split. It also includes the process of splitting node entries and changing the parent node's MBR.

도 13에 의하면, 삽입(SplitLeafNode)은 단말 노드를 분할하는 과정이다. 기본적으로 분할 과정은 분할할 노드를 그대로 두고 새로운 노드 두개를 생성하여 분할되기 전의 노드의 상태를 변경하지 않고 유지하는 버전 기반의 분할 기법을 사용한다.Referring to FIG. 13, insertion (SplitLeafNode) is a process of splitting a terminal node. Basically, the partitioning process uses a version-based partitioning technique that leaves the nodes to be split and creates two new nodes without changing the state of the nodes before splitting.

분할할 노드가 단말 노드라면 분할 후 적당한 노드에 직사각형(Rect : Rectangle)을 삽입하게 된다. 삽입(SplitLeafNode)은 노드의 왼쪽 노드와 오른쪽 노드에 대해서 각각 락을 획득한 후 시작한다(단계1307,1308). 노드의 락을 획득하는 순서는 항상 왼쪽에서 오른쪽 방향으로 획득한다. 만약 그렇지 않다면 락을 획득하는 동안 다른 연산과의 교착상태(Deadlock)가 발생될 수 있다. 따라서 단계(1303)에서처럼 노드의 락을 풀고, 왼쪽에서부터 오른쪽 방향으로 락을 획득한다. 락을 잡은 후에 해당 노드가 버전되어 있는지 확인해봐야 하며(단계1305), 버전이 되어 있다면 삽입과정을 다시 시작한다. 이는 노드의 락을 풀고(단계1306) 노드와 연결된 왼쪽노드를 찾은 다음 다시 노드의 락을 잡았을 경우, 노드가 버전이 되어 있다면 다른 삽입연산에 의해서 노드가 분할된 경우이다. 따라서 해당 노드를 분할하여서는 안 되는 경우이기 때문에 다시 삽입연산을 수행한다. 새로운 노드 두 개를 생성하고(단계1315) 서로의 링크를 연결하고(단계1317), 두 개의 노드 중 가장 적합한 노드에 직사각형(Rect)를 삽입한다(단계1318). 이제 삽입연산에서 남은 것은 부모노드에 새로 생긴 노드의 포인터와 MBR을 삽입하는 것이다(단계1326). 만약 부모노드에 빈 엔트리가 없을 경우 부모 노드를 삽입(SplitInternalNode)를 이용하여 분할하고(단계1333), 그렇지 않은 경우는 부모 노드에 엔트리를 삽입하고, 만약 부모노드의 MBR이 변경된다면(단계1327) 삽입(UpdateParent)(단계1328)을 호출함으로써 부모노드를 가리키는 상위 노드의 엔트리 MBR을 변경시켜 주어야 한다. 단계(1320)에서 스택이 비어있다는 것은 노드가 루트노드임을 나타내기 때문에 새로운 루트노드를 위한 노드를 생성한 다음(단계1322), 루트노드 포인터를 새로운 루트노드로 바꾸어주고 기존 루트 노드는 버전 되었다고 표시한다(단계1324). 스택이 비어있지 않다면 부모 노드에 엔트리를 삽입해야 하는 경우이므로 스택에서 노드를 하나 팝(pop)하고, 팝한 노드의 최신 노드를 부모로 저장한다(단계1321). 찾은 노드에 빈 엔트리가 있으면 삽입하고(단계1326), 없다면 해당 노드를 분할한다(단계1333). 마지막으로 단계(1329)처럼 분할되기 전의 노드가 가리키는 왼쪽과 오른쪽 노드를 연결하고, 분할된 노드의 오른쪽 링크를 새로 생성한 왼쪽 노드에 연결함으로써(단계1329) 삽입(FindLatestNode)시에 노드의 최신버전을 찾을 수 있도록 한다. If the node to be split is a terminal node, a rectangle (Rect: Rectangle) is inserted into an appropriate node after splitting. SplitLeafNode starts after acquiring locks for the left and right nodes of the node, respectively (steps 1307 and 1308). The order of acquiring the locks of nodes is always obtained from left to right. If not, a deadlock with another operation can occur while acquiring the lock. Thus, as in step 1303, the node is unlocked and the lock is acquired from the left to the right direction. After holding the lock, we need to verify that the node is versioned (step 1305), and if so, restart the insertion process. This is when the node is unlocked (step 1306), the left node connected to the node is found, and the node is locked again. If the node is a version, the node is divided by another insert operation. Therefore, insert operation is performed again because the node should not be divided. Create two new nodes (step 1315), connect the links to each other (step 1317), and insert a rectangle into the most suitable node of the two nodes (step 1318). All that remains of the insert operation is to insert the MBR and the pointer of the new node to the parent node (step 1326). If there is no empty entry in the parent node, split the parent node using SplitInternalNode (step 1333), otherwise insert an entry in the parent node, if the parent node's MBR is changed (step 1327). By calling Insert (UpdateParent) (step 1328), the entry MBR of the parent node pointing to the parent node must be changed. Since the stack is empty at step 1320 indicates that the node is a root node, create a node for the new root node (step 1322), then replace the root node pointer with the new root node and indicate that the existing root node is versioned. (Step 1324). If the stack is not empty, an entry is required to be inserted into the parent node, so a node is popped from the stack, and the latest node of the popped node is stored as a parent (step 1321). If there is an empty entry in the found node (step 1326), the node is split (step 1333). Finally, as shown in step 1329, connect the left and right nodes pointed to by the node before the split, and connect the right link of the split node to the newly created left node (step 1329). To be found.

도 14a 및 도 14b는 버전 기반의 삽입(SplitInternalNode)의 동작 흐름을 나타낸 도로, 단말 노드가 아닌 비단말 노드가 분할해야하는 경우 이를 나타낸 것이다.14A and 14B are diagrams illustrating an operation flow of version-based insertion (SplitInternalNode), and a case where a non-terminal node, rather than a terminal node, needs to be split.

도 14에 의하면, 분할할 노드가 비단말 노드라면 분할 후 새로 생성한 두 개의 자식노드를 위한 엔트리 두개를 삽입하게 된다. 모든 과정은 삽입(SplitLeafNode)와 유사하며, 노드에 엔트리를 삽입하는 부분만 다르다. 삽입(SplitLeafNode)는 삽입할 적당한 노드를 찾아서 엔트리를 삽입하지만 삽입(SplitInternalNode)는 새로 생성된 노드들 중에 분할된 노드가 들어있는 노드를 찾고, 찾은 노드에 두 개의 자식 노드를 삽입하는 연산을 한다(단계1418).According to FIG. 14, if a node to be split is a non-terminal node, two entries for two newly created child nodes are inserted after splitting. The whole process is similar to SplitLeafNode, except for inserting an entry into a node. SplitLeafNode finds a suitable node to insert and inserts an entry, while SplitInternalNode finds a node containing a split node among newly created nodes and inserts two child nodes into the found node. Step 1418).

도 15a는 버전 기반의 삽입(UpdateEntry1)의 동작 흐름을 나타낸 것으로, 삽입 연산 과정 중 자식 노드의 모든 MBR을 포함하는 대표 MBR이 바뀌었을 때 부모 노드에서 해당 엔트리의 MBR을 변경시켜주는 상태를 나타낸 것이다. 엔트리의 변경은 새로운 엔트리를 할당 받고 기존 엔트리로 가는 포인터를 새로 할당 받은 엔트리를 가리키도록 설정함으로써 이루어진다.FIG. 15A illustrates an operation flow of version-based insertion (UpdateEntry1), and illustrates a state in which a parent node changes an MBR when a representative MBR including all MBRs of a child node is changed during an insert operation. . The change of entry is accomplished by assigning a new entry and setting a pointer to the existing entry to point to the newly allocated entry.

도 15b에 의하면, 노드의 엔트리에 대한 변경연산은 엔트리의 MBR을 변경하거나 , 엔트리의 노드 포인터를 변경하는 연산이다. 검색연산이 락이나 래치 없이 노드를 탐색하면서 변경연산이 엔트리의 내용을 변경하는 것은 단위 연산을 보장할 수 없기 때문에 본 발명에서는 변경연산을 엔트리의 삽입연산과 삭제연산으로 수행하는 방법을 사용한다. 단계(1502)에서 삽입해야할 엔트리가 R4이고, 삭제해야하는 엔트리가 R2라고 한다면 R4와 R3의 링크를 먼저 도 15b와 같이 연결하고(1) 다음으로 R1과 R4를 연결함으로써(2) 검색연산이 어떠한 문제없이 검색할 수 있도록 보장한다.According to Fig. 15B, the change operation on the entry of the node is an operation of changing the MBR of the entry or changing the node pointer of the entry. Since the change operation changes the contents of the entry while the search operation searches for the node without locking or latching, the unit operation cannot be guaranteed, so the present invention uses a method of performing the change operation by the insert operation and the delete operation of the entry. If the entry to be inserted in step 1502 is R4 and the entry to be deleted is R2, the link of R4 and R3 is first connected as shown in FIG. 15B (1) and then the R1 and R4 are connected (2). Ensure that you can search without problems.

도 16a은 버전 기반의 삽입(UpdateEntry2)의 동작 흐름을 보인 도로, 삽입 연산으로 인해 단말 노드가 분할되어 2개의 자식 노드가 생겨 부모 노드에 2개의 엔트리를 한번에 삽입해야 하는 경우에 대한 예시도이다.FIG. 16A illustrates an operation flow of version-based insertion (UpdateEntry2). FIG. 16A illustrates an example in which a terminal node is divided and two child nodes are generated due to an insertion operation to insert two entries into a parent node at once.

도 16b에 의하면, 기존의 분할기법에서는 새로운 하나의 엔트리만을 삽입하는 과정으로 삽입(UpdateEntry2)을 완료할 수 있었으나, 본 발명의 분할기법에서는 새로운 노드가 두 개 만들어지기 때문에 분할하기 전의 노드를 가리키고 있던 엔트 리를 새로운 노드를 가리키는 엔트리로 변경함과 동시에 새로운 엔트리를 삽입하는 연산이 단위연산으로 수행되어야 한다. 이러한 연산을 두개의 새로운 엔트리의 삽입(단계1602)과 기존의 엔트리의 삭제연산(단계1603)으로 처리한다. 단계(1604)는 이러한 과정을 설명한다. 도 16b에서 삽입해야할 엔트리가 R4와 R5이고, 삭제해야하는 엔트리가 R2라고 한다면 R4와 R5(1), R3의 링크를 먼저 연결(2)하고 다음으로 R1과 R4를 연결(3)함으로써 검색연산이 어떠한 문제없이 검색할 수 있도록 보장한다.According to FIG. 16B, the insert (UpdateEntry2) could be completed by inserting only one new entry in the existing partitioning scheme. However, in the partitioning scheme of the present invention, since two new nodes are created, the node before splitting was indicated. The operation of inserting a new entry at the same time as changing the entry to an entry pointing to a new node should be performed by the unit operation. This operation is handled by inserting two new entries (step 1602) and deleting existing entries (step 1603). Step 1604 describes this process. In FIG. 16B, if the entries to be inserted are R4 and R5 and the entries to be deleted are R2, the search operation is performed by first connecting (2) the links of R4, R5 (1) and R3, and then connecting (3) the R1 and R4. Ensure that you can search without any problem.

도 17은 버전 기반의 삭제(Delete)의 동작 흐름을 보인 예시도로, 삭제 하여야할 엔트리가 있는 알맞은 단말 노드를 찾고 해당 노드 안에서 엔트리를 삭제하는 과정이며, 이는 알맞은 단말 노드를 찾는 과정에서 검색 스택과 삭제 스택을 동시에 사용하는 방법이 기술되어 있고 해당 엔트리의 삭제시 노드 안에 남은 엔트리가 없게 되는 경우에 관한 처리이다.FIG. 17 is a view illustrating an operation flow of version-based deletion, which is a process of finding an appropriate terminal node having an entry to be deleted and deleting an entry in the corresponding node. This method describes how to use the delete stack at the same time. This process is for the case where there is no remaining entry in the node when the entry is deleted.

도 17에 의하면, 삭제 연산은 두 개의 스택을 이용한다. 검색스택은 삭제할 엔트리를 찾기 위한 스택이고 삭제스택은 노드에 엔트리를 삭제하고 난 후 노드의 MBR이 변경된 경우에 부모노드에 반영시켜주기 위해서 사용된다. 삭제연산은 삭제할 엔트리가 있는 단말 노드를 찾는 다음(단계1715) 해당 엔트리를 삭제(단계1704)한다. 엔트리를 삭제한 노드의 MBR이 축소된다면(단계1708) 부모노드의 엔트리 MBR을 변경하는 연산을 한다(단계1709). 만약 노드의 엔트리가 모두 삭제된 경우라면 노드를 삭제하고, 삭제된 노드를 가리키는 부모노드의 엔트리를 삭제한다(단계1706). 그러나 노드의 삭제는 검색연산이 삭제할 노드를 검색하고 있을지도 모르기 때문에 곧바로 노드를 삭제해서는 안 된다. According to FIG. 17, the delete operation uses two stacks. The search stack is a stack to find the entry to delete, and the delete stack is used to reflect the parent node when the node's MBR is changed after deleting the entry to the node. The delete operation finds the terminal node with the entry to be deleted (step 1715) and then deletes the entry (step 1704). If the MBR of the node which deleted the entry is reduced (step 1708), an operation of changing the entry MBR of the parent node is performed (step 1709). If all entries of the node are deleted, the node is deleted and the entry of the parent node pointing to the deleted node is deleted (step 1706). However, deleting a node should not delete the node immediately because the search operation may be searching for the node to delete.

삭제연산은 삭제할 객체와 객체의 MBR을 이용하여 삭제할 엔트리를 찾는다. 삭제연산에서의 단말 노드를 찾기 위해 스택을 사용하는 방법은 검색연산에서 검색하고자 하는 엔트리들을 찾기 위해 스택을 사용하는 방법과 삽입연산에서의 삽입하고자 하는 단말 노드를 찾기 위해 스택을 사용하는 방법을 통합한 방법과 유사하다. 이는 R-Tree구조 상 노드들의 MBR이 겹쳐 있는 경우가 발생할 수 있기 때문에 여러 단말 노드를 탐색해야만 삭제한 엔트리를 찾을 수가 있다. 따라서 본 발명에서는 두 개의 스택을 이용하여 삭제할 엔트리를 찾는다. 검색스택을 팝할 때 마다 삭제스택에 푸쉬(push)하는 방법을 사용한다. 그러나 삭제스택은 단말 노드까지의 경로를 저장하기 위한 스택이기 때문에 같은 레벨의 노드가 삭제 스택내에 여러 개 존재해서는 안된다. 따라서 삭제스택에 푸쉬 할 때는 삭제스택에 들어있는 노드들의 레벨을 검사해야한 한다(단계1712). 노드의 레벨은 색인의 깊이가 증가할 때 마다 하나씩 증가한다. 즉 루트가 가장 작은 값을 갖고, 단말 노드들이 가장 큰 값을 갖는다. 만약 삭제 스택 안에 검색스택에서 팝한 노드의 레벨보다 높은 레벨이 있다면 낮은 레벨이 나올 때까지 삭제스택을 팝하여 이러한 문제를 해결한다(단계1713). 단계(1715)에서 검색스택을 팝한 노드가 단말 노드라면, 삭제스택에서 노드를 팝하여(단계1718) 단말 노드로의 경로에서 해당노드를 제거하고, 삭제할 엔트리가 해당 노드에 있는지 확인한다(단계1719). 만약 삭제할 엔트리를 찾지 못한 경우에는 검색스택을 이용하여(단계1722) 다음 노드를 탐색하게 된다. 결국 삭제할 단말 노드를 찾게 된다면 삭제스택에는 단말 노드를 제외한 단말 노드까지의 경로가 남아있게 된다. 단계(1704)에서 엔트리를 삭제하고 나서 노드에 엔트리가 하나도 없는 경우는 노드를 삭제하여야 하며, 또한 부모노드의 삭제할 노드를 가리키는 엔트리를 삭제하여야 한다(단계1706).   The delete operation finds the object to be deleted and the entry to be deleted using the object's MBR. The method of using the stack to find the terminal node in the delete operation is a combination of using the stack to find the entries to search in the search operation and using the stack to find the terminal node to insert in the insert operation. Similar to one method. This may occur when the MBRs of the nodes overlap in the R-tree structure, so that the deleted entry can be found only by searching for multiple terminal nodes. Therefore, in the present invention, two stacks are used to find an entry to delete. Whenever you pop a search stack, you can push it to the delete stack. However, since the delete stack is a stack for storing paths to terminal nodes, there should not be multiple nodes of the same level in the deletion stack. Therefore, when pushing to the delete stack, the level of the nodes in the delete stack must be checked (step 1712). The level of the node increases by one as the depth of the index increases. That is, the root has the smallest value and the terminal nodes have the largest value. If there is a level in the delete stack that is higher than the level of the node popped from the search stack, this problem is resolved by popping the delete stack until a low level is reached (step 1713). If the node that popped the search stack in step 1715 is the terminal node, the node is popped in the delete stack (step 1718) to remove the node from the path to the terminal node, and it is checked whether the entry to be deleted exists in the node (step 1917). ). If the entry to be deleted is not found, the next node is searched using the search stack (step 1722). Eventually, if a terminal node to be deleted is found, a path to the terminal node other than the terminal node remains in the deletion stack. If there is no entry in the node after deleting the entry in step 1704, the node must be deleted, and the entry indicating the node of the parent node to be deleted must be deleted (step 1706).

도 18은 버전 기반의 삭제(DeleteParent)의 동작 흐름을 보인 예시도이다.18 is an exemplary diagram illustrating an operation flow of a version-based deletePaper.

도 18에 의하면, 상기 삭제연산(Delete)에서 엔트리를 삭제하고 나서(단계1704) 노드에 엔트리가 하나도 없는 경우 삭제(DeleteParent)함수를 이용하여 부모노드의 엔트리를 삭제한다. 엔트리가 하나라도 남아있는 경우는 부모노드의 MBR만을 변경시켜준다(단계1810). 삭제(DeleteParent)에서 삭제할 엔트리를 가진 부모노드를 찾는 과정은 삽입(UpdateParent)에서 변경할 엔트리를 갖는 부모노드를 찾는 방법과 동일하다. 엔트리를 찾게 되면 엔트리를 삭제하고(단계1804) 동일한 방법으로 부모노드에 적용하게 된다.Referring to FIG. 18, after deleting an entry in the delete operation (Step 1704), if there is no entry in the node, the parent node is deleted using the DeleteParent function. If at least one entry remains, only the MBR of the parent node is changed (step 1810). The process of finding the parent node whose entry is to be deleted in DeleteParent is the same as finding the parent node whose entry is to be changed in UpdateParent. If an entry is found, the entry is deleted (step 1804) and applied to the parent node in the same manner.

상술한 바와 같이, 본 발명의 바람직한 실시 예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 또는 변형하여 실시할 수 있다. As described above, although described with reference to a preferred embodiment of the present invention, those skilled in the art various modifications of the present invention without departing from the spirit and scope of the invention described in the claims below Or it may be modified.

이상에서 설명한 바와 같이 본 발명은, 다차원 색인이 갱신연산보다는 검색연산의 빈도가 높다는 특성을 고려하여 검색연산이 어떠한 락이나 래치를 걸지 않고 색인을 탐색할 수 있는 동시성 제어 기법이며, 또한 검색연산이 노드를 탐색하는 중에도 갱신연산이 일어날 수 있도록 노드내의 엔트리들을 링크드 리스트로 연결하고, 노드 분할을 수행할 경우 버전기반의 분할 기법을 사용하여 검색연산이 분할되는 노드에 락이나 래치를 획득하지 않고 노드를 탐색할 수 있도록 함으로써 공간 데이터베이스 시스템을 이용한 다양한 종류의 지리 정보 서비스들이 인터넷을 통하여 제공되고 있는 환경에서 서비스들이 공간 검색 질의 요청에 대해 더욱 빠른 응답시간을 보장하여 줄 수 있게 된다.  As described above, the present invention is a concurrency control technique in which a search operation can search an index without applying any locks or latches in consideration of the fact that a multidimensional index has a higher frequency of search operations than an update operation. Links the entries in the node to a linked list so that update operations can occur while searching for nodes, and when performing node partitioning, use a version-based partitioning technique to obtain nodes without obtaining locks or latches on the node where the search operation is partitioned. By searching, the service can guarantee faster response time for spatial search query request in the environment where various types of geographic information services using spatial database system are provided through internet.

Claims (11)

다차원 색인을 위한 동시성 제어 방법에 있어서,In the concurrency control method for a multidimensional index, 노드 구조의 각 엔트리 간에 링크드 리스트 구조를 포함하고, 엔트리 삽입, 삭제, 변경시에 상기 링크드 리스트를 구성하는 순서를 조정하여 검색 연산이 락이나 래치를 획득하지 않고 연산을 처리하도록 하는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.Includes a linked list structure between each entry of the node structure, and adjusts the order of constructing the linked list when an entry is inserted, deleted, or changed so that a search operation can process the operation without acquiring a lock or latch. R-tree-based concurrency control method for non-blocking search operation. 제 1 항에 있어서, 상기 엔트리 삽입은The method of claim 1, wherein the entry insertion is 노드의 첫 번째 빈 슬롯을 찾는 단계;Finding the first empty slot of the node; 엔트리가 삽입될 위치의 다음에 위치하는 엔트리와 삽입될 엔트리의 데이터 링크를 연결하는 단계; 및Connecting a data link of an entry to be inserted with an entry next to the position at which the entry is to be inserted; And 상기 엔트리가 삽입될 위치의 바로 이전에 위치하는 엔트리와 삽입될 엔트리를 연결하는 단계;Concatenating the entry to be inserted with the entry immediately preceding the position at which the entry is to be inserted; 로 이루어지는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree-based concurrency control method for a non-blocking search operation, characterized in that consisting of. 제 1 항에 있어서, 상기 엔트리 삭제는The method of claim 1, wherein deleting the entry 삭제할 슬롯을 찾아 삭제할 엔트리에 삭제 표시를 기록하는 단계; 및Finding a slot to delete and writing a delete mark to the entry to be deleted; And 상기 삭제할 엔트리의 전과 후의 엔트리를 연결하는 단계;Concatenating entries before and after the entry to be deleted; 로 이루어지는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree-based concurrency control method for a non-blocking search operation, characterized in that consisting of. 색인마다 하나씩 유지하며, 삭제연산을 하기 위해 링크를 해제하고 난 후 그 값이 증가되며 증가된 값을 해당 노드의 엔트리에 유지하기 위해 사용되는 전역 엔트리 삭제계수; 소정 연산을 수행하기 전에 가장 최근의 전역 엔트리 삭제계수를 기록해 놓은 값으로 색인 연산 테이블에 유지되며, 각 연산들 마다 하나씩 유지되는 지역 엔트리 삭제계수; 및 색인에 수행되고 있는 연산들을 관리하는 색인 연산 테이블;을 이용하여 삭제 표시된 엔트리를 재활용하는 R-tree 기반의 동시성이 제어된 엔트리 재활용 방법에 있어서,A global entry deletion factor used to maintain the incremented value in the entry of the node after unlinking, maintaining one per index; A local entry deletion factor, which is maintained in the index operation table with a value recording the most recent global entry deletion factor before performing a predetermined operation, and maintained one by one for each operation; And an index operation table for managing operations performed on the index; an R-tree-based concurrency controlled entry recycling method for recycling an entry marked for deletion using the index operation table. 엔트리의 재활용은 소정 노드가 삭제되고, 상기 노드에 대한 전역 엔트리 삭제 계수가 저장된 상태에서 삽입연산 수행시, Recycling an entry is performed when an insert operation is performed while a predetermined node is deleted and the global entry deletion count for the node is stored. 상기 색인 연산 테이블의 지역 엔트리 삭제계수들 중에 최소 지역 엔트리 삭제계수와 상기 노드의 전역 엔트리 삭제계수의 크기를 비교하는 단계; 및Comparing the minimum local entry deletion coefficient among the local entry deletion coefficients of the index operation table with the size of the global entry deletion coefficient of the node; And 상기 전역 엔트리 삭제계수가 지역 엔트리 삭제계수보다 크면 상기 삭제된 노드에 곧바로 삽입을 행하지 않고, 삽입될 노드의 다음 엔트리들에 대하여 삽입이 가능한지를 검사를 수행하여 삽입 가능한 노드에 삽입 연산을 수행하는 단계;If the global entry deletion factor is greater than the local entry deletion factor, performing an insert operation on the insertable node by checking whether insertion is possible to the next entries of the node to be inserted without immediately inserting the deleted node; ; 로 이루어짐을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성이 제어된 엔트리의 재활용 방법.R-tree based concurrency controlled entry recycling method for non-blocking search operation, characterized in that consisting of. 제 4 항에 있어서, 상기 엔트리의 재활용은 어떠한 검색 연산도 해당 엔트리를 읽을 가능성이 없다고 판단되어질 때 행해질 수 있도록 하는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성이 제어된 엔트리의 재활용 방법.5. The R-tree based concurrency controlled entry for non-blocking search operations according to claim 4, wherein the recycling of the entries can be performed when any search operation is determined to be impossible to read the entry. Recycling method. 버전을 생성하여 R-tree 기반의 동시성을 제어하는 방법에 있어서,In generating a version to control R-tree based concurrency, 삽입연산이 노드에 엔트리를 삽입할 때마다 새로운 버전을 생성하지 않고 분할 시에만 새로운 버전을 생성하고, 생성된 버전을 이용하여 분할을 수행토록 된 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree for non-blocking search operation, characterized in that insert operation creates a new version only at partitioning without creating a new version every time an entry is inserted into a node, and performs partitioning using the created version. Based concurrency control method. 제 6 항에 있어서, 상기 삽입연산 수행시 삽입 하여야할 단말 노드는The terminal node of claim 6, wherein the terminal node to be inserted when the insert operation is performed is performed. 여러 부모 노드를 거치며, 각 노드들의 MBR과 버전이 되어 있는지의 여부 또는 해당 노드가 루트 노드인가를 판단하여서 찾되, 노드들을 스택에 넣어가면서 진행하는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree for non-blocking search operation, which goes through several parent nodes and finds whether it is the MBR and version of each node or whether the corresponding node is the root node, and proceeds by putting the nodes on the stack. Based concurrency control method. 제 7 항에 있어서, 상기 삽입하여야할 단말 노드를 찾았으나 해당 노드가 가득 차 노드를 분할해야 하는 경우,The method of claim 7, wherein when the terminal node to be inserted is found but the corresponding node is full, the node must be divided. 새로운 노드 2개를 생성하는 단계; 및Creating two new nodes; And 상기 생성된 노드에 해당 노드의 엔트리들을 나눠 갖고 부모 노드들의 MBR을 변경시켜 주는 단계;Changing MBRs of parent nodes by dividing entries of a corresponding node among the generated nodes; 를 수행하는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree based concurrency control method for the non-blocking search operation, characterized in that for performing. 제 7 항에 있어서, 삽입 연산 중 자식 노드의 모든 MBR을 포함하는 대표 MBR이 바뀌었을 때 부모노드에서의 해당 엔트리의 MBR을 변경시켜주되, 엔트리의 변경은8. The method of claim 7, wherein the MBR of the corresponding entry in the parent node is changed when the representative MBR including all MBRs of the child node is changed during the insert operation. 새로운 엔트리를 할당 받는 단계; 및Receiving a new entry; And 기존 엔트리로 가는 포인터를 상기 새로 할당 받은 엔트리를 가리키도록 설정하는 단계;Setting a pointer to an existing entry to point to the newly allocated entry; 를 수행하여 이루어지는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree 기반의 동시성 제어 방법.R-tree-based concurrency control method for a non-blocking search operation, characterized in that performed by performing. 엔트리를 삭제함에 있어서,In deleting entries, 삭제하여야할 엔트리가 있는 단말 노드를 찾고 해당 단말 노드 안에서 엔트리를 삭제하되, 상기 삭제하여야할 엔트리가 있는 단말 노드는 단말노드까지의 경로를 저장하고 있는 삭제 스택 및 삭제할 엔트리와 겹치는 엔트리들을 저장하고 있는 검색 스택을 동시에 사용하여 찾는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree기반의 동시성이 제어된 삭제 방법.The terminal node with the entry to be deleted is found and the entry is deleted within the terminal node. The terminal node with the entry to be deleted has a deletion stack storing a path to the terminal node and an entry overlapping the entry to be deleted. An R-tree based concurrency controlled deletion method for a non-blocking search operation, characterized by searching using the search stack simultaneously. 제 10 항에 있어서, 상기 엔트리를 삭제함에 있어, 해당 단말 노드의 부모 노드를 찾고 부모 노드의 해당 단말 노드를 가리키는 엔트리를 찾는 단계;The method of claim 10, further comprising: searching for a parent node of a corresponding terminal node and finding an entry indicating a corresponding terminal node of a parent node in deleting the entry; 해당 엔트리를 삭제하고 부모 노드가 비었는지의 여부를 검사하는 단계;Deleting the entry and checking whether the parent node is empty; 부모 노드가 비어있지 않을 경우 부모노드의 대표 MBR의 변화를 상위노드에 반영시켜주는 단계; 및If the parent node is not empty, reflecting the change of the representative MBR of the parent node to the parent node; And 상기 해당 부모 노드가 비게 되는 경우 해당 부모 노드를 삭제하고 재활용을 위한 단계;Deleting the parent node and recycling the parent node when the parent node becomes empty; 를 수행하는 것을 특징으로 하는 논 블록킹 검색연산을 위한 R-tree기반의 동시성이 제어된 삭제 방법.R-tree-based concurrency controlled deletion method for the non-blocking search operation, characterized in that for performing.
KR1020040089888A 2004-11-05 2004-11-05 A concurrency control method for non-blocking search operation based on r-tree KR100709275B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020040089888A KR100709275B1 (en) 2004-11-05 2004-11-05 A concurrency control method for non-blocking search operation based on r-tree

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020040089888A KR100709275B1 (en) 2004-11-05 2004-11-05 A concurrency control method for non-blocking search operation based on r-tree

Publications (2)

Publication Number Publication Date
KR20060040330A KR20060040330A (en) 2006-05-10
KR100709275B1 true KR100709275B1 (en) 2007-04-19

Family

ID=37147325

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040089888A KR100709275B1 (en) 2004-11-05 2004-11-05 A concurrency control method for non-blocking search operation based on r-tree

Country Status (1)

Country Link
KR (1) KR100709275B1 (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100836004B1 (en) * 2006-11-30 2008-06-09 인하대학교 산학협력단 Pre-Aggregation Indexing Method of Spatial Data
CN115794938B (en) * 2023-02-06 2023-04-28 中国人民解放军国防科技大学 Method and device for visualizing geographic vector line data and computer equipment

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010066737A (en) * 1999-12-24 2001-07-11 오길록 A concurrency control method for high-dimensional index structures
KR20020093519A (en) * 2001-06-09 2002-12-16 주식회사 티아이엠시스템 Cache-conscious concurrency control scheme for index structures in main-memory database systems
KR100447330B1 (en) 2001-04-02 2004-09-07 한국전자통신연구원 PLC based concurrency control scheme for multi dimensional index structures

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010066737A (en) * 1999-12-24 2001-07-11 오길록 A concurrency control method for high-dimensional index structures
KR100447330B1 (en) 2001-04-02 2004-09-07 한국전자통신연구원 PLC based concurrency control scheme for multi dimensional index structures
KR20020093519A (en) * 2001-06-09 2002-12-16 주식회사 티아이엠시스템 Cache-conscious concurrency control scheme for index structures in main-memory database systems

Also Published As

Publication number Publication date
KR20060040330A (en) 2006-05-10

Similar Documents

Publication Publication Date Title
KR930002331B1 (en) Method and apparatus for concurrent modification of an index tree
CN1026631C (en) Method of concurrency access for useing indexed tree to data base record
EP0662228B1 (en) Apparatus for data storage and retrieval
US5089952A (en) Method for allowing weak searchers to access pointer-connected data structures without locking
Sagiv Concurrent operations on b-trees with overtaking
US5758356A (en) High concurrency and recoverable B-tree index management method and system
US6772155B1 (en) Looking data in a database system
EP0303231B1 (en) Method and device for enabling concurrent access of indexed sequential data files
CN110990404B (en) Index data processing method and device and electronic equipment
US20080071809A1 (en) Concurrency control for b-trees with node deletion
KR100289331B1 (en) Concurrency Control Method of High Dimensional Index Structures
CN114282074B (en) Database operation method, device, equipment and storage medium
US20090187599A1 (en) Generating identity values in a multi-host database management system
US6484172B1 (en) Concurrency control method for high-dimensional index structure using latch and lock
US7539988B1 (en) System and method for deferred rebalancing of a tree data structure
US6571250B1 (en) Method and system for processing queries in a data processing system using index
KR100709275B1 (en) A concurrency control method for non-blocking search operation based on r-tree
JP2003271436A (en) Data processing method, data processing device and data processing program
US7185340B1 (en) Multiphase system and method of performing operations on data structures
KR100349667B1 (en) A concurrency control method for high-dimensional index structures
KR102404174B1 (en) Data structures for nosql, inserting method for nodes, and processing method for range queries
JP2006350522A (en) R-tree-based simultaneous control method for non-blocking retrieval calculation
Bertino et al. An evaluation of text access methods
Chen et al. Signature files and signature file construction
Lim et al. A concurrent Blink-tree algorithm using a cooperative locking protocol

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: 20120330

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20130325

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee