【SequoiaDB 学习笔记】巨杉分布式数据库初接触_sequoiadb实时数仓-程序员宅基地

技术标签: 学习  sequoiadb  数据库  

前言

SequoiaDB 巨杉数据库是一款国产自研的金融级分布式数据库。我首次了解到巨杉数据库是在深圳大学的数据库内核课上,再后来参与了巨杉数据库在深圳大学开设的公开课,了解到了巨杉数据库的发展过程、发展理念以及他们的发展方向。之后观看了 SequoiaDB V5.2 发布会视频,了解了巨杉数据库产品的最新特点。

下面我就公开课以及发布会中学习到的一些内容做一个简单小记

巨杉数据库——释放全量数据价值

全量数据 ?

首先,大概了解一下什么是结构化数据、半结构化数据、非结构化数据,简单地说就是:

  • 结构化数据:比如平时我们用的关系型数据库存的那些一行行的,有很多属性的,能够用二维表结构表示的数据
  • 半结构化数据:用相关标记来分隔语义元素以及对记录和字段进行分层,如HTML文档,JSON,XML和一些NoSQL数据库
  • 非结构化数据:没有固定结构的数据,就例如 音频、视频文件

非结构化数据相比于结构化数据的一个问题就是难以存储和利用,在上一个信息化的大数据时代,我们往往用以数据分析挖掘的是结构化的结果数据,非结构化数据的价值还未被充分挖掘和发挥。那巨杉数据库的一个目标就是释放全量数据价值

传统交易核心与数据核心

伴随数字化的发展,企业不但需要面向业务的交易核心,同时需要面向全量数据价值的数据核心

  • 交易核心:解决交易系统的问题,交易过程当中产生的全量行为数据、流水数据等称为数据核心的生产要素
  • 数据核心:依托分布式技术,解决数据的采集、整理、聚合、运用等问题为传统业务的交易核心提供实时跨业务的全量数据支持以及基于数据的决策依据,实现数据价值的持续释放

传统交易核心与数据核心

全量行为数据、流水数据相比于结果数据是十分庞大的,可以想象每个人的账户都有一笔钱,但是账户之间的交易流水数据是非常非常多的,每刷一次支付码就多一条流水记录,可以想象这个量级是多么恐怖

相比于聚焦于处理业务结果数据的交易核心数据库,处理海量数据就需要借助分布式技术强大的横向扩展能力,这就对数据核心的数据库提出了与交易核心截然不同的需求:

  • 多模:数据类型复杂,数据量庞大,需要提供多模的能力保存和处理全量数据
  • 实时:面向全量数据提供直接实时对客的查询能力,释放全量数据价值,提高客户整体满意度。比如客户不单能快速查询账户余额,还能从庞大的流水记录中快速查询出自己的流水账单
  • 分析:对于企业的数字化决策要提供准确且统一的数据,提升数据流动和使用的效率,也是为了释放全量数据价值

释放全量数据价值

从异步离线到实时对客

异步离线:

当下不少企业处理全量数据的方案是通过MPP数据仓库+Hadoop大数据平台构建数据库系统。但是因为MPP和Hadoop的各种限制,很难提供高并发的实时对客查询访问,数据的价值就仅仅停留于对系统的提供离线的数据分析、统计、加工等能力

然而在数字化经济的发展当中,全量数据的实时对客查询以及分析能力,是提升客户满意度的关键的因素。因此这个需求推动着巨杉数据库的发展

实时对客:

巨杉数据库在数据流入以及数据的高并发加粗样式对客两个方向提供实时的能力支持:数据实时流式入户以后除了可以进行实时的分析统计加工以外,更可以提供对结构化、半结构化数据的实时可高并发查询,以及对对象数据提供实时存取的服务能力

实时需求
巨杉数据库并不是要替代左边或是右边,而是希望通过湖仓一体的能力,服务于面向全量数据价值的全新的数据核心,为客户在不同需求场景提供不同的产品选择

需求推动发展

巨杉数据库早在十年前看到Hadoop并不能满足数字化的发展,于是开始自研原生分布式内核。也正是由于中国经济数字化发展领先于全球,中国的金融、银行业对数字化转型的需求是比世界其他国家都要大的,可以说巨杉数据库是带有中国特色的创新。从2013年正式商业化以后,随着客户对于多模数据处理实时高并发,以及数据分析的一个业务需求,推动着巨杉数据库从多模数据湖到实时数据湖,再发展到湖仓一体。v5.2将进一步增强流式处理、查询分析等能力

image-20221011222615823

SequoiaDB V5.2 特性

Join 优化

在数据湖的应用场景中,数据的导入和使用都是离线的。过去几年流批一体的数据导入模式使得数据集成不再依赖于单纯的异步ETL处理,流式处理让数据库的数据输入更实时,但还是只能离线进行数据分析统计,无法提供实时的对客服务。

巨杉数据库基于湖仓一体架构深度优化了实时查询处理能力,针对交易进行了深度的优化,特别是在 BKA Join 和 Index Merge 方面进行了深度优化

  • 交易操作的列表有可用的索引进行访问时,使用缓存区累积JOIN外表查询的记录,再批量拉取列表结果与缓存区哈希查找,匹配性能表现获得了巨大提升
  • 在 Index 的使用上,在特定的后条件的 Index merge 场景下,通过避免回表操作减少网络IO以提升查询性能

多维分区

为了让高并发的对客实时查询更加平稳,巨杉提供了多维分区技术

基于数据域,按需基于时间范围分类等条件实现数据的精准定位,在基于条件的范围查询中避免形成全标的数据偏离,降低网络IO提升并发效率

在数据域内的数据再进行基于ID、名字等具体属性的二次哈希分区,在进行基于明确属性的精准查询中,可以有效分散数据IO,避免IO拥堵

在这里插入图片描述

列存微分区

为了解决客户的实时数据分析需求,巨杉引入全新的列存存储能力,并通过SequoiaDB的引擎级多模能力,将数据统一存储在分布式存储底座中

列存相比于行存的优势:
行存情况下,在选择查询只涉及少数几项属性时,数据库必须读取每一条完整的行记录,读取效率低。列存这时候可以只读取与查询目标相关的列,减少无关IO避免全表扫描
列存相比于行存的优势

接下来版本中,巨杉还将提供行列转换的能力,同时也可以提供对外的增量数据输出能力,实现湖对下游提供数据服务,实现端到端打通

另外,巨杉引入了自研的微分区技术有效的缓解了数据膨胀,同时将微分区以及分区之上各个列的统计信息相结合,在查询过程当中,更大程度的减少了数据访问量带来额外的性能提升。在极端的场景下也可以直直接使用我们的统计信息,如select count(*)

分片并发+可变分片大小

上面几个特性是巨杉数据库在结构化数据查询、数据分析实施能力的体现,而分片并发加可变变化大小实得非结构化数据处理更实时

非结构化数据系统需要具备的能力:

  • 从过去的归档存储加后台查阅的方式变成在线存取加在线对客的使用,要求非结构化数据系统必须提供稳定的实时访问能力和在线能力
  • 无纸化和在线化的推动让大量的业务系统都会访问非结构化数据,要求非结构化数据系统必须满足高并发范围下的实施能力
  • 数据量在快速增长往全量数据平台发展,要求非结构化数据系统必须能够提供良好的扩展性和基于全量数据的生命周期管理能力
  • 对非结构化数据的治理和价值挖掘不断提出新的探索和挑战,标签管理、原数据检索、内容检索等也成为必要的能力


在巨杉数据库中通过两部分进行非结构化数据的管理和访问——上层的数据引擎层和下层的存储引擎层,它们分别进行专门的数据优化处理以提高非结构化数据的处理能力:

  • 当业务系统向数据引擎层写入对象时,提供了高速数据通道减少对象数据在各模块中的网络传输,对象数据始终在数据通道中共享并进行压缩,以此提高流通效率缩短响应时延
  • 在存储引擎层传入的对象数据会根据分区元数据缓存进行哈希分片,并将分片数据打包发给各存储节点并发执行。打包的分片数据在各存储节点上再次采用哈希算法进行一跳快速寻址以及连续空间分配,极大的利用了顺序IO的能力降低了IO的访问次数

没有中间节点的交互,且分片元数据以及分片数据可以存储在不同的存储介质上,可以将分片元数据存在高性能的SSD上,分片数据存在高密度的HDD上

分片并发

但是分片并发有个缺点就是分片小了浪费IO,分片大了浪费空间。业界大多采用后台合并来重新压缩空间,这就带来了大量IO放大和分片寻址IO次数增加,对上层业务读写带来性能波动。巨杉数据库采用可变分片大小技术,根据对象自身的大小自适应调整分辨大小,业务对象写入巨杉数据库后后台不会发生任何的IO合并,保障业务读写的性能稳定性确保实施能力

可变分片大小

多模数据统一容灾管理

过去的数据平台中,结构化数据和非结构化数据只能采用不同系统来混合搭建,因此在容灾上页只能针对各系统采用独立的容灾方案,这会带来容灾数据不一致的问题

巨杉数据库通过多模的数据管理能力对多模数据进行统一的容灾管理,提供多种在线容灾策略,保证了一致性且极大简化了运维

多模数据统一管理

全量数据生命周期管理

为了让数据根据本身的访问和价值的特点在不同配置的硬件中实现按需分布,实现全链路的生命周期管理,巨杉数据库通过数据域在统一的平台中,可以实现异构的硬件配置,可以同时实现高性能的热数据域和大容量的温数据域满足不同数据的特性要求。对于长期需要保存、极少参与或不再参与在线业务的冷数据也支持将数据同步至第三方存储,以对象数据的方式进行异构存储的管理

全量数据生命周期管理

SAC链路监控

巨杉数据库为客户提供了名为SAC的分布式数据库集群管理工具,面向巨杉的全系列的产品提供一站式的运维管理平台,覆盖了集群管理、系统管理、数据管理、监控、安全管理五大方向。它的监控能力杠杠的,帮助快速定位解决故障问题且提供趋势分析预警

在数据的监控能力方面,又分为性能、集群、查询、事务、会话、死锁六大监控模块

通过发布会的演示可以清晰地看到,SAC分布式数据库集群管理工具的功能非常丰富。首先在趋势分析里能看到某个时间段的数据库整体统计信息、数据库性能信息。在慢查询监控中能看到慢查询详细信息,能看到网络开销情况、访问计划、查询路径等,很多。
查看慢查询的查询路径


主要内容就这么多啦~


图片以及资料来源:

简述结构化数据、非结构化数据、半结构化数据
巨杉数据库SequoiaDB V5.2发布会回放完整版
巨杉湖仓一体技术解读|列存+微分区优化,分析性能10倍提升

详细的内容大家可以自行观看发布会视频,在发布会中更有赛迪顾问对《湖仓一体技术研究报告》进行深度解读。在巨杉数据库的微信公众号也有许多技术解读内容。

另外,巨杉在人才培养方面开设了一个SequoiaDB University,里面有许多学习课程,它致力于培养熟悉分布式架构和数据库技术的一流人才,提供线上线下的培训考试和认证,助力拓展技术视野,共同促进技术生态发展。在官网也有SequoiaDB文档,有兴趣深入学习的朋友们可以去康康。

鄙人资历尚浅,对数据仓库和分布式的了解不多,湖仓一体也是刚刚接触到的一个概念。如有谬误或整理不到位之处,烦请指教~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45943953/article/details/127284634

智能推荐

二维DP问题-程序员宅基地

文章浏览阅读2.5k次。文章目录前言小技巧例题 1方法一 求组合数方法二 动态规划例题 2方法一 dp例题 3方法一 dp前言我们经常会碰到二维DP问题,比如给你一张地图(一般是二维矩阵),让你计算出从地图的左上端走到右下端的路径有多少条 / 最短的路径之和,这种问题一般会被限制运动的空间(至少我现在所碰到的题目),一般是只能向下和向右移动。我对dp问题理解不深,对于二维dp问题我的理解就是找出最优子结构(递推方程)之后,用一个二维数组来保存历史状态就能解决问题了小技巧一般这种问题很容易被矩阵上边和左边这两条bounda_二维dp

一文搞懂嵌入式CAN总线-程序员宅基地

文章浏览阅读770次。嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对海防的越来越重视,对CAN的需求也会越来越大。CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel)CAN有很多优秀的特点,使得它能够被广泛的应用。比如:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制_嵌入式can

LabVIEW应用开发——基本函数(一)_labview函数-程序员宅基地

文章浏览阅读2.2k次。LabVIEW作为一门G语言编程,基本概念很难和常规语言一样,要实现运算,需要使用运算函数,通过使用连线,把需要运算的控件和符号连接起来。相对于常规语言,这一块逻辑代码的可读性还是比较差的,需要我们多写、多读、多了解才能快速阅读和开发。_labview函数

安卓带图标提示的Toast——Toasty_toast去掉图标-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏11次。Toasty这个看起来不错,虽然有点不算太好看,但通过它的自定义方法最终做出来的还不错它的使用方法及其的简单,我甚至都不想写这个Toasty的github地址官方图片第一步:新建项目,在project的build.gradle中添加maven { url "https://jitpack.io" }在app的build.gradle中添加依赖implementat..._toast去掉图标

H5页面直接扫码二维码插件_查找二维码扫一扫插件直接使用-程序员宅基地

文章浏览阅读2.2k次。H5页面直接扫码二维码插件https://github.com/wkl007/vue-scan-demo_查找二维码扫一扫插件直接使用

使用shell脚本连接数据库_shell脚本操作数据库-程序员宅基地

文章浏览阅读4.8k次。shell脚本操作数据库如下。_shell脚本操作数据库

随便推点

html导出docx处理图片img不标准_htmldocx 导出 图片-程序员宅基地

文章浏览阅读443次。<dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>6.1.0</version> <exclusions> <exclusion> <groupI..._htmldocx 导出 图片

AT24CXX系列芯片在STM32F103单片机下的读写程序_at24c128 正点原子-程序员宅基地

文章浏览阅读4.6k次,点赞9次,收藏32次。本程序取自正点原子开发板,应用于STM32F103单片机,适用AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256,AT24C512系列I2C存储芯片。一、sys.h#ifndef __SYS_H#define __SYS_H #include "stm32f10x.h"//////////////////////////////////////////////////////////////._at24c128 正点原子

log4j2漏洞复现(CVE-2021-44228)_jndi-injection-exploit-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏8次。log4j2漏洞复现(CVE-2021-44228)漏洞简介:log4j是Apache公司的一款JAVA日志框架,基本上只要是java的框架都会用到这个log4j框架,所以上周不管是不是IT圈的都几乎被刷屏了,可见这个洞的危害之大,波及范围之广。所以复现一下。影响版本:Apache Log4j 2.x >=2.0-beta9 且 < 2.15.0复现环境1:1.log4shell-vulnerable-app环境:docker run --name vulnerable-a_jndi-injection-exploit

【廖雪峰python教程学习】——(一)python基础-程序员宅基地

文章浏览阅读4.4k次。数据类型和变量Python还允许用r’’’'表示内部的字符串默认不转义如果字符串内部既包含’又包含" 可以用转义字符\来标识Python允许用’’’ … ‘’'的格式表示多行内容在Python中赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量[动态语言][静态语言:Java…]在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错在Python中,通常用全部大写的变量名表示常量print(*objects, sep=' ', end_廖雪峰python教程

面试知识提纲-程序员宅基地

文章浏览阅读44次。目录 数据结构与算法 操作系统 计算机网络 数据库 JAVA基础 框架学习 分布式 数据结构与算法数组、链表、二叉树(熟练)B+树、红黑树(了解)剑指Offer(熟练),建议刷两遍以上冒泡排序、插入排...

Qt Quick实现的涂鸦程序_qquickpainteditem-程序员宅基地

文章浏览阅读529次,点赞2次,收藏4次。之前一直以为 Qt Quick 里 Canvas 才可以自绘,后来发觉不是,原来还有好几种方式都可以绘图!可以使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染),可以构造QSGNode 来绘图,还可以使用 QPainter !哇, QPainter 我很熟悉啊。于是,我用 QPainter 结合 QML 实现了一个简单的涂鸦程序: PaintedItem 。它有下列功能:设..._qquickpainteditem