一文带你看懂SAP-HANA的基本架构与原理

news2024/9/20 0:59:39

注:本篇主要对SAP HANA做了总结与论述,如有错误欢迎读者提出并补充

创作不易,希望大家一键三连支持!!!♥♥♥

创作不易,希望大家一键三连支持!!!♥♥♥

创作不易,希望大家一键三连支持!!!♥♥♥

目录

  • 一. 背景引入
    • 1.1 硬件与数据库系统
    • 1.2 行业现状
  • 二. SAP HANA应用架构
    • 2.1 HANA架构图
    • 2.2 行式存储与列式存储-内存地址
      • 2.2.1 列式存储数据字典压缩---案例
      • 2.2.2 行式存储与列式存储的对比
    • 2.3 HANA列式存储的特点
      • 2.3.1 加载状态
      • 2.3.2 主存储(Main)+增量存储(Delta)
      • 2.3.3 增量融合(Delta Merge)
  • 三. HANA持久层与HANA重启
    • 3.1 HANA持久层
    • 3.2 HANA重启

一. 背景引入

1.1 硬件与数据库系统

请添加图片描述

传统数据库系统将数据存储在磁盘(Disk)中,磁盘I/O次数多,效率低。

随着多核处理器的出现,现代数据库系统将数据存储在了内存(Memory)中,降低了磁盘I/O,但同时引入了处理器缓存的新问题。

现代化硬件上的理想数据库系统:
(1)内存式数据库,减少I/O.
(2)缓存优化的内存结构,连续访问数据临近存储.(CPU在未命中和等待状态下的优化)
(3)支持并行执行,利用多处理器的优势。

1.2 行业现状

①企业资源计划系统(ERP)需要处理混合工作量
·OLAP:创建销售订单、进货出货凭证、发票等 →写优化
·OLTP:运营月度报告、可承诺量、库存量分析等 →读优化

②OLAP+OLTP系统因性能的顾虑而分离
·不便:
(1)OLAP数据并非最新数据,只是数据预先处理后的子集.
(2)需要ETL工具来同步两个系统,系统冗余,程序复杂.

③开发愿景
·使用现代硬件和数据库系统将OLTP和OLAP数据结合在一起,创建一个单一数据源,实现实时分析,并简化应用程序和数据库结构。

二. SAP HANA应用架构

2.1 HANA架构图

SAP HANA是一个包括了硬件、数据库和解决方案的结合体。

请添加图片描述

2.2 行式存储与列式存储-内存地址

请添加图片描述

行式存储每一行为一个基本存储单位。

列式存储每一列为一个基本存储单位。

列式存储的优点:压缩

基于企业数据特点:
(1)列的使用相对集中
(2)列中的值基数不高;
列式存储的结构支持高效的数据压缩:
(1)节省空间
(2)提升速度:内存←传输→CPU缓存;字典编码,整数值比较快于字符值比较;加快扫描和聚合请添加图片描述数据库中真正存储的是:数字+字典+对应关系。

2.2.1 列式存储数据字典压缩—案例

请添加图片描述
HANA列式存储通过字典压缩的流程:

(1)HANA基于原数据表对主键列进行排序并计算唯一值,由此提取出一个数据字典

(2)对每一行的数据生成行ID与其对应值ID的对应表(验证了前述所说:数据库中真正存储的是数字、字典、对应关系)

(3)同时,HANA还会对原数据表的主键建立倒排索引,该索引是对(2)中对应表的一次再次索引,可以找到每个值ID所出现在的行数

对查询语句使用倒排索引优化前后的对比:

请添加图片描述

在找到所有行号之后,基于流派字典(值ID和值的对应表)即找到所要查询的行记录。

请添加图片描述

2.2.2 行式存储与列式存储的对比

请添加图片描述

请添加图片描述

常见问题:
1.HANA只是一个列式数据库么?
不是的,HANA中既有行存储,也有列存储

2.HANA中的列存储是否还可以使用索引?
是的,HANA的列式存储对所有主键自动建立索引(倒排索引),对于经常访问到的非主键列也是可以建立索引的。
3.内存式数据库是否仍然依赖于硬盘?
是的,依旧需要硬盘支持备份与恢复

2.3 HANA列式存储的特点

2.3.1 加载状态

(1)未加载: 数据仍在磁盘中

(2)部分加载:由于查询条件而载入内存

(3)全部加载:数据全部在内存中

注:可以通过对表的加载状态设置来控制哪些表置于内存中(全部加载)、哪些表置于磁盘中(未加载)

2.3.2 主存储(Main)+增量存储(Delta)

(1)数据并不直接修改而是插入新数据:并行化,减少锁,多版本控制

(2)主存储对值ID进一步压缩,对读取、计算性能优化

(3)增量存储不排序、不对值ID进一步压缩,占空间较大

2.3.3 增量融合(Delta Merge)

(1)额外的CPU、内存消耗

(2)可选优化方案:内存内融合、分区

增量融合过程:

(1)融合前:

请添加图片描述

Read:主存储Main1、增量存储Delta1

Write:增量存储Delta1

(2)融合中:

请添加图片描述

拷贝出新的主存储,将主存储Main1中的数据解压缩并和增量存储Delta1已经提交的事务来进行重新解压、排序、编码、压缩来生成新的主存储Main2,同时在增量融合过程中,所有Write操作会连同增量存储Delta1未提交的事务一起融合到增量存储Delta2中.

Read:主存储Main1、增量存储Delta1、增量存储Delta2

Write:增量存储Delta2

(3)融合后:

请添加图片描述

增量融合后,原有的主存储Main1增量存储Delta1被舍弃,留下最新的主存储Main2增量存储Delta2.

Read:主存储Main2、增量存储Delta2

Write:增量存储Delta2

三. HANA持久层与HANA重启

3.1 HANA持久层

HANA持久层和传统数据库持久层类似。

请添加图片描述

3.2 HANA重启

请添加图片描述

每5min写一个Savepoint,将更改后的数据和日志冲刷到磁盘中,并且对已提交的事务,HANA会通过SSD硬盘读写的方式在Log Volume记录Redo日志,一旦发生断电,系统就会自动读取最近的一个Savepoint,之后再通过Redo日志即可使断电恢复后系统回到一个稳定的状态.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB自学笔记(一)

一、MongoDB简介 MongoDB是一款基于C开发的文档型数据库。与传统的关系型数据库有所不同,MongoDB面向的是文档,所谓的文档是一种名为BSON (Binary JSON:二进制JSON格式)是非关系数据库当中功能最丰富,最像…

萝卜快跑爆火的背后,美格智能如何助力无人车商业化?

近期,“订单量超过600万单”等夺人眼球的信息,让无人驾驶出租车“萝卜快跑”从江城武汉爆火出圈,在2024年的炎炎夏日为这座大火炉再添了一把火。热度背后,不少地方主管部门,近期也纷纷针对无人驾驶出租车、无人驾驶运输…

【C++】多态-最全解析(多态是什么?如何使用多态?多态的底层原理是什么?)

目录 一、前言 二、多态是什么? 三、多态的定义及实现 🔥 多态的构成条件🔥 🔥 虚函数的重写🔥 🔥虚函数重写的两个例外 🔥 🍍 协变返回类型 🥝 析构函数的重写…

OpenMesh入门,安装,运行示例Hello World

安装 环境 win10&#xff0c;qt5 源码下载编译 进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/ 使用cmake gui 注意&#xff1a;先安装qt5 使用 CMake-Gui 构建 vs 2019 项目 注意 where is the source code 是<project…

Zotero推荐插件

绝大多数插件下载网址&#xff1a;Zotero 插件商店 适配&#xff1a;Zotero6 1. Zotero-style&#xff1a;标签分栏与阅读进度可视化 右键任意一个列的名字&#xff0c;会弹出一个右键菜单&#xff0c;可以勾选/取消勾选一个列&#xff0c;并且在最后有两个操作按钮是【列设置…

html5——CSS背景属性设置

目录 背景颜色 background-color 背景图像 背景定位 背景样式简写 背景尺寸 ​编辑渐变属性 背景颜色 background-color 背景图像 background-image background-image:url(图片路径); 背景重复方式&#xff1a; background-repeat 属性&#xff1a; repeat&#…

Spring Web MVC入门(2)(请求2)

目录 1.传递JSON数据 传递JSON对象 2.获取URL中的参数PathVariable 3.上传文件RequestPart 4.获取Cookie/Session (1)获取Cookie 简洁获取Cookie (2)获取Session Sesson读取 简洁获取Session(1) 简洁获取Session(2) 5.获取Header 简洁获取Header 1.传递JSON数据 J…

详解MySQL中的递归查询

MySQL中的递归查询主要通过WITH RECURSIVE语句来实现&#xff0c;这在处理具有层级关系或树形结构的数据时非常有用。下面将通过一个具体的例子来详细解释如何在MySQL中使用递归查询。 示例场景 假设我们有一个部门表&#xff08;departments&#xff09;&#xff0c;其中包含…

【docker 部署springboot项目】

一、docker安装 1.检查Linux内核版本高于3.10才可安装 uname -r 2. 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 3. 使用docker仓库进行安装 安装所需的软…

C1W3.Assignment: Hello Vectors

理论课&#xff1a;C1W3.Vector Space Models 文章目录 Importing the data生成word_embeddings_subset&#xff08;optional&#xff09;Predict relationships among wordsCosine SimilarityEuclidean distance Finding the country of each capitalModel AccuracyPlotting …

性能测试学习-woniusales

1、性能测试分类&#xff1a;服务器&#xff0c;客户端 服务器端&#xff1a; 代码级多线程协议级多线程 客户端&#xff1a;JavaScript, Android ,PC客户端 性能测试容易出现瓶颈的点&#xff1a;带宽&#xff0c;代码优化&#xff08;例&#xff0c;等差&#xff0c;等比…

hbase命令行操作

1.进入命令行 hbase shell 2.基础命令 查看帮助信息help --查看版本信息--version --查看hbase集群状态--status --查看当前用户--whoami 3.命名空间命令 -查看所有命名空间--list_namespace --查询指定命名空间的表 --list_namespace_tables 命名空间名 --创建命名空间 --cre…

字节抖音电商 后端开发岗位 一面

笔者整理答案&#xff0c;以供参考 自我介绍 项目&#xff08;20分钟&#xff09; RocketMQ延时消息的底层实现 回答&#xff1a; 延时消息的实现主要依赖于RocketMQ中的定时任务机制。消息被发送到Broker时&#xff0c;会先存储在一个特定的延时消息队列中。Broker会定时扫…

怎么选流量套餐最划算呢,这篇文章建议收藏!

据小编了解&#xff0c;现在大多数用户手上都不止一张SIM卡&#xff0c;大部分都是双卡&#xff0c;甚至三卡了&#xff0c;那么&#xff0c;这些卡槽你真的利用对了吗&#xff1f; 这篇文章就告诉大家&#xff0c;如何更好的利用这两个卡槽&#xff0c;让你即省钱&#xff0c…

Day11: 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数

题目110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) …

元服务体验-服务管理与分享

服务管理 通过桌面、负一屏、应用市场、元服务等场景对元服务进行添加、收藏、移除等管理操作。 服务分享 元服务与服务卡片支持近场与远场分享&#xff0c;可流转给设备也可以分享给联系人。 收到他人分享的元服务&#xff0c;可无需安装直接打开使用&#xff0c;或添加至负…

PEST分析法

PEST分析法是一种用于企业战略规划的工具&#xff0c;它通过对企业所处的宏观环境进行分析&#xff0c;帮助企业识别出影响其战略决策的关键因素。PEST分别代表政治&#xff08;Political&#xff09;、经济&#xff08;Economic&#xff09;、社会&#xff08;Sociocultural&a…

架构设计-NX的二次开发API架构设计介绍

1.与整体的关系 2.API设计目标 能够允许用户访问NX的所有UI工具组件&#xff0c;二次开发用户能够编写外观和运行行为类似NX的应用程序。能够允许用户直接访问NX数据模型即使底层数据结构和功能实现发生很大变化&#xff0c;API接口保持稳定&#xff0c;不会影响上层用户。 3…

数码暴龙机(电波暴龙机)彩色复刻版!!| 使用Python、PySide6、pixilart自制windows桌面宠物

一、前言 数码暴龙机&#xff08;电波暴龙机&#xff09;是万代公司发售的一系列与《数码兽》系列相关的液晶玩具商品。这些产品融合了养成和对战元素&#xff0c;为玩家提供了一种虚拟养成和战斗的娱乐体验。也是很多人的童年回忆。最近在B站刷到讲解暴龙通关的教程和视频&…

java——Junit单元测试

测试分类 黑盒测试&#xff1a;不输入代码&#xff0c;给输入值&#xff0c;看程序能够给出期望的值。 白盒测试&#xff1a;写代码&#xff0c;关注程序具体执行流程。 JUnit单元测试 一个测试框架&#xff0c;供java开发人员编写单元测试。 是程序员测试&#xff0c;即白…