![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OceanBase
文章平均质量分 58
maray
蚂蚁集团 OceanBase 内核研发高级专家,本科毕业于华中科技大学,研究生毕业于中科院计算所。主要兴趣领域:互联网应用,大规模数据处理。
展开
-
如何将 gz 文件通过 local data 导入 OceanBase?
在很多领域,数据的传输是基于 csv,并且,为了方便,属于同一张表的多个 csv 文件还是打包成 gz 文件进行传输。有没有办法把 gz 文件直接导入到 OceanBase 中呢?这种方法有一个弊端:解压 gz 文件,既耗费时间,也耗费存储空间。,然后导入到数据库。这个方案在 v4.3.3 中支持。原创 2024-06-20 19:21:54 · 297 阅读 · 0 评论 -
OceanBase 列存中多列过滤性能解析
Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询+group by/sum这些聚合操作,业务模型大概是这样1亿表,过滤性最强的字段会扫50万左右数据,单SQL OTS现在不超过300毫秒,这个场景能搞定不?还比如,过滤性不确定的情况下,还可以动态地选择三个表达式中的一个来做,做一段时间发现过滤性不好,就换另一个表达式。由此推算,1亿行的场景,也一定可以满足客户对延迟的需求。再比如,在先计算哪个条件的选择上,可以选择过滤性最好的条件先做,这样就可以跳过更多的微块。原创 2024-06-20 00:13:40 · 426 阅读 · 0 评论 -
如何在 Doris 中通过外表访问 OceanBase 表
然后在 Doris 中通过外表 et1 可以访问 OceanBase 中的 t1 表。其余和 MySQL jdbc 一模一样。原创 2024-06-15 00:10:01 · 219 阅读 · 0 评论 -
OceanBase 并行执行参数 parallel_servers_target 理解
为了最大程度降低 PX 使用难度,OceanBase 3.1 版起,parallel_max_servers 参数废弃。用户只需用好 parallel_servers_target 即可。原创 2024-06-13 14:26:11 · 675 阅读 · 0 评论 -
字符集相关变量理解
创建一个新表,想让他的字符集是 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 评论 -
OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案
是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了。但是,并不是所有业务都接受修改源码,因为复杂系统里,涉及到的修改点可能无法枚举。这里提供一种临时解决方案:使用 OceanBase PL/SQL 实现一个。可见,上述 PL 代码完全实现了相关功能。原创 2024-05-06 17:33:35 · 429 阅读 · 0 评论 -
OceanBase OLAP collation utf8mb4_bin 优先
utf8mb4_bin是一种二进制的排序规则,比较字符串时直接比较字符串的二进制值,不需要进行复杂的字符比较和排序运算,这样可以有效减少CPU的使用,提高查询效率,特别是在涉及到大量数据操作时,性能优势更为明显。在大数据系统中,如无特别需要,建议 collation 指定为 utf8mb4_bin。原创 2024-04-23 20:53:27 · 707 阅读 · 4 评论 -
OceanBase 4.3 列存存储格式和列存索引存储格式
以 t1 表和索引为例子,下面两张图说明了存储层如何存储数据。原创 2024-04-17 15:42:58 · 1035 阅读 · 0 评论 -
Skip Index 学习
现在,如果我们想要查询所有在X坐标范围[0, 1]和Y坐标范围[0, 1]内的点,我们可以首先查找Z-order值的范围,这会给我们A, B, C和D点,因为它们的Z-order值落在查询范围内。当执行一个查询时,如果查询条件指定的值不在数据块的最小和最大值范围之内,那么数据库就知道它可以跳过这个数据块,因为这个数据块不可能包含任何匹配的记录。在我的前面的回答中没有提到Z-ordering,是因为在列存数据库中提到聚集时,通常首先考虑的是像分区和聚簇索引这样的更为常见的聚集技术。原创 2024-03-11 14:38:42 · 834 阅读 · 0 评论 -
热爱可抵岁月漫长,梦想能克迢途迷惘
调研之前的 Bushy 设计,发现晓楚这个同学对自己的工作充满了热爱!其女,也有继承,作业做得好,会说:“我可真棒!对于自己做出来的好设计,cool 连连!原创 2024-01-02 10:37:14 · 464 阅读 · 0 评论 -
Index Skip Scan 介绍
这种扫描方式就叫做 Index Skip Scan,之所以如此命名,是因为: - “Index”:因为 Index 具备数据有序存储的特征 - “Skip” :二分的方式来跳着查找,所以是 skip - “Scan”:这个技术背后的本质目的还是扫描出需要的所有数据,所以还是 Scan除了求 distinct 值,Index Skip Scan 还可以用于多种场景:原创 2023-10-07 11:10:01 · 685 阅读 · 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 评论 -
Photon Vectorized Engine 学习记录
本文记录了 Photon 中的若干向量化技术原创 2023-02-23 12:08:49 · 372 阅读 · 0 评论 -
【速记】高斯分布(normal distribution)实现方法
本文调研了 normal distribution。那么如何生成符合 normal distribution 的随机序列呢?原创 2023-01-30 15:59:53 · 390 阅读 · 0 评论 -
【速记】zipf distribution 实现算法
一般数据库系统中提供 zipf 函数时都会限制 N 的取值范围,这是为什么呢?原创 2023-01-28 17:37:07 · 938 阅读 · 0 评论 -
在 OceanBase 中如何套路化地分析 CPU 跑不满原因?
在 OceanBase 中如何套路化地分析 CPU 跑不满原因?套路满满,按图索骥即可。原创 2022-11-23 10:49:06 · 581 阅读 · 0 评论 -
Oracle PL/SQL 系统包源码
系统包的源码一般是在 oracle 安装目录 xe/rdbms/admin 下面。如果你没有 Oracle 安装包,可以在 github 上搜到。找到需要的包后,如果是加密的话就到这个网站解密。原创 2022-10-31 11:09:07 · 428 阅读 · 0 评论 -
写数据库测试工具的一点心得
概述写一个好用,持续可用的测试工具,需要满足如下几个特征:完备、封闭自调度结果可评价易回归原创 2016-08-09 17:25:49 · 2659 阅读 · 0 评论 -
JDBC 中 socketTimeout 的作用
如果我们把socketTimeout设置如下:socketTimeout=60000;这意味着60秒以服务器必须给客户端至少返回一些数据,以保持socket的活性。一般查询都不会有问题,即使是全表扫描这样的大查询,因为数据会流式地源源不断吐给客户端。但对于带有ORDER BY、DISTINCT、COUNT、SUM等方法的大查询,他们很可能60秒内还没有计算出结果,这时候客户端会检测到socket超时原创 2016-08-05 11:09:26 · 6179 阅读 · 0 评论 -
关于coalesce的一些经验记录【陆续增补】
mysql> select cast(1 as date);Type: DATECollation: binary (63)Length: 10Max_length: 0Decimals: 31Flags: BINARYmysql> select coalesce(NULL);Type: NULLColla原创 2015-08-06 18:34:17 · 1302 阅读 · 0 评论 -
MySQL Field Class Hierarchy
每天睁眼看几遍,背下来就行了。Field (abstract)|+--Field_bit| +--Field_bit_as_char|+--Field_num (abstract)| | +--Field_real (asbstract)| | +--Field_decimal| | +--Field_float| |转载 2015-11-18 15:16:46 · 730 阅读 · 0 评论 -
为什么 TPC-H DBGen生成的 lineitem 数据有时不是整数
wc -l * 150000 orders.tbl.u1 599976 lineitem.tbl.u1通常根据 Scale Factor (SF)计算出的 lineitem 是个整数,例如 sf=100 时,lineitem 6亿行 (参考)但是,偶尔发现并不是 6 亿行,为什么呢?标准里,要求 orders 是 1.5 亿行,lineitem 的要求是:每个 order 生成 1...原创 2020-05-06 17:21:21 · 463 阅读 · 0 评论 -
写数据库测试工具的一点心得
概述写一个好用,持续可用的测试工具,需要满足如下几个特征:完备、封闭自调度结果可评价易回归原创 2016-08-09 17:26:10 · 585 阅读 · 0 评论 -
MySQL MetaData中PRI_KEY,PART_KEY,MULTIPLE_KEY,UNIQUE_KEY的内涵
CREATE TABLE pk0 (c1 int, c2 int, c3 int, c4 int, c5 int, PRIMARY KEY(c1));c1: NOT_NULL PRI_KEY NUM PART_KEYCREATE TABLE pk1 (c1 int, c2 int, c3 int, c4 int, c5 int, PRIMARY KEY(c1),KEY idx2 (原创 2015-11-09 16:58:14 · 1774 阅读 · 0 评论 -
三种 Join 的左右表惯例称呼
称呼对于 Nested Loop Join,左表称为 outer table,又称 driving table,右表称为 inner table对于 Hash Join,左表称为 build table,右表称为 probe table对于 Merge Join,左表称为 first table,右表称为 second table注解对于 Nested Loop Join,outer t...原创 2019-04-11 17:47:30 · 1749 阅读 · 2 评论 -
MySQL Meta中的length字段 -- (4) 玩儿MySQL代码
玩MySQL源码的正确姿势是,自己修改,自己编译,自己运行。本文简记mysql-5.6.26的本地玩法,使用的机器是自己的Mac。编译MySQL 参考文档:http://dev.mysql.com/doc/internals/en/cmake.html 这里特别要强调的是:编译MySQL很快的。安装编译好的MySQL初始化数据库,自己百度,关键词:mysql_install_db玩儿起来原创 2015-09-24 15:51:56 · 1289 阅读 · 0 评论 -
TPCH 表学习
TPCH 里的表格对一个配件销售管理系统进行建模。细节参考 TPCH Specification TPCH 的 Query 定义参考 Specification 的 2.4 节,里面详细说明了每个 Query 的内涵。本文过一遍表定义,记住这些表的意思,有利于理解 Query。suplier供应商信息:key + 姓名、地址、电话、国家代码 其中国家代码需要和 nation 表做 jo...原创 2018-05-25 14:11:04 · 7156 阅读 · 1 评论 -
由GroupBy-Having想到的
MySQL 的最简单形式、最容易理解的形式是: SELECT column FROM table WHERE condition然后,人们希望能对结果进行分组,于是出现了聚集函数,如查询总积分超过60的人: SELECT name, SUM(credit) FROM creditlog WHERE condition GROUP BY name HAVING SUM(credit) > 60原创 2016-06-20 14:19:56 · 661 阅读 · 0 评论 -
分布式系统测试的最难点
最难点在于:评价指标什么是对什么是错?什么是好什么是坏?最简答的例子:一个query大部分时候很快,偶尔由于系统负载高变慢,如何评价这个测试是好是坏?mysqltest、pquery 等测试工具选取了简单可以来的评价标准,使得其测试很容易标准化,很好做回归。系统稳定性、特殊场景下的功能测试,怎么静下心来定义测试效果评价标准,是非常非常重要的工作。原创 2016-08-05 17:04:50 · 5988 阅读 · 0 评论 -
【测试入门系列】如何估计数据库中的数据量、行数
对于小表,可以直接使用聚集函数来查询:select count(1) from table_name;但对于大表,例如几千万行数据量的表格,这个查询会超时,对于线上系统,还会因为消耗系统资源过多而影响整个系统的稳定。如果只是粗略估计(当数据达到千万级别,精确数据已经没有意义啦),可以使用 information_schema 库的 tables 表原创 2016-07-05 10:50:13 · 2406 阅读 · 0 评论 -
mysql 客户端的 --quick 选项
这个选项,对 SQL 执行的影响有多大呢?在查询一个 6kw 行的表时,影响巨大,带上 quick 后,性能提升 5 倍:[root@localhost] time obclient --prompt "OceanBase(\u@\d)>" --quick -h 127.0.0.1 -P 2828 -utest -DTEST -e "select * from lineitem" > /dev/nullreal 3m50.024suser 2m35.192ssys原创 2020-09-16 18:20:22 · 1361 阅读 · 0 评论 -
工具的力量
最近半年的工作都集中在 SQL 分布式执行框架(Parallel eXecution Framework)上,代码写得差不多了,测试成了头等大事。不测试充分无法上线,所有工作都无法兑现成价值。如何测试呢?我们分为三个阶段:编码阶段、功能测试阶段、性能测试阶段在编码阶段,手动测试是王道。根据实现的功能正对性写小测试,可以快速验证编码正确性。但手动测试的局限性在于覆盖场景非常有限,会遗漏大量场...原创 2018-06-05 15:20:07 · 603 阅读 · 0 评论