StarRocks实战——多点大数据数仓构建

news2024/11/25 12:16:04

目录

前言

一、背景介绍

二、原有架构的痛点

2.1 技术成本

2.2 开发成本

2.2.1 离线 T+1 更新的分析场景

2.2.2 实时更新分析场景

2.2.3 固定维度分析场景

2.2.4 运维成本

三、选择StarRocks的原因

3.1 引擎收敛

3.2 “大宽表”模型替换

3.3 简化Lambda架构

3.4 模型持续迭代

3.5 明细、汇总一体化

3.6 外表能力

3.7 单表聚合查询

3.8 多表关联查询

3.9 实时更新读写查询

四、实践经验

4.1 集群拆分

4.2 按照数据更新频率进行拆分

4.3 按照业务域进行拆分

4.4 调优手段

4.4.1 优化表结构定义

1)模型选择

2)分区和分桶 

3)稀疏索引、bloomfilter、Bitmap Index

4)物化视图

5)使用BITMAP / HyperLogLog 数据类型进行去重

4.4.2 优化查询SQL

1)Broadcast Join

2)Colocation Join

3)并行度调整

4)CBO 优化器

4.5 工具集成

4.5.1  数据集成

4.5.2 监控预警

五、总结


   原文大佬介绍的这篇StarRocks数仓建设实践有借鉴意义的,这些摘抄下来用作沉淀学习。如有侵权,请告知~

前言

      多点 DMALL 成立于2015年,是一站式全渠道数字零售解决方案服务商。 多点大数据部门使用 StarRocks 逐步替代了 Impala、Impala on Kudu、Apache Kylin 等存储引擎,实现了存储引擎的收敛,简化了实时数据处理链路,同时也能保障较高的查询并发以及较低的响应延迟要求

一、背景介绍

     多点大数据部门为内部业务研发团队、数据分析师、外部用户以及合作伙伴,提供了基础的大数据产品、平台服务,帮助零售企业解决了从基本的数据汇总管理、统一的数据计算应用、到各种场景下对数据的多模式使用的需求,可覆盖零售企业绝大部分数据诉求。

 技术层面,多点大数据部门基于 Hadoop 开源技术栈,并进行了部分二次开发后构建起了以下的一个技术架构全景图。从下到上分为基础设施层、数据源层、数据集成层、离线/实时计算层、集市层、分析存储层、数据服务/应用层,数据开发,数据模型中心与运维管理层对各层提供支持。

  • 基础设施层:包括超大带宽的专线网络;公有云、私有云、机房托管的混合云部署;
  • 数据源层:包括企业OLTP 数据库、业务数据、日志数据、三方接入数据;
  • 数据集成层:DataBus 是多点自研数据同步平台,解决企业内各业务线之间,跨企业组织之间以及跨行业的数据汇聚,融合等问题,将不同系统的数据互相打通,实现数据自由流动
  • 离线计算层:利用Hive /Spark高可扩展的批处理能力承担离线数仓的ETL和数据模型加工;
  • 实时计算层:利用Flink /Spark Streaming完成实时数据的ETL(包括维度扩充,多流join,实时汇总)等;
  • 离线/实时集市层:使用数仓分层模型构建ODS(原始数据层),DWD(数据明细层)、DWS(汇总层)、DIM(维度层)、DWT(主题成)、ADS(应用层),并根据公司业务拆不同的数据域;
  • 分析存储层:主要依赖 Druid、ClickHouse、Impala on Kudu、Apache Kylin、Elasticsearch、HBase、MySQL、StarRocks提供OLAP查询能力;
  • 数据服务/应用层:该层通过提供BI分析产品、数据服务接口,营销,报表类产品,向内部运营人员、外部客户,合作伙伴提供数据分析决策能力;

二、原有架构的痛点

   上述架构解决了多点绝大部分数据诉求,在整个架构中,无论是基于Hive,Spark的离线计算,基于Flink ,Spark Streaming 的实时计算;基于HDFS,kafka的存储;基于数仓分层模型建设等方案都已基本成熟。但是在OLAP领域,无论是多点还是业界仍然处于百家争鸣,各有所长的状态。纵观多点在OLAP引擎的探索实践中,遇到了各种各样问题,总结如下:

2.1 技术成本

    由于上层业务场景复杂,各个场景的技术难点,核心点均不一样。多点生活在整个技术架构升级的过程中先后引入了HBase、Elasticsearch、Druid、ClickHouse、Impala on Kudu、Apache Kylin等OLAP引擎。但是随着技术栈增多,技术曲线陡峭,没有充足的资源进行多技术栈的维护,造成了比较高的技术成本。

2.2 开发成本

  多点的数据分析场景大致可以分为离线+1更新分析场景,实时更新分析场景,固定维度分析场景。

2.2.1 离线 T+1 更新的分析场景

   例如多点的精细化用户运营平台,其核心的功能是基于用户、消费、行为、设备等属性,提供多维度筛选条件,并通过自定义条件实现用户分层,便于进行精细化用户运营。

    针对数据更新为T+1的分析场景,原主要使用的分析引擎为ClickHouse。利用ClickHouse构建“大宽表”模型,将事实表与维度表提前进行关联,对外提供单表聚合的SQL查询,以及通过构建DWT主题宽表,提供Ad-Hoc查询;该场景面临的问题是:虽然ClickHouse单表查询强悍,但是Join能力不强,需要提前进行关联,将多表关联成单表,会存在额外的开发成本

2.2.2 实时更新分析场景

   实时更新场景主要是实时监控经营的各项指标,如当前时间段内的 GMV、下单数量、妥投数量、指标达成、对比,环比等指标,为客户的经营决策提供更具备时效性的参考依据。

    针对数据为实时(秒级)更新的场景,原主要使用Impala on Kudu 引擎,采用Lambda架构,基于相同的主键,将流式的预计算的结果数据,批计算的结果数据,基于相同的主键进行merge。

     上述方案中的 Flink AGG部分, 该程序的功能包括窗口内的预计算,多流Join等操作。当业务需求变更或者上游数据结构变更的时候,需要升级 Flink AGG程序,以及离线ETL的任务,类似于“烟囱式”的迭代开发,开发效率低下。资源消耗层面,在Flink里面做预计算,时间窗口的选取以及内存占用之间也需要平衡。

2.2.3 固定维度分析场景

     固定维度的分析场景主要针对固化的,标准的业务场景进行分析,多维分析可通过多维形式组织起来的数据进行上卷, 下下钻,切片,切块,旋转等各种分析操作,以便剖析数据,使分析者、决策者能从多个角度、多个侧面观察数据仓库中的数据,深入了解包含在数据中的信息和内涵。

   针对分析维度固定的分析场景,按照业务上常用的分析指标以及维度,此前使用Apache Kylin进行cube预计算,但是使用Apache Kylin也会遇到如下问题:

  • 由于多点业务场景涉及的维度比较多,各种类目、营运组织的组合,会导致cube膨胀,占用比较多的存储资源;
  • 当数据重跑以及新增维度,指标的时候,针对已经在线上运行的cube模型,为了保障数据重跑时候服务依然可用,需要新增cube模型,并行提供支持,造成存储重复;
  • 由于目前使用的Apache Kylin v3.1.2 是使用HBase作为后端存储,row key顺序设计以及分区键的选择会严重的影响查询性能,对开发不友好。

2.2.4 运维成本

    多点作为一站式全渠道数字零售解决方案服务商,可以满足客户不同的接入部署需求。多点大数据产品系统的接入SaaS化接入,私有云以及本地化部署。针对私有云,本地化部署的客户,OLAP 引擎易部署、易维护、极简的架构尤其重要,像 HBase、Impala on Kudu、Apache Kylin 等强依赖 Hadoop生态的OLAP引擎,会增加部署的复杂性;ClickHouse 集群不能自动感知集群拓扑变化,有不能自动balance数据,会增加缩容,扩容等的维护成本。

三、选择StarRocks的原因

    多点大数据部门从2021年年初开始,在调研市面上常用的存储引擎时发现了StarRocks。StarRocks 架构设计融合了 MPP 数据库,以及分布式系统的设计思想,具备架构精简,支持全面向量化引擎、智能查询优化、高效更新、智能物化视图、标准SQL、流批一体,高可用易扩展等特性,天然的解决了上述的问题。

使用 StarRocks 的特性解决当前痛点

3.1 引擎收敛

   原有系统的多维分析,高并发查询,预计算,实时分析,Adhoc查询等场景系使用了多套系统,基本上可以使用一套 StarRocks 解决。多点大数据平台、产品逐步形成以 StarRocks为主,其他 OLAP引擎为辅的存储架构,解决维护多套引擎的技术成本问题。

3.2 “大宽表”模型替换

   StarRocks 支持Broadcast Join、Colocate Join等分布式 Join 的特性,可以在查询性能可接受的范围内,使用星型、星座模型替代“大宽表”模型,节约提前关联关联的开发成本,同时针对事实表中历史数据变更,需要重新“跑数”的场景,可以只需重跑(overwrite)部分表的数据,提高整体的“跑数”效率。

3.3 简化Lambda架构

    StarRocks支持明细、聚合、更细、主键模型,可以基于StarRocks自带预聚合的特性,优化掉现有Lambda架构中的预聚合部分。

   StarRocks 直接拉取/订阅Hive或者 Kafka 中的数据,在 StarRocks 中进行聚合运算;StarRocks的数据模型是Aggregate模型,通过MAX、SUM、MIN、BITMAP_UNION 等聚合函数在StarRocks中进行预聚合。

3.4 模型持续迭代

   针对已在线上运行的模型,如果有需求上的变更,比如增加、删除、变更字段,可以使用简单SQL命令动态地修改表的定义,在表结构变更的过程中,线上的服务不受任何的影响。

3.5 明细、汇总一体化

   在实际的业务场景中,通常存在两种场景并存的分析需求:对固定维度的聚合分析和对原始明细数据的查询。在这种情况下,StarRocks支持对原表构建物化视图,数据更新的时候,物化视图跟随原表一起进行更新,保证数据的一致性。当用户查询时,并不感知物化视图的存在,不必显式的指定物化视图的名称,查询优化器可以根据查询条件自动判断是否可以路由到相应的物化视图上

3.6 外表能力

   StarRocks 支持以外部表的形式,接入其他数据源包括 MySQL、HDFS、Elasticsearch、Hive 等。比如可以使用 StarRocks 建立Elasticsearch的外表,为Elasticsearch 提供SQL 查询的能力。

基于多点报表业务真实场景的性能测试

3.7 单表聚合查询

    在现有的数据 T+1 更新的汇总业务场景中,选取了多点报表业务中的“单品销售分析”场景进行测试,单表单天数据亿级别,上百个维度和分析指标,属于典型的基于“大宽表”的 Ad-hoc 查询场景。在相同情况(机器配置、数据量、sql)下进行ClickHouse 对比 StarRocks 的性能测试:

横坐标:分区(天)数-并发数;纵坐标:响应时长(ms)

从查询响应时长来看,单表的聚合查询,ClickHouse 与 StarRocks 的查询响应时长相差不多。

3.8 多表关联查询

    在现有的数据 T+1 更新多表关联的汇总分析业务场景中,选取了现在多点报表业务中的“门店销售分析”场景进行测试,事实表单天数据亿级别,多个维表数据量在十万级别,属于典型的高维分析场景。在相同情况(机器配置、数据量、sql)下进行ClickHouse 对比 StarRocks 的性能测试:

横坐标:分区(天)数-并发数;纵坐标:响应时长(ms)

从查询响应时长来看,多表关联聚合查询,StarRocks的性能要优于ClickHouse。

3.9 实时更新读写查询

   在现有的数据准实时更新(边写边读)的汇总查询业务场景中,选取了“实时销售分析”场景进行测试,订单数据实时更新,单天数据量亿级别。属于典型的“实时更新,实时查询”场景。在相同情况(机器配置、数据量、SQL)下进行Impala on Kudu对比 StarRocks 的性能测试:

横坐标:分区(天)数-并发数;纵坐标:响应时长(ms)。

从查询响应时长来看,在边读边写的情况下,聚合查询的 SQL,StarRocks 的性能要优于 Impala on Kudu。

四、实践经验

   多点目前已经在高维业务指标报表,Ad-hoc分析、实时全链路监控等场景中引入了 StarRocks,在使用中总结出以下经验:

4.1 集群拆分

   由于 StarRocks极简的架构设计,易于运维部署。我们根据一定的规则,搭建了多套集群,避免业务之间的相互影响。

4.2 按照数据更新频率进行拆分

 例如数据是T+1更新,且单表数据量在百亿级别以上的场景(例如高维业务指标报表、Adhoc 分析),我们构建了离线分析集群。通过提高 StarRocks 的查询并发(parallel_fragment_exec_instance_num))、单节点内存限制(exec_mem_limit)等对复杂查询有好的参数,提高集群的查询性能;

针对数据是准实时更新,写多读多的场景(实时报表,实时全链路监控),构建了实时分析集群,通过调整StarRocks的compaction(cumulative_compaction_num_threads_per_disk、base_compaction_num_threads_per_disk)等对写入友好的参数,加快数据版本合并。

4.3 按照业务域进行拆分

  多点客户的接入方式不同,且各种SLA要求也不同,会按照不同的需求搭建不同的StarRocks就请你,尽量满足多种客户需求。

4.4 调优手段

   针对在线服务、系统,为了提高系统整体的查询性能,可以从不同的维度进行优化:

4.4.1 优化表结构定义

1)模型选择

StarRocks 的模型包括明细模型、聚合模型、更新模型、主键模型。

如果需要对原始的数据(例如订单流水,原始操作记录等)来进行分析,可以选择明细模型;

如果业务方进行的查询为汇总类查询,比如 SUM、COUNT、MAX 等类型的查询,可以选择聚合模型,提前进行预聚合,查询的时候直接获取结果;

如果数据需要频繁的进行状态更新(比如订单的状态变更),可以选择更新模型。

2)分区和分桶 

    StarRocks 可以对表进行分区(parition) 和分桶(bucket),分区在逻辑上把表划分成了多个子表,可以按照时间进行分区;分桶可以按照不同的策略将数据划分为不同的 tablet,分布在不同的 BE 节点上。按照目前多点大数据集群的机器配置(64C+256G+12TB SSD),通常将一个 tablet 保持在200MB~1GB的大小,会有比较好的性能。

3)稀疏索引、bloomfilter、Bitmap Index

   为了提高查询的性能,可以对 StarRocks 的表结构额外构建索引。稀疏索引:可以将查询中常见的过滤字段放在 schema 的前面, 区分度越大,频次越高的查询字段越往前放;同时对区分度比较大(高基数列)的列构建 bloomfilter;对区分度不大(低基数列)的列构建 Bitmap Index。

4)物化视图

  针对实际查询场景中经常用到的查询 SQL,可以对原始表构建物化视图,其本质为原始表 (base table)的一个物化索引,通过物化视图提前进行索引排序,指标预计算,查询的时候子自动路由到物化视图进行查询。

5)使用BITMAP / HyperLogLog 数据类型进行去重

   在交易场景中进行会计算交易次数,使用常规的方式(COUNT DISTRINCT order_id)去重,其缺点是需要消耗极大的计算和存储资源,对大规模数据集和查询延迟敏感的去重场景支持不够友好。通过定义 BITMAP 的数据类型,可以减少传统 COUNT DISTINCT 去重的执行需要的内存空间、执行时长;而对于像流量统计场景中针对 UV 的计算,在允许有部分统计偏差的前提下,可以定义 HyperLogLog 的数据类型,提高去重效率。

4.4.2 优化查询SQL

1)Broadcast Join

    当大表与小表进行 Join 的时候,可以使用 Broadcast Join(StarRocks 针对小表的默认 Join 方式),小表向大表广播的方式进行 Join。该方式可以用于事实表与维度表进行关联查询;

2)Colocation Join

    当大表与大表进行 Join 的时候,为了加速查询,相关表可以采用共同的分桶列(colocate_with)进行分桶。当分桶列相同,相关表进行 Join 操作时,可以直接在本地进行 Join,再将结果数据进行合并避免数据在中间计算的时候就在集群中的传输

3)并行度调整

   当机器资源比较充裕时,可以将增加执行并行度( parallel_fragment_exec_instance_num)让更多的执行实例同时处理一组数据扫描,从而提升查询效率。但是并行度设置为较大的数值会消耗更多的机器资源,例如 CPU、内存、磁盘 IO,影响整体的 QPS。需要根据实际上的查询场景来设置并行度,一般建议占用机器核数的50%

4)CBO 优化器

   针对复杂 Ad-hoc 场景,可以开启 StarRocks的基于成本(Cost-based Optimizer,CBO)的查询规划器,在众多查询计划空间中快速找到最优计划,提高查询优化器

4.5 工具集成

   为了与多点的大数据平台进行打通,对StartRocks进行了一些集成封装。

4.5.1  数据集成

    通过封装 StarRocks 的 Broker Load 以及 Stream Load 接口,与多点的大数据平台打通,实现通过配置的方式将数据从Hive批量同步到StarRocks,或者订阅MQ将实时数据同步到StarRocks。

4.5.2 监控预警

  通过集成Prometheus和Grafana,与监控平台打通。对多个StarRocks集群的运行情况进行监控,当集群的某些指标超过一定阈值的时候进行报警。

五、总结

    多点从2021年上半年开始调研引入 StarRocks,当前已有四个集群在稳定运行提供线上服务,逐步替代 Impala、Impala on Kudu、Apache Kylin 等存储引擎,实现了存储引擎的收敛,简化了实时数据处理链路,同时也能保障较高的查询并发以及较低的响应延迟要求

     在引擎引入以及切换的过程中,得到了 StarRocks社区的大力支持。后续公司在有余力的情况下会参与 StarRocks 的社区共建,共同打造性能强悍的国产新一代 MPP 数据库。

参考文章:

多点 DMALL x StarRocks:实现存储引擎的收敛,保障高查询并发及低延迟要求

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

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

相关文章

“预防儿童烧烫伤”科普安全课堂走进嘉鱼县第一小学

为提高嘉鱼县儿童烧烫伤安全意识、隐患识别能力以及突发应急处置能力,3月26日下午,在中国社会福利基金会烧烫伤关爱公益基金、嘉鱼县妇女联合会、嘉鱼县教育局的支持下,嘉鱼县蒲公英社会工作服务中心走进嘉鱼县第一小学开展预防儿童烧烫伤科普…

图论之路径条数专题

一直忙着金工实习蓝桥杯,好久没有看图论了,今天就小试几题享受下被虐的快感。 1.最短路拓扑 首先来几个结论: 1.最短路图没有环(可以用反证法证明) 2.dis[u]edge[u,v]dis[v],那么u,v端点的边一定在最短路…

【笔记】RDD算子操作(Spark基础知识)

持续更新中!!! 目录 一、RDD的创建 1.从本地创建 (1)本地文件 (2)hdfs文件(先提前创建目录并上传文件) 2.从集合创建(通过并行集合(列表&am…

C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码

手术麻醉信息系统是HIS产品的中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与排班、审批、安排、术前、术中和术后的信息管理提供支持。 手术麻醉信息系统可与EM…

MTK8781安卓核心板_MT8781(Helio G99)核心板性能参数

MT8781安卓核心板搭载了八核CPU,其中包括两个主频高达2.2GHz的高性能Arm Cortex-A76处理器。这一处理器采用了台积电6纳米级芯片生产工艺,以及先进的3D图形功能的高性能Arm Mali G57级GPU。通过超快LPDDR4X内存和UFS 2.2存储供电,不仅提高了游…

springdata框架对es集成

什么是spring data框架 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的…

【TB作品】MSP430G2553,超声波倒车雷达PCB,单片机,超声波SR04,键盘,oled,

题目 硬件:MSP430G2553、 SR04超声波传感器 、3*4键盘、 无源蜂鸣器、oled显示屏 软件 1 、实时显示测量得到的距离 2、按键设置一个报警门限数值,直接输入数值后确认 3、低于报警门限数值就开始报警,而且距离越近蜂鸣器的鸣叫频率越高 程序…

电脑突然死机怎么办?

死机是电脑常见的故障问题,尤其是对于老式电脑来说,一言不合电脑画面就静止了,最后只能强制关机重启。那么你一定想知道是什么原因造成的吧,一般散热不良最容易让电脑死机,还有系统故障,比如不小心误删了系…

MySQL count(*/column)查询优化

count()是SQL中一个常用的聚合函数,其被用来统计记录的总数,下面通过几个示例来说明此类查询的注意事项及应用技巧。 文章目录 一、count()的含义二、count()的应用技巧2.1 同时统计多列2.2 利用执行计划 一、count()的含义 count()用于统计符合条件的记…

Yarn简介及Windows安装与使用指南

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

STM32使用USART发送数据包指令点亮板载LED灯

电路连接: 连接显示屏模块,显示屏的SCL在B10,SDA在B11。 程序目的: 发送LED_ON指令打开板载LED灯,发送LED_OFF关闭板载LED灯,与上一个博客不同,这个实际上是实现串口收发文本数据包。 …

flink on yarn-per job源码解析、flink on k8s介绍

Flink 架构概览–JobManager JobManager的功能主要有: 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行Scheduler 组件负责 Task 的调度Checkpoint Coordinator 组件负责协调整个任务的 Checkpoint,包括 Checkpoint 的开始和完成通过 Actor System 与 …

【MySQL】6.MySQL主从复制和读写分离

主从复制 主从复制与读写分离 通常数据库的读/写都在同一个数据库服务器中进行; 但这样在安全性、高可用性和高并发等各个方面无法满足生产环境的实际需求; 因此,通过主从复制的方式同步数据,再通过读写分离提升数据库的并发负载…

Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

目录 XSS跨站-攻击利用-凭据盗取 XSS跨站-攻击利用-数据提交 XSS跨站-攻击利用-flash钓鱼 XSS跨站-攻击利用-溯源综合 知识点: 1、XSS跨站-攻击利用-凭据盗取 2、XSS跨站-攻击利用-数据提交 3、XSS跨站-攻击利用-网络钓鱼 4、XSS跨站-攻击利用-溯源综合 漏洞原理…

深度学习理解及学习推荐(持续更新)

主推YouTuBe和Bilibili 深度学习博主推荐: Umar Jamil - YouTubehttps://www.youtube.com/umarjamilai StatQuest with Josh Starmer - YouTubehttps://www.youtube.com/statquest RNN Illustrated Guide to Recurrent Neural Networks: Understanding the Int…

知乎:多云架构下大模型训练,如何保障存储稳定性?

知乎,中文互联网领域领先的问答社区和原创内容平台,2011 年 1 月正式上线,月活跃用户超过 1 亿。平台的搜索和推荐服务得益于先进的 AI 算法,数百名算法工程师基于数据平台和机器学习平台进行海量数据处理和算法训练任务。 为了提…

生成式 AI 学习资源大汇总

这里汇聚了该领域的海量学习资源,从研究更新到面试技巧,从课程材料到免费课程,还有实用代码,一应俱全,是你工作流程中的得力助手! 前沿研究:每月精心筛选的最佳生成式 AI 论文列表,让…

Flink集群主节点JobManager启动分析

1.概述 JobManager 是 Flink 集群的主节点,它包含三大重要的组件: ResourceManager Flink集群的资源管理器,负责slot的管理和申请工作。 Dispatcher 负责接收客户端提交的 JobGraph,随后启动一个Jobmanager,类似 Yarn…

C#全新一代医院手术麻醉系统围术期全流程源码

目录 一、麻醉学科的起源 二、麻醉前访视与评估记录单 患者基本信息 临床诊断 患者重要器官功能及疾病情况 病人体格情况分级 手术麻醉风险评估 拟施麻醉方法及辅助措施 其他需要说明的情况 访视麻醉医师签名 访视时间 与麻醉相关的检查结果 三、手术麻醉信息系统…

蓝桥杯单片机快速开发笔记——PCF8591的DAC模拟电压输出

一、原理分析 PCF8591电压信号探测器:http://t.csdnimg.cn/R38tC IIC原理:http://t.csdnimg.cn/v4dSv IIC指令:http://t.csdnimg.cn/RY6yi HC573/HC138:http://t.csdnimg.cn/W0a0U 数码管:http://t.csdnimg.cn/kfm9Y 独…