分布式系统
文章平均质量分 66
maray
蚂蚁集团 OceanBase 内核研发高级专家,本科毕业于华中科技大学,研究生毕业于中科院计算所。主要兴趣领域:互联网应用,大规模数据处理。
展开
-
pg_lakehouse 与 datafusion
也就是说,Postgres 基于 pg_lakehouse 做数据湖分析,计算能力主要靠 pg_lakehouse 提供,而不是主要依赖 Postgres 自身的计算引擎能力。它的出现,使得 Postgres 能够轻松访问 S3 等对象存储,轻松访问 Delta Lake 上的表格,具备数据湖分析能力。所以,从原来上看, pg_lakehouse 提供了一组访问数据湖的方法,并将这些方法和 DataFusion 的计算能力结合起来,帮助 Postgres 获得分析数据湖数据的能力。原创 2024-05-28 11:38:46 · 1258 阅读 · 0 评论 -
数仓领域,Serving 是什么概念?
在数据仓库(Data Warehouse)和更广泛的数据工程领域中,“Serving”通常指的是将处理和优化后的数据提供给最终用户或应用程序的过程。这包括数据的查询、检索、展示等操作,使得数据能够在决策支持、报告、分析、或机器学习等应用中被有效使用。简而言之,数据“Serving”强调的是数据的最终用途及其可用性。原创 2024-05-24 18:30:12 · 301 阅读 · 0 评论 -
理解 Hologres 和 MaxCompute 的关系
理解了 Hologres 和 MaxCompute 的关系,就理解了数据仓库(DW)和数据服务(Serving)之间的关系,也有助于理解试试数仓和离线数仓之间的关系。那么,Hologres 的优势是什么呢?回答这个问题之前,我们再看 MaxCompute 和 Hologres 的一个区别:存储成本。可以看到,MaxCompute 可以拥有更低的存储成本,适合海量数据存储。可以看到,MaxCompute 可以拥有更低的计算成本,适合海量数据计算。低存储成本,低计算成本,这正好满足海量数据的数仓的成本需求。原创 2024-05-24 15:43:20 · 915 阅读 · 0 评论 -
自适应两阶段Hash Distinct速记
本文所述技术,适用于 Hash Distinct 下压处理,Hash GroupBy 下压处理。原创 2022-09-13 19:51:54 · 264 阅读 · 0 评论 -
Window function 优化速记
Oracle 2013 年的一篇论文里介绍了并行执行中使用到的大量优化技术。每个点都值得展开。本文介绍它的第4节,Window Function 并行优化。原创 2022-08-25 16:17:45 · 272 阅读 · 0 评论 -
Null Aware Anti Join 速记
所谓 semi join,指的是 join 的两张表里只输出其中一侧,另一侧用于计算输出条件。semi join 下面有一个子类叫 semi anti join,它指的是计算输出条件的表达式是。对于这个条件无法使用 hash join 算法来处理,只能使用 nested loop join 来做笛卡尔积。,这两个表达式是 NULL 敏感的。注:Hash Join, Merge Join 两种算法都不适合用于做笛卡尔积运算。通过这种方式,使得 anti semi join 的执行性能得到数量级的提升。原创 2022-08-24 16:45:41 · 375 阅读 · 0 评论 -
Not realtime but meaningful inter-node service framework
类似 SPM 的方式,在目标机器里用这个 hashtag 来检索子计划,如果检索成功,则直接执行,否则给发送者回复 PLAN_NEED_RESEND 消息,发送者回退到正常的子计划发送和执行逻辑。原创 2022-08-09 10:05:40 · 80 阅读 · 0 评论 -
cpu.cfs_quote_us 和 cpu.shares 同时使用的效果
Ceiling enforcement can be used for cases when a hard limit on the amount of CPU that a cgroup can utilize is required当一个资源组里,同时设置了 cfs_quote_us 和 shares,会怎样呢?下面通过场景来回答这个问题。场景 1假设系统有3 个 CPU 核,有2个资源组 A、B,配置如下:A.shares : B.shares = 2:1A 用 2 个 CPU、B.原创 2022-04-14 20:04:42 · 1037 阅读 · 0 评论 -
FoundationDB 分布式测试模拟器
Paper FullTextFoundationDB 引入了一套错误注入框架,用于测试该分布式数据库。引入错误注入框架并不是什么新鲜事,重点是如何用好这个框架,实现测试目的。Monkey Test 不是好的测试实践,不应该成为测试主要手段。我认为,一个错误注入框架,应该做到如下几点:有效。不能因为引入一些随机的错误注入让系统彻底完蛋。可重复。不能总是随机引入错误,需要能够高效地复现问题。带着这个问题,来看看 FDB 的论文中是如何解决这些问题。在 FDB 设计之初就确立了这样的测试模式:原创 2021-06-25 23:56:37 · 1351 阅读 · 0 评论 -
分布式系统中元数据、Location Cache、Schema 的管理的工程实践
实践对于一个规模不超过100台机器的系统,元数据最好不要做持久化,适合启动期间做汇报。有什么好处呢?无持久化状态,就不需要担心持久化数据和内存数据不一致的问题,不用担心很多升级兼容的问题。机器规模不大,做实时汇报和实时收集,代价非常小,使用并行处理,几秒钟就可以做完。当前,这一切有个前提:多 ZONE 隔离,轮转升级。升级期间, ZONE 之间只有日志流,不会有跨 ZONE 的其它数据访问。升级完一个 ZONE,再升级下一个 ZONE。直至所有 ZONE 均升级完毕后,才放开多 ZONE 之间的通信原创 2021-04-27 15:08:06 · 224 阅读 · 0 评论 -
分布式系统中的参数传播
并行执行或者分布式执行一条 SQL,这条 SQL 会被拆成多个子计划(Segment / DFO),这些子计划会被陆续调度到多个节点上执行。每个子计划都会做一些共同的事情:用相同的日志级别打印日志基于开关决定是否做 performance log读取 session 参数等等。所以,在设计一个分布式系统时,一定要设计好一个结构,专门用于将一组参数传来传去。这个结构如果能非常方便地添加新参数,那就更好了。为什么设计之初就应该把这个事情放在心上呢?因为如果没有早点设计,那么最后这么一个结构会分原创 2021-04-26 22:57:09 · 439 阅读 · 0 评论 -
字符的宽度
数据库领域处理的问题,可真是包罗万象!有个 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 · 3540 阅读 · 0 评论 -
外连接消除技术应用
上回介绍了外连接消除技术。今天更进一步来聊聊这个话题。select * from a right join b on a.m1 = b.m1 left join c on c.c1 = b.c1where c.c1 in (1,2,3);基于外连接消除技术,这个语句 left join 可以改写成 inner join:select * from a right join b on a.m1 = b.m1 inner join c on c.c1 = b.c1wh原创 2020-07-10 18:55:20 · 198 阅读 · 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 · 468 阅读 · 0 评论 -
TPC-H Refresh Function 规范分析
基本概念query 以及 refresh function 的概念定义如下:power test、throughput test 的概念如下:刷新比例每一轮 Refresh Function,需要更新 ORDERS、LINEITEM 表 0.1% 的行。也就是说,对于 SF=100 的情况需要更新 600,000,000/1000 = 60w 行(SF与行数关系参考我的这篇文章)事...原创 2020-05-06 17:08:54 · 1002 阅读 · 0 评论 -
stl中的map、set、multimap、multiset,兼谈OceanBase造轮子
终于有机会有动力有能力看jjhou的《STL源码解析》了。采取快速翻阅模式,有望看完整本。map和set的底层机制都是RB-Tree(红黑树),插入和查找都是O(lgN)的复杂度。map、set以前听说过,但从来不用,因为不了解,不知道背后是什么。通过读这本书了解到了其背后的机制,也许在将来会用一用。multimap和multiset没什么,只是对map和set的小修改而已。除了这些,原创 2013-12-24 11:34:51 · 1901 阅读 · 0 评论 -
胡扯IoC(Inversion of Control)
看一篇关于Redis的博客(http://www.hoterran.info/redis_eventlibrary),讲网络模块时出现这个词汇:IoC(依赖翻转)。觉得很厉害的样子,不懂,便抽空学习了一下。讲IoC最好的两篇文章是:http://en.wikipedia.org/wiki/Inversion_of_controlhttp://www.objectmentor.c原创 2014-02-10 20:30:57 · 2285 阅读 · 1 评论 -
Stevey's Google Platforms Rant
Stevey's Google Platforms Rant 这是一篇讲亚马逊成长之路的好文,也是一篇为SOA唱赞歌的好文。SOA,其实很小的公司,甚至程序员个体户都可以用起来,想象一下,你曾经写过的每一段代码,如果都能够融入到SOA框架中,到如今,你能少造多少轮子呢?I was at Amazon for about six and a half years, and now转载 2014-02-20 14:23:35 · 2070 阅读 · 0 评论 -
负载均衡与黑名单
负载均衡在分布式系统中为了让平均响应时间最低、系统吞吐量最大,需要把外部请求均衡的发送到各个服务器。最简单的均衡算法是Round-Robin(轮转算法),该算法的特点简单来说就是:谁都别急,都有份,一个个来。该算法虽然简单,但十分实用。绝大多数情况都可以采用Round-Robin算法,实现简单,性能还稳定。但该算法有一个缺点:它假设了每个请求消耗的资源是相等的,而实际应用中不同请求对资源的需求原创 2013-12-04 12:22:12 · 1853 阅读 · 0 评论 -
SQL集合操作Union实现
Union的语义是把两部分查询的结果合并起来,最终结果的列名和类型定义与第一个查询一致。Union语句可以是Union All或者Union Distinct,默认情况下最好采用前者,即只有Union关键字时等价于Union All。下面看看Union All/Union Distinct的例子。表A 表B1234原创 2012-06-08 15:37:47 · 3710 阅读 · 0 评论 -
OceanBase Join操作
OceanBase 0.4版本中将全面支持SQL,下面给出OceanBase对Join的支持的例子。其中最值得关注的是,OceanBase支持full Join哦 :)从下面的截图还可以看出来,用的是mysql客户端连接OceanBase。OceanBase完全兼容mysql通信协议。mysql> select * from j1;+---------+------+| k1原创 2012-10-21 21:57:34 · 3310 阅读 · 1 评论 -
如何让你的程序支持HA?
关于HA以及OceanBase中HA的应用请参考前面的两篇博客: HA在OceanBase中的应用, OceanBase中主备Rootserver如何管理切换实现程序支持HA,要点是能够检测到VIP是否飘到了自己的机器上。如何检测呢?主Server和备Server都需要开一个线程,在这个线程里只做一件事:检查本机IP是否与VIP一致,如果一致则说明VIP飘到了自己的机器上。这里仔细一想是有原创 2013-09-13 22:23:53 · 3490 阅读 · 0 评论 -
写了个查看 SQL 执行计划的小工具 Visual-Explain
小工具,大用处,很赞。源码见:https://github.com/raywill/visual-explainDemo见:http://www.reactshare.cn/plan/原创 2018-05-28 21:29:41 · 1708 阅读 · 0 评论 -
HA在OceanBase中的应用
上一篇文章中我们讨论了《OceanBase中主备Rootserver如何管理切换》,里面最机要的一部分就是HA。OceanBase中使用了这两个软件来搭建HA环境:corosync + pacemakerHA所做的工作简单来说就是当发现主机不可用时自动把VIP切换到备机。如何使用这两个软件来搭建主备集群的详细文档见:http://clusterlabs.or原创 2013-08-22 14:23:21 · 2238 阅读 · 0 评论 -
Postgre Executor学习资源
http://anoncvs.postgresql.org/cvsweb.cgi/~checkout~/pgsql/src/tools/backend/index.htmlhttp://blog.csdn.net/wangdeng1314/article/details/6444590原创 2014-06-09 17:05:14 · 1951 阅读 · 0 评论 -
一次线上运营活动实操
云知光,2014年12月28日24:00举行了一次线上免费领书活动,送出图书4200本。活动的主要内容是一个微画报,包含约15张图片。活动的传播途径是微信朋友圈,从12月27日18:00到12月29日10:00,到大约1w左右的pv。27日下午6点,服务器开始超载,用户反馈无法打开页面。当时还在南城和monkey一起在小康家看他宝宝,外加找小康吃饭聊聊天,吃完饭火速打的从南城奔回立原创 2014-12-29 10:26:09 · 1651 阅读 · 0 评论 -
PostgreSQL 执行Drop Table等命令型SQL的总体流程
DROP命令(Commands)实现:/* * Drop one or more objects. * * We don't currently handle all object types here. Relations, for example, * require special handling, because (for example) indexes have add原创 2015-02-06 14:26:53 · 2845 阅读 · 0 评论 -
Oceanbase调试:用于调试的单机集群的搭建
涉及到多个角色/服务(Mergeserver,Updateserver,Chunkserver,Rootserver)的Oceanbase调试需要将整个集群启动起来后进行,为了方便,可以在同一台计算机上启动这些服务,只要占用的端口不同即可。下面简要记录如何在同一台计算机上启动Oceanbase的四个服务。1. 编译并安装Oceanbase集群(configure, make, make ins原创 2012-02-01 10:34:44 · 3593 阅读 · 0 评论 -
Hash Join 中的 Bit Vector Filtering 优化
Bit Vector Filtering 的详细说明请参考 《Query Evaluation Techniques for Large Databases》 一文,12.4 Bit Vector Filtering 一节。本文简要介绍一下我对这个概念的理解。Bit Vector Filtering, 在 Hash Join 的相关论文中通常称做 Bit Vector Filtering,不要以...原创 2019-04-10 17:07:41 · 321 阅读 · 0 评论 -
利用阿里云 LBS 做负载均衡
年关将近,不少朋友开始做年会抽奖,几千人的抽奖节目会瞬间涌入大量请求,单台服务器无法胜任,需要多个服务器打配合战。基于阿里云提供的 LBS、ECS、RDS,我们有非常简单的方案。原创 2016-12-14 20:03:39 · 12129 阅读 · 1 评论 -
为什么事务日志磁盘和错误日志磁盘要分开?
这主要是为了异常情况考虑。假设系统进入某种异常状态,会大量打印错误日志,很快就把磁盘占满。此时事务尝试记录一些关键事件的日志就会失败。原创 2016-08-11 10:28:36 · 1039 阅读 · 0 评论 -
由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 · 666 阅读 · 0 评论 -
多线程资源访问的一般处理思路
最简单的办法: 加锁,将多线程操作“线性化”。 点评:非常简单,性能差。合适的场景下使用,低成本,高收益。最无奈的办法: 引用计数。 点评:非常复杂,容易出错;性能较好。最终极的办法: 消除多线程。 点评:无招胜有招。原创 2016-03-22 16:56:18 · 694 阅读 · 0 评论 -
云数据库 OceanBase邀测初体验
好几年前我就有一个梦想:有一天,能在阿里云上用OceanBase存自己的数据,想象着每一行数据流淌过自己手写的代码,那感觉,该多美妙。终于,等到了今天。求七爷给了个邀测号,玩了两把,相当激动!原创 2016-03-30 19:23:49 · 2023 阅读 · 0 评论 -
SQL中的Collation是个什么鬼?
一、说文解字,学习一下Collation的字面意思:排序。 (https://en.wikipedia.org/wiki/Collation)二、SQL中的Collation,描述了如何对查询出来的数据进行比较和排序,本质是定义了两个cell的数据进行比较的时候的compare算法。三、特别说明几个常见的SQL Collation常见的词汇:1. ci: case i原创 2015-06-15 17:31:41 · 16011 阅读 · 2 评论 -
机房的带外管理---远程管理你的开发测试机
昨天一台测试机卡死了,ssh连不上去,于是网上提单子让重启,结果直到今天还没搞定。后来才知道,是因为这台机器的“带外”是坏的,无法远程重启,必须去机房重启。什么是带外?还能有这么大影响。于是学习了下,很简单...原创 2013-08-22 11:56:33 · 2948 阅读 · 0 评论 -
OceanBase里面的rowkey是什么概念,是由哪些要素构成的?
Rowkey是OceanBase诞生之初就引入的概念,最终被确立是在OceanBase 0.3。为了便于理解,不妨把OceanBase想象成一个Key-Value系统,Rowkey就是Key,Value就是返回的行数据。如果你对mysql数据库熟悉,那么不妨把Rowkey理解成primary key,它就是那几个主键列的组合,列的顺序与primary key中定义的顺序一致。OceanBase中的静态数据是按照rowkey顺序存储在磁盘中的,这样做的好处是:1. 支持每一行的快速定位(想象一下BTr原创 2013-08-03 12:32:08 · 3741 阅读 · 0 评论 -
什么是SQL绑定变量,如何实现绑定变量?
1. 认识绑定变量:绑定变量是为了减少解析的,比如你有个语句这样select aaa,bbb from ccc where ddd=eee;如果经常通过改变eee这个谓词赋值来查询,像如下select aaa,bbb from ccc where ddd=fff;select aaa,bbb from ccc where ddd=ggg;select aaa,bbb fr原创 2012-06-14 16:29:02 · 39149 阅读 · 3 评论 -
SQL Distinct的实现
Distinct是SQL中一种很常见的操作,能够很方便地筛选掉结果中重复的行。首先来看看Distinct操作的效果:mysql> select * from ob;+------+------+------+| a | b | c |+------+------+------+| 1 | 2 | 3 || 1 | 2 |原创 2012-06-05 17:58:28 · 9018 阅读 · 0 评论 -
Gaia, Maven, Staf简介
从2012.4.18日起开始接触OceanBase测试。没有接触过测试,学习下Gaia,Staf, Maven 的概念。Gaia的简介简而言之,Gaia的存在主要是为自动化测试提供以下四种基础服务: TestCase测试用例驱动服务,如并行或串行执行一组TestCase方法; TestCase测试用例Log服务,如输出结构化的日志到文件或控制台; 远程文件服原创 2012-04-19 16:16:17 · 978 阅读 · 0 评论