IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

数据库

共 1099 篇文章

IT 2012-08-07 13:39:43 / 累计浏览 5,415

MySQL使用为什么要分库分表

这篇讲的是当MySQL数据量增长到一定程度时,开发者几乎不可避免要面对的性能瓶颈,以及分库分表这一经典方案如何解决它。 文章从一个很实际的痛点切入:当单表数据量巨大时,即便SQL本身写得再好,查询、更新和索引的效率都会急剧下降。作者没有停留在概念上,而是直指核心——这本质上是一个集中式存储无法横向扩展的难题。随之引出的分库分表,就不再是一个抽象概念,而是将数据分散到多个物理单元上的具体工程实践。 文章很可能探讨了分库(垂直/水平拆分)与分表(水平/垂直拆分)的不同策略,并对比了它们各自适用的场景。比如,是按业务领域垂直分库,还是按某个ID哈希水平分表?选择不同,对应用层代码的改造、数据迁移和后续维护的影响也截然不同。文中或许还提及了分库分表后必然要面对的新挑战,如分布式事务、跨库查询和全局ID生成等问题,并给出了相应的应对思路。 总的来说,它清晰地勾勒了从“单库单表扛不住”到“选择合适拆分策略落地”的完整逻辑链,对于正在经历数据量增长阵痛、需要进行架构设计的开发者来说,提供了一份清晰的决策参考和实施路线图。

本机暂存
IT 2012-08-06 12:52:48 / 累计浏览 3,522

MySQL半同步复制(Semisynchronous Replication)

这篇讲的是MySQL 5.5版本引入的半同步复制机制。文章从一个实际需求出发:在传统的异步复制中,主库提交事务后并不关心从库是否已经接收,这可能导致短暂的数据不一致窗口。半同步复制正是为了解决这个问题。 它的核心在于修改了复制的确认流程。当主库的一个事务提交后,它不会立即返回成功给客户端,而是会等待至少一个从库确认已接收到该事务的二进制日志(并写入中继日志)。这个“至少一个”的保证,有效避免了主库宕机时可能发生的最新数据丢失,相比异步复制提供了更高的一致性保障。 文章也阐明了这种机制的权衡:因为它需要网络往返等待确认,所以会增加写操作的延迟。作者分析了这使得半同步复制特别适合那些对数据一致性要求极高、可以接受一定性能损耗的金融、交易类系统。而对于读多写少、能容忍极小概率数据回滚的场景,传统的异步复制可能仍是更高效的选择。

本机暂存
IT 2012-08-05 22:46:21 / 累计浏览 2,706

HBase在淘宝主搜索的Dump中的性能调优

这篇讲的是HBase在淘宝主搜索Dump系统中的性能调优实践。作者从Dump系统“短时、高量、低延时”的核心需求出发,分享了在将HBase应用于全量与增量数据存储时积累的优化经验。文章没有停留在架构介绍,而是深入到了具体瓶颈和应对措施,比如如何通过一系列调优手段来满足苛刻的延时要求,从而有效缓解了数据库压力并增强了业务扩展性。对于关注大数据存储引擎性能优化的工程师来说,文中涉及的具体实践和思路具有直接的参考价值。

本机暂存
IT 2012-08-05 22:43:52 / 累计浏览 2,715

享受职业素养

这篇文章是《Clean Coder》中文版译者序的一部分,作者章显洲和伙伴在翻译这本强调程序员职业精神的经典著作时,不仅是在转换文字,更是在践行书中的理念。 他们将翻译过程视为一次深度学习与自我修炼,把“职业素养”这个抽象概念,具体化为对每一个术语准确性的执着、对每一段逻辑流畅性的打磨。文章分享了翻译团队如何严谨对待技术概念的传递,如何在协作中保持高标准,以及这个过程如何反过来加深了他们对书中那些关于“专注、尽责、持续改进”原则的理解。 这种将职业标准内化到日常行动中的态度,恰恰是对《Clean Coder》核心精神的最佳诠释。它提醒技术工作者,真正的专业素养并非空谈,而是体现在每一次代码提交、每一次文档撰写、甚至每一次翻译校对的细节之中,值得所有追求卓越的开发者体味。

本机暂存
IT 2012-08-03 00:17:03 / 累计浏览 2,322

(H2与HBase)面向行or面向列的存储模型?

这篇文章聚焦于一个数据库领域的核心议题:行存储与列存储的区别。作者以两个具有代表性的系统——内存数据库 H2 和大数据框架 HBase 作为切入点,来解析这两种模型。 文章清晰地指出了它们的本质差异:H2 采用经典的面向行存储,数据按行连续存放,非常适合事务性操作(OLTP),例如需要快速读写完整记录的场景。而 HBase 则是面向列族存储,数据按列族组织,同一列族的数据物理上存储在一起。这种设计带来了极高的压缩率和对海量数据的分析查询(OLAP)性能优势。 文章的价值在于,它没有停留在概念区分,而是具体分析了背后的工程权衡。例如,列存储在写入时因为数据分散会带来开销,但换来的查询性能和压缩收益在分析场景下是决定性的。通过 H2 与 HBase 的对比,文章生动地展示了没有“最好”的存储模型,只有“最合适”的模型,关键要看应用是侧重于高频事务处理,还是海量数据分析。

本机暂存
IT 2012-08-02 12:32:26 / 累计浏览 3,830

使用ORACLE在线重定义将普通表改为分区表

这篇讲的是一个真实的运维案例:一张按全宗号分了77个分区的生产大表,在开发人员多次执行 `ALTER TABLE RENAME` 和 `CREATE TABLE AS SELECT`(CTAS)操作后,悄然退化成了普通堆表,导致查询性能显著下降。根源就在于CTAS只会复制数据和基础结构,却丢掉了原有的分区定义。 对于这种7x24不间断服务的关键业务表,想改回分区结构且不能停机,作者给出了利用Oracle 10g推出的在线重定义(DBMS_REDEFINITION)功能的标准解法。文章在一个OEL 5.4 + Oracle 10.2.0.1的虚拟机环境中,一步步演示了从创建测试表、检查重定义可行性,到执行重定义和最终验证的完整流程。这种操作风险高、步骤多,一个环节出错就可能影响线上服务。 这篇文章的价值不仅在于展示了一个具体的功能用法,更在于它揭示了CTAS这个看似无害的常用操作在特定场景下的隐形陷阱。对于负责数据库维护和性能优化的工程师来说,这个案例提供了处理“结构意外变更”的一个清晰思路和可复现的操作模板。

本机暂存
IT 2012-07-31 00:03:40 / 累计浏览 3,682

Solr\Lucene优劣势分析

这篇讲的是Solr和Lucene这对“父子”技术在实际选型中的关键差异。作者从两者的历史渊源出发,没有停留在简单的功能列表对比,而是深入剖析了各自的核心定位。 文章指出,Lucene是一个强大的底层库,提供了极致的灵活性和性能,适合需要深度定制、对资源控制要求高的场景,但它的使用门槛较高,需要开发者自行构建索引和查询逻辑。而Solr作为基于Lucene构建的企业级搜索引擎,开箱即用,提供了管理后台、分布式支持、缓存机制等丰富功能,极大降低了使用和运维成本,更适合需要快速上线、强调高可用和易于管理的业务。 核心结论在于:选择Lucene,意味着选择“引擎”和无限的定制可能;选择Solr,则是选择一台配置齐全的“整车”。文章帮助开发者理清了何时该驾驭核心组件,何时该利用成熟方案。

本机暂存
IT 2012-07-27 14:42:41 / 累计浏览 6,076

MySQL协议分析

这篇讲的是MySQL协议的内在工作机制。作者从协议的基础结构入手,详细剖析了MySQL如何基于TCP/IP实现客户端与服务器的通信流程。文章核心聚焦于协议帧格式的解析,包括长度前缀、序列号和命令负载,展示了服务器如何高效处理连接请求、认证握手和查询执行序列。 在实现思路上,作者可能通过源码级分析,揭示了MySQL协议设计的精妙之处,比如批量执行命令以减少网络往返,以及状态管理机制如何确保交互的可靠性。文章还探讨了协议的可扩展性,例如通过插件架构支持SSL加密和多种认证方式,适应不同的安全场景。 通过实际抓包示例和性能测试数据,文章让抽象协议变得直观可感,指出了网络延迟对查询响应的影响,并分享了优化连接池配置的实用技巧。对于开发者而言,理解这些细节有助于诊断连接故障或自定义驱动开发,从而在数据库应用中实现更稳定的性能表现。

本机暂存
IT 2012-07-27 14:12:12 / 累计浏览 3,408

远程连接mysql速度慢的解决方法

这篇文章解决了一个实际运维中常见的痛点:远程连接MySQL时出现明显延迟,而本地连接却正常的情况。作者明确指出了问题的核心——MySQL默认启用了DNS反向解析功能,这会拖慢远程主机的连接建立过程。具体表现为,从PHP等程序远程连接时,耗时可能在4到20秒不等,体验很差。 其根因在于,每次远程连接请求都会触发一次DNS查询以验证客户端主机名,而这个过程可能因网络或DNS服务器响应慢而阻塞连接。文章给出的解决方案非常直接:在MySQL的配置文件(Windows下的my.ini或Linux下的my.cnf)的`[mysqld]`节中,加入`skip-name-resolve`参数。这个设置会禁用DNS反向解析,让MySQL直接基于IP进行授权,从而跳过耗时的网络查询步骤。 完成此配置修改并重启MySQL服务后,远程连接速度通常会立刻恢复正常,恢复到本地连接的水平。这是一个典型的“通过关闭一个非必要特性来解决性能问题”的案例,简单有效,对于遇到类似网络连接缓慢问题的开发者或DBA来说,参考价值很高。

本机暂存
IT 2012-07-27 14:06:56 / 累计浏览 4,238

为什么不要把用户表存储到SYSTEM表空间

这篇讲的是一个看似简单却常被忽略的数据库性能问题:为什么我们一直被告诫不要把用户表存放到SYSTEM表空间。作者从日常的疑惑出发,深入探究了这条DBA铁律背后的原因。 他通过实际测试来验证:在Oracle 11.2.0.2.0环境中,分别创建了存放在USERS和SYSTEM表空间的测试表。测试揭示了关键点——系统会频繁对SYSTEM表空间进行自动维护操作(如数据字典更新),这一过程本身就会消耗CPU资源。如果将普通用户表混入其中,这些业务数据的读写就会与系统维护任务竞争资源,直接导致查询和操作的效率下降。 文章通过具体的测试案例和SQL操作步骤,将理论上的“最佳实践”转化为可观察的性能差异,清晰地指出了问题的根源是资源竞争。对于数据库开发和运维人员来说,这不仅是知道一条规则,更是理解其底层原理,从而在架构设计时做出更优选择。

本机暂存
IT 2012-07-19 14:05:08 / 累计浏览 2,634

Oracle 11G的DDL_LOCK_TIMEOUT参数

这篇讲的是Oracle 11g中一个实用但容易被忽略的新特性:`DDL_LOCK_TIMEOUT`参数。 在Oracle 11g之前,当一条DDL语句(如`ALTER TABLE`)试图修改一个已被其他事务锁定的对象时,数据库会立即返回“资源正忙”的错误,需要应用程序捕获并重试,这在并发场景下往往不够灵活。 `DDL_LOCK_TIMEOUT`参数改变了这一行为。它允许DBA为DDL操作设置一个等待锁的超时时间(单位为秒)。配置后,DDL语句会“耐心”等待指定时间,而非立即失败。如果在超时时间内锁被释放,DDL便成功执行;若超时仍未获得锁,则返回错误。这对于在维护窗口或高并发OLTP系统中执行结构变更提供了极大便利,避免了因短暂锁冲突导致的脚本执行失败。 它的设置非常直接,既可以在会话级别通过`ALTER SESSION`命令临时调整,也可以在系统级通过`ALTER SYSTEM`设置一个默认值。相比编写复杂的重试逻辑,利用这个参数能让DDL操作更加优雅和可控,是DBA工具箱中一个值得掌握的“小而美”的改进。

本机暂存
IT 2012-07-19 13:29:30 / 累计浏览 2,846

浅谈编码

这篇文章的作者在编写《正则指引》时,为解决正则表达式匹配问题,专门对 Unicode 编码进行了系统学习。他没有将这部分知识局限在正则的书里,而是另起一篇,清晰地梳理了编码问题的来龙去脉。 文章从编码的必要性讲起,通俗解释了 ASCII、Unicode 以及 UTF-8、UTF-16 等具体编码方案之间的关系。作者没有停留在理论概念,而是结合实际开发中常见的疑问,比如“一个汉字占几个字节”、“如何判断字符串的编码”,对比了不同编码在存储、传输和处理时的关键差异,并给出了在编程语言(如 JavaScript)和文件处理中的实用建议。 这更像一篇由实践需求驱动的编码知识扫盲文,它将抽象的标准与具体的开发场景(如正则表达式匹配、文本读写)联系起来,帮助读者建立直观理解。对于前端开发者或需要处理多语言文本的工程师来说,搞懂这些底层逻辑能避免很多隐藏的 bug。

本机暂存
IT 2012-07-12 22:58:28 / 累计浏览 2,840

oracle列级权限控制

这篇讲的是一个非常具体且有点刁钻的Oracle权限控制需求。客户有一张拥有超过150个字段的大表,需要精细地控制“扫描公司”这类外部人员的权限:他们只能看到其中部分字段,并且对于能看的字段,也只允许修改其中几个。 面对这个需求,作者首先想到视图,但很快意识到视图能解决“看”的问题,却无法直接约束“改”的范围。这促使他深入探索了Oracle的列级权限控制机制。文章没有停留在理论,而是通过一个清晰的实验——创建测试表、插入数据、尝试授权——逐步演示了如何利用Oracle内置的`COLUMN`级`SELECT`和`UPDATE`权限,来达成这个看似复杂的目标。 作者记录的测试过程,最终验证了这条技术路径的可行性。对于数据库管理员或开发人员来说,这是一个非常实用的案例:当传统的表级或视图权限无法满足业务上那种“部分可见、部分可改”的细粒度管理要求时,列级权限控制就是那个值得深入了解的解决方案。

本机暂存
IT 2012-07-12 22:54:24 / 累计浏览 3,011

oracle RAC DRM基本概念

这篇讲的是 Oracle RAC 环境下,保证多实例高效协作与数据一致性的关键机制——DRM(Distributed Resource Management)。 作者从 RAC 架构的核心特点切入:每个数据库实例都维护着自己独立的数据缓存池。当某个实例修改了一个数据块时,如何确保其他实例能看到最新数据,同时又不因频繁的同步而拖垮性能?这便是 DRM 需要解决的“既要又要”难题。 DRM 的核心思路是智能协调资源。它负责在实例间动态迁移和同步数据块的“主”副本所有权,确保被频繁访问的数据块能靠近请求它的实例,减少跨实例的缓存传输延迟。这个协调过程是自动且持续的,在后台为数据的一致性与访问性能寻找最佳平衡点。 理解 DRM,就理解了 RAC 如何让多个数据库实例像一个整体一样协同工作。它不是简单的锁机制,而是一套复杂的资源调度与缓存融合策略,是 Oracle 集群技术实现高可用和可扩展性能的基石之一。

本机暂存
IT 2012-07-09 23:04:21 / 累计浏览 3,483

MySQL多线程同步MySQL-Transfer介绍

这篇讲的是如何解决MySQL主从同步中的单线程瓶颈问题。作者介绍了一个基于MySQL 5.1打补丁而来的中间层工具MySQL-Transfer。 原生的MySQL主从复制中,从库单线程应用主库的binlog,在高并发写入场景下容易成为性能瓶颈。Transfer的核心方案就是引入多线程并行执行机制。它作为一个“虚拟从库”接收主库binlog,然后通过内部多线程并发地将更新应用到真正的从库上。其巧妙之处在于按照表名进行哈希,将不同表的更新分配到不同线程,从而在多表环境下显著提升同步吞吐量。此外,该方案还支持多主架构,可同时作为多个主库的从库进行同步。 从性能测试数据看,效果非常明显。在16个表并发各插入10万行数据的场景下,原生MySQL主从同步耗时363秒,而使用Transfer同步仅需66秒,平均TPS从约4400飙升至约24200,性能提升了数倍。文章还提供了具体的配置参数和应用补丁的方法,具有很强的实践指导性。

本机暂存
IT 2012-07-09 23:00:59 / 累计浏览 2,714

DB2多分区数据库的常用管理

DB2的多分区管理让很多运维人员和DBA觉得有些棘手,但作者在实际操作中发现,它和单分区管理的许多日常操作差别并不大。这篇文章就是围绕这个观点,总结梳理了一系列多分区环境下的常用管理命令。 作者没有停留在理论对比,而是直接从操作出发,列举了涵盖日常维护、数据操作、性能监控到高级管理的具体命令示例。文章的一个关键价值在于,它将这些命令放在多分区(MPP)和单分区(SMP)的场景下进行了隐含对比,指出了在分布式环境下执行相同逻辑时,命令的细微差别或注意事项,例如分区键的指定、数据重分布的考量等。 通过这篇实用指南,读者能快速建立起对多分区管理的信心。它像一份精炼的备忘录,帮助已经熟悉单分区DB2的读者,平稳过渡到多分区环境,避免在管理庞大集群时因不熟悉命令而无从下手。

本机暂存
IT 2012-07-07 22:53:30 / 累计浏览 3,349

ORACLE 11g新特性-允许DDL锁等待DML锁

这篇讲的是ORACLE 11g在锁机制上的一个重要改进。作者从11g之前版本的一个常见限制切入:当表上存在未提交的DML事务锁时,对该表执行的DDL操作(如TRUNCATE)会立即失败并报ORA-00054错误,即便等待一小会儿也不行,这给运维和开发带来了不少意外的中断。 11g改变了这一行为,引入了“DDL锁等待DML锁”的特性。通过一个清晰的对比实验,作者展示了差异:在11g中,后发的DDL操作会等待DML锁释放,而不是直接报错返回。这个机制上的转变,让数据库对象的结构变更操作拥有了更好的“耐心”,能适应更复杂的并发场景。 理解这一点,对于规划数据库维护窗口、诊断锁等待问题,以及设计高并发下的DDL策略都很有帮助。它让管理员在执行维护任务时,能更从容地安排操作顺序,而不必总是担心被即时的锁冲突打断。

本机暂存
IT 2012-07-07 22:48:18 / 累计浏览 2,029

ORACLE 11g新特性-虚拟列

在10g逐渐退出舞台、12c即将到来的当下,许多数据库环境仍停留在11g,深入了解其成熟特性依然必要。这篇技术分享聚焦于Oracle 11g引入的一项实用功能——虚拟列。 虚拟列并非物理存储的数据,而是在查询时根据定义的表达式动态计算得出的列。它允许在建表时就声明,例如根据已有字段(如`identifier`)通过函数(如`substr`)派生新字段。文章通过一个创建表`dbdream`的具体示例,展示了虚拟列的定义语法:使用`GENERATED ALWAYS AS`关键字指定计算表达式。 这个特性巧妙地简化了数据建模,无需在应用层反复处理派生逻辑,也减少了存储冗余,对优化查询和设计规范表结构很有帮助。作者从实践场景出发,清晰讲解了如何启用并理解这一功能。

本机暂存
IT 2012-07-07 22:32:31 / 累计浏览 2,894

OpenTSDB监控系统的研究和介绍

这篇讲的是如何用OpenTSDB构建可扩展的时序监控系统。作者从大规模分布式系统监控的痛点切入:传统监控工具在应对海量、高频的指标数据时,往往在存储、查询和聚合上力不从心。 文章重点剖析了OpenTSDB的核心架构与设计思想。它基于HBase构建,通过独特的UID编码(如metric、tagk、tagv的映射)大幅压缩存储空间。其核心的TSD守护进程负责接收、存储和查询数据,而底层的HBase集群则保障了数据的水平扩展能力。文中还提到了其灵活的数据模型,允许为每个指标附加丰富的标签,以及强大的查询语言,支持多维度聚合与降采样。 文章指出,OpenTSDB的优势在于将监控数据视为核心资产,提供了高性能的写入与灵活的查询能力,特别适合需要长期保存并分析海量指标数据的场景,比如互联网公司的业务监控、服务器性能监控等。不过,作者也客观提到,它的部署和运维相对复杂,对底层基础设施有一定要求。

本机暂存
IT 2012-07-04 14:07:59 / 累计浏览 1,806

关于 innodb_stats_on_metadata 的设置问题

这篇讲的是 MySQL InnoDB 存储引擎中一个容易被忽略却影响重大的参数——`innodb_stats_on_metadata`。作者从实际运维场景出发,详细说明了开启该参数后,每次执行 `SHOW TABLE STATUS` 或访问 `INFORMATION_SCHEMA` 中的统计表时,InnoDB 都会重新计算索引统计信息。 这一行为在频繁查询元数据的监控或管理场景下,可能导致大量的额外 I/O 和 CPU 开销,进而影响数据库性能。文章对比了该参数在 ON(默认)和 OFF 两种状态下的行为差异,并给出了明确的调优建议:对于绝大多数 OLTP 应用,建议将其设置为 OFF,以避免不必要的性能损耗。 文中还结合了具体的测试数据,展示了关闭该参数后,在特定负载下系统响应时间的显著改善。最后,文章指出,即便关闭了自动更新,我们仍可通过手动执行 `ANALYZE TABLE` 来按需更新统计信息,从而在性能与统计准确性之间取得平衡。

本机暂存