- 博客(766)
- 资源 (15)
- 收藏
- 关注
原创 在线事务型的业务、实时分析类业务、离线处理类型的业务
一个成熟的系统架构往往需要同时支持这三种业务类型,它们相辅相成,共同支撑起复杂的业务需求。例如,一个电商平台需要OLTP处理下单支付,需要实时分析监控大屏和风险,需要离线处理生成销售报表和训练推荐模型。
2025-07-25 21:44:22
912
原创 数据库垂直拆分和水平拆分
特性垂直拆分 (Vertical Sharding)水平拆分 (Horizontal Sharding)拆分依据列 (Column) / 业务功能 (Business Function)行 (Row) / 数据记录 (Data Record)目标减少单表宽度、分散热点、业务解耦、优化资源解决海量数据存储、分散读写负载 (TPS/QPS)、并行处理影响范围表结构改变 / 数据库实例分离表结构不变,数据分布到多个相同结构的表/实例优点提升热点查询性能、业务清晰、资源隔离、易于优化大字段。
2025-07-24 22:48:39
845
原创 python中延迟加载结果集与完全加载结果集
摘要:本文介绍了两种数据库结果集处理方式。延迟加载包括游标(Cursor)和SQLAlchemy的延迟加载,特点是内存效率高但依赖活跃连接/会话,适合大结果集。完全加载(fetchall)则一次性将结果存入内存,连接独立但消耗较大内存,适合小结果集。最佳实践建议根据数据量选择:小结果集用完全加载,大结果集用游标处理,注意保持连接/会话开放,关系数据可用ORM但需避免N+1查询问题,推荐使用上下文管理器管理连接。
2025-07-05 22:30:00
313
原创 python 上下文管理器传递参数的方法
上下文管理器接收和传递参数的常见方法:1) 通过构造函数传递参数,如FileManager类;2) 使用contextlib.contextmanager装饰器,如database_connection函数;3) 在上下文管理器内部保存状态并返回实例,如QueryManager类;4) 嵌套上下文管理器传递参数,如ResourceManager的嵌套使用。这些方法展示了上下文管理器如何灵活地接收参数并在上下文内外传递数据。
2025-07-05 17:02:53
145
原创 python中上下文管理器 与 try finally有什么区别
Python中上下文管理器与try-finally的主要区别:上下文管理器使用with语句更简洁(如自动关闭文件),专为资源管理设计,代码复用性好;try-finally则提供更灵活的异常控制,适合复杂清理逻辑。前者适用于标准资源管理场景,后者用于需要精细控制异常或旧版Python环境。两者本质都是资源管理方案,但上下文管理器封装更优雅。
2025-07-05 16:58:12
321
原创 python中执行前置操作,后置操作的几种方法
Python提供了多种简化前置/后置操作的方法:1) 上下文管理器(最推荐),通过__enter__和__exit__实现资源管理;2) 装饰器,在函数执行前后添加额外操作;3) contextlib模块,用生成器简化上下文管理器创建;4) atexit模块,注册程序退出时执行的函数;5) try-finally语句,确保代码块执行后必执行清理操作。这些方法都能优雅地处理资源管理和前后置操作,其中上下文管理器最符合Python的设计理念。
2025-07-05 16:53:23
190
原创 golang 中当 JSON 数据缺少结构体(struct)中定义的某些字段,会有异常吗
情况结果风险JSON 缺少字段目标字段赋零值逻辑错误JSON 包含额外字段自动忽略(不报错)无JSON 字段类型不匹配解析错误(Unmarshal报错)需处理错误通过合理设计结构体和添加验证逻辑,可安全处理 JSON 字段缺失的情况。
2025-07-04 21:24:37
891
原创 dial tcp 10.1.68.88:3306: connect: cannot assign requested address
优先检查连接池:确保代码中复用数据库连接(80%问题根源)。验证网络连通性:telnet 10.1.68.88 3306 # 测试端口ping 10.1.68.88 # 测试基础连通性监控端口使用:ss -s | grep "TCP:" # 查看总TCP连接数netstat -ant | grep :3306 # 查看目标连接状态检查系统日志:dmesg | grep "TCP" # 查看内核级网络错误关键建议。
2025-07-02 21:09:08
534
原创 依赖注入(Dependency Injection, DI)的核心概念和解决的核心问题
如果多个类都需要同一个依赖项(比如一个数据库连接池或日志服务),并且各自负责创建它,会导致创建逻辑重复,难以统一管理和配置。当依赖关系变得复杂(如依赖依赖的依赖)时,手动管理对象的创建顺序、作用域(单例、请求作用域等)和销毁变得异常繁琐且容易出错。如上所述,紧耦合使得单元测试(孤立地测试一个单元)变得非常困难。使用容器后,创建对象的复杂性(对象图的构建)就完全交给了容器管理。一个),而是由外部(“注入器”)把依赖的东西“喂”给它。在实际的大型项目中,手动管理所有的依赖注入(像上面。里那样)会变得非常繁琐。
2025-06-28 16:04:51
840
原创 Go语言中nil判断的注意事项
场景注意事项接口变量接口包含nil指针时!nil(因类型非空)可nil的类型仅限指针、切片、映射、通道、函数、接口不可nil类型结构体、基本类型等与nil比较会导致编译错误nil值的行为nil切片/映射/通道有特殊行为(如append可用,写操作 panic 或阻塞)反射判断用IsNil()而非IsZero(),并确保类型支持函数返回接口避免返回具体类型的nil指针,应直接返回nil正确理解这些细节可避免常见的nil判断陷阱(尤其是接口相关的错误)。
2025-06-25 22:50:42
834
原创 import cycle not allowed---go语言中循环依赖问题
方法适用场景优点缺点合并包高耦合逻辑结构简单包可能变得臃肿接口解耦包间需要互相调用符合 SOLID 原则需设计接口提取公共包共享数据结构/工具代码复用可能过度抽象函数参数传递临时依赖灵活轻量不适合复杂场景依赖注入(DI)大型项目动态管理依赖,易于测试引入额外复杂度关键原则依赖方向单一化:确保包依赖是单向的(如 A→B→C,避免 A→B 且 B→A)面向接口编程:通过接口隐藏实现细节,减少直接依赖分层架构。
2025-06-22 14:44:01
843
原创 Go 循环依赖的依赖注入解决方案详解
/ Logger 审计日志接口// AuditService 实现审计日志// 实际审计日志实现println("审计日志: 用户", userID, "执行了", action)通过接口实现依赖反转使用 Wire 自动生成依赖装配代码保持代码的松耦合和可测试性特别适合大型项目和复杂依赖关系为常用组件定义 Provider Set使用选项模式配置服务结合工厂模式创建复杂对象这种解决方案不仅解决了循环依赖问题,还显著提高了代码质量和可维护性。
2025-06-22 14:39:22
734
原创 Wire 使用举例
/ Logger 日志接口// ConsoleLogger 控制台日志实现// FileLogger 文件日志实现// App 应用服务a.logger.Log("应用启动")// 应用逻辑...a.logger.Log("应用结束")编译时依赖注入:在编译时发现问题,而不是运行时类型安全:依赖关系由类型系统保证清晰的可视化:通过代码生成展示依赖关系易于重构:修改依赖关系后重新生成即可定义清晰的接口:使用接口解耦实现合理分组 Provider。
2025-06-22 14:26:38
424
原创 Wire--编译时依赖注入工具
/ store.go (存储层)// Provider 函数:创建消息// service.go (服务层)// Provider 函数:创建服务,依赖 Store 接口// app.go (应用层)// Provider 函数:创建应用,依赖 MessageService//go:build wireinject // 标记此文件仅由 Wire 处理// Injector 函数:声明依赖关系NewMessageApp, // 提供 MessageApp。
2025-06-21 23:45:32
973
原创 Python 中的 `lru_cache` 详解
它会自动缓存函数的计算结果,当使用相同的参数再次调用时直接返回缓存结果,避免重复计算。,清理操作只会影响调用它的特定函数实例,不会影响其他函数或模块的缓存。在 Gunicorn/Uvicorn 等多进程部署中,→ 重新输出 “小型缓存计算: 3”(缓存失效)类中的不同实例共享同一个缓存(除非使用实例方法)→ 清理操作只影响当前工作进程的缓存。→ 输出 “小型缓存计算: 3”→ 输出 “大型缓存计算: 3”模块提供的装饰器,用于实现。是 Python 标准库。(证明两个函数缓存独立)在 Python 的。
2025-06-14 14:42:52
1238
原创 精准测量 MySQL 主从复制延迟—pt-heartbeat工具工作原理
本质:通过“主库打时间戳 → 从库重放 → 本地计算时间差”实现延迟测量。优势精度高(微秒级)、可靠性强(不受主库空闲影响)、兼容任意MySQL版本。适用场景读写分离架构的延迟监控;主从切换前的数据一致性校验;复制性能瓶颈分析。📌部署建议。
2025-06-14 14:05:26
777
原创 MySQL从库复制延迟的监测
监测方法精准度部署复杂度适用场景主要缺陷⭐⭐⭐快速概览延迟趋势易受时间同步/网络中断干扰Binlog位点对比⭐⭐⭐⭐⭐判断事务堆积量无法量化延迟时间⭐⭐⭐⭐⭐⭐⭐跨版本通用,需高精度监控需维护心跳进程,污染binlogMySQL 8.0+ GTID时间戳⭐⭐⭐⭐⭐⭐⭐事务级延迟分析,复杂复制拓扑仅限MySQL 8.0+且需GTID⭐⭐⭐⭐⭐⭐⭐⭐读写分离一致性保障需业务改造传递GTID。
2025-06-14 13:22:51
934
原创 Python Wheel 打包基本原理详解
Wheel作为Python打包生态的核心组件,其设计体现了Python社区对"简单比复杂更好"哲学理念的实践,是Python软件分发现代化的基石。格式,提供更快速、可靠的安装体验。)是Python的官方二进制包格式,旨在替代传统的。验证RECORD签名。
2025-06-08 15:37:29
849
原创 Python Web项目打包(Wheel)与服务器部署全流程
通过此方案,您可以实现Python Web项目的标准化打包和可靠的生产环境部署,适用于Flask、Django、FastAPI等主流Web框架。
2025-06-08 15:27:28
530
原创 Python项目的构建和部署方案推荐
根据团队规模和项目复杂度选择合适方案,初期建议从容器化(Docker Compose)起步,逐步过渡到Kubernetes集群管理。Python项目的构建和部署有多种成熟方案,根据项目规模和需求可选择不同工具链。
2025-06-08 15:17:45
989
原创 2025年AI编程工具推荐
2025年,AI编程工具已从辅助工具升级为开发流程的核心生产力引擎。这些工具不仅能大幅提升编码效率、降低错误率,还推动了“自然语言驱动开发”的新范式。当前工具已实现“需求→代码”的转化,未来将向多模态交互(如AR可视化代码)、自主调试等方向演进。选型时需结合项目规模、技术栈及隐私要求,善用免费资源(如Trae、Windsurf)可显著降低开发成本。这类工具重新定义了集成开发环境,深度融合AI能力,支持从代码生成到调试部署的全流程。,但需注意:AI更擅长执行而非设计,系统架构与核心逻辑仍需人工把控。
2025-06-07 22:59:34
737
原创 tmux基本原理
成为系统管理员和开发者的核心生产力工具,尤其适合远程服务器管理和复杂工作流场景。,通过解耦终端显示与运行进程实现会话持久化。(Terminal Multiplexer)的核心原理基于。
2025-05-31 22:28:12
535
原创 ssh连接断开,保持任务后台执行——tmux
它能让用户在一个连接中执行多个任务,并在断开连接后保持任务后台运行,非常适合远程服务器管理或长时间运行的任务。掌握 tmux 可极大提升终端工作效率,尤其适合管理服务器或复杂工作流。)是一个强大的终端复用工具,用于在单个终端窗口中管理多个。Ctrl+b 方向键。
2025-05-31 22:25:07
444
原创 binlog 解析工具——my2sql
my2sql是一款基于 Go 语言开发的 MySQL binlog 解析工具,支持从二进制日志(binlog)中生成原始 SQL、回滚 SQL(闪回 SQL)、去除主键的 INSERT SQL 等,还能生成 DML 操作统计信息。数据快速回滚(闪回):通过逆向解析 binlog 生成反向 SQL,恢复误删除或误修改的数据。主从数据一致性修复:主从切换后新主库数据丢失时,通过 binlog 恢复数据。生成标准 SQL 与统计信息:用于审计、数据迁移,或分析高频更新表、大事务及主从延迟问题。
2025-05-25 15:43:18
1077
1
原创 binlog解析工具——binlog2sql
binlog2sql是一款开源的 Python 工具,用于解析 MySQL 的 binlog 文件,生成标准 SQL 或回滚 SQL,实现数据恢复和衍生功能。数据快速回滚(闪回):通过解析 binlog 生成反向 SQL,恢复误删除或误修改的数据。主从切换修复:当主从切换后新主库数据丢失时,通过 binlog 恢复数据一致性。生成标准 SQL:用于审计、数据迁移或分析数据库操作历史。
2025-05-25 13:05:32
1036
原创 Buffer Pool如何进行预热
在 MySQL 中,Buffer Pool 预热(Warm-Up) 是指将数据库重启后需要高频访问的数据页提前加载到内存中,以减少冷启动时因磁盘 I/O 导致的性能下降
2025-04-27 07:00:00
634
原创 Buffer Pool是什么,有什么作用
在 MySQL 的 InnoDB 存储引擎中,Buffer Pool(缓冲池) 是 内存中的核心组件,负责缓存表数据、索引和其他 InnoDB 相关的数据结构。
2025-04-26 21:58:00
682
原创 关于聚簇索引
聚簇索引(Clustered Index)是 一种将数据行物理存储顺序与索引键值逻辑顺序紧密结合的索引结构。在 MySQL 的 InnoDB 引擎中,聚簇索引直接决定了表中数据的物理排列方式,因此每个表有且只有一个聚簇索引。
2025-04-26 21:53:45
352
原创 MySQL二进制日志格式有哪几种
在 MySQL 中,二进制日志(Binary Log)的格式决定了主库如何记录数据的变更事件,并直接影响复制的行为和一致性。通过合理选择二进制日志格式,可以优化 MySQL 的复制性能和数据一致性。如果对数据一致性要求极高,建议始终使用。:记录数据行的实际变更(修改前/后的行数据),而非 SQL 语句。等),从库通过重放这些 SQL 语句实现数据同步。以下是每种格式的详细说明及其事务的事件组成。二进制日志中会记录完整的 SQL 语句。:记录实际执行的 SQL 语句(如。的行数据变更前后的值(如旧值。
2025-03-18 22:50:11
1130
原创 为什么“连接断开可能导致锁未释放”
大多数情况下:数据库会在连接断开时自动释放锁,但需依赖数据库的实现和配置。极端场景下:因网络问题、数据库检测延迟或代码缺陷,锁可能未及时释放,导致类似死锁的阻塞问题。解决方案:通过事务超时设置、完善的代码逻辑和运维监控降低风险。
2025-03-18 22:45:31
842
原创 deepseek推荐10本程序员必读书籍
以下是提升程序员技能的10本经典书籍推荐,涵盖编程思想、算法、系统设计、代码质量及职业发展等核心领域,结合多个权威来源整理而成。
2025-02-23 22:03:08
705
原创 SQL中 的exists用法
EXISTS 是 SQL 中的一个子查询条件,用于检查子查询是否返回任何行。如果子查询返回至少一行,则 EXISTS 返回 TRUE。
2025-02-08 21:45:42
704
原创 如何限制SQL的执行时间(max_execution_time)
在MySQL中,max_execution_time是一个系统变量,用于限制SQL语句的最大执行时间。当一个查询的执行时间超过这个设置的阈值时,MySQL会尝试终止并停止该查询的执行。这个功能主要用于防止某些查询因为执行时间过长而占用过多的系统资源,从而影响数据库的整体性能和响应时间。
2025-01-18 11:32:52
1041
原创 kill SQL (pt-kill工具)
pt-kill是Percona Toolkit工具集中的一个工具,用于监控MySQL查询并根据指定的条件自动终止长时间运行的查询。这个工具非常有用,特别是在需要管理和控制数据库资源使用,防止长时间运行的查询占用过多资源,影响数据库性能的情况下。
2025-01-18 11:32:32
469
原创 在MySQL 主库上进行自动清理 purged gtid 时,会等待 binlog复制到从库吗
在MySQL中,自动清理purged GTID的过程确实会考虑到binlog是否已经复制到从库。
2024-12-25 22:21:52
622
原创 errant是怎么产生的
在MySQL中,errant GTID(错误GTID)是指在从库上存在但在主库上不存在的GTID。这通常是由于在从库上执行了不应存在的事务或在主库上未能正确复制的事务所导致的。
2024-12-25 22:10:47
516
深入理解linux内核 第三版 Daniel P. Bovet &Marco Cesati 勘误
2011-03-07
sqlite嵌入式编程实例
2012-06-20
ndiswrapper 最新版本下载 ndiswrapper-1.57.tar.gz
2012-03-07
Spreadsheet-ParseXLSX-0.16.tar.gz
2014-11-26
Linux下使用USB转串口获取GPS数据
2012-03-01
Linux下sqlite3编程实例
2012-06-20
git post-update
2017-07-30
rt5370驱动
2012-03-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人