如何提升和扩展 PostgreSQL — 从共享缓冲区到内存数据网格

利用共享缓存和操作系统缓存利用 RAM

Postgres 是一个基于磁盘的数据库,即使您的整个架构是围绕磁盘访问设计的,利用 RAM 也很重要。如果按照人类规模的延迟来判断,这可以将延迟从几天缩短到几分钟(图 1)。只需看一下下表即可看出,与磁盘 I/O 相比,访问 RAM 或英特尔傲腾 DC PM 的速度要快得多。

图片标题

标准 Postgres 部署有两种常见的解决方案 - 共享缓冲区缓存和通用 操作系统页面缓存。前者缓存数据和关系索引,Postgres 完全管理该组件,而后者由操作系统提供给所有应用程序,只是将文件页面/块保留在内存中。哪一种更好取决于用例。 

然而,如果 Postgres 在具有足够 RAM 的单台机器上运行并且不需要横向扩展,那么这些缓存技术就足够了。但是,一旦数据量和负载超过了即使是最强大的机器的容量,我们就会开始寻找另一种解决方案。好吧,如果共享缓冲区或操作系统页面缓存适用于所有场景,我们就不会拥有分布式内存数据库。

使用 Pgpool-II 进行负载平衡

让我们暂时忘记高级缓存解决方案,假设单机 Postgres 无法承受不断增长的负载,这是一个经典的负载平衡问题。

Pgpool II需要作为第一个可能的选项进行审查,特别是如果您的用例读取量很大。如图所示,您需要部署多个 Postgres 实例,将它们放在 Pgpool 协调器实例后面,并让它负载平衡查询。

但是,有几点需要考虑并制定架构清单:

  • 拥有的副本越多,更新速度就越慢。主数据库实例必须保持从数据库同步。对于许多场景,如果无论哪个副本将服务于请求,都必须为应用程序保留 ACID 保证,则复制需要同步。
  • 拥有副本意味着解决方案的有用容量受到主实例上可用存储空间的限制。例如,在具有三个副本的集群中,即使每台 Postgres 计算机运行 2 TB 磁盘(总共 6 TB),您也无法存储超过 2 TB 的应用程序生成的唯一数据。如果需要存储更多,则需要分配容量更大的机器。

那么,我们如何才能以弹性和无限的可扩展性来支持写入密集型或混合工作负载呢?让我们在下一节中回顾一下。

使用 Postgres-XL 和云解决方案进行扩展

分片和分区让Postgres从单机数据库转变为纯粹的分布式存储。Postgres-XL可以将数据均匀地分配到集群的整个存储空间,从而支持写入密集型和混合工作负载,并且有可能能够存储无限的数据集。

此类解决方案的架构没有显着差异。请参阅 Postgres-XL 架构(图 3),该架构由存储分布式数据集的数据节点、了解数据分布并处理应用程序请求的协调器以及在集群中强制执行事务一致性的全局事务管理器组成。 

但即使这些解决方案也不足以满足所有使用场景。那么还缺少或需要什么呢?答案是——记忆。这些解决方案仍然基于磁盘,尽管可以为每个数据节点启用共享缓冲区和操作系统页面缓存,但这种配置将很笨拙且难以管理以确保大规模一致且可预测的延迟。 

最后,我们来谈谈专为 RAM 和英特尔傲腾 DC PM 设计的分布式内存存储,以确保我们能够充分发挥分布式内存存储的潜力。

使用内存数据网格进行缓存和扩展

内存数据网格是一种分布式内存存储,可以部署在 Postgres 之上,并通过直接从 RAM 处理应用程序请求来卸载后者。网格有助于将可扩展性和缓存结合在一个系统中,以大规模地利用它们。

Apache Ignite和GridGain是此类解决方案的示例之一,如下图所示,它们与 Postgres 互连并使其与内存中数据集保持同步:

Ignite 和 GridGain 分区数据的方式与 Postgres-XL 的方式类似,只有一个例外:内存成为主存储,而 Postgres 则保留为辅助磁盘存储。Ignite 和 Gridgain 都支持无限的水平可扩展性、SQL、分布式事务等。您实际上可以在 RAM 中存储 TB 级和 PB 级的数据。

总之,我们总结一下讨论的用于增强和扩展 Postgres 的所有选项:

  • 共享缓冲区和操作系统页面缓存非常适合单机部署,作为利用内存的一种方式。
  • Pgpool-II 完美解决了读取繁重的工作负载的负载平衡问题。
  • Postgres-XL 和类似的解决方案将 Postgres 转变为基于磁盘的分布式数据库,用于处理大量写入和混合工作负载。
  • Apache Ignite 和 GridGain 作为内存中的数据网格,让我们能够大规模地分布式并利用内存,同时将 Postgres 保留为磁盘存储。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生边缘计算KubeEdge安装配置(二)

1. K8S集群部署,可以参考如下博客 请安装k8s集群,centos安装k8s集群 请安装k8s集群,ubuntu安装k8s集群 请安装kubeedge cloudcore centos安装K8S 2.安装kubEedge 2.1 编辑kube-proxy使用ipvs代理 kubectl edit configmaps kube-proxy -…

tomcat整体架构

Tomcat介绍 Tomcat是Apache Software Foundation(Apache软件基金会)开发的一款开源的Java Servlet 容器。它是一种Web服务器,用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境&#x…

C++ | 仿函数

仿函数的用法 在C语言时期,如果想要实现回调函数或者是函数参数需要传入函数,通常是用的函数指针。而在C中,我们一般用仿函数来平替。 仿函数,又叫函数对象。虽然名字叫仿函数,但本质上就是一个重载了 operator() 的类…

车载通信架构 —— DDS协议介绍

车载通信架构 —— DDS协议介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…

Linux网络监控工具 - iftop

iftop 是一个基于 libpcap 库的网络流量监控工具。它通过监听指定网络接口上的数据包,并分析这些数据包的源地址、目标地址、源端口、目标端口、协议等信息,从而实时显示网络流量的相关统计信息。 安装 在大多数Linux发行版中,您可以使用包管…

计算机竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习行人重识别(person reid)系统 该项目…

配置文件生成器-秒杀SSM的xml整合

配置文件生成器-秒杀SSM的xml整合 思路&#xff1a; 通过简单的配置&#xff0c;直接生成对应配置文件。 maven坐标 <dependencies><!-- 配置文件生成 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker<…

maven 初学

1. maven 安装 配置安装 路径 maven 下载位置: D:\software\apache-maven-3.8.6 默认仓库位置: C:\Users\star-dream\.m2\repository 【已更改】 本地仓库设置为&#xff1a;D:\software\apache-maven-3.8.6\.m2\repository 镜像已更改为阿里云中央镜像仓库 <mirrors>…

Kubernetes概述架构与工作流程简述

文章目录 Kubernetes概述Kubernetes优势Kubernetes 集群组件控制平面组件Node 组件 Kubernetes工作流程下期预告 Kubernetes概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥…

简易版Pycharm(2023)+Conda开发环境配置教程

困 扰 不知道为什么&#xff0c;自从Pycharm更新了新的版本以后&#xff0c;在Pycharm中为项目工程配置Python解释器环境时&#xff0c;总是不能像以前那么方便。 比如&#xff0c;当前Conda中有十个不同的开发环境&#xff0c;每个环境一个名称&#xff0c;比如&#xff0c;p…

VB.NET vs. VB6.0:现代化编程语言 VS 经典老旧语言

目录 ​.NET背景&#xff1a; 特点: VB6.0背景&#xff1a; 特点: 两者之间的不同: 总结: 升华: .NET背景&#xff1a; VB.NET一种简单&#xff0c;现代&#xff0c;面向对象计算机编程语言&#xff0c;有微软开发&#xff0c;VB.NET是一种基于.NET Framework的面向对象…

golang gin——中间件编程以及jwt认证和跨域配置中间件案例

中间件编程jwt认证 在不改变原有方法的基础上&#xff0c;添加自己的业务逻辑。相当于grpc中的拦截器一样&#xff0c;在不改变grpc请求的同时&#xff0c;插入自己的业务。 简单例子 func Sum(a, b int) int {return a b }func LoggerMiddleware(in func(a, b int) int) f…

【C++设计模式之观察者模式:行为型】分析及示例

简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都能够自动收到通知并更新。 描述 观察者模式由两个核心件组成&#xff1…

来单提醒/客户催单 ----苍穹外卖day9

来单提醒 需求分析 代码开发 注意:前端请求的并不是8080端口;而是先请求Nginx,Nginx进行反向代理以后转发到8080端口 这段代码首先创建了一个orders类用于更新订单状态 并且在更新状态后使用websocket发送给后端提醒 将信息放在map后,使用json的string化方式传给一个接收对象,…

类 ChatGPT 模型存在的局限性

尽管类ChatGPT模型经过数月的迭代和完善&#xff0c;已经初步融入了部分领域以及人们的日常生活&#xff0c;但目前市面上的产品和相关技术仍然存在一些问题&#xff0c;以下列出一些局限性进行详细说明与成因分析&#xff1a; 1&#xff09;互联网上高质量、大规模、经过清洗…

【广州华锐互动】动物解剖学AR互动学习平台

增强现实&#xff08;AR&#xff09;是一种将虚拟信息叠加到现实世界中的技术。通过智能手机、平板电脑或AR眼镜等设备&#xff0c;AR技术可以创建出逼真的虚拟物体&#xff0c;这些物体可以与现实世界的环境相互交互。 AR技术在教育领域的应用非常广泛&#xff0c;包括历史、科…

postman测试文件上传接口教程

postman是一个很好的接口测试软件&#xff0c;有时候接口是Get请求方式的&#xff0c;肯定在浏览器都可以测了&#xff0c;不过对于比较规范的RestFul接口&#xff0c;限定了只能post请求的&#xff0c;那你只能通过工具来测了&#xff0c;浏览器只能支持get请求的接口&#xf…

CCF CSP认证 历年题目自练Day21

题目一 试题编号&#xff1a; 201909-1 试题名称&#xff1a; 小明种苹果 时间限制&#xff1a; 2.0s 内存限制&#xff1a; 512.0MB 题目分析&#xff08;个人理解&#xff09; 先看输入&#xff0c;第一行输入苹果的棵树n和每一次掉的苹果数m还是先如何存的问题&#xf…

ASP.NET Core 开发 Web API

2. Web Api 的创建与Http类型的介绍 2.1 ASP.Net Core Web API项目的创建 1.创建ASP.NET Core Web API项目 从“文件”菜单中选择“新建”“项目”。 在搜索框中输入“Web API”。 选择“ASP.NET Core Web API”模板&#xff0c;然后选择“下一步”。 在“配置新项目”对话框中…

[护网杯 2018]easy_tornado 解析

打开网页有三个链接&#xff0c;依次点开之后获得一个fllllllllllllag一个render和一个MD5加密格式 之后尝试去访问/fllllllllllllag 直接跳出报错界面。 但这个报错界面居然是可以改的 试着注入一下 看了师傅的wp发现好像没有&#xff0c;要从框架入手 框架就是标题的torna…