Apache Doris:下一代实时数据仓库

Apache Doris:下一代实时数据仓库

  • 概念
  • 架构设计
    • 快速的原因——其性能的架构设计、特性和机制
      • 基于成本的优化器
      • 面向列的数据库的快速点查询
      • 数据摄取
      • 数据更新
      • 服务可用性和数据可靠性
      • 跨集群复制
      • 多租户管理
      • 便于使用
      • 半结构化数据分析
      • 据仓一体
      • 分层存储
  • 词条
    • 诞生
    • 技术概述
    • 适用场景

概念

  • Apache Doris 是一个开源实时数据仓库。它可以从各种数据源收集数据,包括关系数据库(MySQL、PostgreSQL、SQL Server、Oracle等)、日志和来自物联网设备的时间序列数据。能够进行报告、即席分析、联合查询和日志分析,因此可用于支持仪表板、自助式 BI、A/B 测试、用户行为分析等。

Apache Doris 同时支持批量导入和流式写入。可以与 Apache Spark、Apache Hive、Apache Flink、Airbyte、DBT 和 Fivetran 很好地集成。还可以连接到 Apache Hive、Apache Hudi、Apache Iceberg、Delta Lake 和 Apache Paimon 等数据湖
在这里插入图片描述
Heterogeneous Data 异构数据
Application 应用程序
RDBMS
MySQL PostgreSQL SQL Server Oracle
Apache Doris Reporting Ad-hoc Analysis Federated Queries Apache Doris报告特别分析联邦查询
Dashboarding 仪表盘
Self-Service BI 自助式BI
Data Integration /ETL 数据集成/ETL
Sales Analysis 销售分析
Log Processing 日志处理
CDC
ETLELT
User Behavior Analysis 用户行为分析
log
Batch Processing (Spark, Hive) 批处理(Spark, Hive)
High-Concurrency Data Services 高并发数据服务
A/B Testing Log Analysis A/B测试日志分析
IOT 物联网
time series data 时间序列数据
Stream Processing (Flink) 流处理(Flink)
User Profiling 用户分析
Offline Data Lake 离线数据湖
Tools (Airbyte, DBT, Fivtn) 工具(Airbyte, DBT, Fivtn)
Hive
Time Series Data Analysis 时间序列数据分析

  • 作为实时 OLAP引擎,Apache Doris 在查询速度上具有竞争优势。根据TPC-H和SSB-Flat基准测试结果,Doris可以提供比Presto、Greenplum和ClickHouse更快的性能。
    至于其自我进化,过去两年无论是复杂查询还是平表分析,速度都提高了10倍以上。

架构设计

快速的原因——其性能的架构设计、特性和机制

基于成本的优化器

  • Apache Doris 有一个基于成本的优化器(CBO),可以为复杂的大查询找出最有效的执行计划。具有完全矢量化的执行引擎,可以减少虚拟函数调用和缓存未命中的问题。基于MPP(大规模并行处理),可以充分发挥用户的机器和内核。在 Doris 中,查询执行是数据驱动的,意味着查询是否被执行取决于其相关数据是否准备好,这可以更有效地利用 CPU。

面向列的数据库的快速点查询

  • Apache Doris 是一个面向列的数据库,因此它可以使数据压缩和数据分片变得更容易更快。但这可能不适合诸如面向客户的服务之类的情况。在这些情况下,数据平台必须同时处理大量用户的请求(这些请求称为“高并发点查询”),而拥有列式存储引擎将放大每秒的 I/O 操作,尤其是当数据排列在平面表中时。
    为了解决这个问题,Apache Doris 启用了混合存储,这意味着同时拥有行存储和列存储。
    在这里插入图片描述
  • 另外,由于点查询都是简单查询,因此调用查询规划器是不必要和浪费的,因此 Doris 为它们执行短路计划以减少开销。
    高并发点查询开销的另一个大来源是SQL解析。为此,Doris 准备了声明。预先计算 SQL 语句并缓存它们,以便可以复用于类似的查询。
  • 架构精简:系统只有Frontend(FE)和Backend(BE)两个模块,其中FE节点负责用户请求的接入、查询计划的解析、元数据存储及集群管理等工作,BE节点负责数据存储和查询计划的执行,自身就是一个完备的分布式数据库管理系统,用户无需安装任何第三方管控组件即可运行起Apache Doris 集群,并且部署和升级过程都非常简易。同时,任一模块都可以支持横向拓展,集群最高可以拓展到数百个节点,支持存储超过10PB的超大规模数据。
    在这里插入图片描述
    SQL Parse SQL解析
    Preparestatement Map 映射
    Analyzer 分析仪
    SQL1 - cached short-circuit plant SQL1缓存的短路装置
    RPC
    Storage Engine
    Short-Circuit Plan存储引擎
    SQLN - cached short-circuit planN SQLN -缓存的短路计划n
  • 性能优异:自带高效的列式存储引擎,减少数据扫描量的同时还实现了超高的数据压缩比。同时Doris还提供了丰富的索引结构来加速数据读取与过滤,利用分区分桶裁剪功能,Doris可以支持在线服务业务的超高并发,单节点最高可支持上千QPS。更进一步,Apache Doris 结合了向量化执行引擎来充分发挥现代化CPU并行计算能力,辅以智能物化视图技术实现预聚合加速,并可以通过查询优化器同时进行基于规划和基于代价的查询优化。通过上述多种方式,实现了极致的查询性能。

数据摄取

  • Apache Doris 提供了一系列数据摄取方法。

  • 1.实时流写入:
    Stream Load:可以应用此方法通过 HTTP 写入本地文件或数据流。具有线性可扩展性,在某些用例中可以达到每秒 1000 万条记录的吞吐量。
    Flink-Doris-Connector:通过内置的 Flink CDC,该连接器将 OLTP 数据库中的数据提取到 Doris。至此,我们已经实现了MySQL、Oracle的数据自动同步到Doris。
    例程加载:这是从 Kafka 消息队列订阅数据。
    Insert Into:当您尝试在 Doris 内部进行 ETL 时(例如将数据从一个 Doris 表写入另一个 Doris 表)尤其有用。

  • 2.批量写入:
    Spark Load:通过这种方法,您可以在写入 Doris 之前利用 Spark 资源对来自 HDFS 和对象存储的数据进行预处理。
    Broker Load:支持 HDFS 和 S3 协议。
    insert into select from :这个简单的语句允许您将 Doris 连接到各种存储系统、数据湖和数据库。

  • 生态丰富:提供丰富的数据同步方式,支持快速加载来自本地、Hadoop、Flink、Spark、Kafka、SeaTunnel等系统中的数据,也可以直接访问MySQL、PostgreSQL、Oracle、S3、Hive、Iceberg、Elasticsearch等系统中的数据而无需数据复制。同时存储在Doris中的数据也可以被 Spark、Flink 读取,并且可以输出给上游数据应用进行展示分析。

数据更新

  • 1.对于数据更新,Apache Doris 需要提供的是,它同时支持 Merge on Read 和 Merge on Write,前者用于低频批量更新,后者用于实时写入。
  • 使用Merge on Write,当您执行查询时,最新的数据就已经准备好了,因此与Merge on Read相比,它可以将查询速度提高5到10倍。
  • 从实现的角度来看,以下是一些常见的数据更新操作,Doris 都支持:
    Upsert:替换或更新整行
    部分列更新:仅更新一行中的几列
    条件更新:通过组合几个条件过滤掉一些数据,以便替换或删除它
    Insert Overwrite:重写表或分区
  • 在某些情况下,数据更新是并发发生的,这意味着有大量新数据进入并试图修改现有数据记录,因此更新顺序非常重要。这就是为什么 Doris 允许您通过事务提交的顺序或序列列(您提前在表中指定的内容)来决定顺序。Doris 还支持根据指定谓词删除数据,这就是条件更新的方式。

服务可用性和数据可靠性

  • 除了查询和数据摄取方面的快速性能之外,Apache Doris 还提供服务可用性保证,具体如下:
    从架构上来说,Doris 有两个进程:前端和后端。它们都很容易扩展。
  • 前端节点管理集群、元数据并处理用户请求;后端节点执行查询并能够自动数据平衡和自动恢复。支持集群升级和扩展,避免服务中断。
    在这里插入图片描述
    • 稳定可靠:支持数据多副本存储,集群具备自愈功能,自身的分布式管理框架可以自动管理数据副本的分布、修复和均衡,副本损坏时系统可以自动感知并进行修复。节点扩容时,仅需一条SQL命令即可完成,数据分片会自动在节点间均衡,无需人工干预或操作。无论是扩容、缩容、单节点故障还是在升级过程中,系统都无需停止运行,可正常提供稳定可靠的在线服务。

跨集群复制

  • 企业用户,尤其是金融或电子商务领域的用户,需要备份其集群或整个数据中心,以防出现不可抗力。所以Doris 2.0 提供了跨集群复制(CCR)。通过 CCR,用户可以做很多事情:
    灾难恢复:用于快速恢复数据服务
    读写分离:主集群+从集群;一本用于阅读,一本用于写作
    集群隔离升级:对于集群扩展,CCR允许用户预先创建备份集群进行试运行,以便清除可能的不兼容问题和错误。
    测试表明 Doris CCR 可以达到几分钟的数据延迟。最好的情况下可以达到硬件环境的速度上限。
    在这里插入图片描述
    Source cluster 源集群
    Obtain ta binloy pates 获取该binloy表
    Replay -eta binlo 重播 -eta binlo
    Target cluster 目标集群
    Pull data 提取数据

多租户管理

  • Apache Doris 具有复杂的基于角色的访问控制,它允许在数据库、表、行和列级别进行细粒度的权限控制。
    在这里插入图片描述
  • 对于资源隔离,Doris 曾经实施了一个硬隔离方案,将后端节点划分为资源组,并将资源组分配给不同的工作负载。这个硬隔离计划简单又整洁。但有时用户需要更充分地利用其计算资源,因为某些资源组处于空闲状态。
    在这里插入图片描述
  • 因此,Doris 2.0 引入了工作负载组,而不是资源组。为工作负载组设置了关于其可以使用的资源数量的软限制。当达到该软限制时,同时有一些空闲资源可用。空闲资源将在工作负载组之间共享。用户还可以根据对空闲资源的访问来确定工作负载组的优先级。
    在这里插入图片描述

便于使用

  • Apache Doris 提供了许多功能,而且也易于使用。它支持标准SQL,并兼容MySQL协议和市场上大多数BI工具。
    我们为提高可用性所做的另一项努力是称为“轻架构更改”的功能。这意味着如果用户需要添加或删除表中的某些列,他们只需要更新前端的元数据,而不必修改所有数据文件。
  • 简单易用:支持标准ANSI SQL语法,包括单表聚合、排序、过滤和多表Join、子查询等,还支持窗口函数、Grouping Set等复杂SQL语法,同时用户可以通过UDF和UDAF等自定义函数来拓展系统功能。除此以外,Apache Doris 还实现了MySQL协议兼容,用户可以通过各类客户端工具来访问Doris,并支持与BI工具的无缝对接。

半结构化数据分析

半结构化数据的常见示例包括日志、可观测性数据和时间序列数据。这些案例需要无模式支持、较低的成本以及多维分析和全文搜索的能力。
在文本分析中,人们大多使用 LIKE 算子,因此我们花了很多精力来提高它的性能,包括将 LIKE 算子下推到存储层(以减少数据扫描),并引入 NGram Bloomfilter, Hyperscan 正则表达式匹配库和 Volnitsky 算法(用于子字符串匹配)。
在这里插入图片描述
我们还引入了用于文本标记化的倒排索引。它是模糊关键字搜索、全文搜索、等价查询和范围查询的强大工具。

据仓一体

为了让用户构建高性能的数据湖和统一的查询网关,Doris 可以映射、缓存和自动刷新来自外部源的元数据。它支持 Hive Metastore 和几乎所有开放数据 Lakehouse 格式。您可以将其连接到关系数据库、Elasticsearch 和许多其他来源。它允许您在外部表上重用自己的身份验证系统,例如 Kerberos 和 Apache Ranger。

  • 基准测试结果显示,Apache Doris 在 Hive 表的查询中比 Trino 快 3~5 倍。它是以下几个特征的共同结果:
    高效的查询引擎
    热数据缓存机制
    计算节点
    Doris 视图
  • 计算节点是 2.0 版本中新引入的数据湖解决方案。与普通后端节点不同,计算节点是无状态的,不存储任何数据。它们也不参与集群扩展期间的数据平衡。这样,他们就可以在计算高峰期灵活、轻松地加入集群。
    另外,Doris还允许将外部表的计算结果写入Doris中形成视图。这与物化视图的思路类似:用空间换取速度。对外部表执行查询后,可以将结果放入Doris内部。当后续有类似的查询时,系统可以直接从 Doris 读取先前查询的结果,从而加快速度。

分层存储

  • 分层存储的主要目的是省钱。分层存储是指将热数据和冷数据分离到不同的存储中,热数据是经常访问的数据,冷数据是不经常访问的数据。它允许用户将热数据放入快速但昂贵的磁盘(例如SSD和HDD)中,将冷数据放入对象存储中。
  • 在这里插入图片描述
  • 粗略来说,对于80%冷数据组成的数据资产,分层存储可以降低您70%的存储成本。

词条

  • Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

诞生

  • Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。 [4-5]Apache Doris 社区已经聚集了来自不同行业近百家企业的 300 余位贡献者,并且每月活跃贡献者人数也接近 100 位。2022 年 6 月,Apache Doris 成功从 Apache 孵化器毕业,正式成为 Apache 顶级项目(Top-Level Project,TLP)。
  • Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等,令数据分析工作简单高效。

技术概述

  • ApacheDoris 主要基于C++ 和Java 开发,集成了Google Mesa 和Apache Impala 的技术。将Mesa 与Impala进行组合的基础上,Doris 被设计为一个不依赖于其他系统的简单且单一紧密耦合的系统,并实现了MySQL协议,使得用户可以像使用MySQL 无缝过渡到Doris,包括各种报表应用都可以通过MySQL协议连接Doris,同时获得高并发低延迟点查询性能,而且还能进行高吞吐量的即席分析查询。Doris 不仅提供大批量数据加载,而且还提供近乎实时的小批量,甚至流数据加载。此外Doris还具备可用性,可靠性,容错性和可扩展性。
  • Doris整体架构如下,Doris 架构非常简单,只有两类进程
    Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
    Backend(BE),主要负责数据存储、查询计划的执行。
  • 这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。
  • 在使用接口方面,Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。
    在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。
  • Doris 也支持比较丰富的索引结构,来减少数据的扫描:
    1.支持 Sorted Compound Key Index,可以最多指定三个列组成复合排序键,通过该索引,能够有效进行数据裁剪,从而能够更好支持高并发的报表场景
    2.Z-order Index :使用 Z-order 索引,可以高效对数据模型中的任意字段组合进行范围查询
    3.Min/Max 索引 :有效过滤数值类型的等值和范围查询
    4.Bloom Filter :对高基数列的等值过滤裁剪非常有效
    5.Invert Index :能够对任意字段实现快速检索
  • 在存储模型方面,Doris 支持多种存储模型,针对不同的场景做了针对性的优化:
    1.Aggregate Key 模型:相同 Key 的 Value 列合并,通过提前聚合大幅提升性能
    2.Unique Key 模型:Key 唯一,相同 Key 的数据覆盖,实现行级别数据更新
    3.Duplicate Key 模型:明细数据模型,满足事实表的明细存储
  • Doris 也支持强一致的物化视图,物化视图的更新和选择都在系统内自动进行,不需要用户手动选择,从而大幅减少了物化视图维护的代价。
  • 在查询引擎方面,Doris 采用 MPP 的模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join,从而能够更好应对复杂查询。
    在这里插入图片描述
  • Doris 查询引擎是向量化的查询引擎,所有的内存结构能够按照列式布局,能够达到大幅减少虚函数调用、提升 Cache 命中率,高效利用 SIMD 指令的效果。在宽表聚合场景下性能是非向量化引擎的 5-10 倍。
  • 在这里插入图片描述
    Input Batch 输入批处理
    SCAN 扫描
    OPERATOR 操作符
    FILTER OPERATOR 过滤操作符
    AGGREGATION OPERATOR 聚合算子
    Tuple 元组
    Record Batch 元组
    SCAN OPERATOR 扫描操作符
    FILTER OPERATOR
    AGGREGATION OPERATOR
    Vectors with N records 有N条记录的向量
    Vectors records 向量记录
  • Doris 采用了 Adaptive Query Execution 技术, 可以根据 Runtime Statistics 来动态调整执行计划,比如通过 Runtime Filter 技术能够在运行时生成生成 Filter 推到 Probe 侧,并且能够将 Filter 自动穿透到 Probe 侧最底层的 Scan 节点,从而大幅减少 Probe 的数据量,加速 Join 性能。Doris 的 Runtime Filter 支持 In/Min/Max/Bloom Filter。
    在优化器方面 Doris 使用 CBO 和 RBO 结合的优化策略,RBO 支持常量折叠、子查询改写、谓词下推等,CBO 支持 Join Reorder。CBO 还在持续优化中,主要集中在更加精准的统计信息收集和推导,更加精准的代价模型预估等方面。

适用场景

  • 如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中:
    在这里插入图片描述
    Data Sources 数据源
    Data Ingestion and Processing 数据摄取和处理
    Unified Data Warehouse 统一数据仓库
    Usage Story 使用内存
    Data base
    CDC(Change Data Capture) CDC(变更数据捕获)
    Report Analysis 报告分析
    Web Log Web日志
    Streaming ETL (Flink) 流媒体ETL (Flink)
    DORIS
    Ad-hoc Analysis
    Real Time Data Warehoe 实时数据仓库
    Hobile Log Hobbile 日志
    ETL
    Bach ETL Spark
    Federated Query 联邦查询
    Time Series Dats 时间序列日期
    εTL DT
    Data API 数据API
    Data Intagration Toul 数据集成工具
    Dts Lake |Hie/berg/Haadi |
    Machine Learning 数据集成工具
  • 报表分析
    1.实时看板 (Dashboards)
    2.面向企业内部分析师和管理者的报表
    3.面向用户或者客户的高并发报表分析(Customer-facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
  • 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
  • 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城学习笔记-23-分布式组件-SpringCloud Alibaba-Nacos配置中心-简单示例

之前已经学习了使用Nacos作为注册中心,这一节学习Nacos另外一个核心功能:配置中心。 一,Nacos配置中心简介 Nacos是一个易于使用的平台,用于动态服务发现和配置管理。作为配置中心,Nacos提供了以下核心功能和优势&am…

集成运算放大器的内部电路结构

原文出自微信公众号【小小的电子之路】 在集成电路问世之前,放大电路都是由晶体管、二极管、电阻、电容等分立元件组成,称为晶体管放大电路,但是复杂的计算限制了这类电路的推广。随着集成电路行业的发展,晶体管放大电路被制作在半…

Vue3 前置知识

1. Vue3 简介 2020年9月18日,Vue.js发布版3.8版本,代号:one Piece(海贼王)经历了:4800次提交、40个RFC、600次PR、300贡献者官方发版地址:Release v3.0.0 One Piecevuejs/,core截止2023年10月,最新的公开版…

Python爬虫速成之路(3):下载图片

hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:绝命Coding-CSDN博客 &a…

开源AI生成连续一致性儿童故事书; GraphRAG结合本地版Ollama;AI辅助老年人用餐;开源无代码AI工作流VectorVein

✨ 1: SEED-Story SEED-Story 是一种能生成包含一致性图像的多模态长篇故事的机器学习模型,配套数据集已开放。 SEED-Story 是一种多模态长故事生成模型,具备生成包含丰富且连贯的叙事文本和一致性高的人物和风格图像的能力。此模型基于 SEED-X 构建。…

论文阅读【时空+大模型】ST-LLM(MDM2024)

论文阅读【时空大模型】ST-LLM(MDM2024) 论文链接:Spatial-Temporal Large Language Model for Traffic Prediction 代码仓库:https://github.com/ChenxiLiu-HNU/ST-LLM 发表于MDM2024(Mobile Data Management&#xf…

PGCCC|【PostgreSQL】PCP认证考试大纲#postgresql 认证

PostgreSQL Certified Professional PCP(中级) PCP目前在市场上非常紧缺,除了具备夯实的理论基础以外,要有很强的动手能力,获得“PCP(中心)“的学员,将能够进入企业的生产系统进行运…

c#中的特性

在C#中,特性(Attributes)是一种向程序元素(如类、方法、属性等)添加元数据的方式。特性可以用来提供关于程序元素的附加信息,这些信息可以在编译时和运行时被访问。 特性主要有以下几个用途: 提…

《C专家编程》 C++

抽象 就是观察一群数据,忽略不重要的区别,只记录关注的事务特征的关键数据项。比如有一群学生,关键数据项就是学号,身份证号,姓名等。 class student {int stu_num;int id_num;char name[10]; } 访问控制 this关键字…

DDColor - 黑白老照片一键AI上色工具,找回“失色“的记忆,老照片一键“回春” 本地一键整合包下载

DDColor 是一个由阿里达摩院研究的基于深度学习技术的图像上色模型,主要用于黑白照片的修复和上色。它能够自动将黑白或灰度图像着色,使图像更加生动逼真。 该模型采用了先进的神经网络架构和训练技术,能够识别图像中的物体和场景&#xf…

[MySQL][表的约束][二][主键][自增长][唯一键][外键]详细讲解

目录 1.主键2.自增长1.是什么?2.索引 3.唯一键4.外键1.为什么?2.是什么?3.如何理解外键约束? 5.综合案例 -- 阅读 1.主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空&a…

vscode编译环境配置-golang

1. 支持跳转 如果单测函数上方不显示run test | debug test,需要安装Code Debugger(因为以前的go Test Explorer不再被维护了) 2. 单测 指定单个用例测试 go test -v run TestXXXdlv 调试 需要安装匹配的go版本和delve版本(如…

AirSim环境配置

AirSim简介 AirSim 是一款基于游戏引擎的开源跨平台仿真器,它可以用于无人机、无人车等机器人的物理和视觉仿真。它同时支持基于 PX4 和 ArduPilot 等飞行控制器的软件在环仿真,目前还支持基于PX4的硬件在环仿真。AirSim 是作为虚幻游戏引擎的插件而存在的,适配基于虚幻引擎…

负载均衡-轮询-两种简易实现

1、描述 下游可用的服务器目前有5个(node),设计一个方法,方法没有任何参数,采用轮询的方式返回其中一个node; 2、使用环形链表 每次取下一个node即可。注意:需要保证线程安全! // …

子数组问题

目录 最大子数组和 环形子数组的最大和 乘积最大子数组 乘数为正数的最长子数组长度 等差数列划分 最长湍流子数组 单词拆分 环绕字符串中唯一的子字符串 声明:接下来主要使用动态规划来解决问题!!! 最大子数组和 题目 …

C 语言指针进阶

1.0 指针的定义 指针是内存中一个最小单元的编号(内存单元的编号称之为地址【地址就是指针指针就是地址】)指针通常是用来存放内存地址的一个变量。本质上指针就是地址:口语上说的指针起始是指针变量,指针变量就是一个变量&#…

ROS2从入门到精通5-1:详解代价地图与costmap插件编写(以距离场ESDF为例)

目录 0 专栏介绍1 代价地图介绍1.1 基本概念1.2 代价定义 2 代价地图配置2.1 通用配置2.2 障碍层配置2.3 静态层配置2.4 膨胀层配置 3 代价地图插件案例3.1 构造地图插件类3.2 注册并导出插件3.3 编译与使用插件 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握RO…

GIT使用_提交IDEA代码到GIT分支上

以下是本人常用的GIT提交与上传代码,请选择适配自己的方式,仅供参考。 第一步,一般来说,我们从GIT上拉下来项目分支代码后,做些修改什么的,相关的代码都会变色。当然我们提交的部分就是我们修改的部分。有的…

算法思想总结:字符串

一、最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …