测试用rust重写的postgresql: pgrust

存储库地址:https://github.com/malisper/pgrust

拉取镜像并运行容器,登录容器。

复制代码
C:\Users\lt>wsl
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker pull docker.1ms.run/malisper/pgrust
Trying to pull docker.1ms.run/malisper/pgrust:latest...
Getting image source signatures
Copying blob 7f391b878ec7 done
Copying blob f8e78f820606 done
Copying blob 18c5c781fe83 done
Copying blob 35c2c72582cc done
Copying blob 68629629b516 done
Copying blob 8b6b9b15108d done
Copying blob c1215e3a97b3 done
Copying blob 443d1ff16955 done
Copying blob 8e8e5cc347ba done
Copying blob 565ad44ed903 done
Copying blob ee7165cce1e9 done
Copying blob d3c88b0da8ce done
Copying blob 324555581bf2 done
Copying config 31bacc34e0 done
Writing manifest to image destination
Storing signatures
31bacc34e0d1c4804e81670e798d69c0a36bf9722df3815ac17c22fffa076185
root@DESKTOP-59T6U68:/mnt/c/Users/lt#

root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker run -itd --name pgrust -e POSTGRES_PASSWORD=secret docker.1ms.run/malisper/
pgrust
d9f9162dc1e4c096fe2061aaa2a48ea0577fdad5e69bee16980876a47564b05a
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker exec -it -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres
psql (18.4 (Debian 18.4-1.pgdg12+1), server 18.3)
Type "help" for help.

postgres=# select version();
                              version
-------------------------------------------------------------------
 pgrust 18.3 on x86_64-linux-gnu, compiled by clang-21.0.0, 64-bit
(1 row)

测试分组汇总性能。

复制代码
postgres=# \timing
Timing is on.

postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,100000)i) select a,sum(b)c from t group by a order by c,a limit 3;
 a  |    c
----+----------
 10 |        0
  0 | 49995000
  1 | 49995000
(3 rows)

Time: 294.691 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 2313.454 ms (00:02.313)
--也支持表别名(列别名)的写法。
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)t(i)) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 2252.353 ms (00:02.252)

与PostgreSQL 17.7比较。

复制代码
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker start pg177
pg177
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker exec -it pg177 bash
root@b3490d8427cd:/# cd /par
root@b3490d8427cd:/par# psql
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  role "root" does not exist
root@b3490d8427cd:/par# psql -U postgres
psql (17.7 (Debian 17.7-3.pgdg13+1))
Type "help" for help.

postgres=# select version();
                                                      version
--------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.7 (Debian 17.7-3.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
(1 row)

postgres=# \timing on
Timing is on.
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,100000)i) select a,sum(b)c from t group by a order by c,a limit 3;
 a  |    c
----+----------
 10 |        0
  0 | 49995000
  1 | 49995000
(3 rows)

Time: 30.019 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 166.758 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,10000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a   |    c
------+----------
 1000 |        0
    0 | 49995000
    1 | 49995000
(3 rows)

Time: 1649.096 ms (00:01.649)
postgres=#

可见,这个版本的pgrust的SQL语法和计算结果正确,但性能比postgresql差很多倍。

相关推荐
xuxigifxfh16 小时前
HJ11 数字颠倒
java·开发语言·华为机考
Kapaseker17 小时前
Rust 1.99.0 发布,来看看这次 Rust 更新了什么
rust
一只旭宝17 小时前
数据结构与算法复习手册:从写过,到讲清楚
开发语言·数据结构·c++·算法
百度一下吧17 小时前
断网后 WebView 加载单页面应用:页面跳转 JS 加载失败的处理方案
开发语言·javascript·ecmascript
神仙别闹17 小时前
基于C语言开发的捕捉流星小游戏
c语言·开发语言
程序员Sunday17 小时前
Promise.all、allSettled、race、any 怎么选,失败后其他请求会怎样
开发语言·前端·javascript
daxiangxm18 小时前
GEO策略:让AI直接引用你的内容
开发语言·团队开发·运维开发·个人开发·数据库开发
泡海椒18 小时前
JQuick-Excel 实战:用 VALIDATION 建立可维护的 Excel 导入校验
开发语言·python·excel
longlongzihan18 小时前
前缀积与后缀积 —— LeetCode 238. 除了自身以外数组的乘积
开发语言·c++·leetcode
szial18 小时前
JavaScript 的 call、apply 和 bind:如何控制函数调用
开发语言·前端·javascript