利用分表存储来提高网站负载与性能


▲支付宝资深数据库教程架构师童家旺

  第二、不访问不必要的数据:使用B*Tree/hash等方法定位必要的数据。使用column Store或分表的方式将数据分开存储。使用Bloom filter算法排除空值查询。

  第三、合理的利用硬件来提升访问效率:使用缓存消除对数据的重复访问。使用批量处理来减少磁盘的Seek操作。使用批量处理来减少网络的Round Trip。使用SSD来提升磁盘访问效率。

  响应时间和吞吐量之间的关系

  1、性能。衡量完成特定任务的速度或效率。

  2、响应时间。衡量系统与用户交互式多久能够发出响应。

  3、吞吐量。衡量系统在单位时间里可以完成的任务量。

  

  ▲反应时间

  

  ▲传统磁盘的访问特性

  B*Tree优化数据访问介绍

  

  ▲B*Tree优化数据访问

  B*Tree优化数据访问模拟场景

  性能测试 负载测试">

  ▲B*Tree优化数据访问模拟场景

  童家旺通过阿里巴巴的真实应用场景介绍了如何用分表存储来提高性能。

  一、场景介绍:

  1、表VeryBigTable含有30个列

  2、表的记录数为50,000,000条

  3、平均每个用户为300条左右

  4、其中有2个列属于详细描述字段,平均长度为2k

  5、其它的列的总长度平均为250个字节

  6、此表上的查询有两种模式

  7、列出表中的主要信息(每次20条,不包含详细信息,90%的查询)

  8、查看记录的详细信息(10%的查询)

  9、保存与Oracle数据库,默认block_size(8k)

  二、要求:

  1、对此业务进行优化

  2、分析数据,说服开发部门实施此优化

  三、性能分析

  1、每块记录数

  8192 * 0.80(1) / 250 = 25.5 (主表)

  8192 * 0.80 / 2000 = 3.27(详情表)

  8192 * 0.80 / ( 2000 + 250 ) = 2.91

  2、访问的逻辑IO(内存块访问)

  List的查询代价

  改进后=( 300/25.5 ) * y + 4 + x = 4 + x + 11.8y = 4(2) + 7(3) + 11.8 * 1.5(4) = 28.7

  改进前=( 300/2.91 ) * y + 4 + x = 4 + x + 103.y = 4 + 7 + 103 * 1.5 = 165.5

  3、访问涉及到的物理读(磁盘块访问)

  List的查询代价(逻辑IO * ( 1 – 命中率 ))

  改进后=28.7 * ( 1 – 0.85(5)) = 4.305

  改进前=165.5 * ( 1 – 0.85 ) = 24.825

  4、访问时间(ms)

  改进前=逻辑IO时间+物理IO时间= 28.7 * 0.01(6) + 4.305 * 7(7) = 30.422ms

  改进后=逻辑IO时间+物理IO时间= 165.5 * 0.01 + 24.825 * 7 = 175.43ms

时间: 2024-10-20 21:46:08

利用分表存储来提高网站负载与性能的相关文章

如何用分表存储来提高性能 推荐_数据库其它

首先,童家旺介绍了他认为的什么是优化:第一.做任何事情最快的方法就是什么也不做. ▲支付宝资深数据库架构师童家旺 第二.不访问不必要的数据:使用B*Tree/hash等方法定位必要的数据.使用column Store或分表的方式将数据分开存储.使用Bloom filter算法排除空值查询. 第三.合理的利用硬件来提升访问效率:使用缓存消除对数据的重复访问.使用批量处理来减少磁盘的Seek操作.使用批量处理来减少网络的Round Trip.使用SSD来提升磁盘访问效率. 响应时间和吞吐量之间的关系

浅谈利用五个相关性有效提高网站排名

现在的搜索引挚对于相关性的判断,没有一个站长可以说得清道得明的,都是依据一些排名靠前的网站的数据大致分析得知的.而对于搜索引挚给予网站什么样的排名,其相关性占据着非常重要的位置.大部分站长都知道网站中无论是站内还是站外的,都希望与网站的相关性越强越好.毕竟能提高排名的因素站长都非常重视的.今天大中华人才网谈谈利用几个相关性提高排名的方法: 一.域名的相关性 现在站长在建立新网站前,首先就是确定自己的网站类型,自已想要建个什么类型的网站,然后再根据网站的类型注册相关的域名,比如说要做与网站优化有关

MySQL 分表存储的使用示例

一般我们项目中如果数据量特别大的话通常会考虑将某一表数据进行分表处理,例如:我们的用户访问日志.如果将该数据始终保存在一张表的话那么久而久之这张表的数据量会特别大,导致查询效率降低.这个时候就需要考虑将该数据分别存储到多张表中. 而日志数据具有典型的如下特点: 1. 数据量大. 2. 每天每月都稳定输出. 3. 对数据的操作在插入之后大部分只有查询,很少有编辑或者删除操作. MySQL数据库提供了数据分表的方式. MERGE存储引擎 我们在使用SQL语句Create table创建表时可以指定数

MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

mysql|比较|性能 MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条.后来换成MyISAM格式,一秒钟插入上万条.当时决定这两个表的性能也差别太大了吧.后来自己推测,不应该差别这么慢,估计是写的插入语句有问题,决定做个测试:测试环境:Redhat Linux9,4CPU,内存2G,MySQL版本为4.1.6-gamma-standard测试程序:Python+Python-MySQL模块.测试方案:1

MySQL两种表存储结构MyISAM和InnoDB的性能比较测试_Mysql

MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条.后来换成MyISAM格式,一秒钟插入上万条.当时决定这两个表的性能也差别太大了吧.后来自己推测,不应该差别这么慢,估计是写的插入语句有问题,决定做个测试:测试环境:Redhat Linux9,4CPU,内存2G,MySQL版本为4.1.6-gamma-standard测试程序:Python+Python-MySQL模块.测试方案:1.MyISAM格式分别测

数据库水平切分的原理探讨、设计思路--数据库分库,分表,集群,负载均衡器

本文转载:http://www.cnblogs.com/olartan/archive/2009/12/02/1615131.html 第1章  引言 数据量巨大时,首先把多表分算到不同的DB中,然后把数据根据关键列,分布到不同的数据库中.库分布以后,系统的查询,io等操作都可以有多个机器组成的群组共同完成了.本文主要就是针对,海量数据库,进行分库.分表.负载均衡原理,进行探讨,并提出解决方案. 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每

DB 数据库水平切分的实现原理解析---分库,分表,主从,集群

第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的 互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层 已经成为架构研发人员首选的方式.水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失.通过负载均衡策略,有效的降低了单台 机器的访问负载,降低了宕机的可能性:通过集群方案,解决了数据库宕机带来的单点数据库不能访问的问题:通过读

mongodb 分片代替数据库分表

MongoDB 的Sharding机制解决了海量存储和动态扩容的问题,但离生产环境的高可靠,高可用还有距离,Sharding在单点出现故障时就无能为力了.但是 MongoDB的副本集却可以很轻松的处理单点故障,所以就有了Replica Sets + Sharding的高可用,高安全的架构.Mongodb支持自动分片和划分架构,可以利用它构建一个水平扩展的数据库集群系统,将数据库分表存储在各个sharding节点上. 架构如下:       1,shard服务器:使用Replica Sets确保每

分享DEDECMS建立模型及分表操作经验

2004年,刚建站的时候,我曾经用过http://www.aliyun.com/zixun/aggregation/16485.html">DEDE2.0,那个时候由于不太懂PHP,就没有搞下去. 后来在DEDE3.1时用上了他,感觉不错,但是由于他跟DZ的混合度不高,所以就放弃了.改用了SUP+DZ的模式. 由于时间的推移,发现SUP官方基本上停止了SUP的开发,再加上,SUP有自身的毛病,就索性放弃了SUP的使用,虽然被百度收录了好几万页,但也义无反顾的换了DEDECMS. 目前我的站