数据优化

数据优化

读写分离,在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 101:如何从RottenTomatoes爬取数据

今天,我们将研究如何从热门电影网站Rotten Tomatoes爬取数据。你需要在这里注册一个API key。当你拿到key时,记下你的使用限制(如每分钟限制的...

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

浅谈MySQL中的事务隔离级别(r11笔记第86天)

之前写了一篇浅谈事务(一),算是对事务的一个基本认识,今天来简单总结一下事务的隔离级别,虽然是老掉牙的知识点,重温一下还是值得的。 在MySQL中基...

3389
来自专栏java系列博客

pl/sql导入excel到oracle表

2287
来自专栏我和PYTHON有个约会

Django来敲门~第一部分【5.2.模型和数据库交互】

通常情况下,如果你只是做测试使用,可以使用Django内置的数据库SQLite就完全可以满足需要了,我们在本次教程中,通过使用MySQL这个数据库来完成后续的功...

681
来自专栏喵了个咪的博客空间

Otter-入门篇4(单向同步实践)

Otter-入门篇4(单向同步实践)# ? 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper,manage和node,本节就...

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

关于修改分区表的准备和操作细则(r3笔记26天)

在之前的博文中,讨论过一个根据分区键值发现性能问题的案例。90%以上的数据都分布在了一个分区上,其它的分区要么没有数据要么数据很少,这是很明显的分区问题。当然这...

3086
来自专栏沃趣科技

Oracle 12c数据库优化器统计信息收集的最佳实践(二)

原文链接 http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-st...

3857
来自专栏一枝花算不算浪漫

Java应用集群下的定时任务处理方案(mysql)

5688
来自专栏文渊之博

SQL Server内存

背景 最近一个客户找到我说是所有的SQL Server 服务器的内存都被用光了,然后截图给我看了一台服务器的任务管理器。如图 ? 这里要说明一下任务管理器不会完...

3607
来自专栏乐沙弥的世界

Buffer cache 的调整与优化(一)

Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能。当Buffer Cache过小的时候,将会造成更多的

1133

扫码关注云+社区

领取腾讯云代金券