首页 文章 精选 留言 我的

精选列表

搜索[内容审核],共10000篇文章
优秀的个人博客,低调大师

2024 Postgres Conference 大会丨一文详解拓数派干货演讲精华内容

4月17日-19日,全球规模最大的 PostgreSQL 会议之一——Postgres Conference 2024 在美国 San Jose 隆重举行,本届大会包含 Ops、Dev、Essentials 和 Google Cloud 四个 Track,话题围绕 PostgreSQL 内核、数据库管理与应用、用户实例与经验等主题展开,邀请了来自谷歌、AWS、EDB、Yugabyte、DBeaver 等企业的资深讲师出席大会。拓数派凭借其强大的国际技术社区影响力,受邀作为会议赞助商参与本次盛会,并发表技术演讲。 在大会中,PieCloudDB 技术专家 Richard Guo 作为新PostgreSQL Contributor,受邀发表技术演讲《A high-level introduction to the query planner in PostgreSQL》,结合 PieCloudDB Database 优化器打造经验,从开发者的角度阐述 PostgreSQL 优化器的工作原理,并详细介绍查询树转换为计划树的过程。Richard 的演讲得到了参会观众的积极反馈,并进行了深入的互动和沟通。 数据库管理系统(DBMS)中,SQL 查询处理是一个复杂且关键的过程。对于 PostgreSQL,一条 SQL 语句从接收到执行一共需要经过下面五个主要步骤: 解析(Parser): 负责检查语法错误并生成解析树(parser tree); 分析(Analyzer): 根据解析树进行语义分析,生成一棵查询树(query tree); 重写(Rewriter): 按照系统存在的规则对查询树进行重写; 规划/优化(Planner): 基于查询树生成一棵执行效率最高的计划树(plan tree); 执行(Executor): 按照计划树中的顺序访问表和索引,执行相应查询。 对于同一个查询语句,一般可以由多种方式去执行,查询优化器作为数据库的重要组件,它的作用就是从每一种可能的执行方式中,找到代价最小的查询计划,并把它转换成可执行的计划树。 下面将着重介绍 PostgreSQL 查询处理过程中的规划/优化阶段,这也是整个流程中最重要以及最复杂的阶段。该过程一般被分为四个阶段:预处理阶段,扫描/连接优化阶段,扫描/连接之外的优化阶段以及后处理阶段。 1. 预处理阶段 在预处理阶段的早期一般会通过简化常量表达式(函数、布尔、CASE 等)、内联简单的 SQL 函数等方式,尽可能的简化查询。同时,还会通过把 IN, EXISTS 等类型的子查询转换为半连接、提升子查询以及把消除外连接(将其转换为内连接或反连接)等操作来简化连接树。 除了这些方法,在预处理阶段的后期还会采用多种优化方式,包括: 分发 WHERE 和 JOIN/ON 约束条件 构建等价类 收集关于连接顺序限制的信息 消除无用连接 ... 2. 扫描/连接优化阶段 扫描/连接优化阶段主要处理查询语句中 FROM 和 WHERE 部分,同时也会考虑 ORDER BY 的信息。这一部分都是由代价来驱动的。 该阶段首先为基表确定扫描路径,估计扫描路径的代价,然后利用动态规划和遗传算法,搜索整个连接顺序空间,生成连接路径。而在搜索连接顺序空间时,还需要考虑到由外连接带来的连接顺序的限制。 在动态规划中,连接搜索会按照如下的过程进行: 首先为每一个基表生成扫描路径 为所有可能的两个表的连接生成连接路径 为所有可能的三个表的连接生成连接路径 为所有可能的四个表的连接生成连接路径 ... 直到所有基表都连接在了一起 然而这个过程的代价是非常高的,n 个表的连接,理论上有 n! 个不同的连接顺序,遍历所有可能的连接顺序是不现实的。因此通常会使用一些启发式办法,减少搜索空间,对于不存在连接条件的表,尽量不做连接;把一个大的问题,分解成多个子问题,从而降低复杂度。 3. 扫描/连接之外的优化阶段 在该阶段优化器会优先处理 GROUP BY、聚集、窗口函数和 DISTINCT,再对集合(UNION/INTERSECT/EXCEPT)操作进行处理,最后再处理 ORDER BY。以上的每个步骤都会产生一个或多个路径,优化器会对这些路径基于代价进行筛选,并为筛选出的路径添加 LockRows,Limit 和 ModifyTable 节点。 4.后处理阶段 在这一阶段,优化器需要把代价最小的路径转换成计划树,并且调整计划树中的一些细节: 展平子查询的范围表 把上层计划节点中的变量变成 OUTER_VAR 或 INNER_VAR 的形式,来指向子计划的输出 删除不必要的 SubqueryScan、Append、MergeAppend 等节点 做完这一步,优化器就得到了完整的计划树,并可以将该计划树交予执行器去执行,最终得到查询结果。 作为立足中国的高科技创新企业,拓数派近年来通过代码贡献、讲师布道、会议赞助与参与、生态合作等多种形式,深耕于国际开源技术与生态体系。未来,拓数派将不断拓宽国际视野,积极融入全球科技创新的浪潮,扩大国际影响力,打造为国际化的技术驱动型企业。

优秀的个人博客,低调大师

MyCms v1.3.2 [swoole版],基于 Laravel 的自媒体内容管理系统

Swoole简介 Swoole 是为 PHP 开发的生产级异步编程框架。 Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。 Laravel简介 Laravel是当今最熟练,流行和广泛使用的开源框架之一。Laravel具有多种功能,例如模板引擎,MVC架构支持,安全性高,开发者工具,数据库迁移等。这些Laravel高级功能使它比其他PHP框架更好。 但是,Laravel 有个最为人诟病的缺点就是:慢、笨重。 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。 Swoole 可以提供强大性能而 Laravel 则可以提供优雅代码结构使用。这俩儿真是完美组合! MyCms简介 MyCms是一款基于Laravel开发的开源免费的自媒体博客CMS系统,适用于个人网站及企业网站开发使用,软件著作权编号:2021SR1543432。 MyCms基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们。 MyCms v1.3.2 版本新增对swoole的支持。 使用新版本的用户直接安装后按以下配置即可。 使用旧版本的用户则需要先安装composer require swooletw/laravel-swoole。 在config/app.php服务提供者数组添加该服务提供者。 [ 'providers' => [ SwooleTW\Http\LaravelServiceProvider::class, ], ] Nginx配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name your.domain.com; root /path/to/laravel/public; index index.php; location = /index.php { # Ensure that there is no such file named "not_exists" # in your "public" directory. try_files /not_exists @swoole; } # any php files must not be accessed #location ~* \.php$ { # return 404; #} location / { try_files $uri $uri/ @swoole; } location @swoole { set $suffix ""; if ($uri = /index.php) { set $suffix ?$query_string; } proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header Scheme $scheme; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # IF https # proxy_set_header HTTPS "on"; proxy_pass http://127.0.0.1:1215$suffix; } } 启动swoole php artisan swoole:http start 站点地址 官方网站 演示后台 优秀案例 在线计算网 程序员导航 古诗词网

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册