探讨一下WordPress优化,做好本地化优化和缓存,读写分离

查看 223|回复 19
作者:长泰   
hch6198313   
不错      
大江设计   
读写分离没搞过,不知道麻烦不
长泰
OP
  

wepublish耗子分享:
WordPress 祖传使用SQL_CALC_FOUND_ROWS进行数量统计并计算分页,但是这个查询语句在大数据量 (W+) 的情况下是很慢的,一个比较好的解决方法是将其替换成更为现代的COUNT语句。
[ol]
  • request = self::remove_found_rows_query ( $query->request );
  •                         return $posts;
  •                 }, 999, 2 );
  •                 add_filter ( 'posts_clauses', function ( $clauses, \WP_Query $wp_query ) {
  •                         $wp_query->fw_clauses = $clauses;
  •                         return $clauses;
  •                 }, 999, 2 );
  •         }
  •         public static function remove_found_rows_query ( $sql ) {
  •                 return str_replace ( ' SQL_CALC_FOUND_ROWS ', '', $sql );
  •         }
  •         public static function add_found_rows_query ( $sql, WP_Query $query ) {
  •                 global $wpdb;
  •                 $distinct = $query->fw_clauses['distinct'] ?? '';
  •                 $join     = $query->fw_clauses['join'] ?? '';
  •                 $where    = $query->fw_clauses['where'] ?? '';
  •                 $groupby  = $query->fw_clauses['groupby'] ?? '';
  •                 $count = 'COUNT (*)';
  •                 if ( ! empty ( $groupby ) ) {
  •                         $count = "COUNT ( distinct $groupby )";
  •                 }
  •                 return "
  •                         SELECT $distinct $count
  •                         FROM {$wpdb->posts} $join
  •                         WHERE 1=1 $where
  •                 ";
  •         }
  • }
  • FIX_WP_SLOW_QUERY::init ();
  • [/ol]复制代码
  • 长泰
    OP
      
    大江设计 发表于 2023-11-16 08:36
    读写分离没搞过,不知道麻烦不

    WordPress官方出品的HyperDB 是一个非常高级的数据库类,它取代了一些 WordPress 内置的数据库功能。主要区别是:
    * HyperDB 可以连接到任意数量的数据库服务器,
    * HyperDB 检查每个查询以确定合适的数据库。
    它支持:
    读写服务器(复制)
    可配置的读写优先级
    本地和远程数据中心
    私人和公共网络
    不同数据库/主机上的不同表
    智能后写主读
    故障主机的故障转移
    用于分析的高级统计信息
    WordPress 多站点


    2022-06-23-18-20-30-image.png (216.65 KB, 下载次数: 0)
    下载附件
    保存到相册
    3天前 上传

    docker管理系统的URLOS有相关解决方案:https://www.urlos.com/urlos-document/introduction/mysql-master-slave.html
    数据库一主多备实现的数据库主从集群,修改db-config.php内的数据库读写分离:
    [ol]
  • $wpdb->add_database(array(
  •     'host'     => 'mysql57001_master', // 主要数据库地址
  •     'user'     => 'wordpress0_3c9db',
  •     'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
  •     'name'     => 'wordpress0_3c9db',
  •     'write'    => 1, // 给主要数据可写入
  •     'read'     => !defined('DB_HOST_RPL1') ? 1 : 0, // 当从数据库不可用时主要数据库才可读取,如果从数据库可用则从从数据库读取。
  • ));
  • if(defined('DB_HOST_RPL1')):
  •     $wpdb->add_database(array(
  •         'host'     => 'mysql57001_slave', // 从数据库地址
  •         'user'     => 'wordpress0_3c9db',
  •         'password' => 'V4ex41r^pGU2E^7TP7l;cUaqcHLxaGa7nQvzz6CPA',
  •         'name'     => 'wordpress0_3c9db',
  •         'write'    => 0,  // 从数据库不可写入
  •         'read'     => 1,  // 从数据库可读取
  •     ));
  • endif;[/ol]复制代码
  • 雨天榕树   
    直接生成html  杜绝频繁读取  这是所有程序都面临的问题
    千寻   
    学习了。马上去使用上
    似水流年IomVU   
    感谢分享!
    im3e   
    用过几次WP之后,再会再考虑使用WP,太吃硬件资源。
    老男孩sSiJc   
    安装小宇宙,直接静态化
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部