数据优化

数据优化

读写分离,在X2的版本中,我们引入了多SQL服务器的支持,在主从服务器中,你可以配置写服务器跟读服务器,这样对于负载高的站点中可以使用这个 功能达到读写分离,降低由于写过程序中造成的MySQL表锁定后的SQL排队等候时间过长。当你的服务器支持读写分离要求时,你可以在 config_global.php中配置。例如:

/**
 * 数据库主服务器设置, 支持多组服务器设置, 当设置多组服务器时, 则会根据分布式策略使用某个服务器
 * @example
 * $_config['db']['1']['dbhost'] = 'localhost'; // 服务器地址
 * $_config['db']['1']['dbuser'] = 'root'; // 用户
 * $_config['db']['1']['dbpw'] = 'root';// 密码
 * $_config['db']['1']['dbcharset'] = 'gbk';// 字符集
 * $_config['db']['1']['pconnect'] = '0';// 是否持续连接
 * $_config['db']['1']['dbname'] = 'x1';// 数据库
 * $_config['db']['1']['tablepre'] = 'pre_';// 表名前缀
 *
 * $_config['db']['2']['dbhost'] = 'localhost';
 * ...
 *
 */
$_config['db'][1]['dbhost']  		= 'localhost';		
$_config['db'][1]['dbuser']  		= 'root';		
$_config['db'][1]['dbpw'] 	 	= 'root';		
$_config['db'][1]['dbcharset'] 		= 'gbk';		
$_config['db'][1]['pconnect'] 		= 0;			
$_config['db'][1]['dbname']  		= 'ultrax';		
$_config['db'][1]['tablepre'] 		= 'pre_';		

/**
 * 数据库从服务器设置( slave, 只读 ), 支持多组服务器设置, 当设置多组服务器时, 系统每次随机使用
 * @example
 * $_config['db']['slave']['1']['dbhost'] = 'localhost';
 * $_config['db']['slave']['1']['dbuser'] = 'root';
 * $_config['db']['slave']['1']['dbpw'] = 'root';
 * $_config['db']['slave']['1']['dbcharset'] = 'gbk';
 * $_config['db']['slave']['1']['pconnect'] = '0';
 * $_config['db']['slave']['1']['dbname'] = 'x2';
 * $_config['db']['slave']['1']['tablepre'] = 'pre_';
 *
 * $_config['db']['slave']['2']['dbhost'] = 'localhost';
 * ...
 * 
 */
$_config['db']['slave'] = array();				

SQL查询与循环

禁止在循环中进行相应的SQL查询,当遇到这种情况时,可以尽可能的将其转换成循环外的查询。

NOT IN

在SQL查询中禁用NOT IN条件。

在站点运营过程中,常遇到高楼贴的性能问题,比如 limit 187460, 20 。为了解决高楼贴可能出现的问题,Discuz! X2.5 做了如下调整:

1、增加position字段记录楼层,修改主键为:PRIMARY KEY (tid, `position`)联合主键,其中position 为auto_increment。

2、pid字段保留,仍然是auto_increment(单独的一个表),保持唯一,其值在一个单独的表中记录, 保留此字段的主要目的是可以让原程序的基本不用做修改。

使用方法:

SELECT * FROM pre_forum_post WHERE tid=424 AND position>=$start AND position<$end ORDER BY position;

点击数

在一个站点中,主题浏览量、文章查看数等数据实时更新时,需要频繁的写表操作,从而导致锁表问题。为了解决这一问题,Discuz! X2.5 做了如下调整:

1、增加forum_threadaddviews表,记录每一个TID的增量点击数。

2、查看帖子时,如果增量点击数到100,则使用进程锁将数据更新到thread表并更新增量点击数为0。

3、回贴时将增量点击数和回复数一起更新到thread表,并更新增量点击数为0。

4、执行计划任务:每天3点,5分钟一次,一次取500条数据更新到thread表, 并删除此500条数据,以减少forum_threadaddviews表的大小。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python研发

MySQL[一]

1·什么是MySQL丶Oracle丶SQLite丶Access丶MS SQL Server等?

703
来自专栏杨建荣的学习笔记

使用外部表关联MySQL数据到Oracle(r6笔记第100天)

因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查 到相应的数据返...

2484
来自专栏jouypub

Hive日常操作

根据分区查询数据:select table_coulm from table_name where partition_name = '2018-11-01';

862
来自专栏菩提树下的杨过

mysql: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for opera

昨天把mysql里所有table的varchar字段的字符集,批量换成了utf8mb4/utf8mb4_unicode_ci ,以便能保存一些emoji火星文 ...

20110
来自专栏软件开发

一个小时学会MySQL数据库

随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。 一、数据库概要 数据库(Database)...

1908
来自专栏数据和云

YH4:Oracle Flex Clusters

从Oracle数据库12c开始,可以将Oracle Clusterware和Oracle RAC配置在大型集群中,称为Oracle Flex集群。 这些集群包含...

2585
来自专栏逸鹏说道

如何修改自增列值以及相应的解决方法

今天工作中遇到特殊的一个任务,就是将两个自增列值的进行对调变更。 SQL Server 平台修改自增列值 由于之前处理过sql server数据库的迁移工作,尝...

3418
来自专栏哲学驱动设计

Rafy 框架 - 大批量导入实体

某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中。虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多...

1788
来自专栏沃趣科技

复制状态与变量记录表 | performance_schema全方位介绍

不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解p...

1323
来自专栏程序员阿凯

哥哥面前一条弯弯的河 --「JDBC」连接数据库

1173

扫码关注云+社区