WooCommerce 高性能订单存储 HPOS 指南

高性能订单存储(High-Performance Order Storage,HPOS),曾称为自定义订单表,是专门为电商需求设计的方案,提供易于理解、稳固的数据库结构。

它沿用 WooCommerce 的创建、读取、更新、删除(CRUD)设计,将订单数据保存在为 WooCommerce 查询优化的自定义表中,尽量减少对商店性能的影响。

HPOS 带来了什么

HPOS 改善了电商商店至关重要的三个方面。

可扩展性

顾客和订单数量增长,会增加数据库负载,使商店更难处理订单请求并提供流畅体验。HPOS 为订单、订单地址等数据建立专用表和索引,减少读写操作,以及集中繁忙的表。不同规模的商店都能因此扩展业务,充分发挥潜力,而不必依赖专家介入。

可靠性

HPOS 简化了定向数据备份与恢复。自定义订单表中的可靠备份,有助于避免订单、库存数量和顾客信息丢失。它也便于实施读写锁,防止竞态条件。

简单性

无需再穿过一张庞大的数据库表寻找底层数据和 WooCommerce 条目。HPOS 使用独立于 _posts 的表和更易处理的条目,方便查找数据、理解表结构,也让开发扩展、实现商店与商品设计、修改 WooCommerce 更灵活。

背景

WooCommerce 8.2 之前,订单信息依赖 _post 与 _postmeta 表结构存储。

HPOS 引入订单、订单地址等数据的专用表和索引,减少读写操作与热点表,使各种规模的商店都能更好地扩展。

订单数据从 _posts 和 _postmeta 同步到四张自定义订单表:

  • _wc_orders
  • _wc_order_addresses
  • _wc_order_operational_data
  • _wc_orders_meta

如何启用高性能订单存储

注意:启用前,确保网站中使用自定义文章类型的扩展处于激活状态,例如 Woo Subscriptions、WooCommerce Bookings 等。在迁移订单数据前停用这些扩展,可能造成数据不一致。具体处理见下文“迁移期间处理自定义文章类型”。

从 WooCommerce 8.2 开始,新安装默认启用 HPOS。现有商店可以按照以下步骤从 WordPress 文章存储切换。

现有商店首先需要让文章表与订单表同步:

  1. 在后台进入“WooCommerce → Settings → Advanced → Features”。
  2. 勾选“Enable compatibility mode (synchronizes orders to the posts table)”。
启用兼容模式,将订单同步到文章表
启用兼容模式,将订单同步到文章表

启用后会安排后台任务。wc_schedule_pending_batch_process 检查是否有订单需要回填;如果有,则安排 wc_run_batch_process,将这些订单回填到文章存储。

可以等待任务自动运行,通常不会太久;也可以进入“WooCommerce → Status → Scheduled Actions”,找到任务,将鼠标悬停在名称上,点击下方出现的“Run”。

每次任务回填 25 个订单。如果仍有订单需要同步,前一次完成后会安排后续任务。

两套表成功同步后,就可以选择切换到 HPOS。建议暂时保留兼容模式,确保平稳过渡;出现问题时,可以立即切回 _posts 表。

也可以使用命令行 wp wc cot sync,将订单从 _posts 复制到 HPOS 表。该命令会根据权威数据表设置,自动判断正确的数据传输方向。

注意:将兼容模式关闭再开启,也会在需要时重新安排回填。

订单数据存储

可以自由切换数据存储,并在不同表之间同步:

  • 选择“WordPress posts storage (legacy)”时,订单保存在 _posts 和 _postmeta,此时不使用订单表。
  • 选择“High-performance order storage (recommended)”时,订单保存在新的 WooCommerce 订单表。
  • 选择传统文章存储并启用兼容模式时,会在 _posts、_postmeta 与 WooCommerce 订单表之间同步订单。
选择传统 WordPress 文章存储
选择传统 WordPress 文章存储
选择推荐的高性能订单存储
选择推荐的高性能订单存储

同步

同时选择高性能订单存储和兼容模式后,WooCommerce 使用 _posts 与 _postmeta 中的数据填充 HPOS 表。更多信息见 不同表之间的同步。

高性能订单存储中的兼容模式
高性能订单存储中的兼容模式

迁移期间处理自定义文章类型

启用前,确保使用自定义文章类型的扩展已经激活,例如 Woo Subscriptions、WooCommerce Bookings。它们的数据保存在 WordPress 文章表中,而启用 HPOS 后,订单数据会迁移到新优化的 HPOS 表。

如果迁移后才重新启用扩展,可能产生数据不一致:原数据还在文章表中,系统却已经改为查询 HPOS 表,因而无法识别。保持这些扩展在迁移时激活,可以避免此问题。

如果已经停用扩展并启用了 HPOS,请按以下步骤正确迁移:

  1. 进入“WooCommerce → Settings → Advanced → Features”。
  2. 将高性能订单存储切回 WordPress 文章存储,等待同步完成。
  3. 再次切回高性能订单存储。

不兼容的扩展

如果正在使用不兼容 HPOS 的扩展,“WooCommerce → Settings → Advanced → Features”中的切换选项会被禁用。

点击“View and manage”查看不兼容扩展列表。也可以访问 https://example.com/wp-admin/plugins.php?plugin_status=incompatible_with_feature&feature_id=custom_order_tables,将 example.com 替换为自己的网站域名。

注意:如果第三方扩展与 HPOS 配合时不能正常工作,请通知其开发者,要求添加支持。每个扩展的开发者负责实现各自的兼容性;WooCommerce 已提供开发资源与文档协助集成。

HPOS 全文搜索索引

从 WooCommerce 9.0 开始,订单全文搜索(FTS)以实验模式提供,可以更快地按订单地址与商品搜索。

启用步骤:

  1. 进入“WooCommerce → Settings → Advanced → Features”。
  2. 确认订单数据存储已设置为 HPOS。
  3. 在“Experimental features”中启用“HPOS Full-text search indexes”。
启用实验性的 HPOS 全文搜索索引
启用实验性的 HPOS 全文搜索索引

注意:只有订单数据存储使用 HPOS 时,此功能才有效。

禁用 HPOS

遇到问题,或必须继续使用尚不兼容的扩展时,建议临时将订单数据存储切回传统 WordPress 文章存储。

进入“WooCommerce → Settings → Advanced → Features”,确保兼容模式已启用。如果此前没有启用,可能需要等待不同数据存储之间的订单同步。

同步完成后,选择“WordPress posts storage (legacy)”,此时也可以关闭兼容模式。准备重新启用 HPOS 时,按本文开头的步骤操作。每次修改之间都要保存页面。

将订单数据存储切回传统方式以禁用 HPOS
将订单数据存储切回传统方式以禁用 HPOS

也强烈建议联系不兼容扩展的支持团队,让他们修正问题。

开发者升级指南

如果你或团队需要更新商店自定义代码、扩展或其他与 HPOS 相关的内容,请查看 升级指南,了解完整技术细节。

常见问题

现有商店必须启用 HPOS 吗?

不必。虽然建议切换以获得更快的结账体验,但可以按自己的时间安排。这项功能完全自愿启用,可以随时切换。

常用扩展不兼容,怎么办?

WooCommerce 已通过博客、GitHub 升级指南和完整文档向开发者社区说明 HPOS 变化。尽管持续推动,仍可能有开发者没有实现支持。建议联系相应扩展的支持团队,请求更新。已经安装的扩展仍可在不启用 HPOS 的情况下继续使用。

小企业也适合吗?

各种规模的企业都能受益于高性能订单存储。

对高订单量的现有商店有什么影响?

现有商店不会自动迁移,功能完全自愿启用。可以按前述步骤开启。

对主机有特殊要求或限制吗?

没有主机限制。能够运行 WordPress 与 WooCommerce 的主机,通常都能运行 HPOS,而且启用后多个方面的性能应得到提升。更多信息见 WooCommerce 服务器要求文档。

更深入的技术说明,可查看 开发者博客常见问题。

问题与支持

本文介绍免费的 WooCommerce 核心插件,支持渠道为 WordPress.org 社区论坛。搜索论坛通常能找到已经回答的问题。没有账户时,可查看 注册说明。

扩展功能可查看 WooCommerce Marketplace;持续高级支持或定制开发可聘请 Woo Agency Partner;开发自己的集成或扩展时,请查阅 开发者资源。找不到所需信息时,可用原文底部的反馈按钮告知团队。


原文:High-Performance Order Storage。作者/维护者:WooCommerce 文档团队。本文为原文的中文译文;代码保留原文内容。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容