根据帖子类型拆分WP_POST表

时间:2013-05-16 作者:user31956

我想知道是否有可能根据帖子类型从2个数据库获取我的帖子。

我正在使用HyperDB,但似乎无法让它根据post类型指定数据库。我基本上需要我的所有“产品”帖子类型从另一个DB拉到一般WP帖子(媒体、页面等)?

非常感谢您的任何想法

2 个回复
SO网友:fuxia

您可以筛选\'query\' (您在此处获得完整的SQL)并在其中搜索帖子类型。然后根据找到的内容切换数据库。

但我认为这不会很好:

您可能会多次使用相同的帖子ID(在每个DB中)并产生一些奇怪的副作用(评论、分类法)

SO网友:kovshenin

在我看来,这不是一个好主意。

当然,你可以求助于巫毒,过滤query 或者在HyperDB或MySQL代理中施展魔法,等等,但这将变得非常脆弱。您还没有指定为什么要从另一个数据库查询产品,所以我假设您只想对其进行切分以实现可伸缩性。

在使用MySQL进行任何类型的分片时,必须首先确定最小的数据单元,即可以在单个分片上独立的数据单元。不幸的是,对于WordPress来说,这个单位是entire WordPress站点表的集合,减去全局表(wp\\u用户+wp\\u用户元)和多站点表(wp\\u博客、wp\\u站点、wp\\u站点元等)

因此,您可以将用户与站点分离。您可以将一个站点与另一个站点分开,但不能将评论与帖子分开,也不能将分类法与术语分开。换句话说,切分对于多站点环境非常有用,比如WordPress。com。

当然,您可以让HyperDB查找wp_comments 然后将其发送到另一台服务器querying a comment 将不再工作,因为它将尝试JOIN 它与posts表一起使用,但却找不到该表。

此时,您可能会想:“您可以;啊哈!我将拆分查询,首先从一个数据库中获取所有注释,获取它们的帖子ID,然后将这些ID发送到另一个数据库,并在PHP中执行连接"E;

我们已经尝试过类似的方法WP_Query\'s split_the_query 由于各种其他原因,主要与对象缓存有关。这是一种非常简单的方法,可以从两个不同的位置(db、redis/memcached)查询相同的数据(帖子)并组合结果。然而,它是如此复杂,以至于许多经验丰富的开发人员都不知道它是如何工作的,也不知道为什么。现在想象一下有人扔了一个JOIN 有:)

然后,从理论上讲,如果我们确实设法以某种方式查询两个数据库并(内部、左侧、右侧)在PHP中连接结果,那么与让MySQL执行连接并只向我们发送结果相比,这样做的成本很可能要慢几个数量级。所以我们在性能测试中还是输了。

最好的解决方案是让电子商务插件在products表中存储产品。然后,切分单元可以是products表以及它可能包含的任何其他表JOIN 在…上如果可以保证这组表,那么可以安全地将它们移动到另一个数据库,并在HyperDB中设置适当的数据集。

如果你与WooCommerce合作Custom Product Tables Beta Woo core团队正在开发的功能插件,旨在纠正做CPT的错误决定(事后诸葛亮20/20)。如果您使用的是WooCommerce核心+店面之外的任何东西,那么您可能需要对一切进行一些调整才能正常工作。

希望这有帮助。

结束

相关推荐

NEXT_POSTS_LINK返回第一页的相同内容

分页似乎工作正常。。。我有21个帖子。。。它将转到3页。。。然而每页显示10篇帖子,内容与第一页相同。。。。<?php $temp = $wp_query; $wp_query= null; $args = array( \'post_type\' => \'a-reports\', \'post_status\' => \'publish\' ); $wp_query = new WP_Query( $a