`
zhengdl126
  • 浏览: 2539780 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

mysql分库

阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:UseFELayout/> </w:Compatibility> <w:DoNotOptimizeForBrowser/> </w:WordDocument> </xml><![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

以前做 PHP 应用,多数是单数据库数据查询和更新,顶多也是主从数据库的支持,实现起来相对简单。主从数据库的问题在于,当会话存储在数据库的时候,同步 将可能出现问题,也就是说有可能出现会话的中断。所以我想在主从数据库设计上,应该将所有会话相关表进行特殊对待。即:所有的会话数据表都可以更新和查 询,当一个用户访问站点的时候,即将此用户绑定到指定数据库,所有会话访问和查询操作都对此数据库进行。会话表不做同步,其他非会话类更新也从主数据库更 新。这样做其实也逃脱不了会话更新时候的数据库切换,所以如果不想麻烦,还是将会话存放在文本中进行的好。
分数据库设计,将可能从压力性能上会提升几个档次,当然单次执行效率不会比单数据库来的高的,毕竟存在着数据库切换的效率问题。分库以及主从数据库搭 配是可以比较好改善数据库并发瓶颈的方案。原则:大数据量,分库;大访问量,主从。很多时候,都是这两者并行 ( 本文不讨论 cache)
我想,如果要实现分库以及主从关系,那么数据库服务器数量将是非常可观,在应用程序中随时切换到某一台服务器,将是非常头痛的问题,配置更换,变量名称,是不是会有一大堆呢?如何寻找更好的解决方案将是本文谈论的话题。
首先是分库使得数据库颇多的问题。什么情况下分库?或许有些人还搞不明白为什么要分库,我就简要说一下自己的经验猜测。比如一个博客程序,一般设计是 将日志存放在一张日志表中。假设是一个多用户博客,那么将会关联一个 uid ,如果数据量不大,这样设计是没有问题的,但是当日志量巨大,一天有几十万条日 志记录录入的时候,而且访问量也比较可观的时候,我想不可能每个用户来访问日志列表,都去从这包含几千万条日志记录的数据表中去找那么几条,效率可见一 斑。这个时候就该考虑到分库的问题。如何分?有一个很简单的分表方法,即,根据 uid 段,将日志记录在各个数据库中,当然,这个分布还是需要根据以往统计 结果做出调整的,因为用户日志分布肯定不是均匀的。设置好 uid 段,然后根据 uid 索引到指定数据库配置,创建一个数据库对象即可。配置信息可能如下:
Copy code
$configs['db_info']['blog'][0] = array(
    'db_host' => '192.168.0.1',
    'db_name' => 'blog',
    'db_user' => 'root',
    'db_pass' => '',
);
$configs['db_info']['blog'][1] = array(
    'db_host' => '192.168.0.2',
    'db_name' => 'blog',
    'db_user' => 'root',
    'db_pass' => '',
);
$configs['db_info']['blog'][2] = array(
    'db_host' => '192.168.0.2',
    'db_name' => 'blog',
    'db_user' => 'root',
    'db_pass' => '',
);
//...and so on

<!-- [if !supportEmptyParas]--> <!-- [endif]-->

<!-- [if !supportEmptyParas]--> <!-- [endif]-->

<!-- [if !supportEmptyParas]--> <!-- [endif]-->

垂直分库指的是根据应用来分数据库,比如博客一个数据库,论坛一个数据库。水平分库是指,根据某些规则,将同一个应用 / 表的数据分布在不同的库上。比如根据用户 ID 把用户的博客文章分布在 5 个数据库上。
分享到:
评论

相关推荐

    MySQL分库分表技术

    **MySQL分库分表技术** 随着互联网业务的快速发展,数据量呈现爆炸性增长,单个数据库的性能瓶颈问题日益突出。在这种背景下,MySQL的分库分表技术应运而生,旨在解决高并发、大数据量场景下的性能挑战。本篇将深入...

    MySQL 分库分表的实现原理及演示案例

    MySQL分库分表是一种数据库架构优化技术,其目的是为了提高大型数据库系统的性能和可扩展性。在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散...

    一个MySQL分库分表php类

    一个MySQL分库分表php类。当一个表数据记录过大时就会出现性能瓶颈,而一般对应的解决办法是要么做分区表,要么分表,分区表就不说了,分表又分为垂直分割和水平分割,具体区 别请自行搜索。一般而言,分库分表属于...

    MySQL 分库分表的实现原理及演示案例.zip

    在实现MySQL分库分表的过程中,通常会遇到一些挑战,如数据一致性、事务处理、跨库跨表查询等。为了应对这些问题,可以使用以下技术: 1. **ShardingSphere**:Apache ShardingSphere是一个开源的分布式数据库解决...

    mysql分库分表分区1

    这里的“mysql分库分表分区1”主要讨论的是 MySQL 中的表分区技术,这是一种将大表物理分割为多个更小、更易管理的部分的方法。下面将详细介绍四种常见的分区类型:RANGE、LIST、HASH 和 KEY。 1. **RANGE分区**: ...

    Python+MySQL分表分库实战

    MySQL分库分表是数据库架构设计中用于处理大规模数据量以及高并发请求的一种技术手段。通过将数据拆分到不同的数据库服务器中,能够有效降低单个数据库的负载,提高系统的扩展性和性能。Python作为一种流行的编程...

    php mysql分库分表实例

    MySQL分库分表还有其他考虑因素,如数据一致性、事务处理、跨表查询等。在分库分表后,通常需要避免跨库查询,因为这会导致性能下降。可以通过设计良好的API和业务逻辑,尽量在单个数据库中完成大部分操作。此外,还...

    mysql分库图表

    mysql分库图表 mysql分库图表mysql分库图表mysql分库图表mysql分库图表

    MySQL分库分表课件.zip

    MySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库...

    MySQL分库分表无限扩容后的瓶颈及解决方案.docx

    "MySQL 分库分表无限扩容后的瓶颈及解决方案" MySQL 是一个非常popular 的数据库管理系统,广泛应用于各行各业。随着业务的发展,数据量也在不断增长,数据库的性能和容量也将面临着极大的挑战。这篇文章将讨论 ...

    Mysql分库分表实例.zip

    为了解决这一问题,"Mysql分库分表实例" 提供了一种解决方案——数据分片技术,即通过分库分表来提升数据库的读写效率。 分库分表是数据库水平扩展的一种策略,它的核心思想是将一个大的数据库拆分成多个小的数据库...

    去年底写的mysql分库分表中间件heisenberg

    **MySQL分库分表中间件Heisenberg详解** 在数据库设计中,随着业务的发展和数据量的增加,单个数据库往往难以承受高并发和大数据量的处理压力,这时就需要引入分库分表策略来优化系统性能。Heisenberg是一款开源的...

    MySQL分库分表.doc

    MySQL分库分表是一种应对大数据量和高并发场景下的数据库优化策略,旨在提高数据库系统的性能、可用性和可扩展性。MYCAT(曾用名:Maatkit)是一款开源的数据库中间件,它允许开发者将MySQL数据库集群化,实现分库...

    19道MySQL分库分表高频题整理(附答案背诵版).md

    《19道MySQL分库分表高频题整理(附答案背诵版)》是一份专门针对MySQL分库分表技术的高频考题集,旨在帮助数据库管理员、后端开发人员以及准备相关面试的考生全面掌握MySQL分库分表的核心概念和实际操作。通过详细的...

    mysql 分库分表查询工具-shard.zip

    MySQL 分库分表查询工具——Shard 在大型的互联网应用中,数据库的性能瓶颈往往成为系统扩展性的关键因素。为了应对高并发、大数据量的挑战,MySQL 数据库的分库分表策略被广泛采用。分库是将数据分散到多个独立的...

    一个MySQL分库分表php类.zip

    分享一个MySQL分库分表php类。当一个表数据记录过大时就会出现性能瓶颈,而一般对应的解决办法是要么做分区表,要么分表,分区表就不说了,分表又分为垂直分割和水平分割,具体区 别请自行搜索。一般而言,分库分表...

    mysql分库分表-shardingmysql.zip

    在这个“mysql分库分表-shardingmysql.zip”压缩包中,我们重点关注的是如何使用 ShardingSphere 来实现 MySQL 的分库分表。 首先,理解分库分表的基本概念。分库是将一个大型数据库拆分成多个小型数据库,每个...

    Mysql分库分表11111111111

    ### MySQL分库分表策略详解 #### 一、场景与系统分析 在互联网技术日新月异的今天,数据量的快速增长对数据库系统的性能提出了更高要求。为了应对这些挑战,许多企业选择实施分库分表策略。分库分表是指将原来单一...

    MyCat实现MySQL分库分表.docx

    MyCat 实现 MySQL 分库分表 MyCat 是一个开源的 MySQL 中间件,可以帮助实现 MySQL 的分库分表。下面是使用 MyCat 实现 MySQL 分库分表的知识点总结: 一、MyCat 安装 * 使用 wget 命令下载 MyCat 服务器 * 使用 ...

    mysql分库分表-mysql-sharding-jdbc.zip

    MySQL 分库分表是一种数据库扩展策略,用于解决大数据量下的性能瓶颈问题。在单个数据库无法满足高并发、大数据处理需求时,通过将数据分散到多个数据库实例中,实现水平扩展,提高系统的处理能力和可用性。`mysql-...

Global site tag (gtag.js) - Google Analytics