2千万数据、17.3GB数据库用帝国CMS6.0分表合理存放
数据库总大小:17.3GB、总记录数:4千万零450条、信息数量:2千万条、单表最大信息数:400万条
一、前言:
帝国CMS 6.0版本最重要的升级功能是对系统构架进行升级,构架更加完美、负载容量更大。然而很多人就问,这个全新的构架有多大的魅力、容量是多少?其实我也不能准确的告诉你,因为6.0刚发布不久并且没有空闲时间测试,那时我只能告诉你“总体容量可无限放大,单表存放容量是原来的几十倍、甚至更多,副表数据量达到一定大小后可设置分表,副表支持无限分表,因而副表容量是无限的”。然而理论是需要实践去验证的,所以趁着这两天比较空闲试着测试,并且测试结果令我非常吃惊,
在2000万数据中最大的news单表中从50万导到400万数据无论从生成内容页效率还是管理信息列表竟然没有多大差别:
单表无论是50万还是400万生成5000个内容页速度为:19秒
单表无论是50万还是400万后台管理信息列表速度为:0.009秒


2千万数据、17.3GB数据库用帝国CMS6.0分表合理存放》分成数个篇章对帝国CMS大数据量如何合理存放的进行介绍,整个测试过程都是边运行边截图,采用透明、公开的方式供大家监督!如果有谁对测评过程和测评结果有疑问,可以自行参照我们的测试过程搭建类似的测试环境自己测试和对比测试结果。

下面我们就开始测试:
 
二、测试环境
1、硬件配置:使用本人工作使用的机器测试,普通的配置


CPU:2.0 GHz

内存:1GB

2、软件环境:使用无任何优化的帝国CMS6.0一键安装包

WINDOWS 2003
APACHE 2.2.4
PHP 5.2.0
MYSQL 5.0.27
ZEND Optimizer 3.2.6
帝国CMS6.0开源版(GBK)
(注:因为只是测试所以采用效率比较一般的WINDOWS平台,最好的PHP+MYSQL运行环境建议采用LINUX或UNIX平台。)
3、截图工具用PrintScreen屏幕截取+photoshop保存
4、网站存放数据栏目限制在12个
5、所有栏目都使用新闻系统模型
6、计算php页面时间代码:
在$empire=new mysqlquery();下面加
$stime=microtime(true);
在文件代码最下面加
<?php
$etime=microtime(true);
$total=$etime-$stime;
echo '<font color=red size=5><b>执行时间:'.$total.'秒</b></font>';
?>
7、生成时间查看代码
date("Y-m-d H:i:s")
 
三、分析2000万数据如何分配
利用帝国CMS的每个栏目都可以单独使用存放表的特性,我们可以把每个栏目都使用单独的存放表。也就是建12个相同的新闻表和模型(news~news12)。下面我们来计算下单表的存放数据范围:
1、首先我们可以用取平均值计算单个栏目存储的数据数量范围
20000000/12约等于1700000,所以每个栏目只要存储170万条数据就可以存下2000万数据。
2、根据我们的硬件环境条件我们可以计算出比较合理的单表大小范围
由于我们本机测试,所以2.0GHz的CPU基本可以满足表读写和生成处理。
但由于我们的内存只有1GB,除去系统进程开销、PHOTOSHOP和浏览器开销,剩余出来的数据能使用的内存应该不足700MB,所以为了保证MYSQL能更快的读取一个表所有数据,建议MYSQL单表数据不要大于这个内存大小。对于帝国CMS来说就是主表的大小不要大于可用内存的大小,副表大小倒是其次,因为副表没有一次读取的情况,所以保守的估计主表大小最好在500~600MB范围为佳。
 
四、由于不知道多少数据使主表是在500~600MB范围,所以下面我们要用第一个新闻表来测试
说明:由于是第一次测试所以采用比较保守的增量:以每次插入50万数据测试并查看效果,直到达到最佳的内存范围。
测试项目:后台管理列表速度及翻页、修改信息速度、生成速度、动态内容页查看速度、查看数据库大小
(一)、第一次导入50万数据到news表:
1、导入截图

2、后台管理信息列表速度

直接访问:0.0089秒
翻页:0.0091秒
3、修改信息页读取数据:0.0051秒
4、生成5000条数据
开始生成:

生成过程截图:

5000条生成时间:18秒
生成后的栏目目录:
5、测试在使用内容动态页的数据读取速度:0.0025秒
6、查看50万下数据库大小:50万信息,主表大小为67.7MB,第一个副表为370.8MB
 
总结:
参数 数据
信息数: 50万
后台管理信息列表速度: 0.0089秒
修改信息页读取数据: 0.0051秒
生成5000条数据: 18秒
内容动态页的速度: 0.0025秒
主表phome_ecms_news: 67.7MB
副表phome_ecms_news_data_1: 370.8MB
总数据库大小: 439.2MB

说明:上面每个副表存储50万数据,其实通过整个2000万数据测试后发现副表存储100万数据效率也差不多。
 
>>>接下来我们继续100万测试