https://www.notion.so/blog/sharding-postgres-at-notion 今年(2021)早些时候,我们对 Notion 进行了五分钟的定期维护. 虽然我们的声明指向"提高稳定性和性能",但在幕后是数月专注.紧迫的团队合作的结果:将 Notion 的 PostgreSQL 整体分片成一个水平分区的数据库舰队. 分片命名法被认为起源于 MMORPG Ultima Online,当时游戏开发者需要一个宇宙解释来解释存在多个运行平行世界副本的游戏服务器.…
postgres中几个复杂的sql语句 需求一 需要获取一个问题列表,这个问题列表的排序方式是分为两个部分,第一部分是一个已有的数组[0,579489,579482,579453,561983,561990,562083] 第二个部分是按照id进行排序,但是需要过滤掉前面已有的数组. 最开始的时候我大概是想这么写的: select * from question where id = any( array_cat( ARRAY[0,579489,579482,579453,561983,5619…
postgres中的中文分词zhparser postgres中的中文分词方法 基本查了下网络,postgres的中文分词大概有两种方法: Bamboo zhparser 其中的Bamboo安装和使用都比较复杂,所以我选择的是zhparser zhparse基于scws scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等.github上的地址在这里.它是xunsearch的核心分词系统. 而zhparser是基于scws来做的postgr…
视图和物化视图区别 postgres中的视图和mysql中的视图是一样的,在查询的时候进行扫描子表的操作,而物化视图则是实实在在地将数据存成一张表.说说版本,物化视图是在9.3 之后才有的逻辑. 比较下视图和物化视图的性能 创建两个表 CREATE TABLE teacher ( id int NOT NULL, sname varchar(100) ); CREATE TABLE student ( sid int NOT NULL, teacher_id int NOT NULL DEFAU…
之前我的一些文章都是在说Postgres的一些查询相关的代码.但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑.那么今天我来说说Postgres中的postmaster模块的代码,试着解答这些问题. 在正式讨论之前,我先说一下,代码主要涉及的是postgres源码的src/backend目录下的main,postmaster以及tcop模块. 关于postmaster这个命令,熟悉postgres的一定不会陌生.在Linux上…
今天我们对postmaster的以下细节进行讨论: backend的启动和client的连接请求的认证 客户端取消查询时的处理 接受pg_ctl的shutdown请求进行shutdown处理 2.与前端的交互 2.1backend的启动和client的连接请求的认证 关于backend的启动,其函数调用栈如下: PostmasterMain() |->ServerLoop() |->initMasks() |->for(;;) |->select() <--监听端口 |-&g…
在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形成积累.所以把常用的东西封装成lib文件. 我自己的实施过程如下,同时会穿插一些自己参考的文章的链接或者方法.主要参考链接: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/#se…
HTML5学堂 那些盒模型在IE6中的BUG们,工程狮的你可曾遇到过? IE6已经渐渐的开始退出浏览器的历史舞台.虽然当年IE6作为微软的一款利器击败网景,但之后也因为版本的持续不更新而被火狐和谷歌三分天下.可谓成在IE6,亦败在IE6啊~ 说到前端开发,不得不说,在所有前端工程师的心中,IE6是曾经永远的痛~ 在这里,小编总结罗列了一下IE6的问题,跟大家分享一下.今天就先从盒模型入手啦~ 盒模型基本概念 盒模型指css布局中html中的每个元素在浏览器中的解析都可以被看作一个盒子,拥有盒子一…
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录.         然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名. 3.添加工程引用的dll动态库:把引用的dll放到…
1.先创建父项目 在Eclipse里面New -> Maven Project: 在弹出界面中选择“Create a simple project” 这样,我们就按常规模版创建了一个Maven工程.我们还需要对这个工程进行修改.注意:Packaging的类型为pom. 因为,这是一个父项目,不需要有什么源码,那么,我们在Eclipse中将这个工程下的不用的目录都删除,仅留下pom.xml文件就行了. 2.创建子项目 选中刚建的父项目(wyp.ssm.db.bus),在弹出菜单中点击 New ->…
在Eclipse中使用Maven创建Web工程 1.创建maven Project工程,使用maven-archetype-webapp 2.在pom.xml文件中,设置打包类型为war <packaging>war</packaging> 3.在webapp下新建WEB-INF目录和web.xml配置文件 快捷方法:右键项目——>Java EE Tools——>Generate Deployment Descriptor Stub快速生成WEB-INF目录和web.x…
选择工程,右键-工程属性 其中: VC++目录 -->包含目录,对所有的项目及未来新建的项目都有效 c/c++-->常规-->附加包含目录,仅对当前项目有效 绝对路径设置方法: 在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件(.h)目录:工程--属性--配置属性--c/c++--常规--附加包含目录: 添加头文件存放目录 2.添加文件引用的lib静态库路径: 1)工程--属性--配置属性--链接器--常规--附加库目录:加上lib文件存放目录. 2)然…
众所周知,缓存是提高数据库性能的一个重要手段.本文着重讲一讲PostgreSQL中的缓存相关的东西.当然万变不离其宗,原理都是共同的,理解了这些,你也很容易把它运用到其它数据库中. What is a cache and why do we need one 不同的计算机组件运行的速度是不一样的,他们的差距很大,一般都是数量级级别的差距.比如速度上磁盘<RAM<system cache(如下图).在数据量小的时候你可能觉察不出差异,但是尤其在现在这个大数据的时代,你很轻易就能感知他们的差异,比…
表的模式信息存放在系统表中,因此要访问表,就需要首先在系统表中取得表的模式信息.对于一个PostgreSQL系统来说,对于系统表和普通表模式的访问是非常频繁的.为了提高这些访问的效率,PostgreSQL设立了高速缓存(Cache)来提高访问效率. Cache中包括一个系统表元组Cache(SysCache)和一个表模式信息Cache(RelCache).其中: SysCache中存放的是最近使用过的系统表的元组: RelCache中包含所有最近访问过的表的模式信息(包含系统表的信息).RelC…
顾名思义,物化节点是一类可缓存元组的节点.在执行过程中,很多扩展的物理操作符需要首先获取所有的元组后才能进行操作(例如聚集函数操作.没有索引辅助的排序等),这时要用物化节点将元组缓存起来.下面列出了PostgreSQL中提供的物化节点. 物化节点概述 物化节点需要有元组的缓存结构,以加快执行效率或实现特定功能(例如排序等).物化节点的功能种类多样,实现过程也不尽相同,缓存的方式也有所不同,主要使用了 tuplestore来进行缓存.tuplestore使用Tuplestorestate数据结构…
转载:https://www.cnblogs.com/flying-tiger/p/9567213.html#4121483#undefined PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问.在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护.这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前状态.这样可以保护语句不会看到可能由其他在相同数据行上执行更新的并发事务造成的不一致数据,为每一个数据…
上文我们讨论了PostgreSQL的MVCC相关的基础知识以及实现机制.关于PostgreSQL中的MVCC,我们只讲了元组可见性的问题,还剩下两个问题没讲.一个是"Lost Update"问题,另一个是PostgreSQL中的序列化快照隔离机制(SSI,Serializable Snapshot Isolation).今天我们就来继续讨论. 3.2 Lost Update 所谓"Lost Update"就是写写冲突.当两个并发事务同时更新同一条数据时发生.&quo…
在 PostgreSQL中,每一个进程都有属于自己的共享缓存(shared cache).例如,同一个系统表在不同的进程中都有对应的Cache来缓存它的元组(对于RelCache来说缓存的是一个RelationData结构).同一个系统表的元组可能同时被多个进程的Cache所缓存,当其中某个Cache中的一个元组被删除或更新时 ,需要通知其他进程对其Cache进行同步.在 PostgreSQL的实现中,会记录下已被删除的无效元组 ,并通过SI Message方式(即共享消息队列方式)在进程之间传…
1.相关的数据类型 我们先看相关的数据类型: HeapTupleData(src/include/access/htup.h) typedef struct HeapTupleData { uint32 t_len; /* length of *t_data */ ItemPointerData t_self; /* SelfItemPointer */ Oid t_tableOid; /* table the tuple came from */ HeapTupleHeader t_data;…
这篇博客将MVCC讲的很透彻,以前自己懂了,很难给别人讲出来,但是这篇文章给的例子就让人很容易的复述出来,因此想记录一下,转载给更多的人 转自:https://www.cnblogs.com/flying-tiger/p/9567213.html PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问.在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护.这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前…
XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color="#c4dff6" srs="+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"> <Style name="My Style"> <Rule> <…
目前数据库中的join操作 无非三种 nextloop merge hash 本文分析pg的merge join 不得不说pg真是学习数据库实现的好东西 不愧是学院派 用来教学的 代码写的干净注释清晰全面 pg源码中的伪代码 nodeMergejoin.c * Join { * get initial outer and inner tuples INITIALIZE * do forever { * while (outer != inner) { SKIP_TEST * if (outer…
Postgresql作为C语言开发的代码,其中大量的运用了一些宏的操作. 因此理解这些宏很重要,然而有时候这些宏总让人很费解. 作为一个经常翻翻postgresql源码的小白,在这里做一个记录吧,方便自己查看. 1. #define offsetof(type, field) ((long) &((type *)0)->field) 开始不理解为什么可以这样使用:(type *)0)->field,后来发现如果这样写,运行的时候程序会崩溃,但调用这个宏的时候为什么不会? 后来在网上找到…
我们知道,在数据库中为了并发控制,少不了要使用各种各样的锁(lock).PostgreSQL中也不例外. 在PostgreSQL中有三种级别的锁,他们的关系如下: |上层 RegularLock | | LWLock | |底层 SpinLock 那么按照顺序,我们先来讨论下PostgreSQL的最底层的SpinLock. 作为PostgreSQL的最底层的锁,SpinLock比较简单,它的特点是封锁时间很短,没有等待队列和死锁检测机制,在事务结束时不能自动释放.因此,SpinLock一般不单独…
1.要用es6,因为目前浏览器的支持情况,那么肯定需要插件将e6的代码转换成es5,我用的是babel-loader,事实证明使用6.x版本似乎是不行的,我换成5.3.2之后就成功了. 2.webpack.config.js配置文件中,配置loader的时候,我从网上博客中copy的 loader: 'babel-loader!jsx-loader?harmony' 不知道是语法错误还是本身不通,编译时会报错改成仅用babel-loader 错误解决 2017/02/16更新: 一.最近又重新装…
1.编写一个只有入参,没有出参的函数: CREATE OR REPLACE FUNCTION add(a NUMERIC, b NUMERIC) RETURNS NUMERIC AS $$ SELECT a+b; $$ LANGUAGE SQL; 执行函数: [postgres@master ~]$ psql -d mydb -U zhang psql (10.5) Type "help" for help. mydb=> mydb=> mydb,); add -----…
.配置eclipse的maven .在Eclipse里面New -> Maven Project -> 选择“Create a simple project” Group Id: com.demo Artifact Id: multi-modules-demo Packaging: pom Name: Multi Modules Demo 点击完成(这是一个父项目,不需要有什么源码,那么,我们在Eclipse中将这个工程下的不用的目录都删除,仅留下 pom.xml 文件就行了) .创建子项目-…
1.从Github中下载工程压缩包,并将其解压到本地 2.修改文件 假设,解压后的文件目录如下: (1)修改配置文件  xx\build.gradle // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {    repositories {        jcenter()    }    dependencies {  …
一个简便的方法实现javaee版的eclipse开发动态的WEB工程(javaWEB项目)1.把开发选项切换到javaEE2. 可以在window->shou view 中找到package explorer并把其拖到开发区的左边 (Tomcat环境搭建在这不多说)3.在servers面板中新建Tomcat服务器,一定要关联到Tomcat安装的根目录4.新建一个Dynamic Web Project.其中Target Runtime需选择Tomcat6.0(3)5.开发java WEB应用6.可…
如何创建: http://huxiaoheihei.iteye.com/blog/1766986 遇到的问题: 1: 如果spring MVC配置了 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param>…