当前位置:首页 > 电脑学习 > 网页编程 > CMS > 帝国CMS > 帝国cms数据库自动分表插件

帝国cms数据库自动分表插件

2017-05-03 来源: 玄学网 标签: 投诉/反馈

在使用帝国cms系统的时候,如果单表数据量比较大,会导致网站更新、后台管理特别缓慢,而且容易导致超时。

采用帝国cms系统建议单表大小,建议不太过大,不然会影响性能,一般我习惯设置4G左右就分表,基本上设置大小根据服务器内存大小来定比较好。

测试环境

先用熟悉的sql语句来查看下测试表的一些情况

use infomation_schema

SELECT * FROM TABLES WHERE TABLE_SCHEMA = ‘dbname’ AND TABLE_NAME = ‘product’

111544436293982.jpg

自动分表代码

-------------------------------------数据库分表自增插件内容----------------------------

数据库分表自增:采集入库时当达到指定分表限制大小时,自动新增分表并设定默认值。

使用方法:将userfun.php里的函数复制到e/class/userfun.php里,或者直接覆盖;在e/class/cjfun.php里

查找:$savetxtf=$emod_r[$mid]['savetxtf'];然后在其后面添加:$stb=AutoStb($cr[tid],自动分表大小);

不要忘记分号哦。自动分表大小:单位:M(兆)。以后采集入库分表达到指定大小的时候便会自动增加分表并设定为默认分表,

可以直接将分表大小设置成1M,然后采集试试。如出现调用错误请在e/admin/ecmscj.php里添加:require("../class/userfun.php");

--------------------------------------------------------------------------------------- 

<?php

//---------------------------用户自定义标签函数文件--------------------------

function AutoStb($tid,$size)

{global $empire,$dbtbpre;

$tb=$empire->fetch1("select tbname,datatbs,deftb from {$dbtbpre}enewstable where mid='$tid'");

$tbname=$tb[tbname];

$stbarr=explode(",",$tb[datatbs]);

$newstb=0;

for($i=0;$i<count($stbarr);$i++)

{if($stbarr[$i])

{$ftb=$empire->fetch1("SHOW TABLE STATUS LIKE '{$dbtbpre}ecms_".$tbname."_data_".$stbarr[$i]."';");

$ftbsize=($ftb[Data_length]+$ftb[Index_length])/pow(1024,2);

if($ftbsize<$size)

{if($tb[deftb]!=$stbarr[$i])

{$empire->query("update {$dbtbpre}enewstable set deftb=".$stbarr[$i]." where tid='$tid'");}

$newstb=$stbarr[$i];

break;

}

$maxstb=$stbarr[$i];

}

}

if(!$newstb)

{$maxstb++;

$odtb=$dbtbpre."ecms_".$tbname."_data_1";

$dtb=$dbtbpre."ecms_".$tbname."_data_".$maxstb;

CopyEcmsTb($odtb,$dtb);

$empire->query("update {$dbtbpre}enewstable set datatbs='".$tb[datatbs].$maxstb.",',deftb=$maxstb where tid='$tid'");

$newstb=$maxstb;

}

GetConfig(1);

return $newstb;

}

?>