《互联网创业的准备》系列文章 硬盘常识: 机械硬盘hdd固态硬盘ssd 最小单位1个扇区为512b,或4k(2012年民用普及)1个分页为4k、8k或更高() 性能因素转速(rpm):5400、7200、1w、1.5w层数:slc(单层快)、mlc(双层慢)、tlc(三层更慢,ssd暂未采用,
《互联网创业的准备》系列文章——
硬盘常识: 机械硬盘hdd固态硬盘ssd
最小单位1个扇区为512b,或4k(2012年民用普及)1个分页为4k、8k或更高()
性能因素转速(rpm):5400、7200、1w、1.5w层数:slc(单层快)、mlc(双层慢)、tlc(三层更慢,ssd暂未采用,u盘大量采用)
接口sata 3g、sata 6g(2012年民用普及)、sas 6gsata 3g、sata 6g、sas 6g、pci-e
尺寸2.5英寸、3.5英寸2.5英寸、pci-e版型
常见品牌西部数据、希捷intel、镁光(crucial)、浦科特(plextor)
硬盘性能指标:
连续读写(常用单位为mb/s):文件在硬盘上存储位置是连续的,适用场景:大文件拷贝(比如视频音乐)。速度即使很高,对数据库性能也没有参考价值。
4k随机读写(常用单位为iops):在硬盘上随机位置读写数据,每次4kb,适用场景:操作系统运行、软件运行、数据库。(图片静态服务器、视频静态服务器是大文件,测试64k随机或更大)
常用硬盘性能测试软件:
windows:as ssd benchmark、crystaldiskmark、hd tune pro、iometer
linux:iometer
align i/os:硬盘io大小。测试设备时根据硬盘最小单位进行选择,机械硬盘上选512b或4k,ssd上选4k、8k等。测试分区时受分区sector size影响。由于linux ext3的sector size为4096,所以在扇区为512b的机械硬盘上也无法选择align i/os on 512b进行测试,测试效果不佳。vps无法进行设备测试,如果是自购服务器,应使用设备测试。
seq 即 sequential 即连续读写。as ssd会先以16mb的尺寸为单位,持续向受测分区写入生成1个达到1gb大小的文件,然后再以同样的单位尺寸读取这个,最后计算平均成绩而给出结果。
4k 即 random 4k, queue depth=1 即 随机4k并发1个队列。as ssd会以512kb的单位尺寸生成1gb大小的测试文件,然后在其地址范围(lba)内进行随机4kb单位尺寸进行写入及读取测试,直到跑遍这个范围为止,最后同样计算平均成绩给出结果。
4k qd32 即 random 4k, queue depth=32 即 随机4k并发32个队列。
4k-64thrd 即 4k, 64 thread 即 随机4k并发64个线程,和 4k qd64是一个意思。as ssd会生成64个16mb大小的测试文件(共计1gb),然后同时以4kb的单位尺寸,同时在这64个文件中进行写入和读取测试,最后依然以平均成绩为结果。
通过as ssd可以看出,iops与mb/s可以直接换算,比如4k读取是6227iops,即每秒钟可以读取6227个4k的文件,即 6227 * 4k / 1024 = 24.3 mb/s。
intel的ssd性能数据采用iometer 4k qd32的测试结果:
价格与速度:
型号容量2012价格4k qd32随机读/写(iops)4k qd64连续读写(mb/s)
民用 机械7200rpm 3.5英寸 sata 6g希捷barracuda 7200.143tb¥1.1k409/365386/291200/180
企业级 机械10000rpm 2.5英寸 sas 6g 希捷savvio 10k.5300gb¥1k750/700 170/170
企业级 机械15000rpm 2.5英寸 sas 6g希捷savvio 15k.3300gb¥2.2k
企业级 固态slc 2.5英寸 sata 3gintel x25-e32g¥2.5k3.5w/3.3k 250/170
企业级 固态mlc pci-eintel 910400g¥14w9w/3.8w 1000/750
企业级 固态mlc pci-eintel 710100g¥2.5k3.8w/2.3k 270/170
民用 固态mlc 2.5英寸 sata 6gintel 520120g¥8402.5w/8w 550/500
民用 固态mlc 2.5英寸 sata 6g镁光 m4128g¥8007.8w/4.2w7w/4w500/175
为什么民用ssd的iops很高价格却很低,而企业级ssd的iops有的很低而价格却很高?因为企业级ssd的耐用性高,比如intel 710 100g寿命为4k写入500tb,即5000次全盘写入。
intel ssd寿命指标:smart中的“e8:avai lable reserved space”:可用的预留闪存数量、“e9:media wearout indicator”:闪存磨耗指数。其他厂商的ssd类似,比如镁光的wear leaving count。
ssd新盘的剩余磨损为100,当低于10时,应更换,报废。
todo:数据库的选择
关系型数据库用mysql还是postgresql,或者全用nosql?mongo还是hbase?
mysql 和 postgresql都可以。mysql用的人多,但是oracle收购sun以后,把mysql限制的更加封闭,正在衰落,和可能和openoffice一样被oracle整死,免备案空间,衍生出libreoffice。但不用很担心,即使mysql被oracle整死,也会衍生出开源版本,使用方式一样。
关系型数据库和nosql搭配使用较好,关系型适合底层业务,nosql适合上层业务。关注淘宝hbase的使用。
mysql性能与硬盘iops的关系:mysql可以把读取结果放在内存中,即query cache,所以db server安装大内存即可实现只读内存、不读硬盘。
当预计数据量会增长到超过内存大小时,进行分表(把一个表中的数据拆分),放到多个大内存服务器上,保证每个服务器上的数据都小于内存大小,香港服务器,即可实现全部缓存。
2012年内存价格:udimm no ecc ddr3 1600民用内存 ¥270/8gb,rdimm ecc ddr3 1600服务器内存 ¥440/8g。但一台服务器能安装的内存有限,2012年典型的dell服务器有24个插槽,主板芯片支持768g内存,2012年ddr3内存生产工艺最高是单条8g(ddr4已实现单条16g,但主板尚未支持ddr4),所以一台服务器最大内存192g(¥440 * 24条 = 1w)。
数据库写入时必须写硬盘(否则就不叫持久化存储了……),¥2.5k的intel 710企业级ssd的写入iops为2.3k,而万转硬盘的iops为700,如果要达到ssd的性能,需要多块万转硬盘组raid。如果使用iops为3w的ssd,性能比机械硬盘提升了30倍。
如果数据量不大,远低于192g,就不需要做分表了吗?
仍然要分表,原因有2个:
1、大内存会提升mysql读取性能,但并发读取能力也是有上限的,香港虚拟主机,这时受cpu性能限制,2012年典型的服务器是双路,即2个8核cpu(mysql内存并发待测试)。
2、内存很大,对并发写入能力没有作用,写入能力完全依赖于硬盘的iops。一台服务器的写入性能很有限,请看下面的测试。