请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

一起开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz! X1.5数据库分布在多个服务器的分布式部署实例

发表于 2012-12-16 20:37 作者:phper
php结合memcache实现访问统计文章点击的计数
随着访问量的增大,点击数直接更新数据库已经不太可能了,数据库中点击的更新 ...
Web开发利器,简版开发手册助您快速开发(图
web开发,帮助手册是我们经常查询的,查函数、查属性等等,下面图片里综合了各开发手册 ...
自 Discuz! X 1 发布以来,Discuz! 已开始支持多数据库之间的操作,甚至于通过一定的技巧,还可以将帖子表拆分到其他数据库。

一、基本的多数据库支持,我们可以将不同的表分布到不同的数据库服务器上,也可以将数据库同步到不同服务器上进行分布读取,提高读取效率。

要支持多数据库,首先要添加一个新的数据库配置。

打开 config/config_global.php 文件,将 $_config['db']['1'] 开始的一段复制到后面,然后将复制的配置中 $_config['db']['1'] 改成 $_config['db']['2'],其中 “2″ 即是第二个数据库,也可以使用其他数字。

$_config['db']['2']['dbhost'] = 'localhost';
$_config['db']['2']['dbuser'] = 'root';
$_config['db']['2']['dbpw'] = 'root';
$_config['db']['2']['dbcharset'] = 'utf8';
$_config['db']['2']['pconnect'] = '0';
$_config['db']['2']['dbname'] = 'discuz';
$_config['db']['2']['tablepre'] = 'pre_';
然后添加表映射,假设我们的 “pre_my_table” 表在第二个数据库,那么就在后面添加如下代码:

$_config['db']['map']['my_table'] = 2; //注意不要加 "pre_",2 就是上面的数据库配置编号。
这样,我们就可以在代码中这样来使用我们的新数据库了:

$query = DB::query("SELECT * FROM ".DB::table("my_table"));
二、将帖子拆分到其他数据库
很多空间商都对单个数据库的大小进行了限制,而论坛中最大数据量的就是帖子表。Discuz! X1.5 提供了多个帖子表的支持,但默认无法将帖子表设置到其他数据库,我们可以通过一定的技巧是可以做到的。

在操作之前,请在后台暂时关闭论坛,以免用户发帖引起混乱。

首先,我们要创建一个新的帖子分表为主表。如下图所示,点击第二个按钮“创建主表”即可。



这时,Discuz! 会为我们创建一个名为“pre_forum_post_1”的表名(根据实际情况,前缀 pre_ 和后缀 _1 可能会不同)。

然后,我们根据上面介绍的方法在 config_global.php 中添加一个数据库配置。

并添加一个表映射:

$_config['db']['map']['forum_post_1'] = 2; //注意不要加 "pre_"或者其他表前缀,2 就是上面的数据库配置编号。
然后,从数据库管理器如 phpMyAdmin 中,将原数据库中的 pre_forum_post_1 (即前面 Discuz! 创建的表)表结构导入到新的数据库中以创建一个同名、同结构且起始自增ID相同的数据表。

然后将修改好的 config_global.php 上传换掉原来的配置文件,这时论坛的帖子数据将自动保存到新的数据库中。

注意:不能从后台的帖子分表功能中使用“帖子移动”功能来移动原来的数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|一起开发   

GMT+8, 2017-9-23 20:50 , Processed in 0.115185 second(s), 28 queries .

Powered by Discuz! X2.5 Licensed

© 2001-2012 Comsenz Inc.

回顶部