最近在搞360指数项目,挑战还是比较多的,现在项目已经基本ok了,拿出点时间来总结一下。

首先说说存储,需求的数据量比较大,又有一些弱关系的查询需求,首先放弃的就是mysql和redis,然后跟DBA沟通了下,使用mongoDB似乎是个不错的选择,在开动了之后才发现,数据量比预估的还要大,DBA的SSD资源不足以支持我们的项目,我们就自己搞了一台有4个2Tsas盘的机器,DBA在上边搞了24个分片,很轻易的,我们就把磁盘IO搞满了,数据写的速度慢的要死,在ssd上有1-2w/s的速度,在sas盘上,就只有几百了,数据量实在太大,需要录入一直到去年年初的指数数据,如果要想在上线前把数据录入完成,这样下去是不可能了。 随后我们又搞了两台给Hadoop集群使用的机器,每台机器有12块SCSI硬盘,看起来些写性能应该能翻个几番,但其实,部署完了之后,才发现,写入速度也才刚能达到1-2k,距离我们的需求还差的很远。

其实,我们要求的也只是数据的初始化速度要快一些,上线之后,这样的写性能也足以支持我们把增量数据录入,所以,我们还可以通过借一些ssd硬盘来加快写入速度,然后把数据对拷到scsi硬盘,这样,数据初始化的问题就可以解决了。本来已经从其它部门的同事那里借到了25块ssd,不过在跟他们进一步沟通之后,发现公司有可以提供线上服务的Hbase集群,虽然在存储选型初期也想过Hbase,由于当时对Hbase了解较少,也不知道有可以提供线上服务的集群,就这么错过了,与系统部的同事沟通后,我们数据量最大的两块数据,是可以迁移到Hbase使用的,这块数据占到我们总数据的90%,这部分数据通过Hbase解决后,其它数据再使用Mongodb就毫无压力了。最终,我们的最大数据部分的需求,通过合理使用Hbase的column_qualifier和version得以解决。而且单纯存入这批数据的map/reduce时间,仅仅使用了17分钟。

这里还要感谢一下DBA和系统部的同事,在好几个夜晚帮我们部署环境,解答疑问,使我们的项目得以顺利前进。

嗯,,,项目中还用到了一个自己封装的php扩展,单独写个文章介绍下吧。