当前位置: 首页 > news >正文

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中,数据存储技术的选择至关重要。在众多的数据库管理系统中,MongoDB以其灵活性和强大的功能迅速崛起,成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践,助力开发者更好地利用这一数据库技术。

一、MongoDB概述

随着大数据技术的不断发展和互联网应用的不断创新,传统的关系型数据库逐渐暴露出了一些局限性,尤其是在处理海量非结构化数据、灵活扩展性和高性能需求方面。为了弥补这些不足,NoSQL数据库应运而生,其中MongoDB作为一种典型的文档型数据库,凭借其灵活性、高效性和易扩展性,迅速成为全球最受欢迎的数据库解决方案之一。

1. MongoDB的起源与发展

MongoDB最初由10gen公司(现在称为MongoDB, Inc.)于2007年推出,旨在提供一种能够处理大规模数据的数据库解决方案。与传统关系型数据库系统不同,MongoDB采用了NoSQL(Not Only SQL)数据库的架构,重点关注大规模数据的存储和检索。作为文档型数据库,它以灵活的JSON格式存储数据,而非传统的表格结构。MongoDB具有高可扩展性、灵活的数据模型以及良好的性能,迅速成为企业级应用中的热门选择。

随着NoSQL概念的普及和大数据时代的到来,MongoDB逐步发展成为支持大数据存储和高效查询的核心技术,广泛应用于互联网、金融、电商、IoT等多个领域。

2. 什么是MongoDB?

MongoDB是一个基于文档的、开源的NoSQL数据库,它使用类似JSON的BSON格式存储数据,支持高效的读写操作。它可以处理从小型应用到大规模分布式系统的各种需求。不同于传统的关系型数据库,它的存储结构不依赖于固定的模式,允许数据以灵活的文档形式存在,这样开发者可以根据需求快速调整数据结构而无需迁移数据。

MongoDB的核心特点在于:

  • 文档存储:MongoDB将数据存储为文档(Document),这些文档使用BSON(Binary JSON)格式,它扩展了JSON格式,支持更多的数据类型(如日期、二进制数据等)。每个文档都有一个唯一的 _id 字段,作为其主键。
  • 无模式设计:MongoDB不强制数据遵循固定的表结构。每个文档都可以有不同的字段,这使得它能够更灵活地处理变化的数据模型。
  • 高可扩展性:MongoDB支持水平扩展(Sharding),通过将数据分散到多个服务器节点上,能够扩展到大规模数据存储和高吞吐量的需求。
  • 强大的查询能力:MongoDB提供强大的查询语言,支持丰富的查询操作,如筛选、排序、聚合和关联查询等。
  • 内存映射存储引擎:MongoDB通过内存映射文件(Memory-Mapped Files)提高数据读写性能,适合快速的写操作和大规模的数据读取。

3. MongoDB与传统关系型数据库的对比

MongoDB的设计理念与传统的关系型数据库系统(如MySQL、PostgreSQL)有很大的不同。以下是MongoDB与关系型数据库的主要区别:

特性MongoDB关系型数据库(如MySQL)
数据模型文档型(BSON格式)表格型(行和列)
数据结构无模式设计,可灵活变化强制固定模式,数据必须符合表结构
查询方式使用MongoDB查询语言,支持灵活查询使用SQL查询语言,遵循严格的SQL标准
扩展性支持水平扩展(Sharding)通常依赖垂直扩展,扩展能力有限
事务支持从MongoDB 4.0开始支持ACID事务原生支持ACID事务
索引类型支持多种索引类型(单字段、复合、地理等)支持传统的B树索引

4. MongoDB的关键组件

MongoDB的架构包括几个关键组件,确保了其高性能、高可扩展性和高可用性。以下是MongoDB架构中的重要部分:

  • 数据库(Database) :MongoDB中的一个数据库包含多个集合。数据库是数据存储和管理的基本单元。
  • 集合(Collection) :集合是MongoDB中的数据容器,它包含多个文档。集合在功能上类似于关系型数据库中的表。集合中的文档不需要拥有相同的字段,可以非常灵活地存储不同结构的数据。
  • 文档(Document) :文档是MongoDB中的基本数据单元,采用BSON格式存储。文档包含多个键值对,结构灵活,适应快速迭代的需求。
  • 索引(Index) :MongoDB提供多种索引类型,如单字段索引、复合索引、全文索引和地理空间索引等,通过索引提高查询效率。
  • 副本集(Replica Set) :副本集是一组MongoDB实例,它们包含同样的数据,确保高可用性和容错能力。副本集中的一个节点为主节点(Primary),负责处理写操作,其他节点为从节点(Secondary),用于读取数据。
  • 分片(Sharding) :MongoDB支持水平分片,将数据分布到多个服务器上,从而实现横向扩展,提高系统的吞吐量和容量。

5. MongoDB的优势与挑战

优势:
  • 灵活的数据模型:MongoDB的文档存储形式允许数据模型的动态变化,能够适应快速变化的需求。
  • 高性能:内存映射存储引擎和高效的索引机制使得MongoDB具有较高的性能,尤其在处理大规模数据时表现突出。
  • 易于扩展:MongoDB天生支持水平扩展,能够通过分片和副本集轻松扩展到大规模分布式架构。
  • 高可用性:副本集提供数据的冗余存储,一旦主节点宕机,系统可以自动切换到从节点,保证服务的持续性。
挑战:
  • 事务管理:尽管MongoDB从4.0版本开始支持ACID事务,但与关系型数据库相比,其事务支持还不完全,尤其是在大规模分布式环境中,事务的复杂性较高。
  • 内存消耗:MongoDB使用内存映射文件技术,这意味着数据的存储和查询高度依赖系统内存。因此,在内存资源有限的环境中,可能需要精心设计存储与查询策略。
  • 聚合性能:尽管MongoDB提供了强大的聚合框架,但在处理非常复杂的查询时,它的性能可能无法与专门的分析型数据库(如Druid)相匹敌。

6. 小结

MongoDB凭借其灵活的文档存储、强大的查询功能以及水平扩展性,在大数据和互联网应用中取得了广泛的应用。尽管在事务支持和复杂聚合方面仍有待提升,但其在大多数现代应用场景中展现了巨大的优势。无论是互联网公司、电商平台,还是IoT、大数据应用,MongoDB都提供了一个高效且灵活的解决方案,帮助开发者更轻松地处理海量数据并应对快速变化的业务需求。

在后续的章节中,我们将深入探讨MongoDB的架构设计、核心特性及其在实际应用中的最佳实践,帮助大家更好地理解如何优化MongoDB性能,提升开发效率。

二、MongoDB的核心架构

MongoDB的核心架构是其能够高效处理大规模数据的关键。通过对数据的管理和存储结构的合理设计,MongoDB实现了灵活性、可扩展性和高可用性。以下是MongoDB架构中的几个重要组件及其功能:

1. 数据库和集合

在MongoDB中,数据是以数据库为单位进行组织的。每个MongoDB实例可以包含多个数据库,每个数据库又包含若干集合。

  • 数据库(Database) :一个数据库用来存储相关数据。每个数据库都有独立的权限管理和存储配置,支持不同的存储引擎。通过数据库,可以轻松组织和管理不同应用所需的数据。

  • 集合(Collection) :集合是MongoDB中的数据容器,类似于关系型数据库中的表。集合内的文档可以具有不同的结构,不需要遵循固定的模式。这种无模式的设计使得开发者能够快速迭代应用,并根据需求调整数据结构。

2. 文档与BSON

MongoDB的基本数据单位是文档,文档使用BSON(Binary JSON)格式存储。BSON是一种二进制序列化格式,除了支持JSON中的基本数据类型(如字符串、数字、布尔值等),还支持日期、正则表达式、二进制数据以及嵌套文档和数组等复合类型。

  • 文档格式:每个文档通过一组键值对配置,键为字符串,值可以是任意数据类型。这样的设计使得MongoDB不仅能够存储简单的数据,还能表示复杂的层次结构。例如,一个用户文档可能包含用户基本信息、订单历史和社交关系等多维度数据。

  • 灵活性与可扩展性:由于文档格式允许字段的动态变化,开发者可以在不影响现有数据的前提下,轻松添加或修改字段。这一点在快速变化的商业环境中尤其重要。

3. 索引机制

索引是提高MongoDB查询性能的重要手段。MongoDB支持多种类型的索引,开发者可以根据具体的查询需求选择合适的索引策略。

  • 单字段索引:最基本的索引类型,可在文档的某个特定字段上创建索引,加快对该字段的查询速度。

  • 复合索引:在多个字段上同时创建的索引,适用于那些涉及多个条件的复合查询。合理设计复合索引可以大幅提升复杂查询的性能。

  • 全文索引:支持对文本内容进行索引,适用于文字检索的场景。开发者可以使用MongoDB的全文搜索功能,快速检索包含特定词汇的文档。

  • 地理空间索引:专门用于处理地理信息数据,支持距离计算和区域搜索,非常适合与地图服务相关的应用。

4. 副本集(Replica Set)

副本集是MongoDB实现高可用性的重要机制。副本集由多个MongoDB实例组成,其中一个为主节点(Primary),其他为从节点(Secondary)。

  • 数据冗余:每个从节点都是主节点的一个完整副本,主节点处理所有写操作,从节点负责同步数据以保持一致性。如此一来,即使某一节点故障,系统仍然能够快速切换到另一节点,避免服务中断。

  • 负载均衡:通过从节点可以处理读取请求,减少主节点的负担,提高系统整体的响应能力。

  • 自动故障转移:如果主节点出现故障,副本集内其他从节点会通过选举机制选择新的主节点,自动保障系统的高可用性。

5. 分片(Sharding)

分片是MongoDB实现横向扩展能力的重要措施。通过将数据分散到多个分片中,MongoDB能够处理高流量的请求和更大的数据集。

  • 数据分布:分片通过特定的分片键来划分数据,均匀地将数据存储在不同的分片中,优化了读写性能。每个分片都是一个独立的MongoDB实例,可以在不同的服务器上运行。

  • 透明性:分片对应用程序透明,开发者可以像与单一数据库交互一样与分片数据库进行交互,而不需要关注底层的数据分布机制。

  • 动态扩展:随着数据的增长,分片可以灵活地添加新节点,增强系统的处理能力。

三、核心特性

MongoDB之所以在开发者和企业中大受欢迎,除了灵活的架构和分布式能力外,还有其丰富的核心特性,使其在面临各种应用场景时表现得游刃有余。以下是MongoDB的一些核心特性,能够显著提升开发效率和系统性能。

1. 灵活的数据模型

MongoDB的无模式设计允许开发者以文档格式存储数据,能够轻松适应变化的需求。具体体现在:

  • 动态数据结构:开发者可以根据具体需求随时添加或删除字段,无需预先定义模式。这种灵活性使得应用能够更快速地响应业务变化。

  • 嵌套文档和数组:MongoDB支持将文档嵌套在其他文档中,能够存储复杂的层次数据结构。此外,文档中的字段可以是数组,这为开发者提供了更多的灵活性,例如在用户文档中保存用户的多个地址、活动记录等。

2. 强大的查询语言

MongoDB提供丰富且强大的查询语言,支持多种查询操作,能够满足复杂的应用需求。

  • 丰富的查询功能:MongoDB支持多种查询条件,如比较操作符、逻辑操作符和正则表达式等,开发者可以灵活构建复杂的查询。

  • 聚合框架:MongoDB提供的聚合框架,让开发者能够执行复杂的数据处理和分析。通过管道(Pipeline)处理,支持数据过滤、分组、排序和转换等多种操作,强大的聚合功能特别适用于实时数据分析和报告生成。

3. 事务支持

MongoDB自4.0版本开始,支持ACID事务,为开发者提供更强的数据一致性保障。

  • 原子性:以事务的形式处理多个文档的读写操作,确保在操作中所有的更改都被视为一个整体,要么全部成功,要么全部失败。

  • 多文档事务:MongoDB允许在多个集合和文档间进行事务操作,增强了系统在复杂场景下的一致性与完整性。例如,在电商应用中,允许在处理订单、库存、用户账户等多个文档时,一次性确保所有操作的有效性。

4. 高可用性和负载均衡

MongoDB通过副本集和其他机制确保数据的高可用性和系统的负载均衡,具体体现在:

  • 故障转移机制:副本集通过主从节点模式,为系统提供冗余,确保当主节点出现故障时,其他从节点可以自动选择新的主节点,从而保证数据的可用性。

  • 负载均衡:通过将读取请求分散到多个从节点,MongoDB能有效减少主节点的负载,从而提高总体的响应速度和处理能力。

5. 强大的社区和生态系统

MongoDB拥有强大的社区支持和丰富的生态系统,为开发者提供了丰富的工具和资源。

  • 文档与支持:MongoDB提供了详尽的官方文档以及大量的社区资源,帮助开发者快速上手并解决问题。

  • 工具丰富:包括MongoDB Compass(图形界面管理工具)、MongoDB Atlas(云数据库即服务)、Mongoose(MongoDB的对象数据模型库,适合Node.js使用)等,完备的工具生态系统提升了开发效率。

MongoDB凭借其灵活的数据模型、强大的查询功能、事务支持和高可用性等核心特性,成为了现代应用中的重要数据库解决方案。无论是在快速发展的初创企业,还是在需要处理大规模数据的成熟企业中,MongoDB都展现出了强大的生命力和竞争力。接下来,将深入探讨MongoDB的性能优化策略和实际应用场景,帮助开发者更好地发挥这一数据库的优势。

四、性能优化

在MongoDB中,优化性能是确保应用能够高效、稳定地运行的关键。由于MongoDB主要用于处理海量数据,合理的性能优化策略能够显著提升数据库的响应速度、吞吐量和系统扩展性。以下是一些常见的MongoDB性能优化方法,涵盖了查询优化、存储管理、索引设计等多个方面。

1. 合理的索引设计

索引是提高查询性能的最直接手段,但过多的索引会导致写操作的性能下降。因此,优化索引设计需要平衡查询效率和写入性能。

  • 单字段索引:创建单字段索引可以大大加快单字段查询的速度。开发者应根据应用的查询需求,在常用的查询字段上创建索引。

  • 复合索引:对于复杂的查询,创建复合索引(即在多个字段上创建索引)可以显著提高查询效率。特别是在需要同时对多个字段进行过滤或排序的情况下,复合索引非常有效。

  • 避免不必要的索引:索引虽然能够加速查询,但每个索引都会增加额外的存储开销,并可能影响写入性能。因此,开发者应该定期审查索引策略,避免创建冗余的索引。

  • 覆盖索引:覆盖索引指的是索引中包含查询所需的所有字段。通过使用覆盖索引,MongoDB可以避免访问文档,直接从索引中返回查询结果,这样可以大幅提高查询性能。

2. 查询优化

  • 使用explain()命令:MongoDB提供了explain()方法,可以帮助开发者分析查询的执行计划,了解查询是否使用了索引,以及查询扫描了多少数据。通过分析执行计划,开发者可以优化查询,避免全表扫描,提高效率。

  • 限制返回结果:在查询时,使用limit()skip()限制返回结果的数量,避免一次性查询过多数据导致性能瓶颈。对于分页查询,建议使用range查询而不是skip,因为skip会影响查询的效率。

  • 避免嵌套查询:在MongoDB中,尽量避免在查询中使用深度嵌套的条件表达式,这可能导致查询的效率低下。尽量将查询条件扁平化,使用简单的字段匹配。

  • 批量操作:对于大规模的数据插入和更新,使用MongoDB的批量操作(如bulkWrite())可以显著提高性能。批量操作能减少网络传输次数和数据库操作的开销。

3. 数据模型优化

MongoDB的文档模型灵活,适应快速变化的业务需求,但不当的数据模型设计也可能影响性能。以下是一些优化数据模型的建议:

  • 避免过多的嵌套:虽然MongoDB支持嵌套文档和数组,但过多的嵌套可能导致查询效率低下,尤其是在需要更新嵌套字段时。合理拆分数据,避免过深的嵌套结构,有助于提高查询和更新性能。

  • 合理选择数据类型:MongoDB支持多种数据类型,包括字符串、数字、日期等。为了节省存储空间并提高查询效率,应根据实际需求合理选择数据类型。例如,避免使用字符串作为数值类型字段,选择合适的数字类型存储数值数据。

  • 数据去冗余:在设计文档时,应该避免数据的冗余存储,尤其是在存在大量重复数据的情况下。可以考虑使用引用方式存储相关数据,或者通过合理的嵌套存储结构减少冗余数据的存储。

4. 存储优化

  • 启用压缩:MongoDB的WiredTiger存储引擎支持数据压缩功能,使用合适的压缩算法可以减少磁盘空间的使用,尤其是在处理大量数据时。默认情况下,MongoDB使用的是snappy压缩算法,适用于大部分场景,但也可以根据需求选择zlib等压缩算法。

  • 内存优化:MongoDB使用内存映射文件进行数据存储,因此,内存是影响查询性能的重要因素。为MongoDB配置足够的内存,确保常用数据能够缓存到内存中,有助于提升查询性能。

  • 合并写入操作:在高并发场景中,频繁的写入操作可能导致I/O瓶颈。为了提高写入效率,尽量将多次写入操作合并成批量操作,并减少不必要的磁盘I/O。

5. 分片与副本集优化

  • 分片策略:选择合适的分片键对于MongoDB的性能至关重要。分片键应该具有高基数(即有足够多的不同值),以避免数据倾斜。数据倾斜会导致某些分片负载过重,影响查询性能。因此,分片键的选择需要根据数据的分布情况进行合理规划。

  • 副本集的配置与监控:副本集的高可用性和负载均衡功能非常强大,但在高并发情况下,副本集的同步延迟可能影响读取性能。通过配置合适的读写偏好策略(如优先选择从节点读取),可以减少对主节点的负载,提升整体性能。

五、应用场景

MongoDB的灵活性、高可用性和高扩展性使其在众多应用场景中得到了广泛应用。以下是MongoDB的几种典型应用场景:

1. 内容管理与发布系统

由于MongoDB支持灵活的数据模型,特别适合用于内容管理系统(CMS)和发布系统。这些系统通常处理各种类型的内容数据,如文本、图片、视频、音频等,并且这些内容往往具有变化多端的结构。MongoDB允许开发者在不事先定义数据结构的情况下存储和管理这些内容。

  • 灵活的内容结构:例如,一篇文章的内容可能包含标题、正文、标签、评论等字段,而这些字段的类型和数量可能因内容类型不同而不同。MongoDB的无模式设计能够很好地支持这些变化。

  • 支持多媒体存储:MongoDB的GridFS可以处理大文件(如图片、视频等),支持文件的存储和检索,使得CMS可以轻松地管理大规模的多媒体文件。

2. 社交网络应用

在社交网络应用中,MongoDB能够高效存储和检索复杂的用户数据,如好友关系、动态消息、评论、点赞等。MongoDB的文档存储方式能够灵活地表示用户之间复杂的社交关系和互动数据。

  • 高并发支持:社交网络应用通常面临大量用户请求,MongoDB的高并发读写支持和副本集机制能够有效分担负载,确保系统的稳定性和高可用性。

  • 实时数据处理:MongoDB适合处理实时动态数据,如即时消息、用户动态等。通过MongoDB的聚合框架,能够高效地分析和展示实时数据。

3. 物联网(IoT)数据存储与分析

随着物联网设备的普及,MongoDB成为了处理海量传感器数据的理想选择。物联网设备通常生成大量时序数据,这些数据的结构往往是半结构化的,适合使用MongoDB进行存储和处理。

  • 高吞吐量写入:MongoDB能够处理高频率的写入操作,非常适合物联网应用中需要实时记录传感器数据的场景。

  • 实时数据分析:通过MongoDB的聚合框架和实时查询能力,物联网应用可以对收集到的数据进行实时分析,获取重要的业务洞察。

4. 电商平台

电商平台需要处理大量的商品、订单、用户和支付数据,MongoDB凭借其高可扩展性和灵活的数据模型,成为电商平台的理想数据库。

  • 商品和订单管理:MongoDB的文档格式能够高效存储商品和订单的各种属性,例如价格、库存、买家信息等。

  • 灵活的数据结构:在电商平台中,商品的属性和类型各异,MongoDB允许开发者根据具体需求调整数据结构,支持不同类别商品的数据管理。

5. 大数据分析

MongoDB在大数据应用中也具有广泛的应用,特别是在需要快速检索和实时分析海量数据的场景中。结合MongoDB的聚合框架和强大的查询能力,开发者能够快速处理大量数据并获取有价值的信息。

  • 数据存储与查询:MongoDB能够高效存储大规模结构化和非结构化数据,并且可以通过强大的查询引擎和聚合框架,支持复杂的数据处理需求。

MongoDB作为一种高性能、可扩展的NoSQL数据库,在多个行业和应用场景中都得到了广泛的应用。无论是在内容管理系统、社交网络、电商平台,还是物联网、大数据分析等领域,MongoDB凭借其灵活的存储模型、高效的查询性能和强大的分布式能力,帮助企业应对大规模数据存储和高并发处理的挑战。通过合理的性能优化,开发者可以充分发挥MongoDB的优势,提升应用的响应速度和处理能力,进一步推动大数据和智能应用的发展。

六、总结

MongoDB作为一种领先的NoSQL数据库,为多变的应用需求提供了灵活性与扩展性。通过深入理解其架构、核心特性和性能优化机制,开发者可以更好地利用MongoDB构建高效、强健的应用程序。在未来,随着对大数据和实时处理需求的持续增长,MongoDB将继续扮演重要的角色,发展出新的应用模式,推动技术的进步与变革。

相关文章:

MongoDB数据库深度解析:架构、特性与应用场景

在现代应用程序开发中,数据存储技术的选择至关重要。在众多的数据库管理系统中,MongoDB以其灵活性和强大的功能迅速崛起,成为NoSQL数据库中的佼佼者。本文将深入解析MongoDB的架构、核心特性、性能优化及其在实际应用中的最佳实践&#xff0c…...

LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点

LeetCode 235. 二叉搜索树的最近公共祖先 思路: 根据二叉搜索树的特性,对 “基于二叉树的最近公共祖先 ” 进行优化,在二叉树寻找最近公共祖先时,需要分别对根节点的两个子树进行遍历来判断两个节点是异侧还是同侧。但是在二叉搜…...

GPU异步执行漏洞攻防实战:从CUDA Stream竞争到安全编程规范

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 引言 在高校实验室的GPU加速计算研究中,多卡并行编程已成为提升深度学习训练效…...

[c语言日寄]数据结构:栈

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...

day21:零基础学嵌入式之数据结构

一、双向链表(doulinklist) 1. 2.创建 struct DouLinkList *CreateDouLinkList() {struct DouLinkList *dl malloc(sizeof(struct DouLinkList));if(NULL dl){fprintf(stderr, "CreateDouLinkLis malloc");return NULL;}dl->head NUL…...

数据结构之图的应用场景及其代码

一,最小生成树 最小生成树(Minimum Spanning Tree, MST)是图论中的经典问题,旨在通过选择无向连通图中的边,使得所有节点连通且总边权最小。 1.1 普里姆(Prim)算法 普里姆算法是一种用于求解…...

python克洛伊婚纱摄影预约管理系统

目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中&#xf…...

GCC 使用说明

参数 -fPIC ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加…...

配置别名路径 @

CRA本身把webpack配置包装到了黑盒里无法直接修改,需要借助一个插件 - craco 1. 路径解析配置(Webpack)-- craco 插件 把 / 解析为 src/ 配置步骤: 1.安装 craco npm i -D craco/craco 2. 项目根目录下创建配置文件 craco.co…...

MYSQL基本命令

目录 1.登录命令2.操作数据库命令2.1查询数据库(show)2.2 创建数据库(create)2.3使用数据库(use) 3.操作表命令3.1增加表3.2查询表3.3修改表(alert)3.4 删除(delete/drop) 1.登录命令 mysql -uroot -p2.操作数据库命令 2.1查询数据库(show) show databases;2.2 创建数据库(c…...

C#语法基础

一、什么是.NET平台 .NET 是由 Microsoft 支持的免费开放源代码应用程序平台。 .NET .NET 是一个安全、可靠且高性能的应用程序平台。C# 是 .NET 的编程语言。它是强类型且类型安全的,并集成了并发和自动内存管理。 C# C# 是一种新式、安全且面向对象的编程语言&…...

深度学习框架对比---Pytorch和TensorFlow

一、计算图与执行模式 1. 图的本质:动态图 vs 静态图 PyTorch(动态图,Eager Execution) 运行机制:代码逐行执行,张量操作立即生效,计算图在运行时动态构建。x torch.tensor(1.0, requires_gra…...

antdv3 Tabs.TabPane 右上角增加一个角标Badge

1、Tabs官方说明 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、Badge角标官方效果图 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 3、Tabs.TabPane要实现的效果 4、代码 <Tabs v-m…...

Python-88:英雄升级奖励

问题描述 在一个游戏中&#xff0c;小W拥有 n 个英雄&#xff0c;每个英雄的初始能力值均为 1。她可以通过升级操作来提升英雄的能力值&#xff0c;最多可以进行 k 次升级。 每次升级操作包含以下步骤&#xff1a; 选择一个英雄选择一个正整数 x将该英雄的能力值 aiai​ 更新…...

使用uv创建python项目

uv创建项目 uv init -p 3.12 qwen3env # -p 指定python版本 # qwen3env是项目名称 # 可以使用下面的步骤 mkdir qwen3env cd qwen3env uv venv -p3.12 .venv # 基于 Python 3.12 创建名为 .venv 的虚拟环境 uv init第一种方式 第二种方式 内容如下 执行python脚本 uv ru…...

window 显示驱动开发-命令和 DMA 缓冲区简介

命令和 DMA 缓冲区非常相似。 但是&#xff0c;命令缓冲区由用户模式显示驱动程序使用&#xff0c;DMA 缓冲区由显示微型端口驱动程序使用。 命令缓冲区具有以下特征&#xff1a; 它永远不会由 GPU 直接访问。 硬件供应商控制格式。 它从呈现应用程序的专用地址空间中的常规…...

深光-谷歌TV TADA/奈飞Netflix/亚马逊Prime Video/YouTube等测试外包服务

一、谷歌TV TADA测试服务 1.CTS CTS测试是一系列旨在确保设备与Android操作系统兼容性的自动化测试&#xff0c;CTS是所有测试项中测试量最大的一项测试。 2.GTS GTS测试是确保Android设备能够正确集成和运行Google Mobile Services&#xff08;GMS&#xff09;的关键步骤&am…...

《教育退费那些事儿:从困境到破局》

《教育退费那些事儿&#xff1a;从困境到破局》 教育退费&#xff1a;不容忽视的热点问题 在当今社会&#xff0c;教育消费已成为家庭支出的重要组成部分。无论是 K12 阶段的学科辅导、艺术特长培训&#xff0c;还是成人的职业技能提升、学历继续教育&#xff0c;家长和学生们…...

AtCoder 第405场初级竞赛 A~E题解

A Is it rated? 【题目链接】 原题链接:A - Is it rated? 【考点】 嵌套判断 【题目大意】 有两个分区,有不同的评分区间,给一个评分 r 和分区 x,判断是否在评分区间中。 【解析】 先判断在属于哪个分区,再判断是否在该分区评分区间中。 【难度】 GESP一级 【…...

登录接口中图片验证码Tesseract-OCR识别Java脚本

项目上移植了研发部的产品&#xff0c;文档不全&#xff0c;项目上验证码功能无法关闭&#xff0c;又要做接口/性能测试&#xff0c;开发不配合&#xff08;作为测试多么无奈&#xff09;&#xff0c;此方法识别命中率不高&#xff0c;仅作借鉴。 版本JDK11 import io.restass…...

专项智能练习(定义判断)_DA_02

2. 单选题 虚假同感偏差也叫虚假一致性偏差&#xff0c;是指人们常常会高估或夸大自己的信念、判断及行为的普遍性。在认知他人时总喜欢把自己的特性赋予他人身上&#xff0c;假定他人与自己是相同的&#xff0c;而当遇到与此相冲突的信息时&#xff0c;会坚信自己信念和判断的…...

安卓A15系统实现修改锁屏界面默认壁纸功能

最近遇到一个A15系统项目&#xff0c;客户要求修改锁屏界面的默认壁纸&#xff0c;客户提供了一张壁纸图片&#xff0c;但是从A15系统的源代码查看时才知道谷歌已经去掉了相关的代码&#xff0c;已经不支持了&#xff0c;A13和A14系统好像是支持的&#xff0c;A15系统的Wallpap…...

Linux之Yum源与Nginx服务篇

1.Yum源知识理论总结概括 Yum源概述 Yum 源 即软件仓库的标识&#xff0c;里面承载着软件包集合 Yum源组成 包含模块 【OS】、【everything】、【EPOL】、【debuginfo】、【source】、【update-source】 【os】:简称operator system 它内部包含操作系统的核心组件&#x…...

帧差法识别

定义&#xff1a; 视频通过闪过x帧画面来实现&#xff0c;帧差法就是利用两帧之间的差异找出。也就是移动目标识别 帧差法识别步骤&#xff1a; 1、灰度处理&#xff1a;将多通道变成双通道压缩图像数据。 cvtColor(before_frame,before_gray,CV_RGB2GRAY);cvtColor(after_f…...

游戏引擎学习第282天:Z轴移动与摄像机运动

运行游戏&#xff0c;展示目前进展 我们目前正在进行一个游戏开发项目。昨天&#xff0c;我们实现了基于房间的角色移动系统&#xff0c;并且加入了摄像机的跟随滚动功能。这是我们首次进入“游戏逻辑设计”阶段&#xff0c;也就是说&#xff0c;我们开始构建游戏本身的行为和…...

解决:npm install报错,reason: certificate has expired

目录 1. 问题分析2. 问题解决2.1 查看配置的镜像2.2 修改镜像源 种一棵树最好的时间是10年前&#xff0c;其次就是现在&#xff0c;加油&#xff01; --by蜡笔小柯南 1. 问题分析 启动前…...

C++ 基础知识点

1、指针和引用的区别 指针&#xff1a;是一个变量&#xff0c;存储的是另一个变量的内存地址&#xff0c;可以被重新赋值指向不同的对象&#xff0c;允许为 nullptr。 指针的特性&#xff1a; 独立变量&#xff0c;存储内存地址 可重新赋值指向其他对象 支持空值&#xff08;n…...

线代第二章矩阵第九、十节:初等变换、矩阵的标准形、阶梯形与行最简阶梯形、初等矩阵

文章目录 初等变换初等行变换初等列变换 矩阵的标准型阶梯形与行最简阶梯形阶梯型矩阵行简化阶梯形 初等矩阵定义性质初等矩阵和初等变换的联系 本节非常重要 初等变换 初等变换使用"→"&#xff0c;而不是"" 初等行变换 ① 交换两行 ② 非0数乘以某一…...

新能源汽车制动系统建模全解析——从理论到工程应用

《纯电动轻卡制动系统建模全解析&#xff1a;车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象&#xff0c;系统解析制动系统建模核心参数优化方法&#xff0c;涵盖&#xff1a; 车速-阻力曲线拟合&#xff08;MATLAB实现与模型验证&…...

初始化一个Springboot项目

初始化一个Springboot项目 文章目录 初始化一个Springboot项目1、新建项目2、配置yml3、自定义异常4、通用相应类5、全局跨域配置6、总结 1、新建项目 首先&#xff0c;我们需要创建一个新的 Spring Boot 项目。这里我们使用 IntelliJ IDEA 作为开发工具&#xff0c;它提供了方…...

Springboot考研信息平台

Springboot考研信息平台 文章目录 Springboot考研信息平台1、技术栈2、项目说明3、项目截图4、核心代码4.1、前端核心代码4.2、后端核心代码 1、技术栈 前端 Vue 是一套用于构建用户界面的渐进式 JavaScript 框架。 Vue 作为前端核心框架&#xff0c;提供了响应式的数据绑定和高…...

Spring 框架 JDBC 模板技术详解

一、JDBC 模板技术概述 在传统 JDBC 开发中&#xff0c;开发人员需要手动处理数据库连接&#xff08;Connection&#xff09;、事务管理、语句执行&#xff08;Statement&#xff09;和结果集&#xff08;ResultSet&#xff09;等繁琐操作&#xff0c;不仅代码冗余度高&#x…...

Console Importer浏览器插件的编译 及 制作成.crx浏览器插件的步骤

近日由于下载Console Importer浏览器插件(一个前端调试窗口方便引下第三方库便于学习测试的插件)找不到资源&#xff0c;于是找到该插件的源码&#xff0c;地址&#xff1a;https://github.com/pd4d10/console-importer&#xff09;&#xff0c;发现该插件基于一款名为“Plasmo…...

ArcGIS切片方案记录bundle文件

文章目录 前言一、导入底图二、生成切片方案三、导出切片方案总结 前言 切片的作用是让前端可以访问地图的Mapsever来加载底图。arcgis切片是测绘人员或者WebGIs人员需要认识到的操作。 一、导入底图 首先10.8的ArcGis&#xff0c;这里没有Pro&#xff0c;Pro其实也是一样的操…...

山东大学计算机图形学期末复习6——CG10下

##CG10下 将世界坐标中的任意点 P P P 变换到以相机为中心的“观察坐标系”下&#xff08;右手坐标系&#xff09; n \mathbf{n} n&#xff1a;从相机眼睛朝向观察点的反方向&#xff0c;代表“前方”&#xff1b; u \mathbf{u} u&#xff1a;观察坐标系的 x 轴&#xff0c;向…...

【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable

一、场景重现 最近在公司进行微服务架构升级&#xff0c;将原有的 Spring Cloud Hoxton 版本升级到最新的 2021.x 版本&#xff0c;同时使用 Nacos 作为服务注册中心和配置中心。在完成基础框架搭建后&#xff0c;我使用 Spring Cloud Gateway 作为API 网关&#xff0c;通过 N…...

[Linux]从零开始的STM32MP157 Busybox根文件系统测试及打包

一、前言 在上一篇教程中&#xff0c;我们成功编译了Busybox根文件系统并且能够正常使用&#xff0c;但是大家应该也发现了我们构建的根文件系统存在许多问题&#xff0c;比如一些找不到文件的报错。并且在实际的产品中一般都是将根文件系统烧录到EMMC中&#xff0c;并不是像我…...

【Pandas】pandas DataFrame eval

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

考研408《计算机组成原理》复习笔记,第二章(2)数值数据的表示和运算(浮点数篇)

一、回顾定点数知识点 ——定点小数机器码表示 ——定点整数机器码表示 ——【原码】和【移码】的作用 二、浮点数表示 1、概念引入 我们生活中有很多 “带小数”&#xff0c;也就是浮点数&#xff0c;也就是【整数部分】和【纯小数部分】都不为0&#xff0c;那么这样的小数…...

【虚幻引擎】UE5独立游戏开发全流程(商业级架构)

本套课程我将会讲解一下知识 1.虚幻引擎的常用功能节点、模块包含但不限于动画模块、UI模块、AI模块、碰撞模块、伤害模块、背包模块、准心模块、武器模块、可拾取物品模块、死亡等模块。 2.整个游戏的设计思路&#xff08;游戏架构&#xff09;&#xff0c;本套教程讲解了如…...

大语言模型 08 - 从0开始训练GPT 0.25B参数量 - MiniMind 单机多卡 torchrun deepspeed

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…...

使用gitbook 工具编写接口文档或博客

步骤一&#xff1a;在项目目录中初始化一个 GitBook 项目 mkdir mybook && cd mybook git init npm init -y步骤二&#xff1a;添加书籍结构&#xff08;如 book.json, README.md&#xff09; echo "# 我的书" > README.md echo "{}" > bo…...

Mysql视图详解

文章目录 1、视图简介 && 前置准备2、基本crud语法3、检查选项&#xff08;with check option&#xff09;CASCADEDLOCAL总结 4、视图更新限定条件 1、视图简介 && 前置准备 视图 (View) 是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;…...

leetcode 56. 合并区间

题目描述 代码&#xff1a; class Solution {struct Interval{int left;int right;Interval(int l0,int r0):left(l),right(r){}bool operator<(const Interval& rhs) const{return left<rhs.left;}};public:vector<vector<int>> merge(vector<vecto…...

Mac 环境下 JDK 版本切换全指南

概要 在 macOS 上安装了多个 JDK 后&#xff0c;可以通过系统自带的 /usr/libexec/java_home 工具来查询并切换不同版本的 Java。只需在终端中执行 /usr/libexec/java_home -V 列出所有已安装的 JDK&#xff0c;然后将你想使用的版本路径赋值给环境变量 JAVA_HOME&#xff0c;…...

【生活相关-日语-日本-东京-搬家后-引越(ひっこし)(3)-踩坑点:国民健康保险】

【生活相关-日语-日本-东京-搬家后-引越&#xff08;ひっこし&#xff09;&#xff08;3&#xff09;-注意点&#xff1a;国民健康保险】 1、前言2、情况说明&#xff08;1&#xff09;问题说明&#xff08;2&#xff09;情况说明&#xff08;1&#xff09;收到情况&#xff08…...

C++ asio网络编程(6)利用C11模拟伪闭包实现连接的安全回收

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、智能指针管理Session二、用智能指针来实现Server的函数1.start_accept()1.引用计数注意点2.std::bind 与异步回调函数的执行顺序分析 2.handle_accept1.异步…...

【视频】解决FFmpeg将RTSP转RTMP流时,出现的卡死、出错等问题

1、简述 如果不修改图像内容,可以使用FFmpeg命令来将RTSP转RTMP流。 SRS视频服务器就是这么干的,它没有使用FFmpeg接口,而是直接使用FFmpeg命令来转流。 但是在使用中,约到了一些问题,比如转流时卡死、转流出错等等,下面描述怎么解决这些问题 2、出错重启 在shell脚本…...

飞牛NAS本地部署开源TTS文本转语音工具EasyVoice与远程使用流程

文章目录 前言1. 环境准备2. Docker部署与运行3. 简单使用测试4. 安装内网穿透4.1 开启ssh连接安装cpolar4.2 创建公网地址 5. 配置固定公网地址总结 前言 本文主要介绍如何在fnOS飞牛云NAS使用Docker本地部署一款非常好用的开源TTS文本转语音工具EasyVoice&#xff0c;并结合…...

​​STC51系列单片机引脚分类与功能速查表(以STC89C52为例)​

​​1. 基本I/O端口​​ ​​端口​​​​引脚范围​​​​类型​​​​主要功能​​​​特殊说明​​​​P0​​P0.0~P0.7​​开漏双向I/O​​1. 通用I/O&#xff08;需外接上拉电阻&#xff09; 2. 数据总线&#xff08;D0-D7&#xff09; 3. 低8位地址总线&#xff08;A0-A…...