PostgreSQL源码解读 基础结构 node】的更多相关文章

一.node节点的定义 源代码路径postgresql-9.2.3/src/include/nodes/nodes.h 在查询解析SQL的查询部分,要用到大量的结构体,许多函数处理的逻辑类似,就是传入的结构体不同,为了处理这个问题,pg采用了一个基础结构体struct node,其他结构体的第一个字段与node的相同.通过这个字段来标识不同的结构体,而又同时能统一接口函数. pg主要采用c实现,因此没有采用多态.(顺带说一句,之前一直以为MySQL的代码都是由c实现的,实际上,MySQL中也有部…
  node的实现是PostgreSQL的查询解析的基础,实现的关键是两个宏,makeNode和newNode.其他节点继承自Node节点,如果增加新的结构体,需要添加NodeTag中添加对应的枚举值,并在equal和nodetoString中添加对于的处理代码.当结构体少是很容易处理,如果结构体过多,维护会比较麻烦.PostgreSQL中大约有300个继承自node的结构体,写代码的人真是需要相当的勇气和毅力呀.   #include <iostream> #include <stri…
概述:Spark postgresql jdbc 数据库连接和写入操作源码解读,详细记录了SparkSQL对数据库的操作,通过java程序,在本地开发和运行.整体为,Spark建立数据库连接,读取数据,将DataFrame数据写入另一个数据库表中.附带完整项目源码(完整项目源码github). 1.首先在postgreSQL中创建一张测试表,并插入数据.(完整项目源码Github) 1.1. 在postgreSQL中的postgres用户下,创建 products CREATE TABLE pr…
1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD或CMD hasExports = typeof module !== 'undefined' && module.exports; //检查上下文环境是否为Node if (hasDefine) { define(definition); //AMD环境或CMD环境 } else if (h…
2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.ExecutorRun 和 ExecutorEnd,其输入是包含査询计划树的数据结构QueryDesc,输出则是相关执行信息或结果数据.如果希望执行某个计划树,仅需构造包含此计划树的QueryDesc,并依次调用ExecutorStart.ExecutorRun.ExecutorEnd 3个过程即能完成相应的处理…
接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_FunctionScanState, T_ValuesScanState, T_CteScanState, T_WorkTableScanState, T_ForeignScanState, T_CustomScanState, 8.SubqueryScan 节点 SubqueryScan节点的作用是以另…
1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量.事件等)的基础框架类.JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, CountDownLatch等等.学习AQS的使用与源码实现对深入理解concurrent包中的类有很大的帮助. 本文重点介绍AQS中的基本实现思路,包括独占锁.共享锁的获取和释放实现…
1. 背景 在之前的AbstractQueuedSynchronizer源码解读中,介绍了AQS的基本概念.互斥锁.共享锁.AQS对同步队列状态流转管理.线程阻塞与唤醒等内容.其中并不涉及Condition相关的内容.本文主要介绍AQS中Condition的实现即ConditionObject类的源码. Condition在JUC中使用很多,最常见的就是各种BlockingQueue了. 2. Condition是什么 java.util.concurrent.locks.Condition是J…
这篇讲另两个文件http.go.http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go.tcp_server.go里的两个文件是相对应的.那两个文件用于处理tcp请求,而这两个是处理http请求的. http_sesrver.go 123456789101112131415161718192021222324 package utilimport (    "log"    "net"    "net/http" …
1.简介 ConcurrentLinkedQueue是JUC中的基于链表的无锁队列实现.本文将解读其源码实现. 2. 论文 ConcurrentLinkedQueue的实现是以Maged M. Michael和Michael L. Scott的论文Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms为原型进行改造的,不妨阅读此篇论文. 下面我将论文中的介绍的入队与出队用接近Java语言的…
jdk1.8.0_45源码解读——HashMap的实现 一.HashMap概述 HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射操作.存储的是<key,value>对的映射,允许多个null值和一个null键.但此类不保证映射的顺序,特别是它不保证该顺序恒久不变.  除了HashMap是非同步以及允许使用null外,HashMap 类与 Hashtable大致相同. 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能.迭代col…
PostgreSQL采用C/S(客户机/服务器)模式结构.应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信. 另外,还有一种‘Standalone Backend’使用的方式, 虽然通过这种方式也可以启动服务器,但是一般只在数据库的初始化(PostgreSQL的cluster的初始化,相当于其他数据库的instance的初始化).紧急维护的时候使用,所以简单来说可以认为PostgreSQL是使用C/S的形式进行访问的. PostgreSQL把客户端称为前端(Fro…
jdk1.8.0_45源码解读——LinkedList的实现 一.LinkedList概述 LinkedList是List和Deque接口的双向链表的实现.实现了所有可选列表操作,并允许包括null值.    LinkedList既然是通过双向链表去实现的,那么它可以被当作堆栈.队列或双端队列进行操作.并且其顺序访问非常高效,而随机访问效率比较低. 注意,此实现不是同步的. 如果多个线程同时访问一个LinkedList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步.这通常是通…
阅读优秀的js插件和库源码,可以加深我们对web开发的理解和提高js能力,本人能力有限,只能粗略读懂一些小型插件,这里带来对fastclick源码的解读,望各位大神不吝指教~! fastclick诞生背景与使用 在解读源码前,还是简单介绍下fastclick: 诞生背景 我们都知道,在移动端页面开发上,会出现一个问题,click事件会有300ms的延迟,这让用户感觉很不爽,感觉像是网页卡顿了一样,实际上,这是浏览器为了更好的判断用户的双击行为,移动浏览器都支持双击缩放或双击滚动的操作,比如一个链…
写在前面: 最近做的一个项目,用的require和backbone,对两者的使用已经很熟悉了,但是一直都有好奇他们怎么实现的,一直寻思着读读源码.现在项目结束,终于有机会好好研究一下. 本文重要解读requirejs的源码,backbone源码分析将会随后给出. 行文思路: requirejs 基本介绍 requirejs使用后的几个好奇 requirejs源码解读 requirejs基本介绍 由于篇幅有限,这里不会详解requirejs的使用和api,建议读者朋友自己去用几次,再详读api.…
koa是有express原班人马打造的基于node.js的下一代web开发框架.koa 1.0使用generator实现异步,相比于回调简单和优雅和不少.koa团队并没有止步于koa 1.0, 随着node.js开始支持async/await,他们又马不停蹄的发布了koa 2.0,koa2完全使用Promise并配合async/await来实现异步,使得异步操作更臻完美. 一.快速开始 koa使用起来非常简单,安装好node.js后执行以下命令安装koa: npm init npm instal…
java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类.Dictionary是JDK最初的键值对类,它不可以存储null作为key和value,目前这个类早已不被使用了.目前都是在使用Map接口,它是可以存储null值作为key和value,但Map的key是不可以重复的.其常用的实现类主要有HashMap,TreeMap,ConcurrentHashMap等 HashMap源码解读…
List,Set,Queue都是继承Collection接口的单列集合接口.List常用的实现主要有ArrayList,LinkedList,List中的数据是有序可重复的.Set常用的实现主要是HashSet,Set中的数据是无序不可重复的.Queue常用的实现主要有ArrayBlockingQueue,LinkedBlockingQueue,Queue是一个保持先进先出的顺序队列,不允许随机访问队列中的元素. ArrayList核心源码解读 ArrayList是一个底层用数组实现的集合,数组…
一.介绍 ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它会返回队列头部的元素. ConcurrentLinkedQueue 采用非阻塞的方式实现线程安全队列,它采用了"wait-free"算法(即CAS算法)来实现. ConcurrentLinkedQueue 由 head 节点和 tail 节点组成,每个节点(Node)由节点元素(item)…
Prometheus 源码解读(一) Prometheus 是云原生监控领域的事实标准,越来越来的开源项目开始支持 Prometheus 监控数据格式.从本篇开始,我将和大家一起阅读分析 Prometheus 源码.学习 Prometheus 的设计理念,了解 Prometheus 的局限性与不足.本系列分八个板块逐一拆解 Prometheus 源码.本文基于 Prometheus v2.13.0. 工作原理与架构 时序数据库模块(TSDB) 配置文件加载模块(Configuration Rel…
转载文章,拜读了一下原文感觉很不错,转载一下,侵删 链接地址:http://objcoding.com/2019/05/05/aqs-exclusive-lock/ Java并发之AQS源码分析(一) 2019-05-05 zch    Java  concurrent  AQS  CAS AQS 全称是 AbstractQueuedSynchronizer,顾名思义,是一个用来构建锁和同步器的框架,它底层用了 CAS 技术来保证操作的原子性,同时利用 FIFO 队列实现线程间的锁竞争,将基础的…
LinkedList 源码解读 基于jdk1.7.0_80 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable LinkdedList 的底层是 链表结构  ,所以节点的设置很关键 节点类 private static class Node<E> { //…
HashMap 的数据结构 ​ hashMap 初始的数据结构如下图所示,内部维护一个数组,然后数组上维护一个单链表,有个形象的比喻就是想挂钩一样,数组脚标一样的,一个一个的节点往下挂. ​ 我们可以看源码来验证下,HashMap 的数据结构是不是真的是像上面所说是数组加链表的形式: //此处略过其他代码,只截取出了hashMap的数组结构相关的数组与链表 public class HashMap<K,V> extends AbstractMap<K,V> implements M…
demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: prepareBeanFactory(beanFactory); 这个方法是对beanFactory进行前期准备, 可以看到 beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory); 设置了BeanFactory,因…
etcd中raft实现源码解读 前言 raft实现 看下etcd中的raftexample newRaftNode startRaft serveChannels 领导者选举 启动并初始化node节点 发送心跳包 作为leader 作为follower 作为candidate leader选举 1.接收leader的心跳 2.发起竞选 3.其他节点收到信息,进行投票 4.candidate节点统计投票的结果 日志同步 WAL日志 leader同步follower日志 总结 参考 etcd中raf…
前言 上一篇文章 Vue 源码解读(5)-- 全局 API 详细介绍了 Vue 的各个全局 API 的实现原理,本篇文章将会详细介绍各个实例方法的实现原理. 目标 深入理解以下实例方法的实现原理. vm.$set vm.$delete vm.$watch vm.$on vm.$emit vm.$off vm.$once vm._update vm.$forceUpdate vm.$destroy vm.$nextTick vm._render 源码解读 入口 /src/core/instance…
特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了上下两篇,所以在阅读本篇文章时请同时打开 Vue 源码解读(8)-- 编译器 之 解析(下)一起阅读. 前言 Vue 源码解读(4)-- 异步更新 最后说到刷新 watcher 队列,执行每个 watcher.run 方法,由 watcher.run 调用 watcher.get,从而执行 watcher.getter 方法,进入实际的更新阶段.这个流程如果不熟悉,建议大家再去读一下这篇文章. 当更新一个渲染…
特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了两篇文章,本篇是对 Vue 源码解读(8)-- 编译器 之 解析(上) 的一个补充,所以在阅读时请同时打开 Vue 源码解读(8)-- 编译器 之 解析(上) 一起阅读. processAttrs /src/compiler/parser/index.js /** * 处理元素上的所有属性: * v-bind 指令变成:el.attrs 或 el.dynamicAttrs = [{ name, value,…
前言 上一篇文章 Vue 源码解读(8)-- 编译器 之 解析 详细详解了编译器的第一部分,如何将 html 模版字符串编译成 AST.今天带来编译器的第二部分,优化 AST,也是大家常说的静态标记. 目标 深入理解编译器的静态标记过程 源码解读 入口 /src/compiler/index.js /** * 在这之前做的所有的事情,只有一个目的,就是为了构建平台特有的编译选项(options),比如 web 平台 * * 1.将 html 模版解析成 ast * 2.对 ast 树进行静态标记…
前言 这篇文章是 Vue 编译器的最后一部分,前两部分分别是:Vue 源码解读(8)-- 编译器 之 解析.Vue 源码解读(9)-- 编译器 之 优化. 从 HTML 模版字符串开始,解析所有标签以及标签上的各个属性,得到 AST 语法树,然后基于 AST 语法树进行静态标记,首先标记每个节点是否为静态静态,然后进一步标记出静态根节点.这样在后续的更新中就可以跳过这些静态根节点的更新,从而提高性能. 这最后一部分讲的是如何从 AST 生成渲染函数. 目标 深入理解渲染函数的生成过程,理解编译器…