PostgreSQL码农集散地

PolarDB国赛初赛作品提交指南

参考文档点击文末阅读原文打开; 推荐《最好的PostgreSQL学习镜像》;


PolarDB国赛初赛作品提交指南

PolarDB数据库创新设计大赛面向全国大学生(本科及专科)。 章程、初赛赛题、评测方案都已发布, 请参见官网:

https://gitlab.eduxiji.net/csc1/csc-pb/2024-pb/-/tree/main

目前初赛已经开放作品提交, 下面是提交作品的简单教程, 教大家如何提交作品(以及为了获得更好的性能, 提供了修改几行代码的简单示例).

1、报名参赛

https://tianchi.aliyun.com/specials/promotion/2024-csdcc-polardb

2、在你自己的电脑中准备docker desktop调试环境

略

3、下载开发镜像, 启动容器, 进入容器

# 下载开发镜像  
docker pull registry.cn-hangzhou.aliyuncs.com/polardb_pg/polardb_pg_devel:ubuntu20.04    

  # 启动容器  
docker run -d -it -P --shm-size=1g --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name polardb_pg_devel registry.cn-hangzhou.aliyuncs.com/polardb_pg/polardb_pg_devel:ubuntu20.04 bash    

  # 进入容器  
docker exec -ti polardb_pg_devel bash    

4、在容器中下载比赛分支代码

https://github.com/ApsaraDB/PolarDB-for-PostgreSQL/tree/polardb-competition-2024

cd /tmp  

  git clone --depth 1 -b polardb-competition-2024 https://github.com/ApsaraDB/PolarDB-for-PostgreSQL    

5、可选步骤, 在容器中略微修改代码. (以下是示例代码, 请勿直接使用), 请根据自己对比赛的理解进行修改

cd /tmp/PolarDB-for-PostgreSQL   

  # 备份原始文件  
cp tpch_copy.sh tpch_copy.sh.bak  

修改代码(以下是示例代码, 请勿直接使用), 请根据自己对比赛的理解进行修改  

vi tpch_copy.sh   

  ...tpch_copy.sh脚本上面的部分未修改, 略...  
...修改的部分如下...  

  ###################### PHASE 1: create table ######################  
if [[ $PGDATABASE != "postgres" ]];  
then  
  echo "create the tpch database: $PGDATABASE"  
  psql -c "create database $PGDATABASE" -d postgres  
fi  
# add by digoal  
sed "s/CREATE TABLE/CREATE UNLOGGED TABLE/g" ../tpch-dbgen/dss.ddl > /tmp/dss.ddl  
mv -f /tmp/dss.ddl ../tpch-dbgen/  

  psql -f $tpch_dir/dss.ddl  

  ###################### PHASE 2: load data ######################  
# modify by digoal  
psql -c "ALTER SYSTEM SET polar_bulk_extend_size = '4MB';"  
psql -c "ALTER SYSTEM SET polar_index_create_bulk_extend_size = 512;"  
psql -c "SELECT pg_reload_conf();"  
psql -c "update pg_class set relpersistence ='u' where relnamespace='public'::regnamespace;"  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY nation FROM '$data_dir/nation.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY region FROM '$data_dir/region.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY part FROM '$data_dir/part.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY supplier FROM '$data_dir/supplier.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY partsupp FROM '$data_dir/partsupp.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY customer FROM '$data_dir/customer.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY orders FROM '$data_dir/orders.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
psql -h ~/tmp_master_dir_polardb_pg_1100_bld -c "\COPY lineitem FROM '$data_dir/lineitem.tbl' WITH (FORMAT csv, DELIMITER '|');" &  
wait

  ...tpch_copy.sh脚本下面的部分未修改, 略...  

6、可选步骤, 在容器中测试修改过的代码

生成测试数据若干

cd /tmp/PolarDB-for-PostgreSQL/tpch-dbgen  

  make -f makefile.suite  

  ./dbgen -f -s 0.1  

将测试数据放到与测试机一致的目录

cd /tmp/PolarDB-for-PostgreSQL/tpch-dbgen  
sudo mkdir /data  
sudo chown -R postgres:postgres /data  
sudo mv *.tbl /data/  

初始化PolarDB数据库集群

cd /tmp/PolarDB-for-PostgreSQL  
chmod 700 polardb_build.sh     
./polardb_build.sh --without-fbl --debug=off    

测试修改过的代码(测试机考察该脚本执行时间)

chmod 777 tpch_copy.sh   

  time ./tpch_copy.sh   

result

real  0m1.715s  
user  0m0.080s  
sys 0m0.110s  

6.1、可选步骤, 如果对PolarDB内核的改动较大, 建议按评测方案提供的脚本回归测试基本功能, 无误再进行后续步骤.

先停库

pg_ctl stop -m fast -D ~/tmp_master_dir_polardb_pg_1100_bld  

回归测试 确认无误

cd /tmp/PolarDB-for-PostgreSQL
./polardb_build.sh --withrep -r -e -r-external -r-contrib -r-pl --with-tde

7、在容器中压缩准备提交的代码分支

先停库

pg_ctl stop -m fast -D ~/tmp_master_dir_polardb_pg_1100_bld  

清理编译过程产生的内容

cd /tmp/PolarDB-for-PostgreSQL/tpch-dbgen  
make clean -f makefile.suite  

  cd /tmp/PolarDB-for-PostgreSQL  
make clean  
make distclean  

打包

sudo apt-get install -y zip  
cd /tmp  
zip -r PolarDB-for-PostgreSQL.zip PolarDB-for-PostgreSQL/  

8、在宿主机操作, 将容器中打包好的代码文件拷贝到宿主机

cd ~/Downloads  
docker cp polardb_pg_devel:/tmp/PolarDB-for-PostgreSQL.zip ./  

9、将代码文件提交到比赛平台

打开网站: https://tianchi.aliyun.com/competition/entrance/532261/submission/1365

依次点击

  • 提交结果
  • 镜像路径 - 配置路径 - TCCFile 上传~/Downloads/PolarDB-for-PostgreSQL.zip - 确定
    • 如果之前已经提交了, 要先点击删除再上传
  • 上传完毕后, 点击提交

10、查看成绩

https://tianchi.aliyun.com/competition/entrance/532261/score

平台查询分数和对应的代码分支好像不太方便, 每次提交出成绩后建议自己保存一下分数以及对应的代码版本. 方便未来基于最优的版本继续迭代.

11、提交代码说明和方案(千万不要忘记这步, 否则即使成绩能进决赛也会被认为放弃决赛资格)

根据初赛评测方案, 将代码修改说明和技术方案按标准的邮件标题发送到邮箱 [email protected]

参考

https://gitlab.eduxiji.net/csc1/csc-pb/2024-pb/-/tree/main

https://tianchi.aliyun.com/specials/promotion/2024-csdcc-polardb

https://tianchi.aliyun.com/competition/entrance/532261/submission/1365

PolarDB公开课导航

1、国庆拿下这个国产信创数据库

2、国产数据库PolarDB公开课-1 架构解读

3、国产数据库PolarDB公开课-2 快速体验

4、国产数据库PolarDB公开课-3 安装部署

5、国产数据库PolarDB公开课-4 日常运维

6、国产数据库PolarDB公开课-5 特性解读与体验

7、国产数据库PolarDB公开课-6 使用PostgreSQL开源工具/插件

8、国产数据库PolarDB公开课-7 应用场景与实践

9、国产数据库PolarDB公开课-7.1 TPCH测试

10、国产数据库PolarDB公开课-8 生态

11、国产数据库PolarDB公开课-9 参与开源社区