首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于post类型的拆分WP_POST表

基于post类型的拆分WP_POST表
EN

WordPress Development用户
提问于 2013-05-16 08:11:27
回答 2查看 898关注 0票数 1

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

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

任何想法都很受欢迎

EN

回答 2

WordPress Development用户

发布于 2013-05-16 10:35:58

您可以过滤'query' (在这里获得完整的SQL ),并在其中搜索post类型。然后根据发现的内容切换数据库。

但我不认为这会有什么效果:

  • 您可能会得到相同的post ID多次使用(在每个DB中)和一些奇怪的副作用(注释,分类)。
  • 有些查询包括多个post类型;您必须重写查询才能在所有表中搜索。
  • 有些查询只要求发布状态或日期…同样,您必须同时访问两个数据库。
票数 1
EN

WordPress Development用户

发布于 2021-10-06 10:38:02

在我看来不是个好主意。

当然,你可以使用一些巫毒,过滤query,或者在HyperDB或MySQL代理中做一些魔术等等,但这将是非常脆弱的。您还没有说明为什么要从另一个数据库查询产品,所以我假设您只想将其分解为可伸缩性。

在使用MySQL进行任何类型的切分时,您必须首先识别最小的数据单元,这些数据单元可以在单个碎片上自我包含。不幸的是,对于WordPress来说,这个单元是整个WordPress站点表的集合,减去全局表(wp_users + wp_usermeta)和Multisite表(wp_blogs、wp_site、wp_sitemeta等)。

这样你就可以把用户和网站分开。您可以将一个站点与另一个站点分开,但您不能将评论与帖子分离,也不能将分类法与术语分离。换句话说,分片对于像WordPress.com这样的多站点环境是很好的。

当然,您可以要求HyperDB在查询中查找wp_comments表并将其发送到另一台服务器,但是查询评论将不再工作,因为它将尝试将其与posts表进行JOIN,这是找不到的。

此时,您可能会想:“啊哈!我只需要拆分查询,首先从一个数据库获取所有注释,获取它们的post ID,然后将这些ID发送到另一个数据库,然后在PHP中执行联接!”

由于其他各种原因,WP_查询的分割_这个_查询已经尝试了类似的东西,主要是与对象缓存有关。这是一种非常简单的方法,可以从两个不同的地方(db、redis/memcached)查询相同的数据(posts)并组合结果。然而,它是如此复杂,以至于许多经验丰富的开发人员不知道它是如何工作的,也不知道为什么。现在想象一下有人在那里抛出了一个JOIN :)

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

最好的解决方案是将电子商务插件商店产品放在产品表中。然后,分片单元可以是products表,以及它可能对其进行JOIN处理的任何其他表。如果可以保证这组表,那么将它们移动到另一个数据库并在HyperDB中设置适当的数据集是安全的。

如果您正在使用WooCommerce,那么Woo核心团队正在开发一个自定义产品表Beta特性插件,这是为了纠正执行CPT的错误决定(事后20/20)。但是,如果您使用的是WooCommerce核心+店面之外的任何东西,那么您可能需要对一切进行一些调整才能正常工作。

希望这能帮上忙。

票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/99667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档