在单站点而不是多站点wp安装上拆分大型数据库的最佳方法是什么?HyperDB 可能是为了这个(根据活动安装情况,只有不到10位站长设法找到了如何安装它的方法)。
目前该网站有大约350k个帖子,它位于良好的VPS上。该网站在前台、打开页面、浏览等方面运行非常快。。。但在后端发布新帖子时,速度会变慢,每天都会添加大量新帖子。
站点具有以下永久链接结构:
sitename。com/year/month/day/postid/post name实际上只编辑新帖子,发布后不会更改。
有没有办法加快数据库的编写速度,或者更好地在一个数据库中发布文章,并为将来的文章建立新的数据库?
<小时>
Update:
First installation: 是用新数据库安装在站点的根目录中,没有旧的、已发布的帖子,只是为了将来的帖子。Permalink结构保持原样:
sitename。com/年/月/日/职位ID/职位名称
Second installation:在站点的根目录中创建了文件夹“2015”,并在该文件夹中安装了WP,其中包含来自根目录的原始WP安装的sql数据库,截至9月底的所有帖子,仅permalink更改为:
sitename。com/month/day/postid/post名称
它将提供与以前相同的URL结构(因为WP位于子文件夹“2015”中):
sitename。com/年/月/日/职位ID/职位名称
当我需要每年拆分一次数据库时(例如2014年),这种方法就起作用了。对于每一个过去的一年,我可以有一个文件夹命名的过去一年和WP安装在该文件夹与数据库与过去一年的职位。
这样,当访问者尝试打开URL时,例如:
sitename。com/2014/01/01/此处张贴姓名
服务器将首先查看子文件夹/2014/中的内容,其中有WP安装,将返回该帖子。
Problem:当数据库对于今年来说太大时,我尝试将今年的帖子分成两个数据库,一个数据库已经发布了从今年到9月底的所有帖子,另一个数据库将有未来的帖子。
我有这个:
在站点的根目录中,我有文件夹“2015”,带有永久链接结构的WP安装:
sitename。com/month/day/postid/post名称
以及采用permalink结构的根WP安装:
sitename。com/年/月/日/职位ID/职位名称
如果我尝试打开URL:
sitename。com/2015/09/01/此处张贴姓名
服务器将签入文件夹“2015”,该文件夹中的WP安装将从9月1日起返回帖子,并且工作正常。
若我今天在站点根目录下的WP安装中发布新帖子,它的URL将如下所示:sitename。com/2015/10/29/此处张贴姓名
若我试图打开它,服务器将在文件夹“2015”中查找WP安装,但该安装到9月底才有帖子,我得到404。之后,服务器将不会查看该帖子所在站点根目录中的WP安装。
Question:
How to make server look in WP installation inside sub folder "2015", and if there is no post in that installation to look for that post inside WP installation in root of site?
SO网友:thomascharbit
我在一个网站上有一个类似的问题,有大约10万行的wp\\U帖子和大约50万行的wp\\U Posteta。
事实是,当你开始有很多帖子时,WordPress在管理中有一些非常慢的查询。
找到瓶颈的最佳方法是使用Debug Bar 插件。
您可能会发现一些非常慢的查询,如下所示:
SELECT DISTINCT meta_key
FROM lc_postmeta
WHERE meta_key NOT BETWEEN \'_\' AND \'_z\'
HAVING meta_key NOT LIKE \'\\\\_%\'
ORDER BY meta_key
LIMIT 30
或
SELECT ID
FROM lc_posts
WHERE post_type = \'attachment\'
AND post_mime_type LIKE \'audio%\'
LIMIT 1
以及
SELECT ID
FROM lc_posts
WHERE post_type = \'attachment\'
AND post_mime_type LIKE \'video%\'
LIMIT 1
不幸的是,这些都是已知的问题,但您可以调整它们以更快地加载。
例如,我只是删除了我没有使用的自定义字段元盒,并获得了50%的加载时间。
add_action( \'admin_menu\' , \'pu_remove_post_custom_fields\' );
function pu_remove_post_custom_fields() {
remove_meta_box( \'postcustom\' , \'post\' , \'normal\' );
}
我不确定将数据库拆分为多个读取实例是否会有帮助。