WSBLog Beta2发布——轻松支持100万文章的BLOG系统

用户 wubuku 2007-3-26 5346

下载网页:http://www.wubuku.com/post/178.aspx

新版本的WSBLog能轻松支持100万级的文章数量。

请看示例网站:http://www.66ph.com

——该网站文章数量超过110万,500多个分类(页面不得不使用Ajax动态装载子分类),6000多个Tag(Build出来的静态的Tag列表查不多近2M,我删除了),而Tag和文章的对应记录更是多达230多万条!

这些数据对于一个单用户的BLOG来说,应该是很变态了。其实我想做的就不是单用户BLOG。

所以,这个可能是“最终的”单用户版本了。虽然说是"最终的"单用户版本,但是,在我看来也是很不成熟的版本,也懒得把这个单用户的版本去做的很成熟。

对于国内的用户来说,“成熟”的意思基本细节上很花哨——赫赫,也许是由于工作原因,也许是由于个性原因,我对花哨的细节不太敢兴趣。对我来说,我更在意的是良好的程序结构,而不是花哨的功能。

所以,这个版本我就权当是抛砖引玉吧。如果你是喜欢而且有精力去折腾ASP.Net程序的话,WSBLog才比较适合你,你完全可以想怎么改就怎么改。

其实我很需要帮手,我想做一个结构良好的高效的多用户BLOG,但是我平时没有什么时间,谁愿意帮我呢?

如果敢兴趣,可以到我的BLOG和我联系。我最希望就是有个既懂VB.Net又懂C#的人帮我,而且最好这个人对于程序结构有洁癖,对混乱的代码、糟糕的结构恨之入骨。赫赫。

下一步在做多用户版本的同时,程序会慢慢变成C#的,现在还是VB.Net的。
最新回复 (7)
全部楼主
  • 离退版主 明月星光 2007-3-26 0
    引用 2
    1.使用Z-Blog的模板为何不注明?
    2.支撑110万文章不能说明什么,能支撑与之匹配的访问量才可以。

    2.0 started.

  • 用户 wubuku 2007-3-26 0
    引用 3
    其实不仅是模板了(虽然我对模板和Style都做了一些修改),但我一直都说这个程序其实就是从z-blog改的ASP.Net版本。

    我在我的BLOG中一直都是这么声明的。你看看我以前写的文章就知道了。也许我应该在每一页都写上这样的声明?其实不在每页中这么写,主要是出于美观考虑而已。这个程序本身就是开源的,使用GPL许可发布——我既不寄希望于从中牟利,也没有故意隐瞒什么事实。我问心无愧,这就够了。

    至于支撑多大的访问量,由于ASP.Net的健壮性,还有就是结构相对合理,其实根本就不成什么问题。你看看http://www.66ph.com的PR值就知道了。虽然是测试的网站,但是访问的人也不算少了。

    另外支持100万文章不像你想的那么简单。你用z-blog直接改用Sql Server,然后倒入100万文章试试看,你看看能打开么?你没试过我可试过,导入20万之后,就根本可以说是打都打不开了。其实z-blog自己的定位就是一个单用户的Blog,它的分页和缓存机制是有很明显的瓶颈的。

    我这里不是说z-blog不好。但是ASP语言的特性,对它是个限制。还有就是它一开始的定位就是单用户,在实现上很多地方对扩展性考虑的不够。这个论坛上有不少人曾想过把z-blog改为多用户的,但是最后都放弃了。为何?因为ASP的缺陷,还有就是z-blog的很多细节实现,把它自己给限制住了。除非把代码结构几乎完全推倒重来,否则改多用户,很难。

    但是WSBLog,我要是有时间,一个星期,我就能把它从目前的基础上变成一个多用户的BLOG。甚至,同样一份代码,把它做成单用户和多用户可以配置切换都是可能的。其实,我也不想和z-blog有什么竞争关系,我想做的是多用户的BLOG。至于营利?不去想,兴趣而已。

    不过,我这人确实比较懒散。下了班不想写东西。周末呢,我也愿意睡懒觉、看电视、到健身房。代码?呵呵,在我的生活中从来就不是第一位的。

    WSBLog的一切,主要是.Net Framework和ASP.Net的功劳。至于我写的代码,在我看来,就目前来说,我看就是一堆狗屎,不值一提,呵呵。

    [ 本帖最后由 wubuku 于 2007-3-26 10:38 编辑 ]
  • 开发者 tsmlyf 2007-3-26 0
    引用 4
    发布100万文章不是博客干的事情,那应该做门户网站才是。

    IdeaTaste.Com

  • 用户 wubuku 2007-3-26 0
    引用 5
    原帖由 tsmlyf 于 2007-3-26 14:50 发表
    发布100万文章不是博客干的事情,那应该做门户网站才是。


    确切地说:那不是一个单用户BLOG干的事。

    但是对多用户BLOG来说,能支持多少文章这个本身就是必须考虑的性能指标。

    你可以想想网易的BLOG有多少文章?Sina的BLOG有多少文章?

    所以,我上面也一直说,我的目标是多用户BLOG,虽然目前WSBLog还是单用户版本的。

    但是,在实现上,很多方面已经为将来多的用户版本提前做好了考虑。我导入这么多文章,就是为了将来的多用户BLOG做测试而已。
  • 用户 tifa 2007-3-26 0
    引用 6
    我喜欢单用户,一直想找个成熟点的.NET程序

    [ 本帖最后由 tifa 于 2007-3-29 14:19 编辑 ]

    我的博客 没事玩玩闹闹

  • 用户 wubuku 2007-3-28 0
    引用 7
    原帖由 tifa 于 2007-3-26 19:56 发表
    我喜欢用户,一直想找个成熟点的.NET程序

    ——这位兄弟,WSBLog成熟不成熟我不知道,但是我敢说,如果你本来很熟悉z-blog,而现在想转向.Net,WSBLog是很好的选择。

    ====================================
    版权声明
    ====================================
    WSBLog源代码部分使用GPL许可协议发布(GPL许可仅适用于该BLOG的程序源代码本身,不包括该BLOG附带提供的Z-BLOG的模板和Style文件以及其他从网络上收集而来的公开资源,WSBLog并没有改变这些资源的原有版权)。

    ====================================
    WSBLog的特点
    ====================================
    1、通过适用OO方法对流行的ASP程序Z-Blog进行了完全的重构,结构良好,代码可读性强;

    2、同时支持Sql Server和Access数据库。难得的是这种支持并不是通过在代码中硬编码不同数据库的Sql语句实现的,作者专门写了一个小型的ORM(WSORM),在一个小型的BLOG系统中,做到这点实属不易;

    3,支持灵活的模板和Style机制。源代码中附送的模板来自于Z-BLOG,仅仅对Z-BLOG的模板进行少量的修改即可适用于WSBLog。同样,将WordPress等模板移植到WSBLog也不困难;

    4,超高的性能。为了测试性能专门开通了一个测试网站:http://www.66ph.com。该网站完全构架与WSBLog之上,文章数量超过110万,分类超过500多个分类(页面使用Ajax动态装载子分类),6000多个Tag,而Tag和文章的对应记录更是多达230多万条。

    ====================================
    源代码与可执行程序下载
    ====================================

    源代码和可执行程序下载(都在一起了,不想自行编译的,可以直接使用):http://www.wubuku.com/post/178.aspx——目前程序是在VS2003下开发的,如果使用VS2005打开转化,可能会有错误不能编译。

    新用户安装,如果选择使用Sql Server,需要使用的数据库建表脚本(在上面的下载包中的DATA目录也有,文件名为database.sql),运行改建表脚本会在数据库中建立一个初始用户名:admin,其密码为:www.oucsoft.com,用它进管理界面之后,建一个高级用户平时用就好了。使用老版本(老版本的WSBLog只支持Sql Server)的用户请手工修改数据库。操作见下文:

    ===================================
    关于数据库的变更
    ===================================
    以下操作适用于Sql Server,使用Access的用户请参考下文,或者参考此篇在线帮助文章:http://www.wubuku.com/post/180.aspx

    1、增加了一个表TagArticle,用于单独保存Tag和文章的对应关系(按照原来的结构,文章的Tag信息需要使用LIKE查询,如果文章数量很多,比如100万,效率存在问题):
    CREATE TABLE [dbo].[blog_TagArticle] (
            [tag_log_ID] [int] IDENTITY (1, 1) NOT NULL ,
            [tag_ID] [int] NOT NULL ,
            [tag_Name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
            [log_ID] [int] NOT NULL ,
            [log_Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
    

    2、修改了分类表Category,目前分类表的结构为:
    CREATE TABLE [dbo].[blog_Category] (
                    [cate_ID] [int] IDENTITY (1, 1) NOT NULL ,
                    [cate_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
                    [cate_Order] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
                    [cate_Intro] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
                    [cate_Count] [int] NOT NULL ,
                    [cate_Code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
                    [cate_ParentCode] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
                    [cate_ParentID] [int] NULL 
    ) ON [PRIMARY]
    

    对于使用旧版本的用户,需手工修改表结构。该表和上个版本不同的地方如下:

    一,将Order字段改为了字符型,这样在编译分类的时候更容易排序:
    ALTER table blog_Category 
            ALTER COLUMN
                [cate_Order] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL
    二,给分类加上“父分类”的相关字段:
    alter table blog_Category
            add
                [cate_Code] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
                [cate_ParentCode] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
                [cate_ParentID] [int] NULL
    

    ——也就是说,目前的分类是支持树形结构父子分类方式了。以下脚本如果在Sql Server查询分析器中运行出错,请手工修改表结构即可。老版本的用户在手工更新了数据库之后(自动升级功能并不更改数据库表结构),需要运行一下“自动升级”功能,该功能会在Tag和文章的对应关系表(blog_TagArticle)生成新的记录。

    ===================================
    使用了URL重写机制
    ===================================
    不在需要手工重建文章(重建索引仍然保留,出于性能考虑)。实际上,新版本仍然支持生成全静态的Html文件(可以在配置文件中修改),但是生成纯静态网页主要是为了保证从google、baidu搜索结果链接过来的静态网页仍然可用,建议使用URL重写。URL重写使用了微软MSDN上这篇文章《在ASP.Net中执行URL重写》中提供的方法(已经编译好文章中提供的源代码,打包进上面下载文件的bin目录中):

    http://www.microsoft.com/china/m ... iting.mspx?mfr=true

    ——感兴趣的可以看看这篇文章,可下载源代码自行研究。

    ====================================
    关于程序安装
    ====================================
    有点ASP.Net基础的话很容易做:

    1、如果已经了安装了WSBLog的老版本,需要覆盖前请备份好Include目录,不要把友情链接等文件覆盖了。同时请备份Template目录,如果您自行修改了模板文件并想继续使用的话,同时请备份Style目录,也是以免被新的同名文件覆盖。

    2、配置文件Web.config和老版本有所不同。相对于老版本的Web.config,主要是进行了精简,程序的很多配置放到了单独的xml文件中(其实这是为日后多用户Blog做的准备)。下载的包中包括了两个示例配置文件,分别是Web.config.sample(如果不需要使用URL重写,可以使用这个)和Web.config.urlrewrite.sample(如果使用URL重写,请选择这个)。请选择合适的文件复制后重新命名为Web.config后修改。

    一般自行修改配置文件中的下面几句:
            <appSettings>
                    <add key="dataConn" value="User ID=用户名;Password=密码;Initial Catalog=数据库名称;Data Source=(local);" />
                    <add key="blogRootUrl" value="http://www.wubuku.com/" />
                    <add key="blogGuid" value="60E32840-F51D-4520-A8DE-4FEF627D5022" />
                    <add key="dbType" value="SqlServer" />
            </appSettings>
    

    第一行是数据库连接字符串设置。需要您把用户名、密码、数据库名称填写好,一般来说Data Source=(local)不需要修改,“(local)”的意思是数据库安装在本机上,如果数据库不在本机上,改一下就可以了,比如改为“Data Source=192.168.0.1”;

    第二行是您的BLOG的URL地址,不要忽略了“/”;

    第三行如果其实目前没有什么用处(也是为了以后多用户Blog准备的),可以随便改一个值。

    对于Access的用户,请注意修改dbType的值为“ACCESS”。

    3、Blog的安装目录需要是一个“应用程序”目录,如果你放在IIS的网站根目录下,一般已经是应用程序目录了,如果不是放在根目录下,(根据操作系统版本的不同)可能需要手工用IIS管理器设置一下,把Blog的安装目录创建成应用程序目录;

    4,ASP.Net必须对Blog目录有读写的权限。简单地说,如果你的机器是XP,运行ASP.Net的用户应该是“ASPNET”,如果是Windows Server 2003,那么把目录的读写权限给“IIS_WPG”就可以。

    ===================================
    对Access的支持,或从Z-Blog迁移到WSBLog
    ===================================
    WSBLog已经支持Access数据库,数据库格式和Z-Blog几乎完全兼容,只有少量的修改。想从Z-Blog切换过来的用户,再也不需要去找支持Sql Server的空间了。为了尊重Z-BLOG的版权,暂不提供Access数据库,需要的请到Z-BLOG下载源代码包,并提取出其中的Access数据库文件。然后,可以按照下面的方法操作:

    首先请去重新下载新版本的WSBLog,前几天发布的版本并不支持Access数据库。http://www.wubuku.com/post/178.aspx

    1、打开z-blog的数据库文件,修改blog_Category的结构,把cate_Order字段改为文本类型,并且,新增加几个字段:

    cate_Code —— 类型为:文本
    cate_ParentID —— 数字
    cate_ParentCode —— 文本

    修改后的blog_Category表如下所示:


    2、增加一个表blog_TagArticle,这个表用来保存Tag和文章的对应关系:

    tag_log_ID —— 自动编号
    tag_ID —— 数字
    tag_Name —— 文本
    log_ID —— 数字
    log_Title —— 文本

    新增的表结构如图:


    ——数据库的修改完毕,将修改后的数据库上传至服务器WSBLog安装目录的的DATA子目录下。

    3、修改Web.config文件,找到appSettings段,改成下面这个样子:
            <appSettings>
                    <add key="dbType" value="Access" />
                    <add key="dataConn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\WSBLog\DATA\yangblog.mdb" />
                    <add key="blogRootUrl" value="http://localhost/WSBLog/" />
                    <add key="blogGuid" value="60E32840-F51D-4520-A8DE-4FEF627D5022" />
            </appSettings>
    

    ——其中的“E:\WSBLog\DATA\yangblog.mdb”是你的Access数据在服务器上所在的物理路径。

    如何知道Access数据库在服务器上的具体物理位置?这需要通过IE浏览请求一下WSBLog目录下的DATA/test.asp文件。比如,你的BLOG的URL是http://www.wubuku.com,那么,在IE的地址栏中输入http://www.wubuku.com/DATA/test.asp,就会显示出该test.asp文件在服务上所在的目录,比如显示为“E:\WSBLog\DATA\test.asp”,将test.asp替代为你的Access数据库名称即可。接下来的设置和Sql Server就没有什么区别了,请参考在线更新文章:http://www.wubuku.com/post/179.aspx

    需要说明的是,目前WSBLog对Access的支持完全是通过ORM实现的。同时Sql Server和Access,只通过配置文件就可以切换。代码几乎没有做任何修改(之所以说“几乎”,是因为仅仅修改了两行读数据库类型配置的代码)。WSORM仅仅通过增加了一个AccessSession类就解决了对Access的支持问题。WSBLog对Access的支持几乎没有任何问题。唯一的不足是:在“索引重建”的时候,比使用Sql Server比要慢很多。这是因为Access是一个文件型数据库,频繁地打开和关闭数据库效率非常低(Sql Server有内置的连接池机制)。目前的WSBLog,在索引重建的时候,会多次调用底层的业务类,而数据库的打开和关闭,目前是由业务类(通过ISession接口)调用的AccessSession自行控制的。这个地方的效率问题,需要以后优化。

    [ 本帖最后由 wubuku 于 2007-3-29 11:27 编辑 ]
  • 用户 wubuku 2007-3-29 0
    引用 8
    ====================================
    其他使用及设置问题
    ====================================
    1、安装之后请先使用“基础设置”功能进行设置,保存后,在Blog根目录会生成一个blogconfig.xml文件。实际上,“高级设置”实际上是编辑该文件。不是所有的设置都放在了“基础设置”中。如果对xml不了解,就不要直接编辑它(其实也没什么可怕的);

    2、老版本的用户在手工更新了数据库之后(自动升级功能并不更改数据库表结构),需要运行一下“自动升级”功能,该功能会在Tag和文章的对应关系表(blog_TagArticle)生成新的记录。否则重建索引的时候关于Tag的统计数量会不准确;

    这个“自动升级”功能运行一次就可以了,运行之后可以把它禁用掉,方法是编辑blogconfig.xml文件,把:
      <AutoUpdateEnable>true</AutoUpdateEnable>
    改为:
      <AutoUpdateEnable>false</AutoUpdateEnable>
    3、生成静态HTML页面还是URL重写,可以在“基础设置”中设置,如果是使用静态HTML页面,这两个设置项请选择:
    ※使用真正静态的HTML页面(否则需要URL重写):True
    ※静态文件后缀名:html
    如果是使用URL重写,请选择:
    ※使用真正静态的HTML页面(否则需要URL重写):False
    ※静态文件后缀名:aspx

    4、如何更改页面中的提示信息(比如要把提示信息改称英文版或者繁体中文版),请编辑这个xml文件:blogmessages.xml。

    5、如何在页面中放入Google SiteSearch、AdSense、Analytics信息?
    从Google获取相应的代码,在Include目录下找到以下三个文件,把代码放入其中:

    google_adsense.html
    google_analytics.html
    google_sitesearch.html

    然后在Template目录的模板文件中放入相应的模板标签就可以了:
    <#INCLUDE_GOOGLE_SITESEARCH#>
    <#INCLUDE_GOOGLE_ADSENSE#>
    <#INCLUDE_GOOGLE_ANALYTICS#>
    
    • ZBlogger技术交流中心
      9
          
返回