【技术实践】MySQL分表分库全解析:从理论到实战
文章目录
- 【技术实践】MySQL分表分库全解析:从理论到实战
- 1. 引言
- 1.1 MySQL数据库面临的挑战
- 1.2 分表分库的概念与优势
- 2. MySQL分表分库的基本原理
- 2.1 水平分表
- 2.2 垂直分表
- 2.3 水平分库
- 2.4 分表分库的选择标准
- 3. 实现分表分库的技术方案
- 3.1 中间件解决方案
- 3.2 自定义解决方案概述
- 4. Java+MySQL分表分库案例分析
- 4.1 应用场景设定
- 4.2 方案设计
- 4.3 技术选型
- 4.4 代码实现
- 4.5 测试验证
- 5. 实战经验分享
- 5.1 常见问题及解决方案
- 5.2 性能优化技巧
- 5.3 迁移策略与注意事项
- 6. 案例总结
- 6.1 成功与不足之处
- 6.2 后续改进方向
- 7. 总结
【技术实践】MySQL分表分库全解析:从理论到实战
1. 引言
1.1 MySQL数据库面临的挑战
随着互联网应用的发展,用户量和数据量的急剧增长给数据库系统带来了前所未有的压力。MySQL作为广泛使用的开源关系数据库管理系统,在处理大规模并发访问和海量数据存储时面临以下主要挑战:
- 性能瓶颈:单台服务器的硬件资源有限,当查询请求增多或数据量增大时,单个MySQL实例可能无法满足高并发的需求。
- 扩展性问题:传统的垂直扩展(增加单机硬件配置)方式已经难以应对不断增长的数据量和访问需求。
- 可用性和可靠性:单点故障可能导致服务中断,影响用户体验和业务连续性。
- 维护成本:大数据量下的备份、恢复等操作耗时长,增加了运维负担。
1.2 分表分库的概念与优势
为了克服上述挑战,分表分库成为了提升数据库性能的有效手段之一。分表分库是指将原本存储在一个数据库中的大量数据分散到多个不同的表或数据库中,以提高系统的可扩展性、性能和可用性。
- 水平分表:按照某种规则(如用户ID取模)将表中的记录分散到多个物理表中。
- 垂直分表:根据业务模块或字段类型将一张大表拆分成多张小表,每张表存储不同的业务数据。
- 水平分库:将不同的表分散到不同的数据库实例上,减轻单个数据库的压力。
- 优势:
- 提升读写性能:通过分散数据,减少单一数据库的压力,提高查询速度。
- 改善扩展性:可以根据业务发展情况灵活地添加新的数据库或表。
- 增强可用性:通过负载均衡和冗余机制,降低单点故障的风险。
2. MySQL分表分库的基本原理
2.1 水平分表
水平分表(Horizontal Sharding)是指将一个大的数据表根据某种规则拆分成多个较小的表,每个表包含原表的一部分行数据。这种拆分方式可以有效地分散热点数据,避免单个表因为数据量过大而导致性能瓶颈。常见的分表策略包括基于用户ID的哈希值、基于时间戳等。
优点:
- 能够显著提高查询性能,尤其是针对热点数据的查询。
- 可以更好地利用多台服务器的资源,提高系统的并发处理能力。
- 便于数据的水平扩展,即可以通过增加更多的表来扩展数据存储容量。
缺点:
- 复杂查询(如JOIN操作)变得更加困难。
- 数据管理变得复杂,需要额外的逻辑来管理和维护分表规则。
示例:
假设有一个users
表,我们可以按照用户ID的哈希值进行分表,比如取模运算:
CREATE TABLE users_0 ( ... );
CREATE TABLE users_1 ( ... );
...
每个表存储一部分用户数据,具体哪个用户存储在哪张表中可以通过计算得出。
2.2 垂直分表
垂直分表(Vertical Sharding)则是指将一个表中的列根据业务逻辑的不同拆分成多个表。通常情况下,会将经常一起使用的字段放在同一个表中,而将较少使用的字段拆分到另一个表中。这种方式主要用于减少表的宽度,从而减少每次查询时需要扫描的数据量。
优点:
- 减少了表的宽度,提高了查询速度。
- 有利于优化存储空间。
缺点:
- 查询时可能需要连接(JOIN)多个表,增加了查询的复杂性。
- 如果拆分不当,可能会导致更多的JOIN操作,反而降低了性能。
示例:
假设有一个orders
表,我们可以将订单详情分离到另一个表order_details
中:
CREATE TABLE orders (id INT PRIMARY KEY, customer_id INT, order_date DATE);
CREATE TABLE order_details (order_id INT, product_id INT, quantity INT);
2.3 水平分库
水平分库(Horizontal Partitioning)是在水平分表的基础上,将不同的分表分布到不同的数据库实例上。这种方式不仅能够提高数据的读写性能,还能提高系统的容错性和可用性。
优点:
- 分散了单个数据库的压力,提高了系统的整体性能。
- 增强了系统的可用性和容错性。
缺点:
- 增加了网络开销,因为数据需要在网络上传输。
- 系统复杂度增加,需要处理跨库查询等问题。
示例:
假设我们将users
表分表后,再根据分表规则将它们分到不同的数据库实例上。
2.4 分表分库的选择标准
选择分表分库策略时,需要综合考虑以下几个因素:
- 数据访问模式:分析应用程序的查询模式,选择最合适的分片策略。
- 数据增长趋势:预测未来数据的增长情况,选择易于扩展的分片方案。
- 系统复杂度:权衡分表分库带来的性能提升与系统复杂度之间的关系。
- 运维成本:评估长期运维的成本和技术难度。
3. 实现分表分库的技术方案
3.1 中间件解决方案
中间件是连接应用程序和底层数据库的一层软件,它负责处理分表分库的逻辑,简化了开发者的编程工作。目前市面上有许多成熟的中间件解决方案:
1. MyCAT
MyCAT是一款开源的数据库中间件,支持多种分片算法,并能够实现透明的分库分表。它通过配置文件定义分片规则,可以轻松地将应用程序接入到分片后的数据库集群中。MyCAT的优点包括:
- 配置简单:通过XML文件即可定义分片规则。
- 高可用性:支持主从复制和读写分离。
- 易于集成:可以无缝对接大多数Java应用程序。
2. ShardingSphere
ShardingSphere是由Apache基金会孵化的分布式数据库中间件项目,提供了一整套包括分库分表、读写分离、弹性伸缩等功能在内的解决方案。ShardingSphere的特点如下:
- 灵活性:支持多种分片策略,包括范围分片、列表分片等。
- 动态调整:可以在运行时动态调整分片规则。
- 生态兼容:支持多种数据库引擎,易于集成到Spring Cloud等微服务框架中使用。
3.2 自定义解决方案概述
对于某些特定的应用场景,可能需要定制化的分表分库策略。这通常涉及到自行编写分片逻辑,并在应用程序中实现对分片数据库的操作。虽然这种方式灵活性更高,但也意味着更高的开发和维护成本。
自定义解决方案的关键在于:
- 分片逻辑的设计:根据业务特点合理地设计分片规则,确保数据能够均匀分布。
- 数据一致性保障:在分布式环境中确保数据的一致性和事务完整性,可能需要引入分布式事务处理机制。
- 跨库查询处理:解决因分片导致的复杂查询问题,如JOIN操作,可能需要设计特殊的查询路由逻辑或使用中间件来简化这一过程。
4. Java+MySQL分表分库案例分析
4.1 应用场景设定
假设我们正在开发一个电子商务平台,该平台具有大量的用户数据、订单数据以及其他相关的交易数据。随着业务的发展,用户数量迅速增长,单个MySQL数据库实例已经无法满足高性能和高可用性的需求。特别是在高峰时段,数据库成为了整个系统的瓶颈,导致响应延迟增加,用户体验下降。
4.2 方案设计
1. 数据模型设计
首先,我们需要确定哪些数据表需要进行分表分库。在这个场景中,主要涉及以下几个关键表:
users
:存储用户基本信息。orders
:存储订单信息。products
:存储产品信息。order_items
:存储订单中的商品详情。
由于users
表和orders
表的数据量非常大,这两个表将是分表分库的主要对象。
2. 分表策略
对于users
表,我们可以采用水平分表的方式,按照用户ID的哈希值来进行分表。假设我们将用户数据分为8个表,每个表存储一部分用户的记录。
对于orders
表,同样采用水平分表的方式,根据订单ID的哈希值进行分表,以便与用户的分表规则保持一致。
3. 分库策略
为了进一步分散负载,我们可以将不同的分表分布在不同的数据库实例上。例如,可以将前四个用户表放在一个数据库实例上,后四个用户表放在另一个数据库实例上;同理,订单表也按照这样的方式分配。
4.3 技术选型
为了简化开发工作,我们将使用Apache ShardingSphere作为中间件来实现分表分库的功能。ShardingSphere提供了丰富的API和配置选项,可以方便地集成到现有的Java应用中。
4.4 代码实现
1. Java代码示例
首先,我们需要在Java应用中配置ShardingSphere。以下是配置的一个简单示例:
@Configuration
public class ShardingConfiguration implements ShardingSphereDataSourceBean.DataSourceConfiguration {@Overridepublic DataSource createDataSource() {Properties props = new Properties();props.setProperty("sql.show", "true");ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());shardingRuleConfig.getBindingTableGroups().add("t_order_item,t_order");shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(getDefaultDatabaseShardingStrategyConfiguration());shardingRuleConfig.setDefaultTableShardingStrategyConfig(getDefaultTableShardingStrategyConfiguration());MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration("ms_0", Arrays.asList("ds_0", "ds_1"), "ds_0");shardingRuleConfig.getMasterSlaveRuleConfigs().add(masterSlaveRuleConfig);return ShardingSphereDataSourceFactory.createDataSource(getDataSourceMap(),shardingRuleConfig,props);}private TableRuleConfiguration getOrderTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration("t_order", "db_${0..1}.t_order_${0..7}");return result;}private StandardShardingStrategyConfiguration getDefaultDatabaseShardingStrategyConfiguration() {return new StandardShardingStrategyConfiguration("user_id", new ModuloDatabaseShardingAlgorithm());}private StandardShardingStrategyConfiguration getDefaultTableShardingStrategyConfiguration() {return new StandardShardingStrategyConfiguration("order_id", new ModuloTableShardingAlgorithm());}private Map<String, DataSource> getDataSourceMap() {Map<String, DataSource> result = new HashMap<>(2, 1);result.put("ds_0", getDataSource("jdbc:mysql://localhost:3306/db_0"));result.put("ds_1", getDataSource("jdbc:mysql://localhost:3306/db_1"));return result;}private DataSource getDataSource(String url) {HikariConfig config = new HikariConfig();config.setJdbcUrl(url);config.setUsername("root");config.setPassword("password");return new HikariDataSource(config);}
}
2. SQL脚本示例
接下来,我们创建数据库和表的SQL脚本:
-- 创建两个数据库
CREATE DATABASE db_0;
CREATE DATABASE db_1;-- 在每个数据库中创建8个分表
USE db_0;
CREATE TABLE t_order_0 (id INT PRIMARY KEY, order_id INT, user_id INT);
CREATE TABLE t_order_1 (id INT PRIMARY KEY, order_id INT, user_id INT);
-- 重复创建其他表...USE db_1;
CREATE TABLE t_order_0 (id INT PRIMARY KEY, order_id INT, user_id INT);
CREATE TABLE t_order_1 (id INT PRIMARY KEY, order_id INT, user_id INT);
-- 重复创建其他表...
4.5 测试验证
在完成上述配置之后,我们需要对分表分库的功能进行验证,确保数据正确地被分发到了各个分表和分库中,并且查询操作能够正常工作。
1. 功能测试
- 插入数据测试:尝试向
users
表和orders
表中插入一些测试数据,检查数据是否按照预期的分表规则被正确地分配到了相应的表中。 - 查询数据测试:执行一些简单的SELECT查询,验证数据是否能够被正确地检索出来。
2. 性能测试
- 并发测试:模拟高并发场景,观察系统的响应时间和吞吐量是否有所改善。
- 负载均衡测试:检查各个分库上的负载是否均匀分布,避免出现热点问题。
通过这些测试,我们可以验证分表分库策略的有效性,并确保应用能够在生产环境中稳定运行。
5. 实战经验分享
5.1 常见问题及解决方案
在实施分表分库的过程中,常常会遇到一些典型的问题,以下是其中的一些常见问题及其解决方案:
-
跨库JOIN查询复杂化:分表分库后,原本在一个数据库中的JOIN操作可能变成跨库操作,增加了查询的复杂度。
- 解决方案:尽量避免复杂的跨库JOIN查询,可以将频繁关联的数据存储在同一库或同一表中;对于确实需要跨库查询的情况,可以考虑使用中间件提供的分片JOIN支持功能,或设计专门的汇总表来预先聚合数据。
-
分布式事务处理:当事务涉及多个数据库时,传统的两阶段提交(2PC)可能不再适用,需要考虑分布式事务的处理方法。
- 解决方案:使用支持分布式事务的中间件,如ShardingSphere提供的XA事务支持;或者采用最终一致性的方案,通过消息队列等方式异步保证数据一致性。
-
数据迁移和同步:在分表分库实施过程中,需要将原有数据迁移到新的架构中,这涉及到数据的一致性和完整性问题。
- 解决方案:采用增量迁移策略,逐步将数据迁移到新架构中,同时使用双写机制保证数据一致性,直到完全切换。
-
索引设计:分表分库后,原有的索引可能不再适用,需要重新设计索引来优化查询性能。
- 解决方案:根据分表分库后的查询模式,重新评估索引策略,确保常用查询路径上有有效的索引。
5.2 性能优化技巧
- 合理的分片键选择:选择适当的分片键至关重要,应该选择那些查询频率高的字段作为分片键,以最大化查询的并行性。
- 缓存策略:使用缓存可以减少直接对数据库的访问次数,提高应用性能。合理的缓存策略应该考虑到缓存失效和更新机制。
- 读写分离:通过将读操作和写操作分离到不同的数据库实例上,可以有效提高系统的并发处理能力。
- 监控与调优:定期监控数据库性能指标,如查询响应时间、CPU和内存使用率等,并根据实际情况进行调优。
5.3 迁移策略与注意事项
- 迁移策略:采用增量迁移的方式,逐步将数据迁移到新的架构中。可以先迁移冷数据,然后逐渐迁移热数据,最后切换应用。
- 数据校验:在迁移过程中,需要进行数据校验,确保数据完整性和一致性。
- 双写机制:在迁移期间,可以采用双写机制,即同时向旧系统和新系统写入数据,以确保数据一致性。
- 回滚计划:制定详细的回滚计划,以防迁移失败时能够快速恢复到原有状态。
6. 案例总结
6.1 成功与不足之处
- 成功之处:通过分表分库,成功地解决了单个数据库实例性能瓶颈的问题,提升了系统的并发处理能力和可用性。
- 不足之处:分表分库增加了系统的复杂性,尤其是在处理跨库查询和分布式事务时,需要投入更多的时间和精力来维护。
6.2 后续改进方向
- 优化中间件配置:持续优化中间件的配置,提高其处理性能。
- 增强监控机制:加强系统的监控,及时发现并解决问题。
- 自动化工具开发:开发自动化工具来辅助日常运维,减少手动操作带来的风险。
- 优化数据模型:根据业务需求,进一步优化数据模型,提高查询效率。
7. 总结
1. MySQL面临的挑战与分表分库的优势
在现代互联网应用中,随着用户数量和数据量的激增,MySQL作为主流的关系型数据库管理系统面临着诸多挑战,包括性能瓶颈、扩展性限制、可用性和可靠性问题以及高昂的维护成本。为了解决这些问题,分表分库成为了一种有效的方法。通过将数据分散到不同的表或数据库中,不仅可以提升系统的读写性能,还可以改善系统的可扩展性和可用性,同时通过负载均衡和冗余机制降低单点故障的风险。
2. 分表分库的基本原理
分表分库主要包括水平分表、垂直分表和水平分库三种策略。水平分表通过将一个大表按照一定的规则拆分成多个小表,可以有效地分散热点数据;垂直分表则是根据业务逻辑的不同将表中的列拆分到多个表中,以减少表的宽度;水平分库则是在水平分表的基础上将不同的表分布在不同的数据库实例上,进一步分散负载。选择合适的分表分库策略需要考虑数据访问模式、数据增长趋势、系统复杂度以及运维成本等因素。
3. 实现分表分库的技术方案
实现分表分库可以通过使用中间件或自定义解决方案来完成。中间件如MyCAT和ShardingSphere提供了便捷的方式来实现分表分库,简化了开发者的编程工作。自定义解决方案虽然灵活性更高,但也意味着更高的开发和维护成本。无论哪种方式,都需要仔细设计分片逻辑、保障数据一致性,并处理好跨库查询的问题。
4. Java+MySQL分表分库案例分析
通过一个电子商务平台的实际案例,我们展示了如何使用ShardingSphere来实现分表分库。这个案例涵盖了从应用场景设定、方案设计、技术选型到代码实现和测试验证的全过程。通过这个案例,我们看到了如何将users
表和orders
表进行分表分库,并且通过ShardingSphere实现了对分片规则的配置。此外,还进行了功能测试和性能测试,确保了系统的稳定性和高效性。
5. 实战经验分享
在实际操作中,我们遇到了诸如跨库JOIN查询复杂化、分布式事务处理、数据迁移和同步以及索引设计等问题。针对这些问题,我们提出了相应的解决方案,例如通过中间件的支持简化跨库查询、采用分布式事务处理机制保证数据一致性、使用增量迁移策略确保数据一致性等。此外,我们还分享了一些性能优化技巧,如合理的分片键选择、缓存策略的应用、读写分离以及定期监控与调优等。
6. 案例总结
通过分表分库,我们成功地解决了单个数据库实例性能瓶颈的问题,提升了系统的并发处理能力和可用性。然而,分表分库也增加了系统的复杂性,尤其是在处理跨库查询和分布式事务时需要更多的维护工作。后续的改进方向包括优化中间件配置、增强监控机制、开发自动化工具以及优化数据模型等方面。
综上所述,分表分库是一项复杂但必要的技术,可以帮助我们在面对大规模并发访问和海量数据存储时保持系统的高性能和高可用性。通过合理的规划和实施,我们可以充分利用这项技术带来的好处,同时也要注意解决随之而来的新问题。希望本文的内容能够帮助读者更好地理解分表分库的概念,并在实践中取得成功。
相关文章:
【技术实践】MySQL分表分库全解析:从理论到实战
文章目录 【技术实践】MySQL分表分库全解析:从理论到实战1. 引言1.1 MySQL数据库面临的挑战1.2 分表分库的概念与优势 2. MySQL分表分库的基本原理2.1 水平分表2.2 垂直分表2.3 水平分库2.4 分表分库的选择标准 3. 实现分表分库的技术方案3.1 中间件解决方案3.2 自定…...

动手学深度学习(一)简介+预备知识+基础知识(上)
一、简介 1、机器学习 机器学习研究如何使用经验改善计算机系统的性能。 2、表征学习 表征学习是机器学习的一类,研究的是,如何自动学习出数据合适的表示方式,更好地由输入得到正确的输出。 3、深度学习 深度学习是具有多级表示的表征学…...

dubbo 服务消费原理分析之应用级服务发现
文章目录 前言一、MigrationRuleListener1、迁移状态模型2、Provider 端升级3、Consumer 端升级4、服务消费选址5、MigrationRuleListener.onRefer6、MigrationRuleHandler.doMigrate6、MigrationRuleHandler.refreshInvoker7、MigrationClusterInvoker.migrateToApplicationFi…...
QT如何在对话框中插入表格
在Qt中,如果你想要在对话框中插入表格,通常会使用QTableWidget或QTableView结合QStandardItemModel(对于QTableView)或直接在QTableWidget中操作。这里,我将介绍如何使用QTableWidget在对话框中插入表格,因…...

如何使用SSHFS通过SSH挂载远程文件系统?
SHFS(SSH 文件系统)是一款功能强大的工具,它允许用户通过 SSH 挂载远程文件系统,从而提供一种安全便捷的方式来访问远程文件,就像访问本地文件一样。本文将引导您完成使用 SSHFS 挂载远程文件系统的过程,为…...
SEELE 框架是
SEELE 框架是一个相对新颖的组织管理和优化框架,旨在帮助团队或企业更好地实现目标。它的核心思想是通过科学的管理方法来提升组织的执行力和决策能力。以下是对 SEELE 框架的详细讲解,包括定义、内容、实施步骤、实施策略以及推荐的实践方法和工具。 一…...
高教社杯数模竞赛特辑论文篇-2013年B题:碎纸复原模型与算法(续)(附MATLAB代码实现)
目录 4.3 三维碎纸复原模型 4.3.1 三维模型的降维 4.3.2 三维碎纸复原算法 4.3.3 模型求解 五、模型改进与推广 5.1 模型优点 5.2 模型缺点 5.3 模型改进 5.3.1 适用彩色图片的改进 5.3.2 最小干预度算法 5.4 模型推广 参考文献 代码实现 模拟退火法代码 GUI 程序代码 层次特征…...
Java操作Miscrosoft Office各类文件格式的开源免费工具库
Aspose.Words库 是一个商业Java库,还封装了常用的word、pdf、防伪码、水印等诸多功能。Apache 库需要注意的前置问题 问题1:Word的两个格式doc和docx,POI并没有提供统一的处理类。分别用 HWPFDocument 处理doc文档,用 XWPFTempl…...
Redis 缓存淘汰算法策略详解
引言 Redis 作为一款高性能的内存数据库,在处理大量数据时,由于内存有限,需要在数据达到设定的内存上限后,使用缓存淘汰策略来决定哪些数据应该被移除,以腾出空间存储新的数据。这一过程被称为缓存淘汰,通…...
Kubernetes PV生命周期的四个阶段
Kubernetes PV生命周期的四个阶段 1. Available(可用)2. Bound(已绑定)3. Released(已释放)4. Failed(失败)💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes中,PersistentVolume(PV)的生命周期主要包括以下四个阶段: 1. Available(可用) 状态:PV刚创建…...

Azure OpenAI models being unable to correctly identify model
题意:Azure OpenAI模型无法正确识别模型。 问题背景: In Azure OpenAI Studio, while I am able to deploy a GPT-4 instance, the responses are based solely on GPT-3.5 Turbo. I test the same prompts in my personal ChatGPT sub and it returns …...

项目小结二()
一.个人信息的界面 这里可以进行用户信息的修改,并渲染数据上去 二.这两天,出现的问题: 1.mybatis中 字段取别名 (还没验证,是否正确) 问题描述:由于实体类中的变量名,与数据库中…...

《论层次架构及其在软件系统中的应用》写作框架,软考高级系统架构设计师
论文真题 层次架构作为软件系统设计的一种基本模式,对于实现系统的模块化、可维护性和可扩展性具有至关重要的作用。在软件系统的构建过程中,采用层次架构不仅可以使系统结构更加清晰,还有助于提高开发效率和质量。因此,对层次架构的理解和应用是软件工程师必备的技能之一…...

校篮球联赛系统小程序的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,公告管理,基础数据管理,球队管理,球员管理,赛事信息管理,用户管理,轮播图信息 微信端账号功能包括&#…...

在 HKCR 新增项和值
HKEY_CLASSES_ROOT HKEY_CURRENT_USER\Software\Classes ∪ HKEY_LOCAL_MACHINE\Software\Classes ; 1. Win11 HKCR 根键默认是 System 所有, Win10 HKCR 根键默认是 Administrators 所有。 ; 2. 以 System、管理员 还是 普通用户 登录系统? ; 在注册表里&#x…...
Spring Boot 注解探秘:JSON 处理的魔法世界
在 Spring Boot 应用开发中,高效处理 JSON 数据同样至关重要。Spring Boot 不仅在 Bean 管理方面表现出色,提供强大的注解系统以助力开发者轻松管理 Bean 的生命周期和依赖注入,在 JSON 数据处理上也毫不逊色。本文将深入探讨 Spring Boot 中…...

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(一)
项目简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产…...

Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍
文章目录 前言一、ls二、pwd三、cd四、touch五、 mkdir六、rmdir七、rm总结 前言 Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍 一、ls 列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 -a 列出目录下的所有文件,…...
【Kubernetes】常见面试题汇总(八)
目录 22.简述 Kubernetes 中 Pod 的健康检查方式? 23.简述 Kubernetes Pod 的 LivenessProbe 探针的常见方式? 24.简述 Kubernetes Pod 的常见调度方式? 22.简述 Kubernetes 中 Pod 的健康检查方式? 对 Pod 的健康检查可以通过…...
CentOS 7系统双网卡配置动态链路聚合(bond4)
一、应用场景 在机房建设时,服务器的网卡需要配置成bond4,可以使用我下面的配置文件和脚本来进行配置,简化配置流程。 bond4,即动态链路聚合,它可以将服务器上的两个物理网卡聚合为一个,两个网口逻辑成一…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...