构建可扩展的数据平台(数据平台设计中的数据网格趋势)

news2024/11/25 17:23:34

添加图片注释,不超过 140 字(可选)

欢迎来到雲闪世界。在本文中,我旨在深入研究各种类型的数据平台架构,更好地了解它们的演变、优势、劣势和实际应用。重点是数据网格架构、它在现代数据堆栈 (MDS) 中的作用以及当今的数据驱动格局。

众所周知,数据平台的架构对其性能和可扩展性有深远影响。挑战通常在于选择最符合您特定业务需求的架构。

鉴于当今市场上有如此多的数据工具,人们很容易迷失方向。我时不时看到的有关这个主题的互联网文章往往具有高度推测性。关于哪些工具最好、谁引领行业以及如何做出正确选择的问题可能会让人非常沮丧。本文面向希望进一步了解数据平台设计以及在每种情况下应选择哪种平台的数据从业者。

现代数据堆栈

我在互联网上几乎每个与数据相关的网站上都听到过这个术语。每个 LinkedIn 数据组都提供了十几个关于这个主题的帖子。然而,其中大多数只涉及数据工具,并没有强调与数据平台设计过程相关的战略考虑的重要性。

那么什么是“现代数据堆栈”以及它有多现代?

本质上,它是一套旨在帮助您处理数据的工具。根据您的业务目标,这些工具可能包括托管的ETL/ELT 数据连接器、商业智能(BI) 解决方案、数据建模工具(Dataform、DBT 等),有时,重点不一定是这些工具有多现代,而是它们如何有效地满足您的需求。

当数据流经管道时,它会被处理、输入数据仓库或数据湖、进行转换和可视化。所有这些步骤都有助于决策者获取数据视图并迅速采取行动——无论是用户保留故事 [1] 还是银行系统中的欺诈检测算法。

添加图片注释,不超过 140 字(可选)

可扩展性

现代数据堆栈 (MDS) 的核心是简单性、终端用户的便利性和可扩展性。事实上,如果您的主要利益相关者不喜欢或不知道如何使用您的 BI 工具功能,那么无论您的 BI 工具功能有多强大,都没有意义。除了其他出色的功能外,它可能还具有 Git 集成和用于数据管道的强大 CI/CD [2] 功能,但最终,如果您无法将您的仪表板或报告呈现为 PDF 文档,那也没关系。数据建模很重要,我们使用 DBT 和 Dataform (GCP) 等现代工具创建数据模型。不要重复自己——尽可能使用 DRY [2] 方法。

如果以错误的方式进行数据建模,那么它就是无用的。

这些数据模型必须可重用且经过单元测试。根据 DBT

DRY 是软件开发原则,代表“不要重复自己”。遵循这一原则意味着您的目标是减少重复模式和重复代码和逻辑,转而使用模块化和可引用的代码。

DRY 方法不仅可以节省您的时间和精力,还可以增强代码的可维护性和可扩展性。也许最重要的是,掌握这一原则是让您从一名优秀的分析工程师晋升为一名真正优秀的分析工程师的关键因素。这一原则是我始终致力于实现的。它使我的代码可重用且可靠。

数据湖、数据仓库和数据网格

以我的经验来看,它从来都不是单一类型的数据平台架构。数据湖更适合具有编码技能的用户,通常是非结构化和半结构化数据处理的理想选择。图像、文本文档、语音消息等——所有内容都可以存储在数据湖中,因此可以进行处理。这使得这种架构非常有用。

在数据湖中处理大数据通常更容易,这使其成为超大数据量的最佳选择。

缺点是我们的数据用户必须能够使用流行的数据湖工具之一——Dataproc、EMR、Databricks 或 Galaxy。通常,公司很难找到具有出色 Python、SQL 和数据建模技能的优秀数据开发人员。这就是数据工程师如此受欢迎的原因

这些分布式计算工具可以很好地适应不断增长的数据工作负载,并能扩展以确保在需要时处理数据。

对于数据管道设计相当简单且数据量足够的公司来说,融合数据仓库和数据湖元素的混合架构可能是最佳选择。

它结合了每个数据平台架构的优点,在我的项目中,我最常使用它。数据分析师很高兴,因为它提供了执行交互式 SQL 查询的能力,同时保持了高度的定制灵活性,以防我的数据管道需要扩展处理资源。现代数据仓库解决方案通常支持对存储在数据湖中的数据进行交互式查询,例如通过外部表。例如,数据管道可能设计如下:

添加图片注释,不超过 140 字(可选)

这对于数据迁移也有很大帮助。事实上,任何数据模型都可以建立在数据湖之上。DBT 和 Dataform 等工具最终仍使用 ANSI-SQL 方言,迁移任务将是数据适配器中的简单更改。

数据网格平台旨在支持无缝地跨不同部门共享数据。这是正在经历合并或收购过程的公司的一个典型用例场景。事实上,假设一家公司拥有一个数据仓库,数据从数据湖中提取,并使用 DBT 进行处理以在 Looker 中可视化报告。现在假设它被一家更大的公司收购,该公司的数据堆栈主要是带有流式组件的数据湖。数据在 Airflow 管道(批处理)和实时独立数据服务(流式传输)中进行处理。

数据网格有助于整合不同的平台和数据域。

数据网格架构代表一种分散的数据管理方法,使您的公司能够自主处理数据并进行跨团队和跨领域的分析。

在数据网格设置中,每个业务部门可能拥有多种编程技能,例如 SQL 或 Python,并且具有不同的数据处理需求,从灵活的数据处理到交互式 SQL 查询。因此,每个部门都可以自由选择适合其特定需求的首选数据仓库或数据湖解决方案。尽管存在这些个人选择,但该架构有助于跨部门无缝共享数据,而无需移动数据,从而确保数据在整个组织内保持可访问和集成。

说起来容易做起来难。

我们可以看到,自 2014 年(Airflow 被引入更广泛的社区)以来,数据工程格局发生了重大变化,现在可以解决更复杂的用例和要求,包括支持多种编程语言、集成和增强的可扩展性。

这种协作的“数据网格”设置至关重要,因为它允许每个团队在同一环境中操作,同时避免中断彼此的工作流程,从而促进更加集成和高效的数据处理和分析方法。

我的研究强调了数据管道编排中几个关键趋势的重要性。这些趋势包括关注异构性、支持多种编程语言、有效利用元数据以及采用数据网格架构。拥抱这些趋势对于开发能够适应不同需求并有效扩展的数据平台至关重要。

异构性对于创建现代、强大且可扩展的数据平台至关重要。

实现数据网格架构

实现数据网格的最简单方法是遵循以下原则:

  • 使用微服务:数据网格从定义上来说就是分布式的,它不是单片的。创建专用的 API 服务/编排器非常有意义。它可以充当所有其他数据处理服务的数据中心。它们可以在需要时调用数据中心服务,反之亦然。

  • 拆分数据环境:为开发、生产和自动化测试创建单独的环境非常重要。它简化了新的数据模型和管道部署,并使我们的代码经过测试和可重复使用。

  • 始终考虑“DRY”方法:使用其他数据项目及其存储库作为包可以让生活更轻松。

  • 使用基础设施即代码:这是必须的,有助于维护我们的管道 [4]。基础设施即代码正成为一种管理数据平台资源的越来越流行的方法。在软件工程师中,这几乎是当今的标准。

请考虑以下示例以及我如何使用 Mage 编排工具实现数据网格。我创建了一项服务,负责对我拥有的其他数据项目中的所有数据管道进行数据编排。

例如,它在我的一个数据管道中实现,其中它提取了另一个包含 DBT 项目的 GitHub 存储库。然后,这个项目成为我在编排器中使用的包:

添加图片注释,不超过 140 字(可选)

然后,如果我运行我的管道,它将把该erd项目作为依赖项安装:

添加图片注释,不超过 140 字(可选)

这种方法可以帮助我在 Data Hub 项目中使用其他 DBT 项目。每次我运行数据管道执行时,它都会从包存储库中提取代码以确保所有内容都是最新的。

我们如何部署它?

好的,我们在本地运行了它,但是我们如何部署它呢?

虽然这项任务可能很复杂,但采用基础设施即代码可以显著提高代码的可扩展性和可维护性。我之前在一篇教程中介绍过这个主题

这代表了许多公司的典型数据流或数据平台设置。真正的挑战在于部署数据管道并有效管理相关资源。例如,在生产和暂存环境中部署机器学习管道需要谨慎的资源管理。

我使用 Terraform [6] 部署了我的数据中心项目。下面这个简单的命令就可以完成这项工作:

 
 

terraform init初始化 地形计划 - out =PLAN_dev 地形应用 -input= false PLAN_dev

输出将会像这样:

 
 

应用完成!资源:已添加 16 个,已更改 0 个,已销毁 0 个。 输出: load_balancer_dns_name = “http://datahub-dev-alb-123.eu-west-1.elb.amazonaws.com”

如您所见,基础设施即代码使得部署所需的资源(包括 VPC、子网、负载均衡器等)变得非常容易。

例如,我描述所需资源的 Terraform 文件夹结构如下:

 
 

. ═── PLAN_dev ═── alb.tf.tf ═── 后端.tf ═── efs .tf ═── env_vars .json ═── iam .tf ═──主要.tf ═── 提供商.tf ═── 变量.tf └── 版本.tf

我的主要 Terraform 定义文件main.tf如下所示。它创建 ECS 集群、任务定义和所有其他所需资源:

 
 

资源“aws_ecs_cluster” “aws-ecs-cluster” {"aws_ecs_cluster" "aws-ecs-cluster" { name = " ${var.app_name} - ${var.env} -cluster" 设置 { name = "containerInsights" 值 = "enabled" } tags = { Name = " ${var.app_name} -ecs" Environment = var .env } } // 要删除现有日志组,请运行 cli 命令: // aws logs delete-log-group --log-group-name app-name-production-logs resource "aws_cloudwatch_log_group" "log-group" { name = " ${var.app_name} - ${var.env} -logs" tags = { Application = var .app_name Environment = var .env } } resource "aws_ecs_task_definition" "aws-ecs-task" { family = " ${var.app_name} -task" container_definitions = <<DEFINITION [ { “名称”:“ ${var.app_name} - ${var.env} -container”, “图像”:“ ${var.docker_image} ”, “环境”:[ { “名称”:“ENV”,“值”:“dev” }, { “名称”:“MAGE_EC2_SUBNET_ID”,“值”:“ ${var.mage_ec2_subnet_id} ” } ], “命令”:[ “mage”,“start”,“datahub” ], “必需”:true, “mountPoints”:[ { “readOnly”:false, “containerPath”:“/ home / src”, “sourceVolume”:“ ${var.app_name} -fs” } ], “logConfiguration”:{ “logDriver”:“awslogs”, “options”:{ “awslogs-group”:“ ${aws_cloudwatch_log_group.log-group.id} ”, “awslogs-region”:“ ${var.aws_region} ”, “awslogs-stream-prefix”:“ ${var.app_name} - ${var.env} ” } , “portMappings”:[ { “containerPort”:6789, “hostPort”:6789 } ], “cpu”:${ var .ecs_task_cpu}, “memory”:${ var .ecs_task_memory}, “networkMode”:“awsvpc”, “ulimits”:[ { “name”:“nofile”, “softLimit”:16384, “hardLimit”:32768 } ], “healthCheck”:{ “command”:[ “CMD-SHELL”,“curl -f http://localhost:6789/api/status ||退出 1” ]、 “间隔”:30、 “超时”:5、 “重试”:3、 “startPeriod”:10 } } ] 定义 require_compatibilities = [ “FARGATE” ] network_mode = “awsvpc” 内存 = var .ecs_task_memory cpu = var .ecs_task_cpu 执行角色_arn = aws_iam_role.ecsTaskExecutionRole.arn 任务角色_arn = aws_iam_role.ecsTaskExecutionRole.arn 卷{ 名称 = “ ${var.app_name} -fs” efs_volume_configuration { file_system_id = aws_efs_file_system.file_system.id transit_encryption = “ENABLED” } } 标签 = { 名称 = “ ${var.app_name} -ecs-td” 环境 = var .env } #depends_on = [aws_lambda_function.terraform_lambda_func] } 数据 “aws_ecs_task_definition” “main” { task_definition = aws_ecs_task_definition.aws-ecs-task。家庭 } 资源“aws_ecs_service” “aws-ecs-service” { 名称 = “ ${var.app_name}- ${var.env} -ecs-service” cluster = aws_ecs_cluster.aws-ecs-cluster.id task_definition = “ ${aws_ecs_task_definition.aws-ecs-task.family} : ${max(aws_ecs_task_definition.aws-ecs-task.revision, data.aws_ecs_task_definition.main.revision)} “ launch_type = “FARGATE” scheduling_strategy = “REPLICA” desire_count = 1 force_new_deployment = true network_configuration { # subnets = aws_subnet. public .*.id subnets = var .public_subnetsassign_public_ip = true security_groups = [ aws_security_group.service_security_group.id, aws_security_group.load_balancer_security_group.id ] } load_balancer { target_group_arn = aws_lb_target_group.target_group.arn container_name = “ ${var.app_name} - ${var.env} -container” container_port = 6789 } depending_on = [aws_lb_listener.listener] } 资源“aws_security_group” “service_security_group” { # vpc_id = aws_vpc.aws-vpc.id vpc_id = var .vpc_id 入口{ from_port = 6789 to_port = 6789 协议 = “tcp” cidr_blocks = var .allowed_ips security_groups = [aws_security_group.load_balancer_security_group.id] } 出口{ from_port = 0 to_port = 0 协议 = “-1” cidr_blocks = [ “0.0.0.0/0” ] ipv6_cidr_blocks = [ "::/0" ] } tags = { 名称 = " ${var.app_name} -service-sg" 环境 = var .env } }

更多详情请点击这里 [7]。

主项目有一个基于我所有项目中使用的 ENV 环境变量的数据环境拆分。从包存储库运行 DBT 模型将如下所示:

 
 

--选择my_second_dbt_model --target {{ env_var ('ENV') }}

这才是它真正强大的地方。现在,不同部门的数据分析师和数据科学家可以无缝协作,在统一的环境中运行 SQL、Python 和 R。这种集成使他们能够将开发工作集中在一起,简化工作流程并提高生产力。

这个例子突出了不同数据域的集成。

下一步

下一步是进一步扩展这种方法,并开始将数据连接器和管道集成到一个地方。现代数据驱动的应用程序需要一个强大的事务数据库来管理当前的应用程序数据。在实现此类应用程序时,请考虑使用 OLTP 和 RDS 架构。数据网格也有助于整合这些资源。在我们的示例中,我们希望创建一个 Python 数据连接器来从 RDS 中提取数据。

数据平台生态系统中的每个组件(数据湖、数据仓库、湖屋和数据库)都具有独特的优势并服务于不同的用途,但很少是唯一的。

通常,最佳选择取决于成本效率和与开发堆栈的兼容性。

测试各种选项可以揭示数据源或项目与数据平台(无论是数据湖还是数据仓库)的集成程度。无论底层架构如何,都可以轻松使用数据网格工具管理大量数据连接器,以实现无缝数据提取。

然而,有几个考虑因素至关重要:

  • 与业务需求的契合度:评估数据工具与特定业务需求的契合度。例如,某些商业智能 (BI) 工具可能采用按用户付费的定价模式,这可能不适合与外部用户共享仪表板。

  • 功能重叠:评估工具之间的功能是否存在重叠。例如,确定您是否需要一个在其自己的 OLAP 多维数据集内执行数据建模的 BI 解决方案(而这已由您的数据仓库处理)。

  • 成本效益:如果节省成本是优先考虑的问题,那么选择由与您的开发堆栈相同的云供应商提供的数据工具可能会更有利。

  • 数据建模的重要性:高效的数据建模至关重要,因为它会影响数据处理的频率,进而影响处理成本。

数据湖和数据仓库之间的选择通常取决于用户的技能组合。数据仓库解决方案通常提供更高的交互性,适合以 SQL 为中心的产品,例如 Snowflake 或 BigQuery。相反,数据湖非常适合具有编程专业知识的用户,因此以 Python 为中心的平台(例如 Databricks、Galaxy、Dataproc 或 EMR)更适合。

结论

在数据网格时代,成功的协作对于数据领域的蓬勃发展至关重要。现代数据堆栈源自我们的数据平台架构,它在这里发挥着基础作用。简而言之,现代数据堆栈通常被描述为一组协助管理和处理数据的工具。这是您在网上许多文章中都能找到的典型解释。然而,这种说法忽视了战略的关键作用,而一个清晰的数据平台设计战略远比任何给定数据工具的单个功能更为重要。我总是通过全面的规划和设计会议来开始一个新的数据仓库项目。

正确组织数据环境还支持自动测试和持续集成 (CI) 管道,确保您的数据转换脚本根据业务需求中概述的逻辑正确执行。部署数据平台资源的方法多种多样,这些资源会将数据输入到您的数据平台中,使用元数据记录这些方法是有益的。这种方法有助于在整个项目中保持清晰度和效率。

我的经验表明,最适合您的业务目标的数据平台架构类型绝不止一种,而是三者的组合。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

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

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

相关文章

Getting an error trying to import environment OpenAI Gym

题意&#xff1a;尝试导入 OpenAI Gym 环境时遇到错误 问题背景&#xff1a; I am trying to run an OpenAI Gym environment: 我正在尝试运行一个 OpenAI Gym 环境&#xff1a; env gym.make("ALE/Breakout-v5", render_mode"rgb_array")But I get th…

数据分析-MAC 编程环境安装教程

目标 在 Mac 电脑上&#xff0c;安装以下环境&#xff1a; 1. 安装 Anaconda&#xff1a;用于管理 Python 及其依赖库的分发&#xff0c;适用于数据科学和机器学习。 2. 安装 chromedriver&#xff1a;用于 Selenium 自动化测试&#xff0c;尤其是与 Google Chrome 浏览器的…

【爬虫软件】YouTube关键词搜索采集工具

我用Python开发的油管关键词搜索批量采集软件。 软件界面&#xff1a; 采集结果demo数据&#xff1a; 演示视频: https://www.bilibili.com/video/BV1uz421m7JA 完整讲解&#xff1a; https://www.bilibili.com/read/cv34407726

Redis高级-----持久化AOF、RDB原理

目前已更新系列&#xff1a; 当前&#xff1a;Redis高级-----持久化AOF、RDB原理 Redis高级---面试总结5种数据结构的底层实现 Redis高级----主从、哨兵、分片、脑裂原理-CSDN博客 Redis高级---面试总结内存过期策略及其淘汰策略 计算机网络--面试知识总结一 计算机网络-…

3.数据结构-c/c++实现栈(详解,栈容量可以动态增长)

一.栈的基本介绍 栈是一种只能够在一端进行插入和删除的顺序表。如下图 空栈&#xff1a;表示不含任何元素的栈 栈顶&#xff1a;表示允许进行插入和删除元素的一端 栈底&#xff1a;表示不允许进行插入和删除元素的一端 即栈是一种后进先出的线性表数据结构 二.栈的常见操…

尚硅谷Vue入门视频 笔记

尚硅谷视频&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH/?spm_id_from333.999.0.0&vd_sourcecec13bbe100bddfff8baf29d18ed8994 文章目录 模板语法data与el的2种写法MVVM模型事件事件修饰符事件的基本使用 计算属性简写形式 监视属性绑定样式条件渲染列表渲…

多线程篇(可见性 原子性 有序性(可见性))(持续更新迭代)

目录 一、volatile&#xff08;关键字&#xff09;&#xff08;并发编程之美&#xff09; 1. 前言 2. synchronized与volatile关键字对比 3. 什么时候使用volatile关键字 二、volatile&#xff08;关键字&#xff09;&#xff08;深入理解JVM第三版&#xff09; 1. 前言 …

儿童护眼灯哪个牌子好?家长必看这些眼科医生推荐的台灯

如今&#xff0c;学生们经常长时间使用平板电脑、手机和电脑等电子设备&#xff0c;这些设备的屏幕会产生频闪和蓝光辐射&#xff0c;进而影响视力健康。因此&#xff0c;护眼成为了家长们普遍关心的问题。视力疲劳和眼部疾病不仅会影响个人的生活质量&#xff0c;还可能引发长…

申请超长期IP地址SSL证书

随着互联网技术的不断发展&#xff0c;信息安全成为了企业和个人关注的核心议题之一。SSL证书不仅能够加密网站的通信数据&#xff0c;保护用户隐私&#xff0c;还能增强网站的可信度&#xff0c;提升搜索引擎排名等。通常情况下&#xff0c;SSL证书是绑定到域名上的&#xff0…

09--kubernetes持久化存储和StatefulSet控制器

前言&#xff1a;本章是k8s持久化存储的详细笔记&#xff0c;由持久化引申出来的statefulset控制器和无头svc都会在本章有详细记录。 1、K8s持久化存储PV和PVC 在前面文章已经使用卷挂载的方式将pod文件持久化保存在宿主机中&#xff0c;但实际工作中pod往往会以多副本形式存…

骨传导耳机哪个牌子最好?今天安利五款好口碑骨传导耳机!

基于对运动耳机多年的使用和深入研究&#xff0c;我想传达几个朴素却重要的观点&#xff1a;购买前请三思&#xff0c;避免盲目追求潮流。虽然网络上的热门款式引人瞩目&#xff0c;但它们的热度可能转瞬即逝&#xff1b;而高价位的知名品牌耳机&#xff0c;虽然品质有保证&…

SpringBoot整合Thymleaf实现页面静态化

1. 问题需求分析 在做乐优商城时&#xff0c;页面是通过Thymeleaf模板引擎渲染后返回到客户端。当商品详情页数据渲染时&#xff0c;在后台需要大量的数据查询&#xff0c;而后渲染得到HTML页面。在用户访问量大的情况下会对数据库造成压力&#xff0c;并且请求的响应时间过长…

开放式耳机与入耳式耳机相比,有哪些优劣势?权威推荐5个实用好用品牌

​开放式耳机其实相对于入耳式耳机来说区别还是比较大的。开放式耳机现在超火&#xff0c;它们不塞进耳朵&#xff0c;这样长时间戴着耳朵也不会难受&#xff0c;还能保护耳朵卫生&#xff0c;特别受爱运动和喜欢研究耳机的朋友们欢迎。不过市面上的开放式耳机太多了&#xff0…

glsl着色器学习(三)

前面两篇文章已经创建好了顶点着色器和片段着色器并编译成功&#xff0c;下面将创建program(程序)&#xff0c;将着色器链接起来 创建Program const prg gl.createProgram(); gl.attachShader(prg, vertexShader); gl.attachShader(prg, fragmentShader); gl.linkProgram(pr…

【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器

# 创建脚本&#xff0c;可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析&#xff1a; &#xff08;1&#xff09;nginx 1、下载镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ …

LLM大模型教程:大模型技术名词和概念太多了,一手学习笔记

、、 构建AI化需要的知识体系 Semantic Kernel Semantic Kernel是Microsoft推出的一个开源框架&#xff0c;旨在帮助开发者构建和部署AI应用&#xff0c;特别是那些需要理解和生成自然语言的应用。它提供了一种结构化的方式来定义和管理技能&#xff08;Skills&#xff09;&…

【Canvas技法】五种函数化回文边纹纹饰荟萃

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五种函数化回文边纹纹饰荟萃</title><style type"text…

一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

前言 上期写了NL2SQL&#xff0c;相信看过的朋友应该都对现在大模型在数据交互办公层面的探索和发展都十分感兴趣&#xff0c;在此商业化的产品市场上也有很多&#xff0c;比如阿里云的析言GBI&#xff1a; 腾讯云的ChatBI&#xff1a; 像此类的产品可以说是最贴切业务的。 在…

C++笔记16•数据结构:关联式容器map和set•

map和set 1.关联式容器 前面介绍的的是序列式容器&#xff1a;vector、list、deque等容器。这次博客介绍STL新的容器成员&#xff0c;那就是关联式容器&#xff1b;顾名思义关联式容器就是容器存在中的数据之间存在联系&#xff08;关联&#xff09;。与序列式容器不同的是&am…

linux入门系列【1】常用命令

一、简介 linux 基本操作命令,便于我们去使用命令帮助我们去检索和排查问题 二、常用命令 1.磁盘空间排查 1.1 查看磁盘空间分布情况 du -ah .|sort -hr 在对应目录下执行则是查看对应目录的文件分布以及大小情况,一般用于查看某个文件夹目录数据情况 1.2 查看深度层级为…