测试用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差很多倍。

相关推荐
charlie1145141915 小时前
deque、list 与 forward_list:vector 之外的三个选择
开发语言·数据结构·c++·list·开源项目
mayaairi5 小时前
JS DOM属性操作完全指南:内容、样式与自定义属性
开发语言·前端·javascript
avi91115 小时前
Threejs新版本后glb导出提示.x问题GLTFExporter,替代3dmax
开发语言·前端·javascript·threejs·glb·gltfexporter
qq762118226 小时前
windows Qt mingw 编译libzip
开发语言·windows·qt
曹牧6 小时前
Java:Java 数组转 List
java·开发语言·windows
工业一体机老司机6 小时前
Python实现工业一体机OPC-UA通信:从SDK选型到数据采集实战
开发语言·python·单片机
IT爱学堂6 小时前
QT原理与源码分析可以学到什么 QT视频课程 QT课程推荐 最新推荐
开发语言·qt
wuyk5556 小时前
Python 零基础入门第七章:字典 Dict
开发语言·python
躺着听Jay6 小时前
QT交叉编译
开发语言·qt
2601_966949656 小时前
如何判断盘中最新价相对昨日收盘涨跌幅,并实时触发止盈止损条件单:QuantDash Python 实战
开发语言·python·量化策略·量化·quantdash