商品表按 seller_id 分片,按 title 建了索引,卖家刚发布的商品用标题搜不到,等十几秒再搜才出现,跨卖家搜索则完全查不到。日志里能对上时间点,这种反而好排。

本地索引只覆盖本片数据,跨片查询要每片各查一次再合并,新写入还没进索引时会出现空窗。查询条件不带分片键时,索引也无法定位到具体片。这一点先确认清楚,后面就不用反复试。

SELECT product_id FROM t_product_idx WHERE title LIKE '机械键盘%' LIMIT 20;
-- 全局索引表按 title 哈希单独分片

「分片二级索引」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

处理上按这个顺序:明确哪些查询必须跨片 这类字段建全局索引表;写入时同步维护索引表 用事务或消息保证最终一致;搜索场景直接接搜索引擎 不要靠数据库二级索引;对索引延迟做监控 超过 1 秒告警。

结果对不对很好判断,卖家发布后立即按标题能搜到 跨卖家搜索也能命中。

作者 9823189