初创公司 CTO 使用 Postgres 的手册

Talk big database, solutions, and innovations for businesses.
Post Reply
Dimaeiya333
Posts: 63
Joined: Sat Dec 21, 2024 3:26 am

初创公司 CTO 使用 Postgres 的手册

Post by Dimaeiya333 »

您正在开始一个新项目 - 或公司 - 并且您决定使用 Postgres。困难的部分(选择数据库)已经结束,现在有趣的部分开始:确保您在几年内不必再考虑它。

这篇文章将介绍一些不太为人所知的长期设置 Postgres 的技巧,从连接池到安全基础知识再到扩展和索引。

使用 PGBouncer 为 Postgres 配置连接池
默认情况下,Postgres为每个客户端连接创建一个独立于主操作系统进程的进程。在流量较低的情况下,创建和销毁这些进程所需的时间以及它们从未被重用的事实并不重要。您可以手动设置 max_connections 的数量,但随着时间的推移,随着规模的扩大,此时您可能会遇到问题。连接池本质上可以帮助您“缓存”这些进程,并在客户端连接和断开与数据库的连接时重用它们。

虽然您可以将连接池集成到您的应用程序逻辑中,但大多数人选择第三方工具,对于 Postgres 来说是PGBouncer。它是一个轻量级的开源连接池程序,您可以将其安装在数据库服务器或应用程序服务器上。您可以在3 个池级别之间进行选择:

会话池:坚持“客户端连接无限期”模型,并在客户端在线的整个时间内保持连接打开。
事务池:连接持续一个事务,之后它们将返回到池中。
语句池:连接仅持续一个查询,因此如果您有多个查询作为事务的一部分,则它根本不起作用。
大多数人选择会话池 - 它是最保守的,并且连接断开的风险最小 - 但每个应用程序都是不同的,您必须弄清楚哪种模式适合您的限制。

信息
大多数 Web 框架将其留给第三方工具(请参阅有关 PGBouncer 的Django 论坛主题),但 instagram 数据 Rails 提供了本机连接池功能。

连接池对性能的影响
百万美元的问题:它真的有效吗? Percona 运行了一系列基准测试来了解 PGBouncer 如何影响性能。对于少量并发客户端 (<60),PGBouncer由于池开销而显着降低每秒事务数 (TPS)。但当您将其增加到 >100 时,您就会开始看到显着的性能优势。

PG保镖
PG保镖
那么,您是否需要立即使用连接池来支持您的第一批用户?可能不会。但是,一旦您达到低/中等流量,使用 PGBouncer 就会对您有所帮助。

Postgres 傻瓜安全知识
在项目的最初几周,通常只有一两个开发人员在空数据库上工作;安全并不是最重要的。但当你向全世界发布你的应用程序时,它就必须如此。对于数据库,有时似乎有一百万种不同的方式来锁定事物。

限制主机或用户级别的访问
让我们从访问开始。 Postgres 通过两种方式限制访问:

在主机级别– 定义具有访问权限的 IP 地址和域
在用户级别– 定义数据库用户及其权限
PGD​​ATA 目录中的pg_hba.conf文件是您定义谁可以连接到哪些数据库的位置。如果您没有客户端条目,他们将无法访问数据库。假设您的应用程序服务器正在其他地方运行,以下是允许它访问数据库的方法:
Post Reply