[转载自]http://blog.chinaunix.net/uid-7374279-id-3874363.html
关于分库分表,要关心硬件,业务,分布式,和数据库选型.
基本指标:库物理文件大小<100G
表<100
字段<200
单表记录数<500W
可以用说用到MySQL的地方,只要数据量一大, 马上就会遇到一个问题,要分库分表.
这里引用一个问题为什么要分库分表呢?MySQL处理不了大的表吗?
其实是可以处理的大表的.我所经历的项目中单表物理上文件大小在80G多,单表记录数在5亿以上,而且这个表
属于一个非常核用的表:朋友关系表.
但这种方式可以说不是一个最佳方式. 因为面临文件系统如Ext3文件系统对大于大文件处理上也有许多问题.
这个层面可以用xfs文件系统进行替换.但MySQL单表太大后有一个问题是不好解决: 表结构调整相关的操作基
本不在可能.所以大项在使用中都会面监着分库分表的应用.
从Innodb本身来讲数据文件的Btree上只有两个锁, 叶子节点锁和子节点锁,可以想而知道,当发生页拆分或是添加
新叶时都会造成表里不能写入数据.
所以分库分表还就是一个比较好的选择了.
那么分库分表多少合适呢?
经测试在单表1000万条记录一下,写入读取性能是比较好的. 这样在留点buffer,那么单表全是数字类型的保持在
800万条记录以下, 有字符型的单表保持在500万以下.
如果按 100库100表来规划,如用户业务:
500万*100*100 = 50000000万 = 5000亿记录.
心里有一个数了,按业务做规划还是比较容易的.
分库的原因,更多的为将来扩展及性能考虑. 性能是,一个进程下打开的文件句柄有限,这是分库分表要限制在单个进程下的数量.当然这些表也可以全放到一个库下.但引入另外一个问题,单机性能达到瓶颈时,扩展又是一个麻烦事. 所以引入了一个分库,这样,才开始时,所有的库都可以在事一个事例下,等到压力增大后,单机成为瓶颈了,可以通过移库的形式能快速的移动数据.
这个要看单机的容量, 如果单机IO不是问题如果Fusion-io这种IO设备+SAS ,单库可以达到800G甚至1T都没问题.如果是传统的SAS建议单机单库别超过200G. 如果可能控制在100G以内,不然不容易运维.
相关推荐
本篇将深入探讨分库分表的原理、应用场景以及实现策略。 **一、为什么要进行分库分表** 1. **性能提升**:当数据库中的数据量过大时,查询效率会显著下降,导致响应时间变慢,用户体验降低。 2. **负载均衡**:...
此外,本教程还包括了对分库分表进行缩容的讨论,并在番外篇中探讨了使用Kafka记录日志和使用Redis来进一步优化性能的可能性。 整个教程覆盖了分库分表的完整流程,从前期的准备工作,到数据迁移,再到后期的查询和...
本篇文章将对各种MySQL中间件进行总结,重点关注如何使用ShardingSphere进行分库分表以及相关的配置。首先,我们需要引入必要的依赖库,包括MySQL的JDBC驱动、ShardingSphere的Spring Boot Starter、阿里巴巴的Druid...
这篇文章将讨论 MySQL 分库分表无限扩容后的瓶颈及解决方案。 MySQL 分库分表是指将一个大型数据库拆分成多个小型数据库,以提高数据库的性能和容量。然而,分库分表也会带来一些瓶颈,如数据库连接过多的问题。 ...
MySQL分库分表篇相关代码
1. **设计合理的分库分表策略**:根据业务需求和数据分布特点,选择合适的分库分表策略,如哈希分片、范围分片或复合键分片。 2. **数据库连接管理**:Python中,可以使用`with`语句管理数据库连接,确保资源及时...
本篇文章将详细探讨分库分表的原理、实现方式以及如何利用开源框架Sharding-JDBC进行实践。 分库分表,顾名思义,就是将一个大的数据库拆分为多个小型数据库,每个小型数据库负责一部分数据,同时将单个表的数据...
这里我们将深入探讨MySQL的主从复制、日志解析以及Mycat分库分表的相关知识。 首先,MySQL的主从复制是实现数据冗余和故障恢复的关键技术。主从复制通过将主服务器上的数据更改同步到从服务器,确保了数据的一致性...
这篇文档所分享的58同城在MySQL上的分库分表实践经验,不仅对58同城自身具有重要的意义,也为广大互联网企业提供了学习和参考的宝贵资源。通过该文档的学习,可以了解到如何在保证高可用性、高性能的同时,解决大...
本篇文章将深入探讨如何使用Go语言进行MySQL数据的迁移,并实现从单库到分库分表的转换。 首先,我们要理解分库分表的基本概念。分库是将一个大数据库拆分成多个小数据库,以减轻单个数据库的压力;分表则是将一张...
本篇将详细介绍这两种技术,并结合"mysql读写分离,分库分表-MysqlSample"的示例进行讲解。 一、读写分离 读写分离是数据库优化的一种常见手段,主要目的是减轻主数据库的压力,提高系统整体的读取性能。在读写...
对应企业开发的Mysql知识梳理
这个驱动类不仅支持主从复制,还实现了分库分表以及SQL注入防护,旨在提升应用的稳定性和安全性。 一、MySQLi扩展 MySQLi(MySQL Improved)是PHP中用于连接和操作MySQL数据库的一个扩展,提供了面向对象和面向...
在本篇文档中,我们将深入探讨如何使用 DataX 实现 MySQL 到 MySQL 的分库分表同步以及多个 SQL 查询同步。 1. **分库分表同步**: - 分库分表是一种常见的数据库扩展策略,通过将数据分散到多个数据库或表中,以...
本篇文章将深入探讨Java技术栈中的关键概念:JVM(Java虚拟机)、NIO(非阻塞I/O)、并发编程、MySQL数据库、数据库分库分表、微服务以及分布式缓存。 首先,JVM是Java程序运行的基础,它负责解释和执行Java字节码...
MySQL 运维篇涵盖了 MySQL 的日志、主从复制、分库分表、读写分离等多方面的运维知识点。 日志 MySQL 中的日志是非常重要的,日志记录了 MySQL 服务器的各种操作记录,包括错误日志、二进制日志、查询日志、慢...
本篇文章将详细讲解如何使用Spring Boot结合Sharding-JDBC和Mybatis-Plus实现分库分表功能。 一、Sharding-JDBC简介 Sharding-JDBC是由Apache ShardingSphere项目提供的一个轻量级数据库中间件,它作为JDBC驱动...
本篇文章将深入探讨如何利用Kettle进行数据分表插入,并结合Oracle数据库、Java脚本以及哈希算法来实现这一目标。 首先,让我们理解什么是数据分表。在大数据场景下,单一的大表可能会导致性能瓶颈,因此通常会采用...
有关ShardingSphere实现分库分表前面写了7篇博客作为该项目做详细说明。 1、 2、 3、 4、 5、 6、 7、 该项目拉下后配置数据库地址,和创建相应的库和表后就可以运行成功。 一、项目概述 1、技术架构 项目总体技术...