年度技术回顾之数据库、NoSQL、开源软件

| 10 Comments
本文已经首发于InfoQ中文站,版权所有,原文为年度技术回顾之数据库、NoSQL、开源软件,如需转载,请务必附带本声明,谢谢。

InfoQ中文站是一个面向中高端技术人员的在线独立社区,为Java、.NET、 Ruby、SOA、敏捷、架构等领域提供及时而有深度的资讯、高端技术大会如QCon、免费迷你书下载如《架构师》等。

年终岁尾,做个总结吧。要说过去的这一年,起码国内的技术会议多了很多,甚至是几千块的门票也有市场了,可能也是物价上涨的副作用?像 QCon(Beijing)、SD 2.0 、微博开发者大会、TUP、UCD 年会、D2 年会、Verlocity(Beijing) 等会议,参会人都非常踊跃甚至有些会议一票难求,这是好现象,相信 2011 年有更多有价值的会议值得我们参加。再说说技术方面的事儿吧,下面是我的几个关注点。

数据库

Oracle RDBMS 、SQL Server 、DB2 等几大商业化产品似乎没什么值得一说的事件。Oracle 公司收购 Sun 之后,MySQL 前途曾一度堪忧,现在看起来 MySQL 生命力依旧顽强,只是在今年开发节奏明显慢了不少,也或许是 Oracle 在调整节奏,不过 5.5 版本的发布还是让不少 DBA 颇为惊喜,除了 InnoDB 成为默认的存储引擎之外,其他的一些特性倒是差不多都来自技术社区的反馈或是驱动,比如来自 Google、Facebook 的改进,多少对新的 MySQL 特性产生了一定影响。值得注意的是,这一年中 PostgreSQL 发展相当的迅猛,随着 9.0 的发布,引入了更为高级的复制技术,弥补了功能上的一个短板,MySQL 的命运多舛给 PostgreSQL 带来了契机,令人感慨。以前我期待的 SSD 虽说已经逐渐成熟,但似乎没有像预期的那样对数据库软件带来更大的影响。

NoSQL

去年的回顾文章中我说到 "就数据管理方式的趋势来看,NoSQL在将来会成为一个非常重要的数据解决方案"。一年之后,NoSQL 的确已经成为网络架构中一个基础的组成部分了。涌现出来的 NoSQL 相关的产品,最成功的要数 MongoDB,在新型 Startup 中颇为流行,赢得了不少创业技术团队的青睐 (比如,引领创新潮流的 LBS 先驱 FourSquare就是采用的 MongoDB ,尽管为此吃了不小的亏 ),创建 MongoDB 的 10gen 技术团队甚至在年底拿到了红杉的风险投资。除了 MongoDB 之外, Redis 的发展也不错。来自名门大厂的 Cassandra、Dynamo、CouchDB 等产品的发展倒是稍显平淡。作为 MySQL 的 NoSQL 插件出现的 HandlerSocket 的让人感到惊喜。这个技术方案会给很多应用场景带来新的契机,相信新的一年会有很多技术团队大胆的采用 HandlerSocket。其它几个 DB,似乎到现在仍没有类似的解决方案出现。

我有一个猜测是 Redis 从 VM 转向 Diskstore 模式后,有可能超越 MongoDB 么?

开源试水

Yahoo! 发布的 S4 不出意外的话,极有可能成为 Hadoop 那样有影响力的项目,对于实时计算领域会带来极大的冲击 。相信今年国内会有用户进行尝试。LinkedIn 开源的 Kafka 也有必要关注一下。针对招聘类网站会有一定的借鉴意义。

2010 或许可以称之为中国互联网企业回馈开源领域的试水之年。先是淘宝网开源平台,淘蝌蚪 (code.taobao.org) 的上线并且推出分布式 Key-Value 存储及高性能缓存系统----TAIR,随后开放了淘宝文件系统以及 WebX 框架,足见诚意。說起 WebX,人人网也发布了自己的开源 Web 开发框架 Rose。然后有盛大创新院开源哼唱检索引擎,随后在互联网口水大战尘埃落定之后,金山的启动金山卫士开源计划,甚至百度也发布了 JavaScript 开发框架 Tangram --喊了一年终于开源了一个产品出来,颇为不易阿。而淘宝系的前端工程师们的开源项目 KISSY 发展也颇为迅猛,推荐关注。更早一些的开源项目,豆瓣的 BeansDB 在年底进行了大幅度更新,再次引起技术社区的注意。此外,射手播放器作者沈晟发布的基于MongoDB的短网址分支项目 SESO 也很有意思,希望能继续发展下去。基于 Key-Value 的开源产品多了不少,天涯也开放了一个 Memlink

以团队为单位进行的产品开源,很容易变成一个只是"公开代码"的项目,开源,还应积极鼓励技术团队成员积极的与技术社区互动,输出更多文档,用更多的案例支撑,这样才能相辅相成,才能取得真正的收益。否则的话,容易被看成为了开源这个"名"而开源,有始无终。

期待在 2011 年,腾讯能在开源领域做点表率?还是网易开源一个游戏引擎呢?只有拭目以待了。也期待国内互联网企业能积极支持开源社区,不要只顾着开源自己的那几个产品。开源比封闭更值得欣赏,心态也比姿态更为重要。

说到开源,顺便说一下"开放平台",2009年喊着做开放平台的各大网站,现在已基本偃旗息鼓,国内这一年中也没有一家将所谓的"开放平台"真正的做起来,倒是经过一年多的铺垫,新浪以微博为基础的的应用平台已经具备了一定的潜力和规模,2011年值得期待。如果说开源,看的是心态,那么,开放平台,则看的是企业的心胸。

2011 做点什么?

眼看着越来越多的解决方案,越来越开放的技术分享,不由得让人生疑:架构是否已经不再重要?其实,构建一般中到大型的站点,已经没什么秘密技术可言(比如,还有人一度放出来"腾讯大讲堂"这样的内部信息资料,颇为戏剧性,但大家看了之后也就是新鲜几天而已,网络中更有价值的信息已经是比比皆是了)。重要的是如何用成熟的技术将产品做好,加快开发节奏,更快改进产品质量。

所以,对我自己而言,新的一年重要的还是回归基本技术,和团队一起将丁香园( http://dxy.com )的产品做好,"望着天上的星,也要看着脚下的坑",关注新东西,更要避免因为技术冒进造成不必要的人力物力浪费,说起来容易,真的做起来,怕是也没那么简单。

--EOF--

10 Comments

评论不成功?
微博类应用确实缺一个完美的整合和通知

这篇精彩,建议办成年度栏目。

一直以来,学习新技术,慎用新技术...

对于开放而言,目前各大互联网公司都在搞开放,从微博开始向各个领域推进,包括腾讯、新浪、搜狐、网易等大公司也在积极准备着,2011年,会是中国互联网的开放年,在上半年会爆发出来。

期待2011!期待NoSQL的蓬勃发展!

开源软件如火如荼!中国软件的兴旺一定从开源始。

作为一个中小企业(webgame)的IT从业者,相对而言我更关心的是各个大厂商的开放程度,比如腾讯、新浪、网易的开放平台,可以使我们产品整合这些大厂商的应用。当然也免不了去了解团购、微博、SNS、LBS的发展情况。作为技术人员,相对而言我更关心mysql、html5的发展。关于HTML5,借此地呼吁一下国内用户抛弃IE6

喜欢这句话 "望着天上的星,也要看着脚下的坑",同时也勉励下自己~

>> 我有一个猜测是 Redis 从 VM 转向 Diskstore 模式后,有可能超越 MongoDB 么?

其实Redis根本就不能和MongoDB相提并论。因为MongoDB跟多像一个数据库,并且来替代MySQL,而Redis跟多是一个跟高级的Memcache。

从架构角度来说,用Redis在中大型项目中替代MySQL根本没有任何意义,因为Redis虽然支持不同的数据类型 (hash, string, set, sorted set和list),但是始终是一个Data Store,在 memory 和磁盘上做缓存 (补充一下,Redis支持把内存数据写入磁盘)。很多你可以用MySQL做出的select操作在Redis中要通过预先处理数据结构的方式来解决(暖缓存),而不能,或很难像mysql那样just-in-time来进行。 据个例子,mysql中要搜索出某些符合不同条件的语句是:

select data from table where column1="ABC" and column2="EFG" and column3="HIJ"

在Redis中,第一种方法是用list作为数据结构存储table中每条数据, 然后for到内存里,并且用一门其他语言来做匹配,但是因为Redis因为只是个Key Value Store,不像MySQL支持Index,所以复杂度要比MySQL同样的操作要高, 以上操作通过Redis为 O(n), n 为 |table|, 就是list的数量。第二种方法可以通过set来存储,并且利用 sinter (交际),来做搜索。复杂度威 O(n*m),但是n是你最小set的基数,m是你的set的数量(这里为3)。


同样的,用MongoDB当做MySQL,并且不用Memcache或Redis也是从架构设计角度的误差,因为从经济效益和架构性能角度而言,MongoDB和MySQL一样在Replication的时候只支持一台Master做写操作:

MongoDB supports asynchronous replication of data between servers for failover and redundancy. Only one server (in the set/shard) is active for writes (the primary, or master) at a given time. With a single active master at any point in time, strong consistency semantics are available.
http://www.mongodb.org/display/DOCS/Replication

用来扩展写还是需要通过数据分割(分库,分表)来完成。但是如果需求要达到高可用的话,Sharding 会需要很多服务器,提高很多架构成本。而如果架构上添加一个In-disk或In-memory cache的话可以达到同样的新能,同样的高可用性,并且节省很多服务器。

所以说,像MongoDB这样的数据库系统永远都不会替代像Redis这样的缓存系统,相同Redis也不会取代MongoDB,因为两者根本不能在同一个级别上做比较。