PostgreSQL 后端开发者基本原理:我在CRUD之外学到的概念 当与Node.js后端应用程序合作时,知道SQL CRUD操作只是开始.
作为后端开发者,我们最终需要了解交易,索引,货币,查询优化,JSONB,连接集合,以及PostgreSQL如何实际执行我们的查询.
今天我探讨了一些PostgreSQL概念,这些概念对后端开发最为重要. 🐘 什么是PostgreSQL吗?
PostgreSQL是一个开源对象关系数据库管理系统(ORDBMS).
它提供传统的关系数据库功能,如表格,行,列,主键,外键,和SQL等,同时也支持高级能力,如JSONB,数组,自定义类型,功能,扩展,以及专用索引等.
一个典型的Node.js后端流看起来像: QQ Prime Key vs Foreign Key A Prior Key 唯一地识别出一行.
外键在表格之间产生关系。
外国钥匙也有助于保持优惠完整性。
一个简单的记忆方法:QQ交易和ACID A交易将多个数据库操作组合为一个逻辑单元.
例如,汇款既要求: 如果一次行动失败,我们不想只承诺交易的一半.
这就是ACID的来历:交易帮助数据库操作变得可靠.
MVCC网站 我发现一个PostgreSQL概念特别重要,即MVCC——多维相通货币控制.
PostgreSQL维护了不同的行版本/snapshot,以便同时进行的交易能够以一致的数据视图来工作.
目标是允许阅读和写作同时进行,与简单的锁定模式相比,阻塞较少。
对于后端开发者来说,关键取出是: MVCC是PostgreSQL用来提供货币和交易隔离的机制之一.
JSONB PostgreSQL支持JSONB存储半结构数据.
例如: 我们可以存储:然后查询一个属性:JSONB在结合适当的索引时变得特别强大,例如GIN索引.
然而,JSONB不应该自动替换关系栏.
经常被询问、受限制和关系数据往往使用正常列来更好地反映。
QQ索引可以通过为相关行提供更快捷的访问路径来显著地提高查询性能.
例如:但指数不是免费的。
他们消耗了存储并增加了INSERT,UPDATE,和DELETE操作的间接费用,因为指数也需要维持.
所以:不要盲目创建索引.
根据实际的查询模式和执行计划创建它们.
解释和解释 当查询变得缓慢时,我们需要了解PostgreSQL是如何执行的.
显示计划员的估计执行计划。
对于实际执行信息:实际执行查询和报告实际运行时间统计.
为了深入调查: 这有助于识别CPU和I/O相关的瓶颈.
需要寻找的一些重要事物包括: 序列扫描索引 扫描 实际执行时间 估计值与实际行数 循环缓冲器点击缓冲器读取 A序列扫描不自动差.
如果查询需要大比例的表格,PostgreSQL可能会正确地决定扫描表格比使用索引便宜.
CTEs CTE代表通用表表达式.
它允许我们定义一个被命名的中间查询:CTEs可以使复杂的SQL更容易被读取,也可以用于递归查询和多步数据处理.
XQ窗口函数窗口功能允许跨相關行进行计算而不会将结果折叠成每组一行.
例如: 常见的窗口功能包括: 这是一个重要的区分 :\\ 其他 PostgreSQL 特性 其他一些值得作为后端开发者来了解的概念有: 阵列 PostgreSQL可以直接存储阵列: UUID UUID提供全球独有的标识符,在分布式系统中可以有用.
视图 A 是一个保存的查询, 其行为类似