四川省网站建设广告设计与制作工作内容

web/2025/9/26 3:22:40/文章来源:
四川省网站建设,广告设计与制作工作内容,扬中网站,宁波企业黄页公司黄页PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化#xff0c;通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点#xff1a;1#xff09;管理每个Bitmap的hash slot没用完时#xff0c;每个Bitmap代表每个heap页中满… PgSQL技术内幕-Bitmap Index Scan 1、简介 Bitmap索引扫描是对索引扫描的一个优化通过建立位图的方式将原来的随机堆表访问转换成顺序堆表访问。主要分为两点1管理每个Bitmap的hash slot没用完时每个Bitmap代表每个heap页中满足条件元组的ItemIDs通过Bitmap扫描heap页时需要将所有Bitmap按照页号进行排序然后依次获取heap页中记录依次完成顺序回表。2当hash slot用完时就需要将heap页的bitmap范围扩大转换成一个chunk的bitmap也就是Bitmap中一位代表页内具有满足条件元组的页。此时整个Bitmaps有chunk的bitmap也有页的bitmap该chunk的页号为chunk内最小页号所以Bitmaps排序后整体上也是有序的。如此完成顺序扫描heap页只不过对于Chunk的bitmap中一位代表的heap 页需要再次进行条件检测将满足条件的tuple输出。 2、Bitmap Index Scan中的Bitmap是什么 Bitmap index scan先利用索引获取满足条件的Tid将其保存到TIDBitmap中。由TIDBitmap管理满足条件的heap tuple的Bitmap。TIDBitmap结构主要成员如下图所示 各个成员变量的说明 1每一页的bitmap由PagetableEntry结构来管理里面成员主要有blockno页号用做hash表的key。最初仅使用entry1entry1满了才会使用hash表。这样btgetbitmap扫描完成所有存在的TID就完成了按照页聚合。 2pagetable哈希表初始时tbm_create调用时指定仅创建128个hash桶。若一个page对应一个PagetableEntry当有大量page需要构建bitmap时就不够用了。所以Hash桶用完则转换chunk进行lossy从而腾出空闲槽。等hash桶都变成chunk时就需要扩展了每次扩展2倍大小2*128。 3nentries表示hash表中已使用桶的个数 4maxentries为hash表hash桶的最大个数限制。该成员主要作用控制何时进行lossy也就是nentries maxentries时需要tbm_lossify。大小由work_mem控制至少16个。当然如果最终扩展的超过work_mem时桶仍旧都是chunk则更新maxentries扩展2倍大小。 5entriy1表示最开始使用的entry不用申请到hash表 6spages和schunks则是从hash桶弄过来排过序的entry。在BitmapHeapScan阶段使用。当然分别存储Page和lossy的chunk。这样就可以顺序访问了。 另外TIDBitmap中的几个成员有 1TBMStatus status typedef enum {TBM_EMPTY, /* no hashtable, nentries 0 */TBM_ONE_PAGE, /* entry1 contains the single entry */TBM_HASH /* pagetable is valid, entry1 is not */ } TBMStatus; 为什么会有TBM_ONE_PAGE和TBM_HASH呢因为如果TIDBitmap只存储一个PagetableEntry,不需要耗费实际构建动态hash表查找时也不需要通过hash查找只需要使用entry1即可。 3、Bitmap Index Scan阶段 MultiExecBitmapIndexScan函数实现了Exec逻辑主要通过调用index_getbitmap函数获取bitmap然后将bitmap返回给上一层算子。我们这里以btree索引为例所以index_getbitmap指向btgetbitmap索引扫描函数 btgetbitmap函数的逻辑当然时先创建TIDBitmap然后调用_bt_first/_bt_next逐条获取满足条件的item接着通过tbm_add_tuples将其添加到TIDBitmap中最终构建一个完整的bitmap核心函数为_bt_first/_bt_next/tbm_add_tuples 1_bt_first函数时索引扫描的开始。首先调用_bt_preprocess_keys预处理扫描key所扫描key条件无法满足则设置BTScanOpaque-qual_ok为false提前结束扫描。若没有找到有用的边界keys需要调用_bt_endpoint从第一页开始否则调用_bt_search从btree的root节点_bt_getroot开始扫描直到找到符合扫描key和快照的第一个叶子节点。之后使用二分查找_bt_binsrch找到符合扫描key的页内item偏移最好将找到的页面载入buffer并返回tuple。 2_bt_next函数从当前页获取下一条tuple若当前页没有tuple则调用_bt_steppage拿到下一页页号之后调用_bt_readnextpage读取文件块中的内容然后_bt_next获取吓一跳tuple重复以上过程直至扫描结束。 3tbm_create创建TIDBitmap 4tbm_add_tuples函数添加CTID构建TIDBitmap tbm_add_tuples要干的事如上图所示 1btgetbitmap调用tbm_add_tuples每次仅添加一个TID从TID中解析出对应heap tuple的页号blk及页内偏移off 2判断blk是否是lossy页号定位到所属chunk;然后据该chunk页号从hash表中查找hash表中找到再看下页号所属的bitmap位是否1即是否lossybitmap为1则返回true blk非lossy则调用tbm_get_pageentry从hash表中找一个PagetableEntry不存在则会创建。但是若此时只有一个PagetableEntryTBM_ONE_PAGE状态则直接返回entry1不需要从hash查找 blk是lossy:已经位于chunk中的一位了不必再向hash表添加了因为btree下仅一个TID所以退出循环 3计算bitmap的位于哪个字节wordnum及哪一位bitnum标记到PagetableEntry的bitmap中words并设置recheck为false 4tbm_get_pageentry创建了一个新PagetableEntry发现npages超过tbm-maxentries只则会调用tbm_lossify函数将TIDBitmap中部分PagetableEntry转成成lossy chunk同时按照exact page的减少和lossy page的增加相应修改npages和nchunks tbm_lossify函数 那么hash表何时扩展呢只要向hash表插入PagetableEntry就有可能涉及到扩展扩展后maxentries并不是立即更新pagetable_insert调用结束后若插入则需要更新nentries 当然还会有Bitmap And和Bitmap Or的情况。BitmapAnd节点对两个Bitmap进行与操作生成交集位图BitmapOr节点对两个Bitmap进行或操作生成并集位图。 至此bitmap index scan阶段完成bitmap的构建下一步就是根据TID bitmap来扫描heap返回符合条件的tuple即Bitmap Heap Scan。 4、Bitmap Heap Scan阶段 Bitmap Heap Scan使用Bitmap Index Scan阶段生成的bitmap来查找相关数据。位图的每个页可以是精确的直接指向heap页的tuple也可以是有损的指向包含至少一行与查询匹配的页。算子由ExecBitmapHeapScan函数执行主要实现函数为BitmapHeapNext: BitmapHeapNext的核心逻辑如下 1从下层节点拿到TIDBitmap结果tbm 2tbm_generic_begin_iterate-tbm_begin_iterate基于tbm构建一个iterator:从hash表中取出PagetableEntry根据它是exact page还是lossy page分别放到spages[]和schunks[]数组然后根据页号进行排序 3先调用tbm_iterate从spages[]和schunks[]数组拿一个较小页号的页然后通过table_scan_bitmap_next_block-heapam_scan_bitmap_next_block读取一个page到ScanDesc的rs_buffer里。 4调用table_scan_bitmap_next_tuple-heapam_scan_bitmap_next_tuple根据TBMIterateResult里的偏移再内存buffer里获取相应的tuple。当这一页扫描完则重置node-tbmres tbmres NULL重新获取下一个PagetableEntry的bitmap继续循环。 5如果是lossy则还需要继续过滤 5、总结 Bitmap索引扫描分为两个阶段第一阶段通过索引进行扫描将满足条件的元组TID构建到bitmap中一般情况一个页一个bitmap第二阶段将bitmap按照页号进行排序按次序从页的bitmap中取出heap tuple的TID从而达到索引顺序扫描heap的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长沙网站建设的首选免费logo设计一键生成无水印

使用Kafka Streams开发流处理应用 一、简介1.1 Kafka Streams定义1.2 Kafka Streams的优势1.3 Kafka Streams应用场景 二、环境搭建2.1 安装Kafka2.2 安装Kafka Streams2.3 构建Kafka集群 三、Kafka Streams编程API介绍3.1 Kafka Streams主要API3.2 应用程序的配置和参数3.3 To…

网站分析内容广告设计工资高吗

开发环境 ubuntu 20.04 VTK 8.2 编译VTK 下载源码 git clone --recursive https://gitlab.kitware.com/vtk/vtk.git 使用版本管理工具,切换版本到8.2 更改编译选项,这里使用cmake-gui进行配置 1、编译类型修改为Release 2、安装路径可以设置&#xf…

北京网站建设公司华网天下优惠做网站系统具体步骤

产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…

个人网站毕业设计作品电子商务网站建设方案范文

1.安装之前的操作 ps -ef|grep nginx 查看是否有运行 如果有就杀掉 kill -9 pid find / -name nginx 查看nginx文件 rm -rf file /usr/local/nginx* 通通删掉删掉 yum remove nginx 限载一下服务 1.2.下载安装包 地址 nginx: download 2.减压文件 tar…

武钢建工集团建设公司网站网站网页不对称

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置,在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接:linux安装jdk8详细步骤-CSDN博客 Jdk来源:linu…

湖北专业网站建设质量保障wordpress category 参数

更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数 标签(空格分隔): 算法 算法竞赛 这两种算法平时经常听到,听起来也很装逼,但是我老是忘了他们的原理,今天好好想想&#xff0c…

品牌网线seo的描述正确

转载自:http://www.cnblogs.com/chenxizhang/p/3280947.html 这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。 首先,我们当然是要求应用程序开发人员,尽可能地在程序可能出现异常的地方都去捕捉异常,使用try…catch的…

成都网站开发团队旅游建设门户网站的方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、opengles3.0 绘制图元介绍二、绘图图元 API 介绍1. glDrawArrays()1.1 glDrawArrays()函数原型1.2 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 三者的区别1.3 使用GL_TRIANGLES, G…

微信服务号可以做万网站么网站外的seo

modbus 协议 数据格式00 00 00 00 00 06 01 03 00 00 00 02 ascii码第一位:事务处理标识符 由服务器复制,通常为0第二位:事务处理标识符 由服务器复制,通常为0第三位:协议标识符0第四位:协议标识符0第五…

飞色 网站建设H5建网站

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《LInux实战开发》。🎯🎯 …

网站开发例子永嘉规划建设局网站

以太网通讯是一种被广泛使用的数据通讯方式。在嵌入式应用中也经常使用,但协议栈的实现并不是一件容易的事。不过有些以太网控制器就带有协议栈,如W5500。在本篇中我们将讨论如何设计并实现W5500以太网控制器的驱动。 1、功能概述 W5500是WIZnet开发的…

襄阳住房和城乡建设网站亚马逊品牌网站要怎么做

MySQL 部分 1. 查看是否开启 binlog MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启: SHOW VARIABLES LIKE log_bin;如果返回结果为 ON,则表示 binlog 已开启。 Variable_nameValuelog_binON 2. 若未开启 binlog,则需手动配置 …

网页建设网站代码网站备案ip查询网站查询

flask篇之URL重定向(二十三) 通过url_for()函数构造动态的URL: 我们在flask之中不仅仅是可以匹配静态的URL,还可以通过url_for()这个函数构造动态的URL from flask import Flask from flask import url_forapp Flask(__name__)app.route(/) def inde…

最好网站建设公司运营团队旺道网站排名优化

下班路上,一个武汉的朋友发我一份简历,问这个简历值多少。打开简历,九年工作经验,但只有两个项目经验,看着没啥亮点,建议他根据面试情况综合考虑。正好趁机分享一点自己的面试心得。1、编码能力这是做技术最…

discuz视频网站模板中企动力和东莞朝阳做的网站对比

这章讲到了可见性在逐像素渲染光照场景中的作用,也考虑如何使用可见性减少必须渲染的批次数量,从而改善性能。 假设一个非常简单的场景,一个房间,因为房间的不同部位是不同的材质,所以将其分为8个batch,另…

drupal网站建设数据库小米云网站开发

文章目录 一、设计模式概述1. 软件设计模式的产生背景2. 软件设计模式的概念3. 学习设计模式的必要性4. 设计模式分类(1)创建型模式(2)结构型模式(3)行为型模式 二、UML图1. 类图概述2. 类图作用3. 类图表示…

可以建设网站非常成功的网站

模拟场景: 当用户登录后,后台会返回一个token给前端,前端下次进入首页后,会先判断token是否过期,如果过期自动进入登录页面。配置路由: 1.安装 npm install vue-router42.安装后在src目录下创建router文…

优化网站费用ftp怎么做网站的备份

c 前缀 变量命名如果您是第一次查看Takes或Cactoos的源代码,很可能会像其他命名约定一样被命名约定触发,这意味着大多数类名都有两个字母的前缀: BkSafe , RqFake , RsWithStatus , TkGzip等。 老实说&…

网站建设资讯站做网站打电话话术

9 map Go 语言中提供的映射关系容器为 map ,其内部使用 散列表(hash) 实现。它是一种无序的基于 key-value 的数据结构。 Go 语言中的 map 是引用类型,必须初始化之后才能使用。 9.1 map 定义 Go 语言中 map 的定义语法为&…

龙岩做网站多少钱成都最好的设计公司

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 // 在看 Unsafe 类源码时看到一个注解:Deprecated,似曾相识... Deprecated 用在类或者方法上,表示…