当前位置:网站首页>GBASE 8s 索引R树
GBASE 8s 索引R树
2022-06-25 04:00:00 【八珍豆腐】
R 树可以看作 B 树在高维空间上的扩展,类似于 B 树索引,R 树索引同样可以用于组织数据,加速数据访问。它专门用于包含了多维数据和空间数据类型的表,很好地解决了高维空间上的搜索问题。 在 GBase 8s 数据库中采用了这种 R 树索引结构,主要用于为以下几种数据类型创建索引:
- 包含了多个维度的空间数据,如(X,Y)地理坐标系;
- 额外增加了时间维度的数据;
- 区间值,例如时间段数据(9:00 P.M~9:30 P.M);
- 多个数值类型的组合,也可以看作多维数据值。
在一般情况下,数据库会使用两个字段(X,Y)来存放博物馆的地理位置信息,我们需要遍历所有的博物馆,获取其地理位置来计算距离,从而得到满足要求的全部博物馆。在没有索引的情况下,需要遍历表中的全部数据行来进行计算。如果我们在这个高维空间数据上创建R树索引,则能大幅提高搜索性能。它的思想类似于 B 树,在 B 树中是根据数值的大小对数据进行分割的,将分块的数据组织成树的形式进行存储,而 R 树则是对空间数据进行分割的,将B树的方法有效地扩展到了高维空间上。
R 树是一棵存储高维数据的多叉平衡树,在每个节点中存储了多个矩形区域,每个区域 I 对应一个指针。叶子节点中的矩形区域 I 为数据对象的外包矩形,且指针指向区域I内包含的实际数据行数据。非叶子节点(根节点和分支节点)中的矩形区域I 为所有孩子节点矩形区域的外包矩形,且指针指向位于下一层的孩子节点,所以孩子节点中的所有区域都在区域 I 的范围之内。

为了实现 R 树索引,我们用一个最小边界矩形紧紧围绕住空间对象,R8 就是这样的一个矩形区域,在 R8 中包含了一个或多个空间数据对象,对所有的数据进行划分,一共使用了12 个最小矩形(R8-R19)来包围所有数据,它们被存储在R 树的叶子节点中,每个区域都有一个指向区域内所包含数据对象的指针。接下来对这些最小矩形区域进行合并,存储到 R 树的上一层节点中。我们发现 R8、R9 和 R10 三个区域距离最近,将它们合并到一个更大的矩形区域 R3 中,同理,这棵 R 树分支节点中的 5 个区域(R3~R7)都包含了叶子节点中的几个最小矩形,且每个区域都有指向下一层节点的指针,用于记录该区域包含的几个小矩形。重复迭代这个过程,直到所有数据都存放到了根节点中几个最大区域(R1和 R2)为止。
与 B 树类似,一棵 R 树需要满足如下性质:
- 根节点至少有两个孩子节点,除非它是叶子节点;
- 除根节点外,每个节点(分支节点和叶子节点)所包含的实体(矩形区域)个数都介于最小项数 m 和最大项数 M 之间,通常 m=M/2;
- 所有叶子节点处于同一层;
- 在一个节点中,每个实体的排列没有顺序要求。
这里我们所说的二维空间上的矩形区域可以扩展到高维空间中。
R 树的搜索、插入和删除操作与 B 树类似,因此可以有效地应用于数据库中。R树兄弟节点对应的空间区域可以重叠,这可以比较容易地进行插入和删除操作,但搜索时可能要对多条路径进行查找才能得到最终结果,因此重叠区域的大小对搜索效率有着较大影响。R+树就是对这一点进行改进,兄弟节点对应的空间区域没有重叠。
R 树索引是一种动态索引,也就是说,当数据表发生了修改、插入和删除操作时,R树索引也会相应地维护自身的数据。另外,在创建 R 树索引前,我们不必知道索引列中的数据个数或范围等信息,可以方便地构建 R 树索引。
边栏推荐
- 1. Phase II of the project - user registration and login
- 微信小程序父子组件之间传值
- The yii2 debug toolbar is missing
- 如何绘制产业招商地图
- Uniapp makes mobile app programs, using uni Choosevideo record video, video playback is fuzzy, and the resolution is low
- Sourcetree pulls the code and prompts to fill in authentic, but the configuration cannot change the user
- Should I use on or where for the left join
- Shutter fittedbox component
- How much do you know about the use value of WMS warehouse management system
- OBS Browser+浏览器的基本使用
猜你喜欢
![L'épée leetcode fait référence au chemin leetcode de l'offre II 091 pour peindre la maison [planification dynamique] heroding](/img/ad/69fce7cf064479a0ddd477fb935de2.png)
L'épée leetcode fait référence au chemin leetcode de l'offre II 091 pour peindre la maison [planification dynamique] heroding
![[openwrt] we recommend a domestically developed version of openwrt, an introduction to istoreos. It is very easy to use. It is mainly optimized. It solves the problem of Sinicization.](/img/62/6152d5a30c92a340cb286c7b1cbc54.png)
[openwrt] we recommend a domestically developed version of openwrt, an introduction to istoreos. It is very easy to use. It is mainly optimized. It solves the problem of Sinicization.

Basic use of OBS browser+ browser

1、项目第二阶段——用户注册和登陆

Simple integration of client go gin -update

警惕超范围采集隐私-移动APP违规十宗罪

Shutter fittedbox component

DAP data scheduling function improvement description

Numpy NP tips: use OpenCV to interpolate and zoom the array to a fixed shape cv2 resize(res, dsize=(64, 64), interpolation=cv2. INTER_ CUBIC)

Nodejs connects to MySQL through heidisql, and ER appears_ BAD_ DB_ ERROR: Unknown database 'my_ db_ books'
随机推荐
Doubts about judging the tinyint field type of MySQL
Laravel document sorting 8. Middleware
General steps for QT compiling database plug-ins
简单的恶意样本行文分析-入门篇
Failed to install redis interface
openmmlab-环境配置
关于TCP连接四次握手(或者叫四次挥手)的详细总结
How to draw an industry investment map
Summary of various problems encountered by cocos2d-x
515. 在每个树行中找最大值 / 剑指 Offer II 095. 最长公共子序列
SQL, CTE, flg case problems
Numpy NP tips: squeeze and other processing of numpy arrays
彻底理解数据库事务
i. Max development board learning record
Although the Internet in the traditional sense has long ceased to exist, this does not mean that the Internet has long disappeared
Thorough understanding of database transactions
Unit test coverage
ThinkPHP is integrated with esaywechat. What's wrong with wechat payment callback without callback?
numpy np tips: numpy数组的squeeze等处理
PHP code audit 1 - php Ini