PostgreSQL 17 preview - Allow parallel CREATE INDEX for BRIN indexes

背景 https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=b437571714707bc6466abde1a0af5e69aaade09c Allow parallel CREATE INDEX for BRIN indexes author Tomas Vondra <tomas.vondra@postgresql.org> Fri, 8 Dec 2023 17:15:23 +0000 (18:15 +0100) committer Tomas Vondra <tomas.vondra@postgresql.org> Fri, 8 Dec 2023 17:15:26 +0000 (18:15 +0100) commit b437571714707bc6466abde1a0af5e69aaade09c tree 0419c054a18274366fe9ac009a6085126f96dd0b tree parent dae761a87edae444d11a411f711f1d679bed5941 commit | diff Allow parallel CREATE INDEX for BRIN indexes Allow using multiple worker processes to build BRIN index, which until now was supported only for BTREE indexes. [阅读全文]

PostgreSQL 17 preview - btree index backward scan (order by desc 场景)优化

背景 本优化order by desc 场景可以少扫描1个leaf page. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=c9c0589fda0edc46b8f5e7362b04636c0c4f0723 Optimize nbtree backward scan boundary cases. author Peter Geoghegan <pg@bowt.ie> Fri, 8 Dec 2023 19:05:17 +0000 (11:05 -0800) committer Peter Geoghegan <pg@bowt.ie> Fri, 8 Dec 2023 19:05:17 +0000 (11:05 -0800) commit c9c0589fda0edc46b8f5e7362b04636c0c4f0723 tree c09896c93142dc771714209bf94eb8c0aa595090 tree parent b437571714707bc6466abde1a0af5e69aaade09c commit | diff Optimize nbtree backward scan boundary cases. Teach _bt_binsrch (and related helper routines like _bt_search and _bt_compare) about the initial positioning requirements of backward scans. [阅读全文]

茶叶保存,醒茶,冲泡方法,四季饮用推荐

背景 茶叶存储 1、适合长期储存的茶: 需要长期发酵转化的茶, 例如 白茶,黑茶,生熟普洱。 白茶(轻发酵)保存方法: 抽干水分,全密封,避光,阴凉,干燥,环境干净通风。 需要后期长期发酵的 普洱生茶|熟茶、黑茶 的保存方法: 采用陶罐,紫砂罐(有气孔存在, 适合长期转化)。罐子封口,避光,阴凉,环境干净通风, 南方可以在罐内放点干燥剂。 2、绿茶,乌龙,红茶等,不适合长期保存,使用金属罐(不锈钢、铁皮、钛、锡、铜 均可)密封保存即可。推荐尽快饮用。 茶叶醒茶 1、轻发酵或需要后期发酵的茶才需要醒茶。 白茶,生|熟普洱,黑茶。 醒茶可采用: 陶罐,紫砂。 2、绿茶,乌龙,红茶等不需要醒茶, 也不适合使用陶罐,紫砂保存(由于这些罐子的气孔会透气, 导致香气散掉). 冲泡方法, 茶具选择等 1、绿茶 - 杯泡, - 80度, - 可长时间浸泡. 比较常见的绿茶有普龙茶、碧螺春、西湖龙井、蒙顶甘露等。这类茶比较细嫩,不适合滚烫的沸水冲泡,水温以80℃~85℃为宜,茶水比例以1:50为佳,冲泡时间为2~3分钟,泡出来的茶,汤色清翠碧绿而透明清澈,最好现泡现饮。 冲泡温度过高或时间过久,茶叶中的多酚类物质容易被破坏,茶汤不但会变黄,其中的芳香物质也会挥发散失。瓷杯冲泡时先用四分之一的水把茶叶润一润,过20秒或半分钟再冲水饮用,一般不盖盖子,否则茶汤会发黄。玻璃杯泡茶,观看茶叶在水中的沉与浮,又是一种别样的情趣! 2、乌龙茶(亦称青茶) - 紫砂壶或盖碗杯小茶具, - 沸水, - 快冲快出汤(逐渐增加冲泡时长). - 茶量3~5g, 150ml水. 乌龙茶是中国六大茶类之一,它具有红茶之甘醇、绿茶之鲜爽和花茶之芳香,深受茶友喜爱。品饮乌龙茶不仅可以生津止渴,而且是一种艺术享受。乌龙茶泡饮技艺三个要素,即泡茶用水、泡茶器具和泡饮技艺,并掌握“水以石泉为佳,炉以炭火为妙,茶具以小为上”的原则。 乌龙茶是半发酵茶,如铁观音、大红袍等。泡乌龙茶最好用专业的紫砂壶或盖碗杯,并且一定要用95℃的沸水,乌龙茶的投叶量比较大,茶叶基本是所用壶或盖碗的一半或更多,泡后加盖。 泡乌龙茶时,第一泡要倒掉,用倒掉的水可以把所有的杯子润一下,然后再倒入开水冲泡饮用。乌龙茶可冲泡多次,品质好的可冲泡7~8次,每次冲泡的时间由短到长,以2~5分钟为宜。 3、黄茶 - 杯泡, - 80度, - 可长时间浸泡. 黄茶属于轻发酵茶,蒙顶黄芽、君山银针、沩山毛尖等都属于黄茶。其茶质细嫩,水温太高会把茶叶烫熟,所以冲泡温度最好在85-90℃之间为宜。冲泡黄茶,按照茶具容量放入四分之一黄茶茶叶,也能够依据自己的口味进行斟酌增减。 第一泡的最佳冲泡时间为30秒,第二泡延伸到60秒,第三泡再延伸至大概2分钟,这么泡出来的茶汤口感更佳。用玻璃杯或瓷杯,尤以玻璃杯泡君山银针为最佳,可欣赏茶叶似群笋破土,缓缓升降,堆绿叠翠,有“三起三落”的妙趣奇观。 4、红茶 - 盖杯茶盏、白瓷壶杯、紫砂壶杯, - 好水、沸水、快出水, 前三泡一般掌握在3~5秒(逐渐增加冲泡时长). - 茶量3~5g, 150ml水. [阅读全文]

转载 - Docker volumn, bind mount, tmpfs mount 的使用. 宿主机如何和容器共享数据? 容器使用宿主机内存?

背景 原文: https://zhuanlan.zhihu.com/p/468642439 默认容器的数据的读写发生在容器的存储层,当容器被删除时其上的数据将会丢失。所以我们应该尽量保证容器存储层不发生写操作,为了实现数据的持久化存储我们需要选择一种方案来保存数据,当前有以下几种方式: volumes , bind mounts , tmpfs mounts 下图展示了这三种技术: Volumes Volumes(数据卷)是一个可供一个或多个容器使用的位于宿主机上特殊目录,它拥有以下特性: 数据卷可以在容器间共享和重用 对数据卷的写入操作,不会对镜像有任何影响 数据卷默认会一直存在,即使容器被删除使用数据卷的目的是持久化容器中的数据,以在容器间共享或者防止数据丢失(写入容器存储层的数据会丢失)。 使用数据卷的步骤一般分为两步: 创建一个数据卷 使用 -v 或 --mount 参数将数据卷挂载容器指定目录中,这样所有该容器针对该指定目录的写操作都会保存在宿主机上的 Volume 中。 Volume管理 创建一个Volume: $ docker volume create my-vol 查看Volumes: $ docker volume ls local my-vol $ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ] 我么可以看到创建的 Volume my-vol 保存在目录/var/lib/docker/volumes/下,以后所有针对该 Volume 的写数据都会保存中目录/var/lib/docker/volumes/my-vol/_data下。 [阅读全文]

PostgreSQL 17 preview - postgres_fdw 支持semi-join pushdown (exists (...))

背景 https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=824dbea3e41efa3b35094163c834988dea7eb139 Add support for deparsing semi-joins to contrib/postgres_fdw author Alexander Korotkov <akorotkov@postgresql.org> Tue, 5 Dec 2023 20:53:12 +0000 (22:53 +0200) committer Alexander Korotkov <akorotkov@postgresql.org> Tue, 5 Dec 2023 20:53:12 +0000 (22:53 +0200) commit 824dbea3e41efa3b35094163c834988dea7eb139 tree f810eb49e750dee3b601385328faa0f4369291f6 tree parent 278eb13c48236c261ed4bab1cb4696321e346eb7 commit | diff Add support for deparsing semi-joins to contrib/postgres_fdw SEMI-JOIN is deparsed as the EXISTS subquery. It references outer and inner relations, so it should be evaluated as the condition in the upper-level WHERE clause. [阅读全文]

转载 - Linux 环境变量之 LD_PRELOAD & LD_LIBRARY_PATH & LD_DEBUG & rpath

背景 原文链接 https://blog.csdn.net/llm_hao/article/details/115493516 目录 环境变量 1、LD_LIBRARY_PATH 2、LD_PRELOAD 3、LD_DEBUG 4、rpath 路径 5、小结 文中源码 Linux环境 showBytes.h showBytes.c envTest.c GCC命令 参考 环境变量 Linux 系统提供了多种方法来改变动态库连接器装载共享库路径的方法。通过使用此类方法,我们可以实现一些特殊的需求,如:动态库的调试、改变应用程序的行为方式等。 Linux 查看环境变量的 2 种方式: $ env #environment的简写 $ export 下面主要描述 4 种常用的修改程序运行时环境变量的方式: 1、LD_LIBRARY_PATH LD_LIBRARY_PATH 可以临时改变应用程序的共享库(如:动态库)查找路径,而不会影响到系统中的其他程序。 $ echo ${LD_LIBRARY_PATH} 在 Linux 系统中,LD_LIBRARY_PATH 是一个由若干个路径组成的环境变量,每个路径之间由冒号隔开。默认情况下 LD_LIBRARY_PATH 为空。如果我们为某个进程设置了 LD_LIBRARY_PATH,那么进程启动时,动态链接器会优先查找 LD_LIBRARY_PATH 指定的目录。 动态链接器转载或是查找共享库(如:动态库、静态库)的顺序为: - 环境变量 LD_LIBRARY_PATH 指定的路径; - 路径缓存文件 /etc/ld.so.cache 指定的路径; - 默认共享库目录,先 /usr/lib ,然后 /lib 。 [阅读全文]

转载 - gcc/ld 动态连接库和静态连接库使用方法

背景 原文链接 https://www.zhihu.com/question/22940048 作者:qin meng 链接:https://www.zhihu.com/question/22940048/answer/222625910 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 gcc使用-Wl传递连接器参数,ld使用-Bdynamic强制连接动态库,-Bstatic强制连接静态库。所以部分静态,部分动态连接这么写: gcc ... -Wl,-Bstatic -l<your-static-lib> -Wl,-Bdynamic -l<your-dynamic-lib> ... 举个例子,你想静态连接libA.a同时动态连接libB.so,(先保证你的连接路径-L里面能找到对应的静态或者动态库),这么写: gcc ... -Wl,-Bstatic -lA -Wl,-Bdynamic -lB ... 这里需要注意,强制静态或者动态连接标记之后的链接库都将按照前面最近的一个标记进行链接,所以如果后面出现了一个libC,没有指定连接标记,那么libC将会被动态连接: gcc ... -Wl,-Bstatic -lA -Wl,-Bdynamic -lB ... -lC 如果参数里面没指定强制的连接方式标记,那么gcc将按照默认的优先级去链接,优先动态链接,所以如果你这么写,且同时存在libC.so和libC.a那么libC将被动态链接: gcc ... -lC 由于-B连接标记会改变默认连接方式,所以在Makefile里面如果有人这么干: LIBS += -Wl,-Bstatic -lC 那么他后面的LIBS+=的库就都只能以静态方式连接了,有时候这是不行的,因为没有静态库,所以会有人这么应对: LIBS += -Wl,-Bdynamic -lD 这样就改回来了。但是这种胡乱改的行为是非常不好的,比较好的行为应该这样: LIBS += -l<auto-link-lib> STATIC_LIBS += -l<static-lib> DYN_LIBS += -l<dynamic-lib> LDFLAGS := ${LIBS} -Wl,-Bstatic ${STATIC_LIBS} -Wl,-Bdynamic ${DYN_LIBS} 这样当你不关心怎么连接的时候用LIBS,当你想静态连接的时候用STATIC_LIBS,当你想动态连接的时候用DYN_LIBS。 [阅读全文]

德说-第271期, 50K star 的开源电子书告诉我们, 未来的书应该这么写

背景 需求分析: - 《德说-第201期, 马斯洛需求层级 & 生产资料,生产关系,生产力》 - 《德说-第200期, “奥卡姆剃刀”和“马斯洛需求” | 回光 | 心思置于灵》 - 《马斯洛需求层次理论 - 五层需求 八层需求 - 社区、经济学、心理学、营销、GTM(Go-To-Market)相关》 搞理论研究的目的是什么? 总结规律, 利用规律, 满足需求. 从理论研究到应用实践分为几个阶段: - 理论研究 - 理论实证 - 应用实践 理论实证 和 应用实践阶段都需要非常强的动手能力. 教学的目的是什么? 肯定不是培养书呆子. 动手能力是必须的. 最近参观了天津职业师范大学, 被誉为“职业教育领域的清华北大”. 推崇的“双师教育”理念非常接地气, 既是老师, 也是师傅, 同时强调了理论教学和动手能力. 推荐2本开源电子书, 理论和实践的典范, github star一度达到50K+, 同时被很多大学拿去当教材或参考读物. 开源电子书的好处: - 1 是可以根据技术和理论的发展不断迭代更新, 保持最新的状态. - 2 是可以全球顶级专家参与贡献, 不会局限于某一位或少数作者的认知范围. - 3 是有问题可以及时修复. - 4 是读者遍布全球, 读者可以实时提出意见, 帮助书籍更好的迭代. [阅读全文]

DuckDB Internals PDF


背景

https://15721.courses.cs.cmu.edu/spring2023/slides/22-duckdb.pdf

pdf

  • what is duckdb
  • duckdb overview
  • duckdb vectors
  • Query Execution Pull-Based Model
  • Query Execution Parallelism Model
  • Query Execution Pipelines
  • Query Execution Pull-Based Model
  • Storage
  • Table Storage
  • External Formats
  • Buffer Manager
  • Out-Of-Core
  • Transactions
  • Pluggable Catalog
  • Pluggable File System + HTTP/Object Store Reads
  • Extensions
  • WASM


PostgreSQL, MySQL, DuckDB, DuckDB+mysqlscanner 1000万记录的简单分析SQL对比

背景 DuckDB发布了MySQL scanner, 支持在DuckDB内直接读写mysql table, 本文对比了PostgreSQL, MySQL, DuckDB, DuckDB+mysqlscanner 1000万记录的简单分析SQL. 结果当然是DuckDB完胜. 但是DuckDB+mysqlscanner给了MySQL一个不错的选择, 0成本加速MySQL分析. 本例使用以下docker images测试: x86_64 # 拉取镜像, 第一次拉取一次即可. 或者需要的时候执行, 将更新到最新镜像版本. docker pull registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts # 启动容器 docker run --platform linux/amd64 -d -it -P --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg --shm-size=1g registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts # 进入容器 docker exec -ti pg bash arm64 # 拉取镜像, 第一次拉取一次即可. 或者需要的时候执行, 将更新到最新镜像版本. docker pull registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts_arm64 # 启动容器 docker run -d -it -P --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg --shm-size=1g registry. [阅读全文]