![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库技术
文章平均质量分 65
maray
蚂蚁集团 OceanBase 内核研发高级专家,本科毕业于华中科技大学,研究生毕业于中科院计算所。主要兴趣领域:互联网应用,大规模数据处理。
展开
-
字符集相关变量理解
创建一个新表,想让他的字符集是 gbk,怎么弄?原创 2024-06-12 11:36:55 · 841 阅读 · 0 评论 -
FDW(Foreign Data Wrapper)
在,最末尾提到了 FDW。FDW 到底是什么呢?原创 2024-05-29 15:35:21 · 834 阅读 · 0 评论 -
pg_lakehouse 与 datafusion
也就是说,Postgres 基于 pg_lakehouse 做数据湖分析,计算能力主要靠 pg_lakehouse 提供,而不是主要依赖 Postgres 自身的计算引擎能力。它的出现,使得 Postgres 能够轻松访问 S3 等对象存储,轻松访问 Delta Lake 上的表格,具备数据湖分析能力。所以,从原来上看, pg_lakehouse 提供了一组访问数据湖的方法,并将这些方法和 DataFusion 的计算能力结合起来,帮助 Postgres 获得分析数据湖数据的能力。原创 2024-05-28 11:38:46 · 1205 阅读 · 0 评论 -
duckdb 插件机制研究
插件机制是个好东西。为了你的系统能够获得这个好东西,最好是系统在第一天设计的时候就做好抽象,把每一类系统功能都抽象成集合,每一类功能都支持“运行时可寻址”。在 OceanBase 中,最容易插件化的是系统函数,因为它数量众多,客观上从第一天起就逼迫 OceanBase 把它做成易扩展、易寻址的样子。原创 2024-05-27 21:16:54 · 1099 阅读 · 0 评论 -
数仓领域,Serving 是什么概念?
在数据仓库(Data Warehouse)和更广泛的数据工程领域中,“Serving”通常指的是将处理和优化后的数据提供给最终用户或应用程序的过程。这包括数据的查询、检索、展示等操作,使得数据能够在决策支持、报告、分析、或机器学习等应用中被有效使用。简而言之,数据“Serving”强调的是数据的最终用途及其可用性。原创 2024-05-24 18:30:12 · 283 阅读 · 0 评论 -
理解 Hologres 和 MaxCompute 的关系
理解了 Hologres 和 MaxCompute 的关系,就理解了数据仓库(DW)和数据服务(Serving)之间的关系,也有助于理解试试数仓和离线数仓之间的关系。那么,Hologres 的优势是什么呢?回答这个问题之前,我们再看 MaxCompute 和 Hologres 的一个区别:存储成本。可以看到,MaxCompute 可以拥有更低的存储成本,适合海量数据存储。可以看到,MaxCompute 可以拥有更低的计算成本,适合海量数据计算。低存储成本,低计算成本,这正好满足海量数据的数仓的成本需求。原创 2024-05-24 15:43:20 · 828 阅读 · 0 评论 -
【概念学习】云上的 IOPS
此句话表明使用 Provisioned IOPS 卷能够提供更一致的性能,相较于其他类型如通用目的SSD或各种优化的HDD,在处理随机和顺序磁盘访问时,可以预期更好的表现,这对于性能敏感的应用是十分重要的。IOPS 买太大通常是浪费,要因地制宜,不大不小是最好的。确定合适的 IOPS 的方式,在 AWS 上是在 CloudWatch 上看 VolumnQueueLength 指标,如果这个指标比分配的 IOPS 大,同时我们又比较关注延迟,那么就应该增加一些 IOPS。原创 2024-05-14 14:59:34 · 909 阅读 · 0 评论 -
Bitmap 原理简述
为了尽可能解决稀疏编号导致的 bitmap 膨胀,引入了 RoaringBitmap。之前写过一篇 bitmap 应用场景的文章。原创 2024-04-24 10:52:39 · 242 阅读 · 0 评论 -
数仓分层原理(以银行数仓为例)
读到了一篇非常好的写数仓分层的文章,这个作者是把数仓设计真吃透了,很懂业务。原创 2024-04-10 17:46:42 · 437 阅读 · 0 评论 -
ChatGPT 对 ELT的理解
数据在两个数据库之间流转时,从源端做 Extract,在目的端做 Load 操作。那么,在一个数据库内部,ETL 是怎样的?在一个数据库内部,ETL(Extract, Transform, Load)作为数据处理的过程,同样涉及三个主要步骤:Extract (提取):这一步骤涉及从数据库中提取所需的数据,这可能是来自数据库的不同表或不同行的数据。Transform (转换):在这个阶段,提取出来的数据将会经过一系列转换操作,以便适合特定的业务规则和需求。原创 2024-03-25 10:04:32 · 892 阅读 · 0 评论 -
OceanBase并行执行中 DTL消息接收处理的逻辑
OceanBase 并行执行的消息处理框架是很有意思的,里面用到了不少面向对象编程思想,值得分析。本文介绍 DTL 消息处理。原创 2023-05-31 11:45:44 · 741 阅读 · 0 评论 -
SQL中的 collation level 是什么?
本文介绍 Collation Level 在数据库中的用途。原创 2023-05-25 10:58:46 · 146 阅读 · 0 评论 -
HASH UNION DISTINCT 与 HASH JOIN 算法的差异
在并行计算中,遇到建 HASH 表的场景,我们通常会认为左侧数据会随着建 HASH 表的过程,全部物化到驱动算子中。这个假设并不总是成立!原创 2023-05-08 20:38:04 · 128 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(七)?
沙箱上头,继续聊沙箱。今天这个沙箱叫 minijail,是。一搜不得了,是 Google 官方维护的沙箱,用在了 Chrome 中。原创 2023-03-09 10:56:47 · 421 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(六)?
今天轮到讨论安全问题了。python 代码中包含有害内容该怎么办?常用技术是沙箱(Sandboxing)。本文从一些基础设施讲起。原创 2023-03-07 11:51:59 · 373 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(五)?
本节研究如何对 import 做白名单。原创 2023-03-02 21:24:59 · 599 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(四)?
本节记录一下多线程、多进程中调用 Python 解析器。原创 2023-03-02 11:43:27 · 202 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(三)?
和 python 交互,最繁琐的部分应该就是参数处理,本文演示了基础数据结构的输入输出。原创 2023-03-01 16:30:40 · 597 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(二)?
本文测试在 C++ 中调用 Pandas 库来执行 Python 程序。原创 2023-03-01 15:48:44 · 314 阅读 · 0 评论 -
如何在 C++ 中调用 python 解析器来执行 python 代码(一)?
实现 Python UDF 中的一步就是学习如何在 C++ 语言中调用 python 解析器。本文做一个记录和讨论。原创 2023-03-01 14:30:49 · 641 阅读 · 1 评论 -
Photon Vectorized Engine 学习记录
本文记录了 Photon 中的若干向量化技术原创 2023-02-23 12:08:49 · 372 阅读 · 0 评论 -
ClickHouse 的 Permutation
凡是涉及到排序,就能看到一个概念:Permutation(排列)。本文探究一下这个概念背后的实现。原创 2023-01-10 18:24:40 · 463 阅读 · 0 评论 -
ClickHouse 的 isNullAt 实现分析
本文简单介绍了 ClickHouse 行是否为 Null 判断的方法。原创 2023-01-10 12:02:56 · 181 阅读 · 0 评论 -
ClickHouse 为什么这么快?
What really makes ClickHouse stand out is attention to low-level details.原创 2022-12-22 18:00:22 · 829 阅读 · 0 评论 -
Oracle 也不是绝对完美
用下面的 case 在 Oracle 11.2 上执行,发现 Oracle 实现的 NAAJ 算法有正确性 bug。不知最新版本修复了没有?原创 2022-11-16 15:52:04 · 182 阅读 · 0 评论 -
Oracle PL/SQL 系统包源码
系统包的源码一般是在 oracle 安装目录 xe/rdbms/admin 下面。如果你没有 Oracle 安装包,可以在 github 上搜到。找到需要的包后,如果是加密的话就到这个网站解密。原创 2022-10-31 11:09:07 · 428 阅读 · 0 评论 -
自适应两阶段Hash Distinct速记
本文所述技术,适用于 Hash Distinct 下压处理,Hash GroupBy 下压处理。原创 2022-09-13 19:51:54 · 258 阅读 · 0 评论 -
【速记】将 OceanBase Sql Plan Monitor 服务化
OceanBase Sql Plan Monitor 对于大查询性能诊断非常好用,之前为了推广,整理了一个离线版。但最终还是觉得差点意思。能不能类似阿里的“扁鹊”服务,将其服务化呢?使用者只需要登录网页,填写一些基本信息就能一键获得报告?稍微折腾了一下,居然是很简单的。背景这个 WebService 最终是通过 lighttpd+php+python 完成sql plan monitor 是用 python 写的;python 做Web动态脚本非常费事PHP 做Web动态脚本非常方便ngi原创 2021-06-29 17:11:55 · 277 阅读 · 2 评论 -
字符的宽度
数据库领域处理的问题,可真是包罗万象!有个 rpad 函数,它用来做 padding,保证结果集不超过规定的“宽度”:10 表示什么呢?这里 10 表示 10 个屏幕宽度。对于字母和数字,一个字母占1个宽度,对于中文,一个字占2个宽度。那么,世界上那么多文字,每个文字的宽度是多少,有规定吗?有,有标准:https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.chttps://pubs.opengroup.org/onlinepubs/007904975/funct原创 2020-11-03 13:55:14 · 3446 阅读 · 0 评论 -
cgroup 实验记录
cgroup 目录操作技巧嵌套结构需要后序递归删除[xiaochu.yh ~/tools/cgroup] $rmdir /sys/fs/cgroup/cpu/oceanbase/deadloop2rmdir: failed to remove ‘/sys/fs/cgroup/cpu/oceanbase/deadloop2’: Device or resource busy[xiaochu.yh ~/tools/cgroup] $# 先删 child,才能删 parent[xiaochu.yh原创 2020-08-27 20:24:12 · 754 阅读 · 0 评论 -
羡慕
做数据库的,大概都有个梦想,那就是超越 Oracle。要超越,就要先学习,学习着学习着才会真的发现,妈的,真屌!Oracle 做得细啊!Oracle 基础设施好啊!今天,看了一个视频:《Oracle 公益课堂:RWP大开眼界系列一 资源管理》,完整体验了一番 Oracle HTAP 资源管理的架构,真舒服。这是 Oracle Education Toolkit 中的一个页面,用非常直观简单的方式给用户展示了 Oracle 资源隔离的能力。左边是三种常见负载:OLTP、Query(并行查询)、ETL(原创 2020-08-11 18:38:04 · 377 阅读 · 1 评论 -
代价
想获得任何东西,都需要付出代价。问题在于代价的大、或小。在你真正行动之前,并不能确定。分布式系统做资源管理,是个麻烦事。两种策略:分布式管理、集中管理。分布式管理性能好,没有单点压力,但是实现困难,问题多,可能精读低;集中管理性能差,有单点压力,但是实现相对简单,并且精确度高。那么,我们应该选择哪种策略呢?集中管理,性能有多差?压力有多大?说不定并没有想象的大呢?为了精读,你愿意付出多大代价?在真正试一试之前,心里真是没有底。这就是代价有意思的地方,在你真正去做之前,一切都是停留在纸面的推演,水原创 2020-07-30 21:48:44 · 178 阅读 · 0 评论 -
【SQL 优化器技术系列】 连接顺序(Join Order)
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。这一节聊连接顺序。我们不会讲怎么去决策连接顺序,会讲做好连接顺序的决策有多难:N 表 join 时,表的连接顺序有 N! 种组合,N=5时,N!= 120每种 join 可以选择多种连接算法,如 NLJ.原创 2020-07-16 01:11:53 · 1403 阅读 · 0 评论 -
【SQL 优化器技术系列】 Or Expansion
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。简单来说,OR Expansion 就是把 OR 拆成 UNION ALL,来打开优化空间。举个例子:select * from t1, t2 where t1.pkey > 10 or t2.pk.原创 2020-07-16 00:52:04 · 374 阅读 · 0 评论 -
【SQL 优化器技术系列】 外连接消除
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。外连接消除就是将一个 outer join 转换成 inner join。例如下面的查询适合做外连接消除:select * from a left join b on a.pk = b.pk where .原创 2020-07-14 18:00:49 · 392 阅读 · 0 评论 -
【SQL 优化器技术系列】谓词下推和上拉
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。一个复杂 query 里可能包含多个视图和子查询(下称语句块),在它们的内部和外面还有很多谓词。谓词下推是指将外面的谓词条件下推到语句块内部,降低结果集大小、扩大优化空间;谓词上拉是指把谓词从一个语句块.原创 2020-07-14 17:57:13 · 3274 阅读 · 0 评论 -
【SQL 优化器技术系列】 公共子表达式消除
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。这个技术原理也很简单,初中就学习过:(a * b) + (a * c) = a * (b + c)在这个式子里,如果 a 是一个常量,那么这个变换没什么意义,但是考虑如果 a 是一个函数,改写成:(f.原创 2020-07-14 17:37:15 · 655 阅读 · 0 评论 -
【SQL 优化器技术系列】谓词推导
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。谓词推导(Transitive predicate generation)听上去高大上,实际并不复杂。所谓谓词,简单理解成 一个个的 WHERE 条件好了。从WHERE A.C1 = B.C1 AND A.原创 2020-07-14 17:23:50 · 367 阅读 · 0 评论 -
【SQL 优化器技术系列】 Subquery “flattening”
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。子查询是很费的操作,特别是关联子查询,外面每得到一行结果,就要去重新执行一遍子查询里的 SQL。最常见的优化手段是将子查询展开,改写成 join,semi-join,anti-join 的形式。子查询常见的.原创 2020-07-14 16:32:32 · 226 阅读 · 0 评论 -
【SQL 优化器技术系列】简单 view merging
Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。第一篇,改写最简单的改写是 view merging。create view MY_VIEW as SELECT * FROM factory WHERE CITY = 'Wuhan';select *.原创 2020-07-14 15:01:48 · 261 阅读 · 0 评论