Postgresql
文章平均质量分 83
我鲁班无敌
一点寒芒先到, 随后枪出如龙.
展开
-
postgresql存储引擎源码分析 五
在上一篇文章中,我们分析完了bufpage.c,今天我们来分析页面管理的第二个文件:itemptr.c。 这个文件里面只有两个函数,非常简短,这两个函数是对src\include\storage\itemptr.h文件中定义的结构体ItemPointerData的操作。下面,我们来看一看这个结构体: typedef struct ItemPointerData{转载 2015-10-11 15:18:11 · 547 阅读 · 0 评论 -
三种动态hash方法
动态hash方法之一 本文将介绍三种动态hash方法。散列是一个非常有用的、非常基础的数据结构,在数据的查找方面尤其重要,应用的非常广泛。然而,任何事物都有两面性,散列也存在缺点,即数据的局部集中性会使散列的性能急剧下降,且越集中,性能越低。数据集中,即搜索键在通过hash函数运算后,得到同一个结果,指向同一个桶,这时便产生了数据冲突。通常解决数据冲突的方法转载 2015-11-25 11:40:40 · 1634 阅读 · 0 评论 -
PostgreSQL源码分析: 动态Hash
1. 为什么需要动态hash平常的hash,大多是下面这样一副面孔:图1 一个静态hash结构这种Hash维护着一些桶,就是图上左边的部分,每一个桶中装着hash值相同的数据。这些具有相同hash值的数据形成一个链表。这种hash的一个最主要缺点就是桶的数目是一定的,不易扩展,随着插入数据增多,查找效率会急剧下降。动态hash就是用来转载 2015-11-25 11:02:29 · 1317 阅读 · 0 评论 -
如何重新生成PostgreSQL的国际化文件
首先Postgresql源码中的gettext目录工具就是国际化使用的工具,关于gettext的使用在博客中有其他文章介绍,下面文章转自pg前辈权叔:首先,必须在编译前指定 --enable-nls="语言名",否则不会产生多语言支持,比如 --enable-nls="zh_CN"当然禁用nls会带来一点微不足道的性能提升启用之后我们在 Makefi转载 2015-11-18 09:26:15 · 618 阅读 · 0 评论 -
postgresql存储引擎源码分析四
上一次对bufpage.c文件已经分析了一大半了,今天这里准备对这个文件里面剩余的函数分析完全。 下一个函数,我们先来看看它的声明:Size PageGetExactFreeSpace(Page page)。这个函数的功能是返回页面page已经分配的空余大小空间,这个与昨天分析的函数PageGetExacFreeSpace函数的区别是它返回的space并不扣除一个ItemIdData转载 2015-10-11 15:12:27 · 575 阅读 · 0 评论 -
postgresql存储引擎源码分析三
在上一次的分析中,我们分析了验证页面是否有效的函数,向页面中添加元组项PageAddItem函数和一些其他函数的功能。接下来我们来分析其他的页面操作函数。 下一个函数,声明:void PageRestoreTempPage(Page tempPage,Page oldPage)。这个函数的功能是:将经过特殊处理过后的临时页面tempPage拷贝回oldPage中,随后将临时页面的内存转载 2015-10-11 15:06:10 · 697 阅读 · 0 评论 -
postgresql整体架构和存储引擎的大体分析
我上网查阅了一些资料,读了一些相关论文。现对PostgreSQL整体架构进行粗略的剖析一下,供大家参考: PostgreSQL的配置结构:PostgreSQL采用的是经典的C/S架构模型,主体是由一个守护监听进程Postmaster,若干个前端应用程序(比如PostgreSQL的客户端,DBMS等)和后段服务器进程(PostgreSQL服务器本身)所组成。大体宏观上的连接过转载 2015-10-11 14:55:14 · 4042 阅读 · 2 评论 -
postgresql存储引擎源码分析二
上次我分析了PostgreSQL存储系统页面管理的页面初始化函数PageInit,接下来的工作量相当大,由于源码有几十万行,如果像上次一样逐条语句分析的话,那么整体的篇幅是相当巨大的,语言也不容易组织。因此接下来的工作我准备对于每一个.c或者.h文件 的每个数据结构以及函数等整体代码块作出整体分析。下面我来对backend/storage/page/bufpage.c 中的剩余函数进行分析:转载 2015-10-11 14:06:22 · 637 阅读 · 0 评论 -
postgresql存储引擎源码分析一
PostgreSQL的存储系统作为PostgreSQL的最低层,向下通过操作系统系统接口访问物理数据,向上为存取系统提供由缓冲区页面及页面上的接口函数。存储系统的总体架构如下图所示(转自贵州大学硕士黄崇争毕业论文“开放源代码DBMS的分析,比较”) 注释:Lock Manager是锁管理器,I转载 2015-10-11 14:00:12 · 786 阅读 · 0 评论 -
postgresql架构图
上图是postgresql的总体架构图,下边是图中几个主要模块的功能简述,希望研究相应模块的同学给出模块的功能简介。 Postmaster:它主要负责在客户端第一次发送请求给服务器的时候建立一个服务器断进程。也就是上图中的Listener。(至今未发现postgresql中有listener,因此本图中的listener应该就是每一个客户端对应的服务器进程)postgre在完转载 2015-10-11 13:51:06 · 1124 阅读 · 1 评论 -
PostgreSQL操作符与优化器详解
PostgreSQL 支持自定义操作符,本质上是调用函数来实现的。语法如下:例如创建一个求两个值的平均值的操作符:首选要创建函数postgres = # create function f_avg(numeric,numeric) returns numeric as $$postgres$# select ($1+$2)/2;postg转载 2016-06-26 08:31:43 · 1111 阅读 · 0 评论