微信小程序开发模板网站,金服wordpress,苍溪县规划和建设局网站,莘县网站建设价格postgresql 基础架构 专栏内容#xff1a; postgresql内核源码分析手写数据库toadb并发编程 开源贡献#xff1a; toadb开源库 个人主页#xff1a;我的主页 管理社区#xff1a;开源数据库 座右铭#xff1a;天行健#xff0c;君子以自强不息#xff1b;地势坤 postgresql内核源码分析手写数据库toadb并发编程 开源贡献 toadb开源库 个人主页我的主页 管理社区开源数据库 座右铭天行健君子以自强不息地势坤君子以厚德载物. 系列文章
入门准备postgrersql基础架构快速使用初始化集群数据库服务管理psql客户端使用
前言
postgresql 数据库是一款通用的关系型数据在开源数据库中能与商业数据媲美在业界也越来越流行。
因为是开源数据库不仅公开源码还有很多使用案例好用的插件所以它的慢慢变成了数据库的先驱和标准通过postgresql可以很好从使用到原理彻底搞懂
如果是学习编程也可以学到丰富的编程知识数据结构编程技巧它里面还有很多精妙的架构设计分层思想可以灵活定制的思想。
本专栏主要介绍postgresql 入门使用数据库维护管理通过这些使用来了解数据库原理慢慢了解postgresql是什么样的数据库能做那些事情以及如何做好服务最关键的是这些知识都是面试的必备项。
概述
本文主要分享PostgreSQL的基础的架构方便我们对对PostgreSQL的部件之间如何相互作用的理解将会使本节更易理解在我们使用的时候不至于与其它类型的数据库产生混淆
这里我们会介绍两种视角下的架构
一是运行架构当postgresql运行起来时它是如何提供服务的二是逻辑架构用户创建的各数据库对象之间的关系是怎么样如何进行组织
运行架构
原理介绍
在postgresql数据库服务是一种C/S模式运行之后之前博客已经介绍过后台会运行一个主进程还有几个子进程它们共同提供服务
主进程提供网络监听当客户端有连接到来时主进程就会创建一个名称为postgres子进程也叫做后端服务进程它专门为这个客户端连接提供服务此时客户端与后端服务进程之间直接通信 也就是说服务主进程会为每个客户端连接都创建一个后端服务进程
客户端可以在不同的机器上通过tcp/ip协议与服务端进行通讯; 当然客户端是多种多样的可以是一个面向文本的工具 也可以是一个图形界面的应用或者是一个通过访问数据库来显示网页的网页服务器或者是一个特制的数据库管理工具
进程介绍
接着上一篇启动的数据库服务继续介绍我们用psql连接了数据库之后看看后台进程的变化:
[senllanghatch bin]$ ps -ef|grep postgres
senllang 149106 1 0 Sep03 ? 00:00:00 /opt/postgres/bin/postgres -D testdemo1
senllang 149107 149106 0 Sep03 ? 00:00:00 postgres: logger
senllang 149108 149106 0 Sep03 ? 00:00:00 postgres: checkpointer
senllang 149109 149106 0 Sep03 ? 00:00:00 postgres: background writer
senllang 149111 149106 0 Sep03 ? 00:00:00 postgres: walwriter
senllang 149112 149106 0 Sep03 ? 00:00:00 postgres: autovacuum launcher
senllang 149113 149106 0 Sep03 ? 00:00:00 postgres: logical replication launcher
senllang 175300 175236 0 08:38 pts/8 00:00:00 ./psql -d postgres
senllang 175301 149106 0 08:38 ? 00:00:00 postgres: senllang postgres [local] idle较刚启动时多了两个进程一个是 psql客户端进程一个是服务端的子进程postgresPID为 175301 进程名称上会显示状态 idle 当执行SQL时也会显示到这里。 如果有多个客户端连接时这里就会有多个postgres后端服务进程
逻辑架构
在使用数据库之前我们有必要了解一下数据库中的各数据库对象之间的组织关系
我们已经听说过的数据库里会有database 数据库, table 表, tablespace 表空间index 索引, 表字段数据类型存储过程数据库用户对角访问权限等等一大堆的概念
一开始是不是可以创建表呢是不可以的它是有先后顺序的
它们之间存在两种逻辑上的关联关系
存储空间关系命名空间关系
存储空间关系
存储空间关系是什么呢简单理解就是目录层次关系大的是父目录小的是子目录先有前者才可以有后者的存储位置这是从磁盘存储的角度来看各数据库对象之间的关系。
它们的前后顺序关系或者是大小包含关系为
数据库集群目录 这是最大的这个数据库服务对应的数据都存放在这个目录下面tablespace 表空间虽然叫做表空间但是它目的是指定一个存储区域刚初始化的集群会有一个默认表空间就在集群目录下所有不指定表空间的数据库对象都在默认表空间下database 数据库其实每个数据为也对应了一个目录那么在这个库下的所有内容都存放在此目录下面 数据库 这个词有多个理解大的来讲数据库服务有时也简称数据库小的来讲只是database这个数据库对象这里我们指数据库对象中的database;
表空间这一层级主要是为了方便扩展存储空间 因为目录没有办法跨磁盘空间当集群目录对应的磁盘空间不足时要么更换更大磁盘将数据拷过去这样旧的磁盘又会浪费而且磁盘空间总不可能无限大所以要扩展空间的话可以再建一个表空间表空间指定存储的位置在新在磁盘空间即可
我们创建的表索引视图存储过程都在database这一级下存储 数据库登陆的用户角色数据是最大的数据库集群目录下存储它是公共数据只要grant了权限所有database都可以使用 对于数据类型这些大多是系统默认的还有一部分是用户自定义的也属于公共数据存储在集群目录一级
命名空间关系
命名空间有点类似于目录关系但它是逻辑上的并不像目录是物理存在的逻辑命名空间的目的主要是为了方便管理和组织这些数据库对象在内部可以方便查找对于用户来讲也可以进行分组管理精细化的权限控制。
主要分为以下命名空间层次
tablespace 这是最大的一层这与存储层次相同用户不需要关心表空间因为访问存在的数据库对象它的表空间是确定的如果需要创建时需要指定当然必须有对应表空间的使用权限才可以创建对象database 处于第二层也是登录时必须指定的空间层次所有在用户登录后就不需要指定schema 处于第三层一个database中可以有多个schema默认的schema名称为public访问数据库对象时以 schema名称.数据库对象 的方式引用
我们举例来说明先创建一个目录用来新建表空间
[senllanghatch bin]$ mkdir tablespace_test1新建表空间 tblspc_test1, 指定它的存储路径在刚才新建的目录下
postgres# create tablespace tblspc_test1 location /opt/postgres/bin/tablespace_test1;
CREATE TABLESPACE新建一个schema test1
postgres# create schema test1;
CREATE SCHEMA设置当前的查找路径 默认为public现在设置为public和test1 这样两个schema下的内容都可以看到
postgres# set search_path TO public ,test1;
SET
postgres# \dList of relationsSchema | Name | Type | Owner
------------------------------------public | tbl_user | table | senllangtest1 | tbl_test1 | table | senllang
(2 rows)可以看到 tbl_user 所属的schema为 public, 而test1所属的schema为 test1;
当我们有多个用户多个应用数据时它们又需要交互在后面我们讲到用户和权限时就可以看到它们真正的用途了。
总结
接触任何事务都从第一眼看到了解开始postgresql数据库的了解也是一样我们可以看到它的服务启动后的进程组了解它的进程关联
数据库的数据存储组织的空间关系有助于我们认识它内部的运行机制在我们使用SQL进行数据操作时有会用到命名空间的关系。
本文将从看到的开始为后续继续学习做好基础有兴趣的同学关注本专栏
结尾 非常感谢大家的支持在浏览的同时别忘了留下您宝贵的评论如果觉得值得鼓励请点赞收藏我会更加努力 作者邮箱studysenllang.onaliyun.com 如有错误或者疏漏欢迎指出互相学习。
注未经同意不得转载