RSS 2.0 Feed
2007-04 Entries
摘要:不得不感慨:我随意写的小软件竟然能引起如此多盗版。也许我不该做Web,改行写共享软件说不定前景8错 :-) 五天前,我写了一篇博客:《改改版权就是自己的》,讲的CnBeta上的一款软件,将我的程序甚至连名字都没改仅仅改了一下版权就变成自己的软件了,在我的博客发布一天后,CnBeta就删除了原文。然而不到一周,今天晚上在CnBeta上发布的一款名为:“照片瘦身”的软件(原创软件:照片瘦身工具),同样出自我的那款照片缩略软件,所不同的是修改了部分界面样式和软件命名。 这不是我第一次经历这样的事情,我在上大学时写过不少asp的系统,最典型是有一款为学校网站写的影视下载程序,发布后,没多久就出来若干改了版权或者略加改动后的盗版程序,到最后,最可气可笑的是,反过来有人认为我自己的“原版”是盗版的,悲哀。后来还发生过多起源码被窃取再修改版权的事情,经常会看到一些OA系统或网站系统就是在我泄漏代码的基础上修改了一下版权和部分界面就堂而皇之卖钱的。 ...[阅读全文]

posted @ | Feedback (39) |

摘要:前言 可能有很多朋友在使用CommunityServer(以下简称CS)的过程中,当数据越来越多后,速度会越来越慢,资源耗用越来越大,对于性能不好的服务器,简直像一场噩梦一样,我终于刚刚结束了这个噩梦,简单谈谈是什么原因导致了CS在性能上存在的种种问题。(我对于数据库方面不是很专业,所以如果本文中有什么谬误,敬请各位指出,不胜感谢!) 忘了自我介绍一下,我是宝玉,以前做过Asp.net Forums和CommunityServer的本地化工作,母校西工大的民间社区(http://www.openlab.net.cn)用的是CS系统。该有人骂我做广告了,其实我是防盗版,郭安定大哥那学的,哈哈! 性能问题分析 鸡肋式的多站点支持 其中一个性能影响就是它的多站点功能,也许这确实是个不错的注意:同一个数据库,不同域名就可以有完全独立的站点,但是对于绝大部分用户来说,这个真的有用么?首先姑且不讨论它是否真的那么有用,但是在性能上,他绝对会有一定影响的:系统初始化的时候,首先要加载所有的站点设置,这也是为什么CS第一次访问会那么慢的原因之一;然后大部分查询的时候,都要带上SettingId字段,并且在数据库中,对这个字段的索引并没有建的很理想,对于大量数据的查询来说,如果没有合理的建索引,有时候多一个查询条件对于性能会带来极大的影响。 内容数据的集中式存储 一般的系统,都尽可能的将大量的内容数据分开存储(例如飞信系统的用户存储,就是分库的^_^),对于数据库,更是有专门的分库方案,这都是为了增加性能,提高检索效率。而CS由于架构的原因,将论坛、博客、相册、留言板等内容管理相关的信息,全部保存在cs_Groups(分组)、cs_Section(分类)、cs_Threads(主题索引)、cs_Posts(内容数据),这种架构给代码编写上带来了极大的便利,但是在性能上,不折不扣是个性能杀手,这也是CS慢的最根本原因,举个例子,假如我的论坛有100W数据,博客有5万条数据、相册有10万条数据,如果我要检索最新博客帖子,那么我要去这120万数据里面检索符合条件的数据,并且要加上诸如SettingsId、ApplicationType等用来区分属于哪个站点,哪种数据类型之类的条件,数据一多,必然会是一场噩梦,让你的查询响应速度越来越慢,从几秒钟到几十秒钟到Sql超时。 过于依赖缓存 缓存是个很好的东西,可以大大的减少数据库的访问,是asp.net程序提高性能必不可少的。不知道各位在设计开发系统,用缓存用的很爽的时候,有没有想过,如果缓存失效了会怎么样?如果缓存太大了会怎么样?相信各位CS会有一个感觉,那就是CS刚启动的时候速度好慢,或者使用过程中突然变的很慢,那就是因为好多数据还没有初始化到缓存,例如站点设置、用户资料、Groups集合、Setions集合等等一系列信息,这一系列信息的加载加起来在服务器性能不够好的情况下是个漫长的过程,如果碰巧还要去查询最新论坛帖子、未回复的帖子之类,那么噩梦就开始了,这时候就要拼人品了,看你是不是应用程序池刚重启完的第一个人o(∩_∩)o 。CS在缓存的策略上,细粒度不够,一般都是一个集合一个集合的进行缓存(例如最新论坛帖子集合),这样导致缓存需要频繁更新,而且缓存内的数据一般比较大,内存占用涨的很快,内存涨的快又导致了应用程序池频繁重启,这样,CS在缓存方面的优势反而变成了一种缺陷,导致服务器的资源占用居高不下。 CCS的雪上加霜 前面说过,我做过CS的本地化开发,加了不少CS的本地化开发工作,但是由于当时数据库知识的匮乏,导致了一些在性能上雪上加霜的行为,例如精华帖子功能,其中标志是否为精华帖(精华等级)的ValuedLevel字段没有加上索引,在数据量大的情况下,检索会比较慢。由于我已经不在做CCS的开发,已经没有办法来修正这些性能问题了,只能对大家表示歉意。 后记 如何解决? 最简单就是等着升级了,相信CS以后的版本会越来越强劲的,这些问题肯定会逐步解决的。如果等不及的话,就只能自己动手了,使用Sql Profiler监测Sql的执行,找出影响性能的查询,然后针对性优化。 前面我说我结束CS性能的噩梦,肯定有朋友会问我怎么结束的了,在此,就先埋一个伏笔了,在05年的时候,我就开始如何构思开发一套高性能的类似CS的系统,06年初开始设计,然后利用业余时间进行了具体的开发,到今天已经有了小成,在性能上有了质的飞跃,针对这套系统的设计和性能优化的心得,我会逐渐以博客的形式来和大家一起分享交流。...[阅读全文]

posted @ | Feedback (31) |

摘要:本要睡了,刚看到博客园上dudu想要找套论坛系统,要整合到博客园的系统,偶正好这方面经验比较丰富,而且想和dudu合作,将偶开发的论坛系统和博客园的博客系统整合,简单写一下整合方案: 整合最核心的就是用户的整合,整合用户,一种方式就是直接将某套系统完全采用其中一套用户的帐号系统,这种方式一般改动量比较大;一种方式就是系统之间的用户保持同步,保证数据保持一致,包括加密方式,但是如果两者加密方式差别大,可能会比较麻烦,我这里重要要说的是第三种方式。 首先,要以其中一套系统的用户系统为主,在这里我们完全以博客园的用户系统为中心,注册、验证、修改密码、修改资料(论坛资料除外)都走博客园的系统。那么博客的用户怎么同步到论坛呢?在登录的时候,前面说了,登录都走博客园的系统,那么博客系统登录后,就可以拿到登录凭证以及用户资料(两个系统都是基于asp.net 2.0和并且是部署在同一个域下,这样Form验证的授权可以直接共享,否则就得提供相应的接口了)。 然后返回到论坛系统时,论坛系统会首先检测有没有当前登录的这个用户的资料,如果没有,那么创建之,并使用博客用户的数据初始化论坛用户的数据,如果已经有了用户,那么只要更新一些用户信息就可以了。 这样用户整合就算是完了,整个系统也算是整合完了,就这么简单!...[阅读全文]

posted @ | Feedback (26) |

摘要:不知道朋友们是否记得我去年在博客堂曾发布过一个小软件——批量缩略图片的《批量生成缩略图小工具》,专门为小宝玉写的,当时把源码也带上了,今天在CnBeta上看到《网友制作:Thumbnail Images 图片批量缩略图》,不就是我当初写的那个小软件么,只不过版权变了:)   好久没被盗版了,感觉真好,o(∩_∩)o...哈哈...[阅读全文]

posted @ | Feedback (26) | Filed Under [ 生活 ]