高性能mysql 第三版怎么样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能mysql 第三版怎么样相关的知识,希望对你有一定的参考价值。

mysql社区,这是一本重量级的书,我不知道出版社是怎么挑选译者的,但是很明显,我个人的意见,这次挑选非常的失败。书中98页倒数第4行的"binary search"的翻译(二进制搜索)已经道出了一切,但凡学过计算机的,我估计都不能做出这样的翻译。在计算机领域,二进制是一个专门的术语,有特定的含义。我不仅怀疑译者根本没学过"binary search"算法,以至于只能按字面翻译,我甚至怀疑他们连“二进制”的含义可能也不懂,找这样的人来翻译,真是天大的笑话。 再举一个术语的翻译“secondary index”,书中的译法是“第二索引”,暂且不论惯用的“二级索引”是否是一个标准的译法,假如在主键之外,还有B,C两个索引,如果B叫“第二索引”,那么C就应该叫“第三索引”了?为什么C也叫“第二”呢,难道是并列第二?“第二”在汉语中是一个意思很明确的词,你当然可以说“第二”也能表示“二级”的意思,这种牵强的脱离通用语义的翻译真是对翻译标准“信雅达”中“达”字的讽刺。 关于“达”我们还可以找一个例子,介绍coverring index的部分,译文第96页,原文第124页。原文是“For example,the sakila.actor table uses InnoDB and has an index on last_name, so the index can cover queries that retrieve the primary key column actor_id, even though that column isn’t technically part of the index”,译文是“例如,sakila.actor表适用了InnoDB并且在last_name上有索引,因此,即使该列不是索引的一部分,索引页可以覆盖取得主键actor_id的查询”,原文读来没有任何的歧义,译文却变了样,第一遍读的时候,你能分辨出“即使该列不是索引的一部分”中的“该列”是指代的“last_name"呢?还是后面出现的"actor_id”呢?将代词放在指代的名词之前出现,这绝对是对人的智力的挑战,即便是诗歌,我也没见汉语中有多少这样的用法,遑论技术性文字。在原文中"that column"这个代词出现在了"actor_id"之后,不知道为什么在译文中,代词就钻到了指代的名词之前。 如果可以抛开“达”,还要争辩词的译法是“见仁见智”的,那么对“信”的违背则已经使这本重量级巨著的翻译失去了最基本的存在价值,随便举两个例子: 1. 4.6查询提示优化对HIGH_PRIORITY的描述,译本第152页,原书第195页,原文是“HIGH_PRIORITY tells MySQL to schedule a SELECT statement before other statements that may be waiting for locks, so they can modify data.”,译文是“HIGH_PRIORITY告诉MySQL将SELECT语句放在其他语句的前面,以便它修改数据”,原文中的“so they can modify data"变成了"以便它可以修改数据",复数形式的they变成了单数形式的"它",这个改变虽然细微,但直接影响了这个位置的代词所指代的主语,这个代词到底是"SELECT statement"呢?还是"other statements that may be waiting for locks"?原文中当然是其他能modify data的statements,而到了疑问中,变成了"SELECT statement",问一个菜鸟级的问题,select statement能modify data吗? 2. 还是4.6查询提示优化,对DELAYED的描述,译文第152页,原文第196页。原文是"It lets the statement to which it is applied return immediately and places the inserted rows into a buffer, which will be inserted in bulk when the table is free",译文是"应用了这个提示的语句会立即返回并将待插入的列放入缓冲区,在表空闲的时候再执行插入",粗看没什么问题,细看问题一大堆。 2.1 在原文中,主语是it,指代的是"DELAYED"这个hint,到了译文中,主语从"提示"本身变成了"应用了这个提示的语句",于是在原文中的"delayed"这个hint一方面使语句立即返回,另一方面使MySQL在后台处理被缓存的数据两层意思变成了语句一方面返回,另一方面“将待插入的列放入缓冲区”,到底是"DELAYED"使数据被插入buffer,还是应用了"DELAYED"的语句使数据被插入了buffer,区别虽然微妙,但区别就是区别,译文的意思与原文已差之毫厘,谬以千里。 2.2 原文中"which will be inserted in bulk..."是一个被动语态,指数据被插入,主语没有明确指出,在上下文环境中当然是数据库;而到了译文中,“在表空闲的时候再执行插入”是一个主动的语态,“谁”执行了插入?如果和上句连起来,很容易理解成“应用了这个提示的语句在表空闲的时候再执行插入”,这不是扯淡吗?当然,稍微有点数据库常识的人都不会这样理解,但原文原本语义清晰,翻译过来却主语混乱,实在令人难以接受。 2.2 在原文中的"rows",一个复数形式的词,到了译文中,变成了"列",假如说复数变单数还能接受,把"row"翻译成"列"真是天才的创举。 2.3 原文中"will be inserted in bulk when ..."明确指出了insert的方式是"in bulk",但是这个信息在译文中丢失了。 类似的问题简直处处可见,原文的文字简洁清晰,非常容易理解,但我读到的译文却非常难以理解,更可恨的是,原文中大量的信息被扭曲,抛弃。“信雅达”这三标准没有一个做到。我个人的总结是,这个译本的水平跟中国足球的水平一样,能把球停在百米开外,一个字,糙。 客观地说,这本书至少将MySQL优化的知识在中国的传播门槛大大降低,但咱不是黄莺,不会唱赞歌,既然是书评,就是要来挑刺的,看不到刺,容不得刺,电子工业永远没有赶上O'Relly的机会,中国的技术书籍永远都只能是菜鸟水平。 参考技术A 我觉得还行

《深入理解计算机系统(第三版)》第一章

1.知识总结(主要对新知识)

(1)计算机提供不同层次的抽象表示,来隐藏实际实现的复杂性

  • 文件是对I/O设备的抽象表示
  • 虚拟存储器是对主存和磁盘I/O设备的抽象表示
  • 进程是对处理器、主存和I/O设备的抽象表示

(2)程序员必须知道编译系统是如何工作的原因:

  • 优化程序性能:知其原理,才可优化。
  • 理解连接时出现的错误
  • 避免安全漏洞:缓冲区溢出错误。

(3)运行hello程序

  • shell 上输入”./hello”后,回车,shell逐一读入字符串到寄存器,之后把字符串存入内存中
  • shell 加载hello程序从磁盘到内存(最开始hello是放在磁盘上的)
  • hello加载完毕后,CPU执行hello程序的main程序的机器指令。将主存中要打印的”hello, world\\n”,从内存加载到寄存器,再从寄存器复制到显示设备,最终显示在屏幕上

(4)并发是一个通用的概念,指一个同时具有多个活动的系统;并行指的是用并发使一个系统运行的更快

(5)意识到高速缓存的存在,可以利用高速缓存将程序的性能提高一个数量级。

(6)虚拟内存为每个进程提供一个假象,即每个进程都在独占的使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间。进程的虚拟地址空间从下往上(从小到大)依次放的是:

  • 程序代码和数据:对于所有的进程来说,代码是从同一固定地址开始,紧接着是C全局变量相对应的数据位置。
  • 运行时堆:代码和数据区是在进程一开始运行时就被规定了大小,而当调用如malloc和free这样的标准库函数时,堆可以在程序运行时动态的扩展和收缩。
  • 共享库:存储C标准库和数学库等的代码和数据。
  • 用户栈:实现函数调用。
  • 内核虚拟内存:不允许应用程序读写,或者直接调用内核代码定义的函数。

2.问题思考解决

缓冲区溢出错误如何造成免安全漏洞?

参考缓冲区溢出攻击原理分析,结合学习过的栈帧变化,知道了缓冲区溢出攻击会通过某种方式修改eip的值,让其指向恶意代码。当buf变量发生溢出时会往高地址空间覆盖,先是覆盖本函数的其它局部变量,然后是调用函数的ebp,再次是eip,最后是调用函数的栈空间。如果读取的文件内容覆盖掉eip,就可以修改程序的执行路径(传入一个超长的带有shellcode的字符缓冲,覆盖栈中的EIP值,这样当函数执行完成返回后就会返回到有shellcode的地方,执行恶意代码)。

以上是关于高性能mysql 第三版怎么样的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的吞吐量

Go 操作 Mysql

MySQL的limit 优化

《Python高性能编程》pdf下载在线阅读全文,求百度网盘云资源

MySQL ACID及四种隔离级别的解释

又长又有料,带你回顾MySQL的那些索引