【数据湖架构】在 Azure Data Lake Storage (ADLS)二代上构建数据湖

news2024/11/19 15:13:55

介绍


一开始,规划数据湖似乎是一项艰巨的任务——决定如何最好地构建数据湖、选择哪种文件格式、是拥有多个数据湖还是只有一个数据湖、如何保护和管理数据湖。并非所有这些都需要在第一天回答,有些可能通过反复试验来确定。构建数据湖没有明确的指南,每个场景在摄取、处理、消费和治理方面都是独一无二的。
在之前的博客中,我介绍了数据湖和 Azure 数据湖存储 (ADLS) gen2 的重要性,但本博客旨在为即将踏上数据湖之旅的人提供指导,涵盖构建数据湖的基本概念和注意事项ADLS gen2 上的数据湖。

数据湖规划


结构、治理和安全性是关键方面,需要根据数据湖的潜在规模和复杂性进行适当的规划。考虑哪些数据将存储在湖中,它将如何到达那里,它的转换,谁将访问它,以及典型的访问模式。这将影响湖泊的结构及其组织方式。然后考虑谁需要访问哪些数据,以及如何对这些数据的消费者和生产者进行分组。从长远来看,规划如何实施和管理跨湖访问控制将是非常值得的投资。
如果您的数据湖可能从少量数据资产开始,并且只有自动化流程(例如 ETL 卸载),那么这个规划阶段可能是一项相对简单的任务。如果您的湖包含数百个数据资产并且具有自动和手动交互,那么规划肯定会花费更长的时间,并且需要来自各个数据所有者的更多协作。
到目前为止,大多数人可能都非常熟悉可怕的“数据沼泽”类比。根据蓝色花岗岩;“努力工作、治理和组织”是避免这种情况的关键。当然,可能不可能在一开始就计划好每一种可能性,但打下坚实的基础将增加数据湖持续成功的机会和长期的商业价值。
随着数据湖的规模(数据资产数量)和复杂性(用户或部门数量)的增加,强大的数据目录系统也变得越来越重要。该目录将确保可以为处理、消费和管理湖泊的人员找到、标记和分类数据。这个重要的概念将在另一个博客中更详细地介绍。

数据湖结构——区域


这一定是数据湖社区中最常争论的话题,简单的答案是每个数据湖都没有单一的蓝图——每个组织都有自己独特的一组需求。一种简单的方法可能是从几个通用区域(或层)开始,然后随着更复杂的用例的出现而有机地构建。下面概述的区域通常被称为不同的事物,但从概念上讲,它们具有相同的目的——在数据流经湖时区分数据的不同状态或特征,通常在业务价值和访问该数据的消费者方面。


原始区(Raw zone)

1c4c4dc14b1950a37ad60b51274ffa46.png

使用基于水的类比,将这一层视为一个水库,它以自然原始状态存储数据——未经过滤和未经净化。您可以选择以原始格式(例如 json 或 csv)存储它,但在某些情况下,将其存储为压缩格式的列更有意义,例如 avro、parquet 或 Databricks Delta Lake。这些数据始终是不可变的——它应该被锁定并允许对任何消费者(自动或人工)只读。可以使用每个源系统的文件夹来组织区域,每个摄取进程仅对其关联的文件夹具有写访问权。
由于这一层通常存储的数据量最大,因此可以考虑使用生命周期管理来降低长期存储成本。在撰写本文时,ADLS gen2 支持以编程方式或通过生命周期管理策略将数据移动到酷访问层。该策略定义了一组每天运行一次的规则,可以分配给帐户、文件系统或文件夹级别。尽管操作会产生费用,但该功能是免费的。

净化区(Cleansed zone)

3b55f41bc8042d80281a5c1dbe2b4132.png

下一层可以被认为是一个过滤区,它可以去除杂质,但也可能涉及富集。
在这一层中发现的典型活动是模式和数据类型定义,删除不必要的列,以及清洁规则的应用,无论是验证、标准化还是协调。丰富过程还可以组合数据集以进一步提高洞察力的价值。
这个区域的组织通常更多是业务驱动而不是源系统——通常这可能是每个部门或项目的文件夹。有些人可能还认为这是一个暂存区,通常由针对它运行的自动化作业许可。如果数据分析师或科学家需要访问这种形式的数据,他们可以被授予只读访问权限。

策展区(Curated zone)

c151bacba0e7730055a34e6edc33d261.png

这是消费层,它针对分析而不是数据摄取或数据处理进行了优化。如本博客所述,它可以将数据存储在非规范化数据集市或星型模式中。维度建模最好使用 Spark 或数据工厂等工具完成,而不是在数据库引擎内部完成。如果您希望使湖泊成为唯一的事实来源,那么这将成为一个关键点。如果维度建模是在湖之外(即在数据仓库中)完成的,那么您可能希望将模型发布回湖中以保持一致性。不管怎样,请注意;不要指望这一层会取代数据仓库。通常,性能不足以用于响应式仪表板或最终用户/消费者交互式分析。它最适合希望运行大规模即席查询、分析或高级分析但没有严格的时间敏感报告需求的内部分析师或数据科学家。由于与数据仓库相比,湖中的存储成本通常较低,因此将细粒度的低级别数据保留在湖中并仅在仓库中存储聚合数据可能更具成本效益。这些聚合可以由 Spark 或数据工厂生成,并在加载数据仓库之前持久化到湖中。
该区域中的数据资产通常受到高度管理且有据可查。权限通常由部门或职能分配,并由消费者组或数据集市组织。

实验室区(Laboratory zone)

6a925453870b10a736843f4cacb6eeed.png

这是发生探索和实验的层。在这里,数据科学家、工程师和分析师可以自由地进行原型设计和创新,将他们自己的数据集与生产数据集混合在一起。这类似于在初始价值评估期间有用的自助服务分析 (BI) 的概念。此区域不能替代开发或测试数据湖,在典型的软件开发生命周期之后,更严格的开发活动仍然需要它。
每个湖用户、团队或项目都将通过文件夹拥有自己的实验室区域,他们可以在其中对新的见解或分析进行原型设计,然后通过自动化工作将它们正式化和生产化。此区域中的权限通常是每个用户、团队或项目的读写权限。
为了在一张图中可视化端到端的数据流、所涉及的角色、工具和概念,以下内容可能会有所帮助……

数据湖中的概念、工具和角色

05c4e19ee04d4c36e7019c3b5e077bbb.png

Concepts, tools, & personas in the Data Lake

之前没有提到敏感区域,因为它可能不适用于每个组织,因此它是灰色的,但值得注意的是,这可能是一个访问受限的单独区域(或文件夹)。
科学家在原始区域中显示为灰色的原因是,并非所有数据科学家都希望使用原始数据,因为它需要大量数据准备才能用于机器学习模型。同样,分析师通常不需要访问已清理的层,但每种情况都是独特的,并且可能会发生。

文件夹结构/层次结构


适当的文件夹层次结构将尽可能简单,但不会更简单。文件夹结构应具有:

  • 一种人类可读、可理解、一致、自记录的命名约定

  • 足够细化的权限,但不会产生额外开销和管理的深度。

  • 分区策略可以优化访问模式和适当的文件大小。特别是在精选区域中,根据最佳检索计划结构,但要谨慎选择具有高基数的分区键,这会导致过度分区,进而导致文件大小不理想。

  • 每个文件夹都有相同schema 和相同格式/类型的文件

虽然许多使用基于时间的分区有许多选项可以提供更有效的访问路径。您可能希望考虑的其他一些选项是主题领域、部门/业务单位、下游应用程序/用途、保留政策或新鲜度或敏感性。


原始区域可以由源系统组织,然后是实体。这是一个示例文件夹结构,最适合文件夹安全性:

\Raw\DataSource\Entity\YYYY\MM\DD\File.extension


通常,每个源系统都将在 DataSource 文件夹级别被授予写入权限,并指定默认 ACL(请参阅下面有关 ACL 的部分)。这将确保在创建新的每日文件夹和文件时继承权限。相反,以下结构对于文件夹安全性可能会变得乏味,因为需要为每个新的每日文件夹授予写入权限:

\Raw\YYYY\MM\DD\DataSource\Entity\File.extension


原始层中的敏感子区域可以由顶级文件夹分隔。这将允许使用基于前缀匹配的规则定义单独的生命周期管理策略。例如:

\Raw\General\DataSource\Entity\YYYY\MM\DD\File.extension
\Raw\Sensitive\DataSource\Entity\YYYY\MM\DD\File.extension

在这个规划阶段,一定要保持开放的心态。文件夹或区域不需要总是驻留在同一个物理数据湖中——它们也可以表现为单独的文件系统或不同的存储帐户,即使在不同的订阅中也是如此。特别是如果您可能在单个区域中有巨大的吞吐量要求,可能超过每秒 20,000 的请求率,那么不同订阅中的多个物理湖(存储帐户)将是一个明智的想法。请参阅标题为“有多少数据湖/存储帐户/文件系统?”的部分更多细节。

我需要多少数据湖、存储帐户和文件系统?


一个常见的设计考虑是是否拥有单个或多个数据湖、存储帐户和文件系统。数据湖本身可以被认为是一个单一的逻辑实体,但它可能由不同区域的不同订阅中的多个存储帐户组成,具有集中式或分散式管理和治理。无论物理实施如何,使用单一存储技术的好处是能够通过多种访问数据的方式在整个组织内实现标准化。虽然 ADLS gen2 仍然是一项完全托管的 PaaS 服务,并且在您开始存储和访问数据之前,拥有多个存储帐户或文件系统不会产生任何金钱成本。Azure 中的每个资源都存在与管理和运营相关的开销,以确保适当地维护预配、安全性和治理(包括备份和 DR)。是否创建一个或多个帐户的问题没有明确的答案,它需要根据您的独特情况进行思考和计划。一些最重要的考虑因素可能是:

  • 规划大型企业工作负载可能需要大量的吞吐量和资源。考虑到各种订阅和服务配额可能会影响您将湖物理拆分为多个订阅和/或存储帐户的决定。有关更多信息,请参阅附录。

  • 区域与全球湖泊。湖上全球分布的消费者或进程可能对地理距离引起的延迟很敏感,因此需要数据驻留在本地。监管限制或数据主权通常会阻止数据离开特定区域。这些只是一个物理湖泊可能不适合全球运营的几个原因。

  • 全球企业可能有多个区域性湖泊,但需要获得其运营的全球视野。一个集中的湖可能会收集和存储区域聚合数据,以便运行企业范围的分析和预测。

  • 计费和组织原因。由于计费或分散管理的原因,某些部门或子公司可能需要自己的数据湖。

  • 环境隔离和可预测性。尽管 ADLS gen2 提供了出色的吞吐量,但仍有一些限制需要考虑。例如,人们可能希望将实验室区域中运行的活动与对策展区域的潜在影响隔离开来,该区域通常保存用于关键决策的具有更大商业价值的数据。

  • 存储帐户级别的特性和功能。如果您想使用生命周期管理或防火墙规则等选项,请考虑是否需要在区域或数据湖级别应用这些选项。

虽然拥有多个存储帐户可能有很多充分的理由,但应注意不要创建额外的孤岛,从而阻碍数据的可访问性和探索。注意避免由于整个组织缺乏可见性或知识共享而导致重复的数据项目。更有理由确保有一个集中的数据目录和项目跟踪工具。幸运的是,只要适当授予权限,ADF 和 Databricks (Spark) 等数据处理工具和技术就可以轻松地跨多个湖与数据交互。有关从 Databricks 用户和进程保护 ADLS 的不同方法的信息,请参阅以下指南。

HNS、RBAC 和 ACL


应该重申的是,ADLS gen2 不是一个单独的服务(就像 gen1 一样),而是一个启用了分层命名空间 (HNS) 的普通 v2 存储帐户。之后无法将标准 v2 存储帐户迁移到 ADLS gen2 — 必须在创建帐户时启用 HNS。如果没有 HNS,控制访问的唯一机制是容器级别的基于角色的访问 (RBAC),对于某些人来说,这不能提供足够精细的访问控制。对于 HNS,RBAC 通常用于存储帐户管理员,而访问控制列表 (ACL) 指定谁可以访问数据,而不是存储帐户级别设置。RBAC 权限的评估优先级高于 ACL,因此如果同一用户同时拥有这两种权限,则不会评估 ACL。如果这一切听起来有点令人困惑,我强烈建议您了解文档中涵盖的 ADLS 的 RBAC 和 ACL 模型。另一个不错的起点是 Blue Granite 的博客。

管理访问


如上所述,对数据的访问是使用 ACL 在适当的文件夹和文件级别使用执行、读取和写入访问权限的组合来实现的。Execute 仅在文件夹的上下文中使用,并且可以被认为是对该文件夹的搜索或列表权限。
最简单的入门方法是使用 Azure 存储资源管理器。导航到文件夹并选择管理访问权限。但是,在生产场景中,始终建议通过版本控制的脚本来管理权限。有关一些示例,请参见此处。
重要的是要了解,为了在一定深度访问(读取或写入)文件夹或文件,必须将执行权限分配给每个父文件夹,一直到文档中所述的根级别。换句话说,用户(在 AAD 直通的情况下)或服务主体 (SP) 将需要对指向该文件的文件夹层次结构中的每个文件夹的执行权限。


拒绝将 ACL 分配给个人或服务主体


使用 ADLS 时,可以通过 ACL 在目录和文件级别管理权限,但根据最佳实践,这些权限应分配给组而不是单个用户或服务主体。这有两个主要原因; i.) 如果有 1000 个文件,更改 ACL 可能需要时间来传播,并且 ii.) 每个文件或文件夹限制为 32 个 ACL 条目。这是一个基于 Unix 的一般限制,如果超出此限制,您将收到内部服务器错误,而不是明显的错误消息。请注意,每个 ACL 已经以四个标准条目(拥有用户、拥有组、掩码和其他)开始,因此您只剩下 28 个剩余条目可供您访问,如果您使用组,这应该绰绰有余......

“具有大量 ACL 条目的 ACL 往往变得更加难以管理。多个 ACL 条目通常表明应用程序设计不佳。在大多数此类情况下,更好地利用组而不是臃肿的 ACL 更有意义。”


同样重要的是权限继承的工作方式:


“......一个项目的权限存储在项目本身。换句话说,如果在创建子项之后设置权限,则无法从父项继承该项的权限。只有在创建子项之前对父项设置了默认权限时,才会继承权限。”


换句话说,默认权限应用于新的子文件夹和文件,因此如果需要将一组新权限递归地应用于现有文件,则需要编写脚本。有关 PowerShell 中的示例,请参见此处。
建议很明确 - 从长远来看,预先计划和分配 ACL 到组可以节省时间和痛苦。随着权限的发展,用户和服务主体可以在未来有效地从组中添加和删除。如果出于某种原因您决定不顾一切将服务主体直接添加到 ACL,那么请务必使用服务主体 ID 的对象 ID (OID),而不是已注册 App ID 的 OID,如中所述常见问题解答。您可能希望考虑编写各种报告来监控和管理 ACL 分配,并将这些报告与存储分析日志交叉引用。

文件格式和文件大小


随着数据湖随着时间的推移而发展,Parquet 已成为湖中数据存储格式的最流行选择。根据场景或区域,它可能不是唯一选择的格式——事实上,Lake 的优点之一是能够以多种格式存储数据,尽管最好(不是必需的)坚持特定格式每个区域更多地从该区域的消费者的一致性的角度来看。
选择最合适的格式通常需要在存储成本、性能以及用于处理和使用湖中数据的工具之间进行权衡。工作负载的类型也可能影响决策,例如实时/流式传输、仅附加或 DML 繁重。
如前所述,由于读取/列表操作的增加,大量小文件 (kbs) 通常会导致性能欠佳,并可能导致更高的成本。


Azure Data Lake Storage Gen2 经过优化,可以更好地处理较大的文件。分析作业将以更低的成本运行得更快。


由于更短的计算(Spark 或数据工厂)时间以及优化的读取操作,成本得以降低。例如,大小大于 4 MB 的文件会导致每读取超过前 4 MB 的 4 MB 数据块的价格较低。例如,读取 16 MB 的单个文件比读取 4 个每个 4 MB 的文件便宜。在此处阅读有关 Data Lake gen2 存储成本的更多信息,特别是请参阅页面底部的常见问题解答部分。
使用 Spark 处理数据时,典型的指导是大约 64MB — 每个文件 1GB。在 Spark 社区中众所周知,数千个小文件(大小为 kb)是性能的噩梦。在原始区域中,这可能是一个挑战,特别是对于通常具有较小文件/消息的高速流数据。文件需要定期压缩/合并,或者对于那些使用 Databricks Delta Lake 格式的文件,使用 OPTIMIZE 甚至 AUTO OPTIMIZE 可以提供帮助。如果流通过事件中心路由,则捕获功能可用于根据时间或大小触发器将数据保留在 Avro 文件中。其他技术可能是将原始数据存储为压缩格式的列,例如 Parquet 或 Avro。
在非原始区域中,读取优化的柱状格式(例如 Parquet 和 Databricks Delta Lake 格式)是不错的选择。特别是在策划区域分析性能变得至关重要,谓词下推/文件跳过和列修剪的优势可以节省时间和成本。由于湖技术中缺乏类似 RDBMS 的索引,大数据优化是通过知道“不看哪里”来实现的。但是,如上所述,请注意过度分区,不要选择具有高基数的分区键。可以在此处和此处的博客中找到各种格式的比较。

总之,随着更大的数据量和更高的数据速度,文件格式将在摄取和分析性能中发挥关键作用。在更容易堆积较小文件的原始区域中,尤其是在物联网规模场景中,压缩将是另一个重要的考虑因素。将文件保留为 json 或 csv 等原始格式可能会导致性能或成本开销。以下是在原始层中面临这些挑战时需要考虑的一些选项:

  • 考虑批量写入文件并使用具有良好压缩比的格式,如 Parquet,或使用写入优化的格式,如 Avro。

  • 在 raw 和 cleaned 之间引入一个中间数据湖区域/层,它定期从 raw 中获取未压缩和/或小文件,并将它们压缩成这个新层中更大的压缩文件。如果需要提取或分析原始数据,这些过程可以针对此中间层而不是原始层更有效地运行。

  • 使用生命周期管理归档原始数据以降低长期存储成本,而无需删除数据。

结论


没有一种万能的方法来设计和构建数据湖。有些人可能会通过利用更具成本效益的存储和数据处理技术(例如 ETL 卸载)来快速启动他们的数据湖。其他人可能希望花时间考虑他们自己的需求,包括当前和未来的摄取和消费模式、所涉及的角色、他们的安全和治理要求。为避免随着数据湖足迹的扩大而出现无法控制的混乱,后者需要在某个时候发生,但不应通过“分析瘫痪”无限期地阻碍进展。数据湖可以通过数据的民主化促进更加以数据为中心、数据驱动的文化,但这应该是一个组织范围的承诺,而不仅仅是一个 IT 驱动的项目,以实现长期成功。
祝您在数据湖之旅中一切顺利,并希望在下面的评论部分听到您的反馈和想法。虽然我已尽一切努力确保所提供的信息在撰写本文时是真实和准确的,但我的经验和研究是有限的,而且不断发展的技术和云服务会随着时间而改变。

附录 — ADLS gen2 注意事项


虽然配额和限制将是一个重要的考虑因素,但其中一些不是固定的,Azure 存储产品团队将始终尽可能满足您对规模和吞吐量的要求。在撰写本文时,这里是已发布的配额和需要考虑的项目:

  • 所有区域为 5 PiB。这些是默认限制,通常可以通过支持票提高。

  • 每个存储帐户每秒的最大请求速率为 20,000。

  • 入口速率 25 Gbps。

  • 每个订阅 250 个存储帐户。

  • 每个文件或文件夹的最大访问权限和默认 ACL 32。这是一个硬限制,因此 ACL 应该分配给组而不是单个用户。

  • 在此处查看其他限制。请注意,一些默认(最大)限制或配额可能会通过支持请求增加。

  • 支持 ADLS gen2 的 Azure 服务。

  • 支持的 Blob 存储功能。

  • 其他重要考虑因素。

请注意,限制、配额和功能在不断发展,因此建议您继续检查文档以获取更新。

本文 :https://architect.pub/building-your-data-lake-azure-data-lake-storage-gen2
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
414bfa9d96d232030944695ca09c92ae.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

00a2f82d32e48660f8c1e9e120869abd.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

628b80089e353a4a7279af58905d5ace.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

dda233007b1f77e835f7940faeaa20eb.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

f1fbde57e541c6b71c4d09993ee65ac1.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

140f407f00fd94ab1a3bc84fbdf54530.jpeg

抖音【cea_cio】超级架构师

44774375bc68d00f6765d0d5296caf04.jpeg

快手【cea_cio_cto】超级架构师

453d9f047396dc486ac0d1fa1574c7a1.jpeg

小红书【cea_csa_cto】超级架构师

4e0c1a61ff7805cb4f208b2fbb79f045.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

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

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

相关文章

【C++】一文带你吃透C++多态

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 C/C专栏 🌙那些看似波澜不惊的日复一日,…

【链表part02】| 24.两两交换链表中的节点、19.删除链表的倒数第N个节点、02.07.链表相交、142.环形链表

目录 ✿LeetCode24.两两交换链表中的节点❀ ✿LeetCode19.删除链表的倒数第N个节点❀ ✿LeetCode面试题 02.07. 链表相交❀ ✿LeetCode142.环形链表||❀ ✿LeetCode24.两两交换链表中的节点❀ 链接:24.两两交换链表中的节点 给你一个链表,两两交换其…

轻骑逐单于,大雪满弓刀:华为分布式存储的一骑绝尘

唐代诗人卢纶,有一首脍炙人口的《和张仆射塞下曲》,“月黑雁飞高,单于夜遁逃。欲将轻骑逐,大雪满弓刀。”诗中的慷慨激昂,热血炙烈,千年来让无数国人心魂激荡。 时代变迁,岁月迁移,今…

LeetCode面向运气之Javascript—第20题-有效的括号-95.97%

LeetCode第20题-有效的括号 题目要求 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号…

卑微小测试的一天----自动生成正交法测试用例

前言 工作过程中,我们接触到需求后第一要务是 熟悉需求并且输出测试用例,针对接口测试的入参测试,需要校验大量入参的组合场景,这时我们通常采用正交法来设计测试用例,在减少测试用例的数量时,同时保障测试…

Java 命名规范

包命名规范 包(Package) 的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包名使用小写英文字母进行命名,并使用 “.” 进…

LeetCode——半有序排列

一、题目 2717. 半有序排列 - 力扣(Leetcode) 给你一个下标从 0 开始、长度为 n 的整数排列 nums 。 如果排列的第一个数字等于 1 且最后一个数字等于 n ,则称其为 半有序排列 。你可以执行多次下述操作,直到将 nums 变成一个 …

LeetCode_前缀树_困难_212.单词搜索 II

目录 1.题目2.思路3.代码实现(Java) 1.题目 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。单词必须按照字母顺序,通过相邻的单元格内的字母构成&#xf…

网络安全学术顶会——SP 2023 议题清单、摘要与总结(中)

注:本文由ChatGPT与Claude联合生成 51、Effective ReDoS Detection by Principled Vulnerability Modeling and Exploit Generation 正则表达式拒绝服务攻击(ReDoS)是一种算法复杂度攻击。对于易受攻击的正则表达式,攻击者可以精心…

kotlin学习(一)基本概念、数据对象类型、控制流程、空值检验、类与接口

文章目录 认识Kotlin跨平台特性语言类型java的语言类型kotlin的运行原理 hello world 基本概念程序入口数据与对象类型 和 显式数字转换浮点类型位运算AnyUnitNothing 声明变量只读变量 val与可变变量var查看Kotlin字节码 fun(方法 / 函数)函数参数默认值…

MindMapper 思维导图 21.x

MindMapper 可视化绘图软件是任何想要快速组织思想和想法的人的必备工具。MindMapper 具有易于使用的界面,可以轻松创建可用于头脑风暴、决策制定和项目管理的综合思维导图。MindMapper 还是一个非常强大的生产力工具,因为它允许用户跟踪他们在项目和任务…

Linux GCC,GDB,Shell脚本的简单使用

这里写目录标题 GCC命令GDB命令Shell脚本 GCC命令 GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器 编译一个简单的.c程序: 四步分开写: gcc -E -o hello.i hello.c // 预处理 gcc -S -o he…

49、基于51单片机无刷电机调速系统设计(程序+原理图+PCB图+英文文献+参考论文+开题报告+元器件清单等)

摘 要 由于电机的发展,电动机由之前的带有刷子变换为无刷子直流电动机,其内部结构是电子换向器,而不是传统的机械式换向器,电动机的组成为永磁材料制造的转子和带有线圈绕组的定子组成。 所以本论文思路在全面分析无刷直流电机…

Tuleap ,一个用于软件项目管理的平台

Eclipse 基金会使用 Tuleap 取代了 Bugzilla,Tuleap 是一个独特的开源项目管理工具,目前发展势头很好,现在,每个月它会出一个大版本。它还被列在2015 年五大开源项目管理工具和 2016 年十一个名列前茅项目管理工具中。 Manuel Vacelet 是开发…

【MySQL】一文带你了解MySQL的基础知识

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指…

【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【实战篇】

文章目录 1、docker 安装jdk2、docker 安装mysql通过Docker命令进入Mysql容器内部初始化数据sqlDbx连接查看 3、docker build构建后端镜像修改配置数据库JDBC链接IP为虚拟机服务器IPmaven clean package打包后端jar并上传到服务器编写Dockfilebuild 构建查看构建的后端镜像app …

51单片机读取DS18B20温度传感器

1.首先我们知道DS18B20是单总线协议,只有一根数据线。所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平。有了这些概念,我们就能进行下一步。 图一&…

1738_创建自己的simulink模块库

全部学习汇总: GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

随着网络犯罪策略的转变,暗网威胁瞄准能源行业

根据 Searchlight Cyber 的一份报告,能源行业越来越多地通过暗网上的活动成为恶意行为者和威胁组织的目标。 该报告详细介绍了威胁行为者出售全球能源组织初始访问权的众多实例。 其中包括美国、加拿大、英国、法国、意大利和印度尼西亚的流行暗网论坛&#xff08…

使用AIGC工具巧用Linux系统

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…