hash分区一般分16还是32 如何设计一个能够高效查询的千万级MySQL数据库?

[更新]
·
·
分类:互联网
5048 阅读

hash分区一般分16还是32

如何设计一个能够高效查询的千万级MySQL数据库?

如何设计一个能够高效查询的千万级MySQL数据库?

首先要确定你的目标,所谓千万级是每秒千万次查询还是千万条记录的数据库,前者是一个极其复杂的,这个不是光告mysql能解决的,我想不是前者,而后者却是很简单的一件事,前提是定义高效,定义两个指标:
1,每秒查询的次数是多少
2,每次查询时长
确定好以后再考虑以下几个因素的优化
1,存储的类型,SSD比普通磁盘的随机读写能力可以提高不少,一般2到3个数量级,还要看索引和数据块的大小,比较复杂
2,先择RAID类型,如果选raid 0和raid10可以提升近似1倍的速度
3,使用高带宽的网速,可以减少网络传输延迟,用10g的光纤比1g的电缆理论上可以提升1个数量级的吞吐量,尤其对大数据据量的结果集特别有效
4,合理的索引,带条件的检索字段加上索引
5,用大宽表,尽可能减少多表关联查询,用空间换时间吧
6,釆用主从的集群,基本上查询的并发量和服务器的数量成正比的
7,使用缓存,如memcached,尤其对静态数据提升尤其明显
8,合理选择数据库字段的类型,用定长字字,不要用变长的,如定长的int,char,decimal类型,别用varchar,text等
9,给数据库配置更大的内存
10,检查下瓶颈在不在CPU,如果查询复杂,换个更高配置的服务器
总的原刚就是,尽可能用内存替代碰盘提升IO速度,提高网络和CPU的配置以减少查询时间;尽可能提升网络速度,内存和主机的数量以提高并发

hadoopreduce主要特点?

1.计数器
在MR作业中内置计数器,统计任务状态,用户可以自定义计数器以实现统计目的,这块比较简单,不是什么原理性的东西,直接略过
2.排序
排序是MR中比较核心的问题,MR中数据是通过排序来进行组织的。排序的效率直接影响着整个作业的运行效率
i)部分排序
在Map任务执行完毕之后,写入到磁盘文件之前,对输出数据进行预排序。这样的排序是按照键进行字典排序而成,将键相同的数据组织到一起。
预排序完成之后,将数据写入本地磁盘,而后通过Partitioner将数据映射传递到对应reducer,默认是一个HashPartitioner进行分区。对键进行hash处理,将值对reducer数目取模,从而确定reducer。
数据传递到reducer之后,reducer对每个分区内数据进行合并排序,依然是按键字典排序,当然也可以通过继承RowCompartor类并且显示设置comparatorClass指定排序方式,这样一来每个reducer输入分区的数据都是有序的,但是就整体所有数据而言,并不是有序的,所以称之为部分排序。
2.完全排序
要想实现所有数据均可以实现有序,那么需要对Partitioner进行设置为TotalOrderPartitioner,对所有数据进行分组,比如说将数据分为{a,b,c,d,e,f}六个分组,那么a组所有键必须小于b组,而b组所有键必须小于c组,以此类推,这就意味着是按照键的范围对数据进行分组。