仓酷云

标题: MYSQL教程之怎样取得更年夜更好的MySQL数据库 [打印本页]

作者: 若天明    时间: 2015-1-16 20:12
标题: MYSQL教程之怎样取得更年夜更好的MySQL数据库
你可以配置MySQL运行在微小的嵌入式应用程序中,处理的数据可能不足1Mb??而你也可以用它来处理数Tb的数据。MySQL获得这种可扩展性的路径之一是通过一个人们所熟知的存储过程,这是一个运行在程序之外的微型、预编译程序。  一般,当我们的MySQL数据库渐渐变慢时,我们就但愿经由过程统统勉力使它变得更快、更强、更年夜、更好!那末都有哪些办法呢?别发急,我会一个一个给人人先容怎样才干完成这些优美的希望,浏览本系列文章后,将有助于扩展你的视野,更好地计划你未来的必要,本系列的第一篇文章“更快,更强的MySQL”(http://www.databasejournal.com/features/mysql/article.php/3842836/Faster--Stronger-MySQL.htm)会商了查询优化和硬件调剂,包含增添分外的服务器和使用程序变动,本文将先容怎样经由过程分区和负载平衡办理计划让你的MySQL变得更年夜更好。

  更年夜的MySQL

  增添更多的MySQL实例是进步使用程序呼应速率的无效办法,假如你的服务器有多颗CPU,充分的内存和疾速的硬盘,这些资本有相称一部分处于闲置形态,那末在这类情形下,在服务器上能够同时运转多个MySQL实例,由于MySQL默许情形下只要一个历程和多个会话线程,因而它真正能使用的最年夜硬件资本是无限的。

  假如你的服务器已快饱和了,那末必需增添服务器,不论你的多个MySQL实例是在一台服务器上,仍是在多台服务器上,你都必要为使用程序设置一个办法让它晓得该将查询发送给哪台服务器,假如是要修正数据,那就应当将指令发送到主数据库实例,假如仅仅是查询操纵,那末任意发给任何一个从数据库实例便可。

  1、数据分区和程度分区

  由于很多Web使用程序是经由过程会话来辨认用户的,经由过程会话将它们分派到分歧的从数据库实例显得很有事理。比方A-G,H-O,P-Z数据库实例大概在事情,这时候能够经由过程用户名的哈希值,或userid将用户分派到分歧的服务器上,这就是所谓的分区键,选择分区键时必要稳重决意,由于它会影响到你怎样构建从数据库实例,次要是思索怎样让这些服务器均匀承当事情负载,假如选择得欠好,假定从数据库倒失落,也大概会引发数据中止。

  假如正接纳这类分区,你必要决意程序运转时利用哪一个数据库,这能够经由过程一其中间层如MySQL代办署理来完成,固然它还处于Alpha阶段,但它的头脑很好,而且已有良多人将其用于临盆情况,它运转在服务器上,呼应端口3306上的哀求,然后将这些查询经由过程高速言语如lua完成的某些逻辑转发给后端得当的服务器。

  其次你也能够在使用程序中指定将查询发到哪些服务器,这也是最天真的办法,你能够完整把持全部决议历程,你也能够利用master_pos_wait反省从数据库实例,看看它们是不是有充足的盘算资本。另有你利用的编程言语或Web框架大概也会供应这方面的撑持,假如你还不分明,能够查询它们的文档。

  你还能够研讨一下ContinuentTungsten,DBIx::DBClusterforPerl和SQLRelay,它们撑持很多分歧的编程言语和数据库。一样,CMS如Drupal也撑持多种只读的从数据库,你只必要启用这个功效便可。

  利用这类架构必要思索的另外一个事变是,是不是要利用主数据库实例,和什么时候利用,一样平常说来,一切拔出,更新和删除操纵都应放在主数据库实例上完成,一切的查询操纵都放在从数据库实例上完成。比方,假如某个用户对博客文章宣布了正文,此时假如间接利用从数据库,大概没法完成,由于MySQL复制架构会存在滞后,此时从数据库中大概还没有那篇博文。

  反省过期数据是一个更好的办法,假如你有呈报查询在夜间运转,这类办法大概事情得很好,你只必要确保复制赶得长进度便可。

  另外一个办法是经由过程版本号跟踪数据库变动,在读取数据之前断定数据是不是是最新的版本。

  最初,MySQL供应了一个函数master_pos_wait,它能够断定从数据库更新到哪一个工夫点了。

  2、功效分区

  你大概已利用到功效分区,利用功效分区时,必要创立一个临盆数据库的正本用于分歧目标,如个中一个用于数据堆栈和呈报,另外一个用于文本搜刮等。

  经由过程负载平衡使MySQL变得更好

  假如你的从数据库已有些只读数据,你大概必要完成负载平衡,将流量均匀分派到各个从数据库,完成办法有多种,如随机分派,起码毗连法,呼应速率最快法,或某种加权均匀法,固然某些硬件负载平衡设备能够供应负载平衡功效,但它们常常是计划用于平衡收集流量,并没有供应数据库相干的平衡功效。

  侥幸的是有良多软件办理计划,LVS项目就是一个不错的候选,它已开展得相称成熟不乱,它供应了相似DNS轮询的负载平衡算法,可是在ip层完成的,速率十分快。别的,也有良多项目是创建在LVS基本之上的,包含wackamole,它是基于对等收集的,因而不会产生单点妨碍,另有一个值得保举的项目是ultramonkey。

  小结

  MySQL供应了很多初级特征能够完成无穷制的范围扩大,视分歧使用情况有分歧的最好办理计划,因而必要在用于临盆数据库之前,最好先对各类办理计划举行充实懂得,并只管搭建与临盆情况负载相称的测试平台举行测试。

由于在MySQL中有如此众多的额外功能可选,诸如存储引擎等,你可以选择最适合你公司的一个,或者尝试选用多个引擎。MySQL开始非常小巧,但是可以随着公司的成长而不断地变强大。
作者: 灵魂腐蚀    时间: 2015-1-18 18:32
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
作者: admin    时间: 2015-1-25 23:11
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
作者: 再现理想    时间: 2015-2-9 23:25
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
作者: 分手快乐    时间: 2015-2-28 05:01
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
作者: 第二个灵魂    时间: 2015-3-9 21:18
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
作者: 简单生活    时间: 2015-3-17 02:00
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 谁可相欹    时间: 2015-3-23 16:25
我个人认为就是孜孜不懈的学习




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2