《高性能MySQL第3版》epub下载在线阅读,求百度网盘云资源

《高性能MySQL第3版》epub下载在线阅读,求百度网盘云资源,第1张

《高性能MySQL(第3版)》(施瓦茨 (Baron Schwartz))电子书网盘下载免费在线阅读

资源链接:

链接:> 提取码:ani8  

书名:高性能MySQL(第3版)

作者:施瓦茨 (Baron Schwartz)

译者:宁海元

豆瓣评分:93

出版社:电子工业出版社

出版年份:2013-5-1

页数:764

内容简介:

《高性能mysql(第3版)》是mysql 领域的经典之作,拥有广泛的影响力。第3 版更新了大量的内容,不但涵盖了最新mysql 55版本的新特性,也讲述了关于固态盘、高可扩展性设计和云计算环境下的数据相关的新内容,原有的基准测试和性能优化部分也做了大量的扩展和补充。全书共分为16 章和6 个附录,内容涵盖mysql 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的mysql 和mysql相关工具等方面的内容。每一章都是相对独立的主题,读者可以有选择性地单独阅读。

《高性能mysql(第3版)》不但适合数据库管理员(dba)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。

作者简介:

关于作者

Baron Schwartz 是一位软件工程师,居住在弗吉尼亚州的Charlottesville,网络常用名是Xaprb,这是按照QWERTY 键盘的顺序在Dvorak 键盘上打出来的名字。在不忙于解决有趣的编程挑战时,Baron 会和他的妻子Lynn 以及小狗Carbon 一起享受闲暇的时光。他有一个软件工程方面的博客,地址是>

Peter Zaitsev 曾经是MySQL AB 公司高性能组的经理,目前在运作mysqlperformance

blogcom 网站。他擅长于帮助那些每天有数以百万计访问量的网站的管理员解决问题,这些网站通常需要几百台机器来处理TB 级的数据。他常常为了解决一个问题而不停地升级硬件和软件(比如查询优化)。Peter 还经常在各种会议上演讲。

Vadim Tkachenko 曾经是MySQL AB 公司的性能工程师。作为一名在多线程编程和同步方面的专家,他的主要工作是基准测试、性能剖析,以及找出系统的性能瓶颈。他还在性能监控和调优方面做了一些工作,使得MySQL 在多核机器上有更好的可扩展性。

译者简介

宁海元 有超过十年的数据库管理经验,从最初到SQL Server 2000到Oracle到MySQL,擅长数据库高可用架构,性能优化和故障诊断。2007年加入淘宝,带领淘宝DBA团队支撑了淘宝业务的快速增长,完成了数据库的垂直拆分、水平拆分,迁移到MySQL体系等主要工作。目前专注于无线数据领域。网络常用名NinGoo,个人博客:>

周振兴 毕业于北京师范大学数学系,09年加入淘宝数据库团队负责MySQL运维管理工作,有丰富的MySQL性能优化、Troubleshooting经验,对MySQL主要模块的实现和原理有深入的研究,经历淘宝MySQL实例从30到3000的发展,对系统架构、高可用环境规划都有深入理解。个人博客:>

彭立勋 2010年大学毕业后加入阿里巴巴运维部。作为一名MySQL DBA,在运维MySQL的过程中,对MySQL和InnoDB的一些功能和缺陷就进行了补充,编写了多主复制和数据闪回等补丁。目前在阿里集团核心系统研发部数据库组,专注于MySQL数据库相关的开发工作。后来一些补丁被MySQL之父Mony看中,成为MariaDB提交组(Maria-captains)成员,并且把多主复制,线程内存监控等补丁合并到了MariaDB 100版本。

翟卫祥 毕业于武汉大学,研究生阶段从事数据库相关研究。毕业后就职于阿里巴巴集团数据库技术团队至今,主要负责阿里内部MySQL代码分支维护,包括MySQL Bug Fix及新特性开发。对MySQL内核有一定的研究。

刘辉 2008年毕业于西安电子科技大学计算机系,硕士学位。2011年加入阿里巴巴集团数据库技术团队,花名希羽,MySQL内核开发工程师。

第一优化你的sql和索引;

第二加缓存,memcached,redis;

第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;

第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;

第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;

第六才是水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;

mysql数据库一般都是按照这个步骤去演化的,成本也是由低到高。

不可以!

如果两个主键名称相同说明不了什么的,我们还有一个词叫值域相同,也就是说两者必须是相同的类似与长度。也就是说外建表中的外键值域必须与主键表的主键值域相同。这才是外键约束的最关键部分。

如果两者来源于同一值域,那么有可能两者可能组合成为同一张表。也就是说AB两表合并,使用同一个foo那么并没有改变函数的依赖关系。所以两表合一,在关系中还是可以合关的。所以可以考虑两表合并。

但在关系设计后的并不十分完美,即便是我们不违反任何关系范式。因为在表设计中还有一类称为稀疏表与值域依赖关系。而你的问题合并后可能遭遇稀疏表的问题,其实稀疏表也也是一种值域依赖。它会导致大量的冗余数据的。

比如,比如在某些系统中,所有一会员均可登陆,但只有部分会员在拥有该系统的银行账号(银行系统独立开发)。那么,银行系统中规则所有会员最多只能有一个账号,并且账号名称与登陆名称值域相同。那么两表实际上是1:1的关系,有些书上说所有1:1的关系可转人为一张表。那么,我们就会遇到很多账户的用户——造成大量空间的浪费!这就是为什么很多1:1表不能合并的原因,事实上如果合并后,两者可以设计成相同的值域的,虽然合并后两者还是同样没有改变任何函数依赖,但事实上这种空间的极大浪费却是无可避免的,那么不合并的情况下,银行系统中的账户主键同是为登陆用户的主键的外键时,两者构造了1:1关系。但不会导致大量的冗余数据的存在。不少书上虽不赞成1:1关系转化为一张表,但却没有说出任何原因——另外一些纯粹是误导,所有1;1关系增可转换为一张表。

当然有时我们为了提高数据库运算效率,而对表进行了垂直拆分(也就是说,一个表将主键和部分属性,而另一个表为主键和另一部分属性)。这种方式常见于表中部分数据最常用,而另一部分不常用,那么,我们将属性按常用与不常用拆成两个表。这种情况下,一般用于两者独立性很强的场所,不要有很多地方对其再连接还原,因为链接是很耗时的 *** 作。这种设计规则还是可以存在的。但这时往往会给一些“善于”思考的读者留一个疑问!这拆分的两个表能不能主键互相做另一个表的外键呢?

我不知道这些“善于”思考者的心理是怎么想的——但是我知道这是完全无必要的。因为你既然想建立如此关系,就是相同步删除或插入而已,防止出现只删除了一个表中的数据而另一个表会留下无意义的数据——事实上这种情况是存在的!氢如果两者主键又同时互为外键时,就可做到同步——嗯,相法不错!

但是如果你这种同步对于你来说非常重要——那么当初你不应该拆表!或者说你当初应该选择水平拆表的办法(多表结构相同,存储不同的记录),否则干嘛费那事?但如果你想两者兼顾——我只能告诉你,你太“善于”思考了——以致于象这种天方夜谈都想出来了!

事实上是不可以了!从原理上来看,如果数据允许你这么设计,那么,你在删除时你准备删除那条数据?A表中的?还是B表中的,如果你删除A表中的,那么,它做为一个主键,那么你必须要先删除B表中的外键,在为数据库在检查时必须先删除外键数据记录,然后才会删除主键。要不数据库会出现一个不知在何处存在的外键了!是的,数据库会替您先删除B表中的主键的。这与你A表删除多么相似啊?要想删除B表,那么B的外键所指示的A表主键同样得先删除吧——这个循环怪圈你永远跳不出去!所以无法级联删除!

显然同样的问题会出现在插入上,你准备在A表中插入一条记录,因为A表中的主键也是外键,想插入?那么麻烦您先插入B表中的一条数据吧,B表想插入?那么它和A表插入的情况又有何不同呢?所以你根本无法插入一条数据!

太开玩笑了——如果我不设置删除时检查和插入时检查不就可以了?事实上更新检查又何尝试不是呢——如果更新检查也不设置呢?

那么——我就想不起来你建这个外键约束还有何必要了!建一个约束,然后这个约束力不让生效,这是做何道理呢?

所以,主键互为外键——从理论上来讲,你认为有任何的必要性么?

关系型数据库或文档型数据库都适合存储用户会话。

有Redis和Memcached等。因为这些数据库具有高速的内存读写速度,适合存储常用的数据,尤其适合存储Session等用户会话信息,可以在多个服务器之间快速共享数据。此外,Redis还支持更多数据类型和复杂 *** 作,而Memcached则具有更高的性能表现。如果需要持久化存储用户会话数据,可以考虑使用关系型数据库MySQL等。需要注意的是,不同的数据库适用于不同的场景,需要根据实际需求进行选择,并进行适当的配置和优化。

NoSQL数据库。原因是NoSQL数据库是一种非关系型数据库,使用文档、图形、键值对等方式存储数据,非常灵活,可以存储不同格式的数据结构,具有高度可扩展性、高性能和高可用性等特点。针对用户会话的存储需求,NoSQL数据库可以在不需要关系型数据库复杂的横向拆分、垂直拆分的同时,支持分布式部署,可以满足大量读写 *** 作的需求,并且能够迅速扩展存储和节点数量。此外,NoSQL数据库还可以自动对数据进行复制和备份,并能够自动处理故障转移和数据恢复等 *** 作,也非常方便进行数据迁移和数据清理等 *** 作。因此,NoSQL数据库是的首选。

概念建模

数据建模大致分为三个阶段,概念建模阶段,逻辑建模阶段和物理建模阶段。其中概念建模和逻辑建模阶段与数据库厂商毫无关系,换言之,与MySQL,SQL Server,Oracle没有关系。物理建模阶段和数据库厂商存在很大的联系,因为不同厂商对同一功能的支持方式不同,如高可用性,读写分离,甚至是索引,分区等。

概念建模阶段

实际工作中,在概念建模阶段,主要做三件事:

1 客户交流

2 理解需求

3 形成实体

这也是一个迭代,如果先有需求,尽量去理解需求,明白当前项目或者软件需要完成什么,不明白或者不确定的地方和客户及时交流,和客户double confirm过的需求,落实到实体(Package);但是好多时候我们需要通过先和客户交流,进而将交流结果落实到需求,之后进一步具体到实体;本文可能会涉及到一些来自于EA(Enterprise Architect 71)建模术语,(EA中将每个实体视为一个Package)。这里并不对各种建模工具进行比较,如Visio,EA,PowerDesigner, ERWin等;其实作为员工的我们选择性很少,公司有哪个产品的Licence,我们就用哪个吧。

举例说明:在一个B2C电子商务网站中,这样的需求再普通不过了:客户可以在该网站上自由进行购物!我们就以这个简单例子,对其进行细分,来讲解整个数据建模的过程,通过上面这句话,我们可以得出三个实体:客户,网站,商品;就像Scrum(敏捷开发框架的一种)中倡导的一样每个Sprint,都要产出确确实实的东西,OK,概念建模阶段,我们就要产出实体。客户和商品(我们将网站这个实体扔掉,不需要它。)

在创建这两个实体(Package)的时候,我们记得要讲对需求的理解,以及业务规则,作为Notes添加到Package中,这些信息将来会成为数据字典中非常重要的一部分,也就是所谓的元数据。BTW,EA或者其他建模工具应该都可以自动生成数据字典,只不过最终生成的格式可能不太一样。如在Customer这个Package的Notes上,我们可以这样写,用户都要通过填写个人基本信息以及一个邮箱来注册账户,之后使用这个邮箱作为登录帐号登录系统进行交易。

在概念建模阶段,我们只需要关注实体即可,不用关注任何实现细节。很多人都希望在这个阶段把具体表结构,索引,约束,甚至是存储过程都想好,没必要!!因为这些东西使我们在物理建模阶段需要考虑的东西,这个时候考虑还为时尚早。可能有的人在这个阶段担心会不会丢掉或者漏掉一些实体也不用担心,2013年好多公司都在采用Scrum的开发模式,只要你当前抽象出来的实体满足当前的User Story,或者当前的User Story里面的实体,你都抽象出来了,就可以了!如果你再说,我们User Story太大,实体太多,不容易抽象,那就真没办法了,建议你们的团队重新开Sprint 计划会议。

逻辑建模

逻辑建模阶段

对实体进行细化,细化成具体的表,同时丰富表结构。这个阶段的产物是,可以在数据库中生成的具体表及其他数据库对象(包括,主键,外键,属性列,索引,约束甚至是视图以及存储过程)。我在实际项目中,除了主外键之外,其他的数据库对象我都实在物理建模阶段建立,因为其他数据库对象更贴近于开发,需要结合开发一起进行。如约束,我们可以在web page上做JavaScript约束,也可以在业务逻辑层做,也可以在数据库中做,在哪里做,要结合实际需求,性能以及安全性而定。

针对Customer这个实体以及我们对需求的理解,我们可以得出以下几个表的结构,用户基本信息表(User),登录账户表(Account),评论表(Commnets,用户可能会对产品进行评价),当然这个案例中我们还会有更多的表,如用户需要自己上传头像(),我们要有Picture表。

针对产品实体,我们需要构建产品基本信息表(Product),通常情况下,我们产品会有自己的产品大类(ProductCategory)甚至产品小类(ProductSubCategory),某些产品会因为节假日等原因进行打折,因为为了得到更好的Performance我们会创建相应ProductDiscount表,一个产品会有多张,因此产品表(ProductPicture)以及产品关系表(ProductPictureRelationship),(当然我们也可以只设计一张Picture表,用来存放所有,用户,产品以及其他)有人说产品和是一对多的关系,不需要创建一个关系表啊是的,我认为只要不是一对一的关系,我都希望创建一个关系表来关联两个实体。这样带来的好处,一是可读性更好,实现了实体和表一一对应的关系,二是易于维护,我们只需要维护一个关系表即可,只有两列(ProductID和PictureID),而不是去维护一个Picture表。

客户进行交易,即要和商品发生关系,我们需要Transaction表,一个客户会买一个或者多个商品,因为一笔Transaction会涉及一个或多个Products,因此一个Transaction和ProductDiscount之间的关系(ProductDiscount和Product是一一对应的关系)需要创建,我们称其为Item表,里面保存TransactionID以及这笔涉及到的ProductDiscountID(s),这里插一句,好多系统都需要有审计功能,如某个产品历年来的打折情况以及与之对应的销售情况,我们这里暂不考虑审计方面的东西。

就这样,我们根据需求我们确定下来具体需要哪些表,进一步丰富每一个表属性(Column),当然这里面会涉及主键的选取,或者是使用代理键(Surrogate Key),外键的关联,约束的设置等细节,这里笔者认为只要能把每个实体属性(Column)落实下来就是很不错了,因为随着项目的开展,很多表的Column都会有相应的改动。至于其他细节,不同数据库厂商,具体实现细节不尽相同。关于主键的选取多说一句,有的人喜欢所有的表都用自增长ID作为主键,而有的人希望找到唯一能标识当前记录的一个属性或者多个属性作为主键;自增长ID作为代理主键,对于将来以多个类似当前Transaction System作为数据源,构建数据仓库的时候,这些自增长ID主键会是一个麻烦(多个系统中,相同表存在大量主键重复);使用一个属性或多个属性作为作为主键,不管主键是可编辑的,读写效率是我们必须考虑得。所以并没有一个放之四海而皆准的原则,笔者只是给大家推荐一些考虑的因素。

物理建模

物理建模阶段

EA可以将在逻辑建模阶段创建的各种数据库对象生成为相应的SQL代码,运行来创建相应具体数据库对象(大多数建模工具都可以自动生成DDL SQL代码)。但是这个阶段我们不仅仅创建数据库对象,针对业务需求,我们也可能做如数据拆分(水平或垂直拆分),如B2B网站,我们可以将商家和一般用户放在同一张表中,但是针对PERFORMANCE考虑,我们可以将其分为两张表;随业务量的上升,Transaction表越来越大,整个系统越来越慢,这个时候我们可以考虑数据拆分,甚至是读写分离(即实现MASTER-SLAVE模式,MYSQL/SQLSERVER可以使用Replication,当然不同存储引擎采用不同的方案),这个阶段也会涉及到集群的事情,如果你是架构师或者数据建模师,这个时候你可以跟DBA说,Alright,I am done with it,now is your show time

相信大家都知道范式,更有好多人把3NF奉为经典,3NF确实很好,但是3NF是几十年前提出来的,那个时候的数据量以及访问频率和2012年完全不是一个数量级的;因此我们绝对不能一味地遵守3NF;在整个数据建模过程中,在保证数据结构清晰的前提下,尽量提高性能才是我们关注的要点,因此笔者大力倡导数据适当冗余!

上面笔者是结合一些实际例子表达自己对数据建模的观点,希望对读着有用。在数据建模过程中,不要希望一步到位将数据库设计完整,笔者不管是针对data warehouse还是Transactional Database设计,从来没有过一次成功的经历。随着项目的进行,客户和开发团队对业务知识与日增长,因此原来的设计也在不断完善中。毕竟,数据建模或者设计数据库不是我们的最终目的,我们需要的是一个健壮,性能优越,易扩展,易使用的软件!

这么大的表优化是很痛苦的,看你对数据的用途,如果不经常查询、而是频繁的增加,可以考虑定期(每周或者每日)把表中的数据复制到历史表中,清空工作表的数据,这样插入的效率能大大提高,但是查询的时候需要在两个表中进行查询。用于频繁插入数据的工作表要尽量少建索引,用于查询的历史表要多建索引。

以上就是关于《高性能MySQL第3版》epub下载在线阅读,求百度网盘云资源全部的内容,包括:《高性能MySQL第3版》epub下载在线阅读,求百度网盘云资源、千万级别以上的数据库如何去优化、两个表主键相同,这两个表的主键是否互为对方的外键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9301573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存