特别是像主题表(topic),用户表(user)等,因为对于一个流量和发帖量都很大的论坛而言,在运行几年之后,这两个表的数据量可能会破千万(注:因为帖子表采用分表机制,所以这里暂未涉及,但出于性能考虑,也提供了本文中类似的解决方案)。当时考虑的架构设计中有两种思路来解决这种问题:
一种是采用类似MYSPACE的方式,即按一定记录KEY值(比如用户表的UID)来对大数据表中的记录进行分割,比如前200万用户(即:UID t.Fid == 2 && t.Displayorder == 0).Skip(skip).OrderByDescending(t=>t.Lastpostid).Take(16).ToList(); Discuz.Common.Generic.List topicList = new List(); foreach (var topic in topicInfoList) { topicList.Add(LoadTopicInfo(topic)); } db.Disconnect(); return topicList;
不过在使用上述代码进行1500万主题分页时,发现LR的测试周期延长(前者(document方式)从2:10秒延长到后者(linq)2:30秒)和吞吐量降低。
所以这里还是最终延用了samus的document访问方式,参照上面的LINQ写法,下面是document写法,形如:
public Discuz.Common.Generic.List GetTopicList(int fid, int pageSize, int pageIndex, int startNumber){ int skip = 0; if (pageIndex |
|