精华内容
下载资源
问答
  • (点击上方公众号,可快速关注)英文:Angela Stringfellow 译文:葡萄城控件 http://www.cnblogs.com/powertoolsteam/p/typescript-vs-javascript.htmlTypeScript 和 JavaScript 是目前项目开发中较为流行的两种...
        

    (点击上方公众号,可快速关注)

    英文:Angela Stringfellow   译文:葡萄城控件   

    http://www.cnblogs.com/powertoolsteam/p/typescript-vs-javascript.html


    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    TypeScript 和 JavaScript 是目前项目开发中较为流行的两种脚本语言,我们已经熟知 TypeScript 是 JavaScript 的一个超集,但是 TypeScript 与 JavaScript 之间又有什么样的区别呢?在选择开发语言时,又该如何抉择呢?

    本文将会深入对比这两种语言,讨论两种语言之间的关联和差异,并概述两种语言各自的优势。

    JavaScript 和 TypeScript 的概要介绍

    JavaScript

    JavaScript 是一种轻量级的解释性脚本语言,可嵌入到 HTML 页面中,在浏览器端执行,能够实现浏览器端丰富的交互功能,为用户带来流畅多样的用户体验。

    JavaScript 是基于对象和事件驱动的,无需特定的语言环境,只需在支持的浏览器上就能运行。

    JavaScript 语言具有以下特点:

    • JavaScript 是一种脚本编写语言,无需编译,只要嵌入 HTML 代码中,就能由浏览器逐行加载解释执行。

    • JavaScript 是一种基于对象的语言,可以创建对象同时使用现有对象。但是 Javascript 并不支持其它面向对象语言所具有的继承和重载功能。

    • JavaScript 的语法简单,使用的变量为弱类型。

    • JavaScript 语言较为安全,仅在浏览器端执行,不会访问本地硬盘数据。

    • JavaScript 语言具有动态性。JavaScript 是事件驱动的,只根据用户的操作做出相应的反应处理。

    • JavaScript 只依赖于浏览器,与操作系统的因素无关。因此 JavaScript 是一种跨平台的语言。

    • JavaScript 兼容性较好,能够与其他技术(如 XML,REST API 等)一起使用。


    TypeScript

    TypeScript 是 Microsoft 开发和维护的一种面向对象的编程语言。它是 JavaScript 的超集,包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。

    TypeScript 具有以下特点:

    • TypeScript 是 Microsoft 推出的开源语言,使用 Apache 授权协议

    • TypeScript 增加了静态类型、类、模块、接口和类型注解

    • TypeScript 可用于开发大型的应用

    • TypeScript 易学易于理解

     

    JavaScript 和 TypeScript 的主要差异

    TypeScript 可以使用 JavaScript 中的所有代码和编码概念,TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序

    • TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展。

    • JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。

    • TypeScript 通过类型注解提供编译时的静态类型检查。

    • TypeScript 中的数据要求带有明确的类型,JavaScript不要求。

    • TypeScript 为函数提供了缺省参数值。

    • TypeScript 引入了 JavaScript 中没有的“类”概念。

    • TypeScript 中引入了模块的概念,可以把声明、数据、函数和类封装在模块中。

     

    TypeScript 的优势

    下面列举 TypeScript 相比于 JavaScript 的显著优势:

    1. 静态输入

    静态类型化是一种功能,可以在开发人员编写脚本时检测错误。查找并修复错误是当今开发团队的迫切需求。有了这项功能,就会允许开发人员编写更健壮的代码并对其进行维护,以便使得代码质量更好、更清晰。

    2. 大型的开发项目

    有时为了改进开发项目,需要对代码库进行小的增量更改。这些小小的变化可能会产生严重的、意想不到的后果,因此有必要撤销这些变化。使用TypeScript工具来进行重构更变的容易、快捷。

    3. 更好的协作

    当发开大型项目时,会有许多开发人员,此时乱码和错误的机也会增加。类型安全是一种在编码期间检测错误的功能,而不是在编译项目时检测错误。这为开发团队创建了一个更高效的编码和调试过程。

    4. 更强的生产力

    干净的 ECMAScript 6 代码,自动完成和动态输入等因素有助于提高开发人员的工作效率。这些功能也有助于编译器创建优化的代码。

    JavaScript 的优势

    相比于 TypeScript,JavaScript 也有一些明显优势。

    1. 人气

    JavaScript 的开发者社区仍然是巨大而活跃的,在社区中可以很方便地找到大量成熟的开发项目和可用资源。

    2. 学习曲线

    由于 JavaScript 语言发展的较早,也较为成熟,所以仍有一大批开发人员坚持使用他们熟悉的脚本语言 JavaScript,而不是学习 TypeScript。

    3. 本地浏览器支持

    TypeScript 代码需要被编译(输出 JavaScript 代码),这是 TypeScript 代码执行时的一个额外的步骤。

    4. 不需要注释

    为了充分利用 TypeScript 特性,开发人员需要不断注释他们的代码,这可能会使项目效率降低。

    5. 灵活性

    有些开发人员更喜欢 JavaScript 的灵活性。

    如何抉择

    TypeScript 正在成为开发大型编码项目的有力工具。因为其面向对象编程语言的结构保持了代码的清洁、一致和简单的调试。因此在应对大型开发项目时,使用 TypeScript 更加合适。如果有一个相对较小的编码项目,似乎没有必要使用 TypeScript,只需使用灵活的 JavaScript 即可。


    觉得本文对你有帮助?请分享给更多人

    关注「前端大全」,提升前端技能

    640?wx_fmt=png

    展开全文
  • 英文原文 |CSS Grid VS Flexbox: A Practical Comparison作者 |Danny Markov译者 |IT程序狮译文地址 |h...
        

    640?wx_fmt=jpeg

    英文原文 | CSS Grid VS Flexbox: A Practical Comparison作者 | Danny Markov译者 | IT程序狮译文地址 | http://www.jianshu.com/p/6262c3e48443

    不久以前,所有 HTML 页面的布局还都是通过 tables、floats 以及其他的 CSS 属性来完成的。面对复杂页面的布局,却没有很好的办法。

    然而 Flexbox 的出现,便轻松的解决了复杂的 Web 布局。它是一种专注于创建稳定的响应式页面的布局模式,并可以轻松地正确对齐元素及其内容。如今已是大多数 Web 开发人员首选的 CSS 布局方式。

    现在,又出现了一个构建 HTML 最佳布局体系的新竞争者。(冠军头衔正在争夺中…)它就是强大的 CSS Grid 布局。直到本月月底,它也将在 Firefox 52 Chrome 57 上得到原生支持,相信不久也会得到其他浏览器兼容性的支持。

    基本布局测试

    要了解这两个体系构建布局的方式,我们将通过相同的 HTML 页面,利用不同的布局方式 (即 Flexbox 与 CSS Grid)为大家区分。

    同时,你也可以通过文章顶部附近的下载按钮,下载演示项目进行对比,或者通过在线演示来察看它们:

    • DEMO 地址:http://demo.tutorialzine.com/2017/03/css-grid-vs-flexbox/

    • 示例下载地址: https://pan.baidu.com/s/1Yzl6OQds35tvqvYb_0GY9g   提取码:ih6m

    640?wx_fmt=other

    简版静态页面布局

    该页面的设计相对比较简单 – 它是由一个居中的容器组成,在其内部则包含了标头、主要内容部分、侧边栏和页脚。接下来,我们要完成同时保持 CSS 和 HTML 尽可能整洁的挑战事项:

    1. 在布局中将四个主要的部分进行定位。

    2. 将页面变为响应式页面;

    3. 对齐标头:导航朝左对齐,按钮向右对齐。

    如你所见,为了便于比较,我们将所有事项从简处理。那么,让我们从第一个挑战事项开始吧!

    挑战 1:定位页面部分

    Flexbox 解决方案

    我们将从 Flexbox 解决方案开始。我们将为容器添加display: flex来指定为 Flex 布局,并指定子元素的垂直方向。

    .container {	
        display: flex;	
        flex-direction: column;	
    }

    现在我们需要使主要内容部分和侧边栏彼此相邻。由于 Flex 容器通常是单向的,所以我们需要添加一个包装器元素。

    <header></header>	
    <div class="main-and-sidebar-wrapper">	
        <section class="main"></section>	
        <aside class="sidebar"></aside>	
    </div>	
    <footer></footer>

    然后,我们给包装器在反向添加display: flexflex-direction属性。

    .main-and-sidebar-wrapper {	
        display: flex;	
        flex-direction: row;	
    }

    最后一步,我们将设置主要内容部分与侧边栏的大小。通过 Flex 实现后,主要内容部分会比侧边栏大三倍。

    .main {	
        flex: 3;	
        margin-right: 60px;	
    }	
    .sidebar {	
       flex: 1;	
    }

    如你所见,Flex 将其很好的实现了出来,但是仍需要相当多的 CSS 属性,并借助了额外的 HTML 元素。那么,让我们看看 CSS Grid 如何实现的。

    CSS Grid 解决方案

    针对本项目,有几种不同的 CSS Grid 解决方法,但是我们将使用网格模板区域语法来实现,因为它似乎最适合我们要完成的工作。

    首先,我们将定义四个网格区域,所有的页面各一个:

    <header></header>	
    <!-- Notice there isn't a wrapper this time -->	
    <section class="main"></section>	
    <aside class="sidebar"></aside>	
    <footer></footer>	
    
    	
    header {	
        grid-area: header;	
    }	
    .main {	
        grid-area: main;	
    }	
    .sidebar {	
        grid-area: sidebar;	
    }	
    footer {	
        grid-area: footer;	
    }

    然后,我们会设置网格并分配每个区域的位置。初次接触 Grid 布局的朋友,可能感觉以下的代码会有些复杂,但当你了解了网格体系,就很容易掌握了。

    .container {	
        display: grid;	
    
    	
        /*  Define the size and number of columns in our grid.	
        The fr unit works similar to flex:	
        fr columns will share the free space in the row in proportion to their value.	
        We will have 2 columns - the first will be 3x the size of the second.  */	
        grid-template-columns: 3fr 1fr;	
    
    	
        /*  Assign the grid areas we did earlier to specific places on the grid.	
            First row is all header.	
            Second row is shared between main and sidebar.	
            Last row is all footer.  */	
        grid-template-areas: 	
            "header header"	
            "main sidebar"	
            "footer footer";	
    
    	
        /*  The gutters between each grid cell will be 60 pixels. */	
        grid-gap: 60px;	
    }

    就是这样! 我们现在将遵循上述结构进行布局,甚至不需要我们处理任何的 margins 或 paddings 。

    挑战 2:将页面变为响应式页面

    Flexbox 解决方案

    这一步的执行与上一步密切相关。对于 Flexbox 解决方案,我们将更改包装器的flex-direction属性,并调整一些 margins。

    @media (max-width: 600px) {	
        .main-and-sidebar-wrapper {	
            flex-direction: column;	
        }	
    
    	
        .main {	
            margin-right: 0;	
            margin-bottom: 60px;	
        }	
    }

    由于网页比较简单,所以我们在媒体查询上不需要太多的重写。但是,如果遇见更为复杂的布局,那么将会重新的定义相当多的内容。

    CSS Grid 解决方案

    由于我们已经定义了网格区域,所以我们只需要在媒体查询中重新排序它们。 我们可以使用相同的列设置。

    @media (max-width: 600px) {	
        .container {	
        /*  Realign the grid areas for a mobile layout. */	
            grid-template-areas: 	
                "header header"	
                "main main"	
                "sidebar sidebar"	
                "footer footer";	
        }	
    }

    或者,我们可以从头开始重新定义整个布局。

    @media (max-width: 600px) {	
        .container {	
            /*  Redefine the grid into a single column layout. */	
            grid-template-columns: 1fr;	
            grid-template-areas: 	
                "header"	
                "main"	
                "sidebar"	
                "footer";	
        }	
    }

    挑战 3:对齐标头组件

    Flexbox 解决方案

    我们的标头包含了导航和一个按钮的相关链接。我们希望导航朝左对齐,按钮向右对齐。而导航中的链接务必正确对齐,且彼此相邻。

    <header>	
        <nav>	
            <li><a href="#"><h1>Logo</h1></a></li>	
            <li><a href="#">Link</a></li>	
            <li><a href="#">Link</a></li>	
        </nav>	
        <button>Button</button>	
    </header>

    我们曾在一篇较早的文章中使用 Flexbox 做了类似的布局:响应式标头最简单的制作方法这个技术很简单:

    header {	
        display: flex;	
        justify-content: space-between;	
    }

    现在导航列表和按钮已正确对齐。下来我们将使<nav>内的 items 进行水平移动。这里最简单的方法就是使用display:inline-block属性,但目前我们需要使用一个 Flexbox 解决方案:

    header nav {	
        display: flex;	
        align-items: baseline;	
    }

    仅两行代码就搞定了! 还不错吧。接下来让我们看看如何使用 CSS Grid 解决它。

    CSS Grid 解决方案

    为了拆分导航和按钮,我们要为标头定义display: grid属性,并设置一个 2 列的网格。同时,我们还需要两行额外的 CSS 代码,将它们定位在相应的边界上。

    header{	
        display: grid;	
        grid-template-columns: 1fr 1fr;	
    }	
    header nav {	
        justify-self: start;	
    }	
    header button {	
        justify-self: end;	
    }

    至于导航中的内链 - 这是我们使用 CSS grid 最好的布局展示:

    640?wx_fmt=other

    虽然链接为内链形式,但它们不能正确的对齐。由于 CSS grid 不具备基线选项(不像 Flexbox 具备的align-items属性),所以我们只能再定义一个子网格。

    header nav {	
        display: grid;	
        grid-template-columns: auto 1fr 1fr;	
        align-items: end; 	
    }

    CSS grid 在此步骤中,存在一些明显的布局上的缺陷。但你也不必过于惊讶。因为它的目标是对齐容器,而不是内部的内容。所以,用它来处理收尾工作,或许不是很好的选择哦。

    结论

    如果你已经浏览完整篇文章,那么结论不会让你感到意外。事实上,并不存在最好的布局方式。Flexbox 和 CSS grid 是两种不同的布局形式,我们应该根据具体的场景将它们搭配使用,而不是相互替代。

    对于那些跳过文章只想看结论的朋友(不用担心,我们也这样做),这里是通过实例比较后的总结:

    1. CSS grids 适用于布局大画面。它们使页面的布局变得非常容易,甚至可以处理一些不规则和非对称的设计。

    2. Flexbox 非常适合对齐元素内的内容。你可以使用 Flex 来定位设计上一些较小的细节。

    3. 2D 布局适合使用 CSS grids(行与列)。

    4. Flexbox 适用于单一维度的布局(行或列)。

    5. 共同学习并使用它们。

    640?wx_fmt=jpeg

    640?wx_fmt=jpeg

    展开全文
  • MySQL性能基准测试对比:5.7 VS 8.0

    千次阅读 2019-03-07 12:00:19
    **版权声明:**本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其...

    本文由云+社区发表

    作者:数据库

    **版权声明:**本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒体、网站或其他任何形式的法律实体和个人使用,必须经过著作权人合法书面授权并自负全部法律责任。不得擅自使用腾讯云数据库团队的名义进行转载,或盗用腾讯云数据库团队名义发布信息。

    原文链接:https://severalnines.com/blog/mysql-performance-benchmarking-mysql-57-vs-mysql-80


    在Oracle MySQL团队的推动下,MySQL 8.0发生了巨大的变化和修改。

    物理文件已更改。例如,.frm, .TRG,.TRN和 .par 不再存在。添加了大量的新特性,如通用表表达式(Common Table Expressions CTE),窗口函数(Window Functions),不可见索引( Invisible Indexes),正则表达式(regexp) -MySQL8.0现在已经完全支持Unicode,且具有多字节安全特性。数据字典也发生了变化。它现在与一个事务性数据字典合并,该字典存储有关数据库对象的信息。与以前的版本不同,字典数据存储在元数据文件和非事务表中。

    安全性得到了改进,caching_sha2_password认证方式取代了之前的mysql_native_password认证方式,成为默认的身份验证方式。它提供了更强大的灵活性,而且也加强了安全性,即它要求必须使用安全连接或通过RSA密钥对实现的支持密码交换的未加密链接。

    有了MySQL 8.0提供的所有这些很出色的功能,以及进行的增强和改进,我们团队很有兴趣来了解下MySQL 8.0当前版本的性能情况。特别是考虑到我们针对MySQL 8.0.x设计的ClusterControl正在进行中(请继续保持关注)。这篇博文不会讨论MySQL8.0的特性,但打算将其性能与MySQL 5.7进行对比,看看它是如何改进的。

    Server Setup and Environment服务器设置和环境

    对于此基准测试,我打算使用基于AWS EC2最小配置的系统环境:

    · 实例类型:t2.xlarge实例

    · 存储:gp2(SSD存储,最小100 IOPS,最大16000 IOPS)

    · 虚拟CPU:4

    · 内存:16GiB

    · MySQL5.7版本:MySQLCommunity Server (GPL) 5.7.24

    · MySQL8.0版本:MySQLCommunity Server - GPL 8.0.14

    在这个基准测试中,我也针对一些参数项的取值进行了配置,它们是:

    · innodb_max_dirty_pages_pct= 90 ##这是MySQL 8.0中的默认值。

    · innodb_max_dirty_pages_pct_lwm= 10 ##这是MySQL 8.0中的默认值

    · innodb_flush_neighbors=0

    · innodb_buffer_pool_instances=8

    · innodb_buffer_pool_size=8GiB

    这里对两个版本(MySQL 5.7和MySQL 8.0)其余参数项的配置是参照ClusterControl的my.cnf模板进行调优。

    此外,我在这里不使用MySQL8.0的新身份验证方式,即caching_sha2_password认证方式。替代的是在这两个版本中都使用mysql_native_password,外加配置innodb_dedicated_serve=OFF(默认值),因为innodb_dedicated_serve是MySQL 8.0的新特性。

    为了简化工作,我使用ClusterControl配置MySQL 5.7 Community version节点,然后把该节点从集群中的剔除,使其成为一个单独主机,并关闭集群控制主机,使MySQL 5.7节点处于休眠状态(不监控流量)。从技术上讲,MySQL 5.7和MySQL8.0都是休眠节点,在节点上没有活动连接通,因此它基本上是一个纯粹的基准测试。

    搜索关注“腾讯云数据库”官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,更有从初阶到高阶数据库实战教程等你来约!

    Commands and Scripts Used使用的命令和脚本

    对于此任务,sysbench用于测试和负载模拟这两个环境。以下测试中使用的命令和脚本:

    sb-prepare.sh #!/bin/bash host=$1#host192.168.10.110port=3306user='sysbench'password='MysqP@55w0rd'table_size=500000rate=20ps_mode='disable'sysbench/usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=1--max-requests=0 --time=3600 --mysql-host=$host --mysql-user=$user--mysql-password=$password --mysql-port=$port --tables=10 --report-interval=1--skip-trx=on --table-size=$table_size --rate=$rate --db-ps-mode=$ps_modeprepare
    

    sb-run.sh

    #!/usr/bin/envbash2     host=$1port=3306user="sysbench"password="MysqP@55w0rd"table_size=100000tables=10rate=20ps_mode='disable'threads=1events=0time=5trx=100path=$PWD  counter=1   echo "thread,cpu" >${host}-cpu.csv   for i in 16 32 64 128 256 512 1024 2048; do  threads=$i  mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logtmpfile=$path/${host}-tmp${threads}touch $tmpfile/bin/bashcpu-checker.sh $tmpfile $host $threads &  /usr/share/sysbench/oltp_read_write.lua--db-driver=mysql --events=$events --threads=$threads --time=$time--mysql-host=$host --mysql-user=$user --mysql-password=$password--mysql-port=$port --report-interval=1 --skip-trx=on --tables=$tables--table-size=$table_size --rate=$rate --delete_inserts=$trx --order_ranges=$trx--range_selects=on --range-size=$trx --simple_ranges=$trx --db-ps-mode=$ps_mode--mysql-ignore-errors=all run | tee -a $host-sysbench.log   echo"${i},"`cat ${tmpfile} | sort -nr | head -1` >> ${host}-cpu.csvunlink ${tmpfile}   mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logdone   python $path/innodb-ops-parser.py $host  mysql -h $host -e "SHOW GLOBALVARIABLES" >> $host-global-vars.log
    

    因此,脚本只是准备sbtestschema并填充表和记录。然后,它使用

    /usr/share/sysbench/oltp_read_write.lua脚本执行读/写负载测试。该脚本转储全局状态和MySQL变量,收集CPU利用率,并解析由脚本innodb-ops-parser.py处理的InnoDB行操作。脚本根据基准测试期间收集的转储日志生成* .csv文件,我在这里使用Excel电子表格从* .csv文件生成图表。请检查 github中提交的代码。

    现在,让我们继续处理图表结果!

    InnoDB行操作

    img

    img

    img

    img

    基本上在这里,我只提取了InnoDB行操作,它执行查找(读取),删除,插入和更新。当线程数量增加时,MySQL 8.0明显优于MySQL 5.7!在这两个版本中都没有针对配置项进行任何个性化变更,只有我统一配置的参数项。所以这两个版本中的配置几乎都使用默认值。

    有趣的是,MySQL团队关于新版本中读写性能的声明,这些图表指出了性能的显著提高,特别是在高负载服务器上。想一下MySQL 5.7和MySQL 8.0在InnoDB行操作上的区别,确实存在有很大的不同,特别是当线程数增加的时候。MySQL 8.0表明,无论工作负载如何,它都能高效地运行。

    事务处理

    img

    img

    如上图所示,MySQL 8.0的结果趋势显示出其处理事务所需的时间的巨大变化。纵轴数值越低,代表性能越好,意味着处理事务的速度更快。处理的事务统计表(第二张表)还显示出这两个版本处理事务的数量没有差异。这意味着,两个版本处理的事务数量几乎相同,但它们的完成速度不同。虽然MySQL 5.7在较低的负载下可以大量事务,但是实际的负载,特别是在生产中,可能会更高——尤其是在最繁忙的时期。

    img

    上面的图仍然显示的是两个版本能够处理的事务数量,只是将读和写分离开来。然而,图中实际上是存在异常值,而我没有将这些值包括在内,因为它们是这一小部分异常结果会扭曲图形。

    MySQL 8.0体现出一个很大的改进,特别是对于读取。表现在写操作的效率上,特别是对于高工作负载的服务器。在8.0版本中,影响MySQL读取性能的重要新增支持是:可以按降序(或正向索引扫描)创建索引的能力。以前的版本只有升序或反向索引扫描,如果需要降序,MySQL必须执行filesort(如果需要filesort,需要检查max_length_for_sort_data的值)。当最有效的扫描顺序混合某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。有关详细信息,请参见此处。

    CPU资源

    img

    在此基准测试中,我决定测试一些硬件资源,尤其是CPU利用率。

    让我先解释一下如何在基准测试中获取CPU使用率。在对数据库进行基准测试时,sysbench测试结果中不包括在此过程中使用的硬件资源的统计信息。因此,我所做的是通过创建文件的方式来创建标识,通过SSH连接到目标主机,然后用Linux命令“top”收集数据并在测试结束前进行解析,然后再次收集。然后分析出mysqld进程占用最大的CPU使用量,最后删除该标识文件。你可以查看我在github上的代码。

    让我们再次讨论图表结果,似乎表明MySQL 8.0消耗了大量的CPU,超过MySQL 5.7。然而,MySQL 8.0可能必须消耗额外的CPU在新的变量配置上。例如,这些变量可能会影响您的MySQL 8.0:

    · innodb_log_spin_cpu_abs_lwm = 80

    · innodb_log_spin_cpu_pct_hwm = 50

    · innodb_log_wait_for_flush_spin_hwm = 400

    · innodb_parallel_read_threads = 4

    在此基准测试中,具有默认值的变量将保留其默认值。由于MySQL 8.0重新设计了InnoDB写入REDO日志的方式(这是一个改进),前三个变量可配置处理重做日志的使用的CPU资源。例如,变量innodb_log_spin_cpu_pct_hwm具有CPU亲和性,这意味着如果mysqld仅绑定到4个内核,它将忽略其他CPU内核。对于并行读取线程,在MySQL 8.0中添加了一个新变量,您可以调整要使用的线程数。

    然而,我没有深入研究这个问题。可以通过利用MySQL8.0提供的特性来提高性能。

    结论

    MySQL 8.0中有许多改进。基准测试结果显示,与MySQL 5.7相比,MySQL 8.0不仅在处理读负载时,而且在读写混合的高负载下的性能都取得了令人瞩目的进步。搜索关注“腾讯云数据库”官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,更有从初阶到高阶数据库实战教程等你来约!

    再来看MySQL 8.0的新特性,看起来它不仅利用了最新的软件技术(如Memcached的改进,远程管理以获得更好的DevOps工作性能等),还有硬件。例如,用UTF8MB4替换latin1作为默认字符编码。这意味着它需要更多的磁盘空间,因为UTF8在非US-ASCII字符上需要2个字节。虽然此基准测试没有利用使用caching_sha2_password的新身份验证方法,但它是否使用加密不会影响性能。一旦经过身份验证,它就会存储在缓存中,这意味着身份验证只进行一次。因此,如果您在客户端只使用一个用户,则不会出现问题,并且比以前的版本更安全。

    由于MySQL利用最新的硬件和软件,因此会更改其默认变量。你可以在这里阅读更多细节。

    总的来说,MySQL 8.0的性能已经远超过MySQL 5.7了。

    此文已由腾讯云+社区在各渠道发布

    获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

    展开全文
  • 本文由云+社区发表作者:数据库**版权声明:**本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云...

    本文由云+社区发表

    作者:数据库

    **版权声明:**本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒体、网站或其他任何形式的法律实体和个人使用,必须经过著作权人合法书面授权并自负全部法律责任。不得擅自使用腾讯云数据库团队的名义进行转载,或盗用腾讯云数据库团队名义发布信息。

    在Oracle MySQL团队的推动下,MySQL 8.0发生了巨大的变化和修改。

    物理文件已更改。例如,.frm, .TRG,.TRN和 .par 不再存在。添加了大量的新特性,如通用表表达式(Common Table Expressions CTE),窗口函数(Window Functions),不可见索引( Invisible Indexes),正则表达式(regexp) -MySQL8.0现在已经完全支持Unicode,且具有多字节安全特性。数据字典也发生了变化。它现在与一个事务性数据字典合并,该字典存储有关数据库对象的信息。与以前的版本不同,字典数据存储在元数据文件和非事务表中。

    安全性得到了改进,caching_sha2_password认证方式取代了之前的mysql_native_password认证方式,成为默认的身份验证方式。它提供了更强大的灵活性,而且也加强了安全性,即它要求必须使用安全连接或通过RSA密钥对实现的支持密码交换的未加密链接。

    有了MySQL 8.0提供的所有这些很出色的功能,以及进行的增强和改进,我们团队很有兴趣来了解下MySQL 8.0当前版本的性能情况。特别是考虑到我们针对MySQL 8.0.x设计的ClusterControl正在进行中(请继续保持关注)。这篇博文不会讨论MySQL8.0的特性,但打算将其性能与MySQL 5.7进行对比,看看它是如何改进的。

    Server Setup and Environment服务器设置和环境

    对于此基准测试,我打算使用基于AWS EC2最小配置的系统环境:

    · 实例类型:t2.xlarge实例

    · 存储:gp2(SSD存储,最小100 IOPS,最大16000 IOPS)

    · 虚拟CPU:4

    · 内存:16GiB

    · MySQL5.7版本:MySQLCommunity Server (GPL) 5.7.24

    · MySQL8.0版本:MySQLCommunity Server - GPL 8.0.14

    在这个基准测试中,我也针对一些参数项的取值进行了配置,它们是:

    · innodb_max_dirty_pages_pct= 90 ##这是MySQL 8.0中的默认值。

    · innodb_max_dirty_pages_pct_lwm= 10 ##这是MySQL 8.0中的默认值

    · innodb_flush_neighbors=0

    · innodb_buffer_pool_instances=8

    · innodb_buffer_pool_size=8GiB

    这里对两个版本(MySQL 5.7和MySQL 8.0)其余参数项的配置是参照ClusterControl的my.cnf模板进行调优。

    此外,我在这里不使用MySQL8.0的新身份验证方式,即caching_sha2_password认证方式。替代的是在这两个版本中都使用mysql_native_password,外加配置innodb_dedicated_serve=OFF(默认值),因为innodb_dedicated_serve是MySQL 8.0的新特性。

    为了简化工作,我使用ClusterControl配置MySQL 5.7 Community version节点,然后把该节点从集群中的剔除,使其成为一个单独主机,并关闭集群控制主机,使MySQL 5.7节点处于休眠状态(不监控流量)。从技术上讲,MySQL 5.7和MySQL8.0都是休眠节点,在节点上没有活动连接通,因此它基本上是一个纯粹的基准测试。

    搜索关注“腾讯云数据库”官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,更有从初阶到高阶数据库实战教程等你来约!

    Commands and Scripts Used使用的命令和脚本

    对于此任务,sysbench用于测试和负载模拟这两个环境。以下测试中使用的命令和脚本:

    sb-prepare.sh #!/bin/bash host=$1#host192.168.10.110port=3306user='sysbench'password='MysqP@55w0rd'table_size=500000rate=20ps_mode='disable'sysbench/usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=1--max-requests=0 --time=3600 --mysql-host=$host --mysql-user=$user--mysql-password=$password --mysql-port=$port --tables=10 --report-interval=1--skip-trx=on --table-size=$table_size --rate=$rate --db-ps-mode=$ps_modeprepare

    sb-run.sh

    #!/usr/bin/envbash2 host=$1port=3306user="sysbench"password="MysqP@55w0rd"table_size=100000tables=10rate=20ps_mode='disable'threads=1events=0time=5trx=100path=$PWD counter=1 echo "thread,cpu" >${host}-cpu.csv for i in 16 32 64 128 256 512 1024 2048; do threads=$i mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logtmpfile=$path/${host}-tmp${threads}touch $tmpfile/bin/bashcpu-checker.sh $tmpfile $host $threads & /usr/share/sysbench/oltp_read_write.lua--db-driver=mysql --events=$events --threads=$threads --time=$time--mysql-host=$host --mysql-user=$user --mysql-password=$password--mysql-port=$port --report-interval=1 --skip-trx=on --tables=$tables--table-size=$table_size --rate=$rate --delete_inserts=$trx --order_ranges=$trx--range_selects=on --range-size=$trx --simple_ranges=$trx --db-ps-mode=$ps_mode--mysql-ignore-errors=all run | tee -a $host-sysbench.log echo"${i},"`cat ${tmpfile} | sort -nr | head -1` >> ${host}-cpu.csvunlink ${tmpfile} mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logdone python $path/innodb-ops-parser.py $host mysql -h $host -e "SHOW GLOBALVARIABLES" >> $host-global-vars.log

    因此,脚本只是准备sbtestschema并填充表和记录。然后,它使用

    /usr/share/sysbench/oltp_read_write.lua脚本执行读/写负载测试。该脚本转储全局状态和MySQL变量,收集CPU利用率,并解析由脚本innodb-ops-parser.py处理的InnoDB行操作。脚本根据基准测试期间收集的转储日志生成* .csv文件,我在这里使用Excel电子表格从* .csv文件生成图表。请检查 github中提交的代码。

    现在,让我们继续处理图表结果!

    InnoDB行操作

    1620

    1620

    1620

    jpg

    基本上在这里,我只提取了InnoDB行操作,它执行查找(读取),删除,插入和更新。当线程数量增加时,MySQL 8.0明显优于MySQL 5.7!在这两个版本中都没有针对配置项进行任何个性化变更,只有我统一配置的参数项。所以这两个版本中的配置几乎都使用默认值。

    有趣的是,MySQL团队关于新版本中读写性能的声明,这些图表指出了性能的显著提高,特别是在高负载服务器上。想一下MySQL 5.7和MySQL 8.0在InnoDB行操作上的区别,确实存在有很大的不同,特别是当线程数增加的时候。MySQL 8.0表明,无论工作负载如何,它都能高效地运行。

    事务处理

    jpg

    jpg

    如上图所示,MySQL 8.0的结果趋势显示出其处理事务所需的时间的巨大变化。纵轴数值越低,代表性能越好,意味着处理事务的速度更快。处理的事务统计表(第二张表)还显示出这两个版本处理事务的数量没有差异。这意味着,两个版本处理的事务数量几乎相同,但它们的完成速度不同。虽然MySQL 5.7在较低的负载下可以大量事务,但是实际的负载,特别是在生产中,可能会更高——尤其是在最繁忙的时期。

    1620

    上面的图仍然显示的是两个版本能够处理的事务数量,只是将读和写分离开来。然而,图中实际上是存在异常值,而我没有将这些值包括在内,因为它们是这一小部分异常结果会扭曲图形。

    MySQL 8.0体现出一个很大的改进,特别是对于读取。表现在写操作的效率上,特别是对于高工作负载的服务器。在8.0版本中,影响MySQL读取性能的重要新增支持是:可以按降序(或正向索引扫描)创建索引的能力。以前的版本只有升序或反向索引扫描,如果需要降序,MySQL必须执行filesort(如果需要filesort,需要检查max_length_for_sort_data的值)。当最有效的扫描顺序混合某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。有关详细信息,请参见此处。

    CPU资源

    jpg

    在此基准测试中,我决定测试一些硬件资源,尤其是CPU利用率。

    让我先解释一下如何在基准测试中获取CPU使用率。在对数据库进行基准测试时,sysbench测试结果中不包括在此过程中使用的硬件资源的统计信息。因此,我所做的是通过创建文件的方式来创建标识,通过SSH连接到目标主机,然后用Linux命令“top”收集数据并在测试结束前进行解析,然后再次收集。然后分析出mysqld进程占用最大的CPU使用量,最后删除该标识文件。你可以查看我在github上的代码。

    让我们再次讨论图表结果,似乎表明MySQL 8.0消耗了大量的CPU,超过MySQL 5.7。然而,MySQL 8.0可能必须消耗额外的CPU在新的变量配置上。例如,这些变量可能会影响您的MySQL 8.0:

    · innodb_log_spin_cpu_abs_lwm = 80

    · innodb_log_spin_cpu_pct_hwm = 50

    · innodb_log_wait_for_flush_spin_hwm = 400

    · innodb_parallel_read_threads = 4

    在此基准测试中,具有默认值的变量将保留其默认值。由于MySQL 8.0重新设计了InnoDB写入REDO日志的方式(这是一个改进),前三个变量可配置处理重做日志的使用的CPU资源。例如,变量innodb_log_spin_cpu_pct_hwm具有CPU亲和性,这意味着如果mysqld仅绑定到4个内核,它将忽略其他CPU内核。对于并行读取线程,在MySQL 8.0中添加了一个新变量,您可以调整要使用的线程数。

    然而,我没有深入研究这个问题。可以通过利用MySQL8.0提供的特性来提高性能。

    结论

    MySQL 8.0中有许多改进。基准测试结果显示,与MySQL 5.7相比,MySQL 8.0不仅在处理读负载时,而且在读写混合的高负载下的性能都取得了令人瞩目的进步。搜索关注“腾讯云数据库”官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,更有从初阶到高阶数据库实战教程等你来约!

    再来看MySQL 8.0的新特性,看起来它不仅利用了最新的软件技术(如Memcached的改进,远程管理以获得更好的DevOps工作性能等),还有硬件。例如,用UTF8MB4替换latin1作为默认字符编码。这意味着它需要更多的磁盘空间,因为UTF8在非US-ASCII字符上需要2个字节。虽然此基准测试没有利用使用caching_sha2_password的新身份验证方法,但它是否使用加密不会影响性能。一旦经过身份验证,它就会存储在缓存中,这意味着身份验证只进行一次。因此,如果您在客户端只使用一个用户,则不会出现问题,并且比以前的版本更安全。

    由于MySQL利用最新的硬件和软件,因此会更改其默认变量。你可以在这里阅读更多细节。

    总的来说,MySQL 8.0的性能已经远超过MySQL 5.7了。

    此文已由腾讯云+社区在各渠道发布

    展开全文
  • 本文由云+社区发表作者:数据库版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库...
  • 本文由云+社区发表作者:数据库版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库...
  • 本文由云+社区发表作者:数据库版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库...
  • 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实其内容...
  • [译]坦克的对比:德鲁伊 VS 战士

    千次阅读 2005-08-03 05:37:00
    英文原版:http://forums.worldofwarcraft.co ... mp;tmp=1#post302525我英语四级还没过,中文功底也不行,所以翻译不恰当或者读起来不顺畅还请原谅。让我们从例行声明开始:·我在讨论PVE环境下的内容。·我只拿...
  • 翻译要求说明:现需将pdf格式的中文文档快速翻译成英文文档。如下为原文文档-PDF格式qtrans导出的译文如下:(整体效果)(局部效果:黑体以及字母序号大小写与原文格式一致)翻译狗导出的译文:(整体效果)(局部...
  • 这篇文章我们来把Cortex-M4和Cortex-M3做一下对比。与Cortex-M3相比,M4提供了更丰富的指令集,还有一个可选的MPU单元。在指令集方面,M4比M3多了浮点运算指令、单周期的MAC指令、SIMD指令和更多的饱和指令。单周期...
  • http://www.veridicus.com/tummy/programming/java_vs_csharp.asp
  • MongoDB和Redis对比

    2017-11-22 21:20:00
    google了下,看到有篇英文版的对比英文来自——http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis/ 于是就做了个表格,加上自己使用的一些体会,就有了此文。 MongoDB R...
  • Java VS PHP

    2019-04-26 14:55:36
    英文对比 Language features & libraries Java is strong and statically typed, while PHP is rather weakly typed There thousands of OSS projects for Java (apache.org). Java provides a clean ...
  • 引用 “王者对战”之 MySQL 8 vs ...中英文对比:https://www.oschina.net/translate/showdown-mysql-8-vs-postgresql-10 解读 1、线程和进程那个更适合数据库? 真正了解的人都会明白他们各自有优缺点。pg连接...
  • Apache和Nginx对比

    2016-01-29 11:09:00
    面试过程中被问到Apache和Nginx服务器的对比,因为之前没有关注过这个问题,所以也没能回答上来。 今天在网上搜索资料,发现中文资料极少,还是英文资料多一下。 原文链接:...
  • 本文,就来给大家介绍11款非常惊艳、值得尝试的VS Code主题! 1. Cyberpunk Cyberpunk SCARLET Cyberpunk UMBRA 这款主题的英文名称或许让大家很陌生,但是反映称中文,应该很多人都恍然大悟--赛博朋克,和...
  • 预处器的对比——Sass、LESS和...英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout 中文译文:http://www.w3cplus.com/css/sass-vs-less-vs-st...
  • 于是我找了一篇英文博客:TCP/IP vs OSI Model: What’s the Difference? 1觉得它讲的挺详细的,就想把它翻译成中文。主要是觉得翻译英文博客,需要更仔细去理解博客内容,要推敲,要查资料印证自己的翻译。当然,我...
  • 英文原文:Modern C++ vs Managed Code: Performance vs Productivity  最近,一场有趣的讨论在微软公司的 Herb Sutter 和 Mono 项目的 Miguel de Icaza 之间展开,话题是关于本地代码和 Just-In-Time 编译器的...

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

对比英文vs