RSS 2.0 Feed
2008-01 Entries
摘要:       昨天,由Sisley Lin 处得知,我将被推荐成了“十大杰出开发技术英雄”候选人之一,有点激动。推荐的理由是我为CSDN 这个最大的中文技术社区的成长所贡献的这些年。当我回首看自己在CSDN经历时,发现自己已为CSDN公司工作了7年半,在CSDN 论坛活动了8年。蓦然回首,八年光阴已匆匆而过,心中真是感慨万千呀。        记得那是在99年底,2000年初时,我从大学毕业刚半年,跟随一个我的铁哥们跳槽到一家新成立的电子商务的网站(http://www.ego88.com/, 不过这个网站现在已经无法访问了)。由于之前我是在一家使用Delphi开发ERP,医院信息系统的公司,我对Delphi非常感兴趣,当时最常去的就是大富翁论坛(http://www.delphibbs.com/)。经这次跳槽后,由于转行做网站,就开始学习ASP技术。在大富翁论坛时,听说新开了一个程序员的论坛CSDN,而CSDN有个板块在讨论ASP,于是乎,就整天泡CSDN论坛的ASP版,边学习,边帮别人解答问题。慢慢的,自己的ASP水平也提高起来了,后来就成了ASP版的最早一任版主。那时候,也达到了自己在CSDN专家榜的最高排名——CSDN总专家榜排名13。        2000年6月时,由于我在EGO88网站经常跟技术经理发生技术争执,被开除了。痛定思痛之后,我决定离开杭州,来北京发展,没想到这次离开成了我人生的转折点。恰巧当时CSDN网站刚刚被百联集团收购,准备扩展业务,正在不断招纳新人,于是我便和曾登高联系了一下, 7月15日就来到了北京,从此就开始了我为CSDN网站工作的历程。        还记得当时CSDN公司在亚运村,就是现在鸟巢的位置,而我就租住在旁边的惠忠北里小区。每天早上,我都从小区出来,向北跑步,就是现在的大屯路一带,全是麦田和菜地。不想经过这五六年的发展,现在这一片的房价均价已达到一万元以上…….        我在CSDN负责的第一个项目是文档中心(http://dev.csdn.net/ 现在这里已经不归我负责了,也不是我当初做的那个风格了),就是现在博客的前身,不知道还有多少人记得这个产品。当时为了测试和运作文档中心,我从2000年7月开始,疯狂转贴了很多文章。而文档中心文章在升级成博客后,全部迁移到博客中了,这还一度造成我的博客发文数是第一。        随后,在从事了其他一些小的工作后,我就接手了CSDN论坛,当时那一版本的论坛仍然是ASP开发的,采用了双缓存机制,同时静态帖子采用了XML+XSL技术。说起来你可能不相信,那一个版本的论坛是完全由我一个人开发完成的。 那可是单枪匹马闯五关的时代呀,由于我最早使用XML技术,最初时有些技术难题没能解决,一度被Boss批判说,不要使用不成熟的技术。2003年时,就是我创建的这个版本的论坛达到了历史最高在线人数,同时发帖量,回复量都相当高。要知道,当时的论坛只是两台服务器,一台WEB,一台数据库。当时服务器的配置也只是2G内存+双CPU,志强2.4G,能做到那个成绩实属不易。        04年是非常郁闷的一年,现在看来,04年忙忙碌碌的开发了很多项目,但是这些项目都荒废了,不再看得到了。03年下半年开始,我开发的项目都转到ASP.net 技术了,虽然这些项目最终由于运维等原因,流产了,但是至少也算是从那时候开始对.net 技术有了较深的了解吧。        05年的时候,已经开始基于.net技术开发新版论坛了。但是,由于不受公司重视,开发到一半竟被中止,把人员抽调到其他项目,使得无法继续。直到06年的时候,由于论坛在03年9月达到高峰后,一直走下坡路,公司终于决定在论坛方面增大力度。而新的论坛开发已经不再是单枪匹马就可以搞定的了,需要团队协作,而组建的团队又问题多多,磕磕碰碰后,终于在06年底发布了群组。群组使用的是跟论坛一样的底层架构。之后采用里程碑增量开发模式,终于在07年9月28日,把所有老论坛升级到了新版论坛。之后,就是一系列功能的补充完善,优化。随着公司投入力量的加强,我预计,也希望08年论坛又会象03年一样,达到一个新的高峰。        回首过去这八年,我很感谢CSDN为我提供了一片成长的平台。CSDN伴着我成熟,我也见证了CSDN的成长。随着CSDN的不断改进,我自己也从菜鸟成长起来。我的角色也从最初的程序员变成高级程序员,再变成开发经理。(我在CSDN注册时的ID是4807,也就是我之前CSDN用户只有 不到5000个,而截至2007年底,CSDN注册用户已经达到250万多了。)这些成长都是通过自己的努力来实现的。一分耕耘,一分收获,我在CSDN实现了我的第一个“孩子之梦”……        CSDN 论坛有很多有意思的故事。比如:女英雄无为;彭大力追旋玑;拉萨mm挖EDYang的故事等等,而这一个个故事都发生在自己一手搭建的论坛平台上,其中的成就感不言而喻。这也是我能在CSDN这家公司工作7年多的根本原因,我已经把它当成了我生活的一部分,无法割舍。        八年时光,弹指即过,人生能有几个八年?八年时间我做了不少事情,但仅凭一手搭建了CSDN论坛这个平台,此八年不算虚度。希望未来的八年,我的程序员人生将更加精彩。        仅以本文来怀念我患得患失的八年。                                    郭红俊                                                                                 2008年1月10日 星期四   于北京   附,微软开发技术英雄,IT技术英雄的投票地址在 http://www.microsoft.com/zh/cn/default.aspx  的最大的那个flash 广告。 具体地址就是:http://www.hhhchina.net/    。 需要在中国地图上找到某个人才可以投票,郁闷的是,竟然地图上把我丢到内蒙了。 拉票了,大家都来投我一票啦!^&^...[阅读全文]

posted @ | Feedback (32) | Filed Under [ 非技术随笔 与CSDN有关的内容 ]

摘要:我们书写查询语句的时候,Join 参数之前可以是下面三个 { LOOP | MERGE | HASH } JOIN  。 如果不使用,则系统自己分析那种方式快,使用那种方式。 这其实是SQL Server 联结时候使用的三种算法。尽管每种算法都并不是很复杂,但考虑到性能优化,在产品级的优化器实现时往往使用的是改进过的变种算法。譬如SQL Server 支持block nested loops、index nexted loops、sort-merge、hash join以及hash team。我们在这里只对上述三种基本算法的原型做一个简单的介绍。   知识点:       Tables join总是两个两个进行的。所以下面的算法都是两个表的联结。 Hash Join (哈希联结) 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。 逻辑步骤,如下图: 以数据少的数据表的 Join 字段建立 Hash 值。 对应的数据表计算 Join 字段的 Hash ,再与前一个数据表做比对。 特点: 处理大量、未排序、无索引的数据 一般来说,查询优化器会首先考虑Nested Loop和Sort-Merge,但如果两个集合量都不小且没有合适的索引时,才会考虑使用Hash Join。 Hash Join也用于许多集合比较操作,inner join、left/right/full outer join、intersect、difference等等,当然了,需要保证都是等值联结。 Hash Join一个较大限制是它只能应用于等值联结(equality join),这主要是由于哈希函数及其桶的确定性及无序性所导致的。   Nested Loop Join (嵌套循环联结) 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。 逻辑步骤,如下图: 从外层的数据表取出一笔记录 使用这个记录扫描内层的数据表 再回到外层的数据表,重复上述的步骤。 特点: 适用于一个集合大而另一个集合小的情况(将小集合做为外循环),I/O性能不错。 当外循环输入相当小而内循环非常大且有索引建立在JOIN字段上时,I/O性能相当不错。 当两个集合中只有一个在JOIN字段上建立索引时,一定要将该集合作为内循环。 对于一对一的匹配关系(两个具有唯一约束字段的联结),可以在找到匹配元组后跳过该次内循环的剩余部分(类似于编程语言循环语句中的continue)。 可以不是等值联结   Merge Join (合并联结) 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。 逻辑步骤。如下图: 使用两个数据表用来 Join 的字段既有的索引 两边的数据表以光标由小到大比较,一边移动到比另一个数据表大时,换移另一个数据表。 特点: 可以不是等值联结 MERGE JOIN 必须等待两个单独的SORT JOIN完成(如果使用索引作为数据源,可以跳过SORT JOIN这个步骤), 如果两个表的规模相差很大, 会很影响查询的性能。 当查询的两个表都很大或者都很小的时候, 则应该只用MERGE JOIN,如果两个表都很小,则表扫描和分类将进行的很快;   分别使用这三种 Join......[阅读全文]

posted @ | Feedback (4) | Filed Under [ 数据库开发管理心得 技术随笔 读书笔记 ]

摘要:我们仍然是通过例子来理解OR运算符的特征 我们仍然使用 http://blog.joycode.com/ghj/archive/2008/01/18/113870.aspx 中的 member 表,这时候,这个表的索引如下: 名字 描述 列 member_corporation_link nonclustered located on PRIMARY corp_no member_ident clustered, unique, primary key located on PRIMARY member_no member_region_link nonclustered located on PRIMARY region_no MemberFirstName nonclustered located on PRIMARY firstname MemberLastName nonclustered located on PRIMARY lastname 我们执行下面的查询SELECT m.LastName, m.FirstName, m.Region_NoFROM dbo.Member AS mWHERE m.FirstName = 'Kimberly' OR m.LastName = 'Tripp'go 我们用另外一个SQL来模拟 SQL 的执行计划,就是下面的语句:我们会看到上面语句跟下面的语句基本一样,只是一个是 Key Lookup ,一个是 Clustered Index Seek。 这里由于是模拟情况,可以认为是一样的。select m.LastName, m.FirstName, m.Region_NoFROM dbo.Member AS m with(index(member_ident)),(select ww.Member_No from (select Member_No from dbo.Member where FirstName = 'Kimberly'union allselect Member_No from dbo.Member where LastName = 'Tripp') wwgroup by ww.Member_No) nwhere m.Member_No = n.Member_Nogo这两个查询的扫描计数均是 2,逻辑读取均是 10 次。 他们俩个的执行计划如下图,点击看大图:   知识点小结: OR 会做什么? 将多个结果集集合起来,上图中,使用 Merge Join(Concatenation)把数据汇集起来。 保证每一个row只出现一回,上图中,使用Stream Aggregate(Aggregate)进行排重。 上面的例子中,我们用 union 来演示 or的情况。 OR和UNION相似。不同之处如下: OR 根据 row’s unique identifier (RID or Clustering Key) 去掉副本 UNION......[阅读全文]

posted @ | Feedback (2) | Filed Under [ 数据库开发管理心得 技术随笔 ]