从需求角度看NOSQL发展
早先当640kb就足够使用的观点流行的时候,数据处理规模很小,需求也不多,于是简单的文件存储即可满足需求,发展一段时间之后ISAM之类的简单存储就可满足需求,再之后sql流行,当sql为了适应各种需求变得越来越庞大的时候,效率也止步不前,在将缓存和多线程性能榨取完了之后,sql各项性能还只停留在满足常规应用的地步,难于处理1秒万次以上的读写操作,也难于解决万个以上的并发连接,一般的企业不可能动不动就上硬件,所以nosql发展是时代的需要是需求的推动。当然一般sql对传统企业还是足够满足的,所以我们在nosql的发展上没看到传统企业的身影,只看到当前发展最快的SNS公司积极推动nosql不断发展,著名的如:Facebook 推动Cassandra发展,Linkedin推动Voldemort发展,这都是最大的一类sns网站,这些网站都有几千万以上的用户,巨量数据读写,所以这些数据库都是极其强调分布式应用的,并不单纯的强调每个点的读写性能。再看小一点的mixi推动的Tokyo Cabinet和Tokoy Tyrant,green.jp推动Flare的发展,这些数据库都满足于几千万条数据的高速访问,也没看到特别的强调并发性,只强调他们的速度,当然几千万条数据还是有可能全放在内存里面的,就算放不下全部数据也至少可完全放下全部索引,这样读写当然快了,据说tt到亿条之后写性能急剧下降,大概就是这个原因吧。纯内存式数据库也必须要提一下,典型的如LiveJournal开发的memcached以及另一个新秀Redis等,前面提到的tt也支持memcached的协议,虽然这类数据库有很多局限,但在某些场合的确又很适合,memcahced其实连持续存储都不支持,为了解决持续存储问题,又有人发展了一些,如tt其实就是一个支持存储的memcached,国内新浪团队也给memcached加上berkeleydb支持持续存储。
上面说了这么多,无非想说一句话,需求推动技术进步,每一个技术进步其实都是为了满足某种需求的结果,就如google的三大基石bigtable、gfs、map/reduce都是为了解决它的巨量数据而折腾出来的东西,google也正是靠这几个核心技术把持了互联网近十年的风光。同理我们可以想见,虽然百度没有大力的宣传他们的底层技术,但我们很容易想到,他们一定也是需要这些技术的,而且他们内部就算没有这些技术,但一定有类似的接替代产品,否则支撑不了他们那么巨量的数据,虽然替代产品未必有google的产品那么好,但大概是略差一点或相当的水平吧。国内互联网巨头腾讯支持了国内最大的im应用 10亿级,最大的棋牌游戏近亿在线,加上他们布局网络门户,布局qzone等,都是巨量用户,可以想见他们一定有类似的方案,早先听说他们棋牌游戏是通过很多mysql + proxy来完成的,虽然这个方式现在看起来也不是很完美,但至少是一个可行的解决方案,臆测下可以这样使用,proxy有个巨大的hash表,每个qqid计算一下就知道在哪个区段,重定向到哪个区段读写数据即可,说起来容易做起来难啊,就算我玩种菜都不知道遇到多少次他们数据出故障了,说明他们的系统面对巨大数据压力的时候还是碰到了很多问题。国内还有个公司不得不提,阿里巴巴淘宝,马云团队发迹很快,淘宝每年不知道要成交多少笔,但他们的数据也是一个天量,看了下他们dba团队的主页,牛一点的dba都笼络了不少,就是自己开发能力稍弱了一点,纵观国内对巨量数据需求最迫切的也就这几家公司了,虽然之后的51、开心网、盛大等也有类似需求,但数据量总归还是没有超过前面几家公司。
在需求的推动下,国内的nosql、key-value应用也慢慢发展了一些,如张宴在新浪搞的memcachedb,到金山之后搞的dbcached,豆瓣开发的beansdb等,还有一些没开源没介绍不大为外界知道的应该也有一些,但总的来看水平还是比较低,有点不成气候的样子,靠的大多是1-2个牛人支撑,离开了这么几个人就不行了,东西也没人维护,的确,离开了巨量数据的需求一般的企业用sql就能满足也不会去研究这些东西,少数小一点的互联网企业有这个需求又没有相应的人才有能力去研究,年轻一点的开发人员都在玩概念想做也做不出这些东西,毕竟做这些东西没有很深厚的数据结构知识,没有3-5年的深入编程磨练是不可能真正做好一个像样东西的,矛盾啊。
最后说下我最近在做的一个东西,分布式md5计算,这个东西网上随便查一下就知道做的人不少,提供网站服务的都不少,但搜了几篇文章,看了几个网站www.cmd5.com www.md5.com.cn就知道,水平之低下超出了我的想象,基本上还是停留在用sql数据库的层次上,根据这些网站写的时间节点感觉他们大多数时间就是在制造数据,速度大概是几个月制造几十亿条数据,都号称有几万亿条数据,但事实上提供公开查询的数据只有区区几亿条,其他都要收费才能查询,天知道到底有没有那几万亿条记录,看上很吸引人,其实用处不算很大,用我最近整的md5数据制造方法1秒制造100w条数据,1亿条数据也就在2分钟内搞定,几亿条数据也不过10分钟左右就生成好了,1亿条记录耗费空间1.5G左右,不过10G左右空间即可,技术含量可见并不是很高。 其实我做这个项目并不是想做个类似的网站,主要是觉得这个东西玩技术很有意思,可大可小,一台机器也可玩,1T硬盘放600亿数据没问题,1万台机器也不多,全字母遍历到10位就算是上1w台机器也不够用,分布式存储分布式计算典型云计算概念,client可p2p可不p2p,很多技术元素都可参与其中,很有玩性的一个程序,所以就较上劲了,也好,正好练练技术,玩玩nosql的概念。
各种新兴技术出来都看到国内有深入分析,就说nosql系列的吧,深入分析memcached,深入分析tt,深入分析Cassandra的文章不计其数,到底也没看到有几个国人能写类似的东西,分析得头头是道,做的时候白痴一样,就算是使用都难用好,更别说自己动手做个这方面的好产品了,国情如此,略感欣慰的是国内现在也有一些公司和一些高水平的人真正参与其中,未来还是有可能有所突破的,正入本文所说,需求会推动技术发展,但短期肯定还是国外为主,国内的产品最多是一丝点缀。