在我看来,这不是一个好主意。
当然,你可以求助于巫毒,过滤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核心+店面之外的任何东西,那么您可能需要对一切进行一些调整才能正常工作。
希望这有帮助。