我是一名后端开发人员,最近必须优化搜索实现。该数据库有许多用于搜索的表,大约有 7 个表,每个表包含大约 50k-500k。桌子看起来像这样。
您还可以假设所有有名称的东西也有 ts_vector 作为其名称。如果我提供的图表不清楚,我很抱歉。
以下是有关系统的一些假设。我在实施系统时必须遵循这些。但您可以向我们推荐一些服务。如果你愿意的话。
这里有一些全局约束 只显示项目
我的数据的访问模式如下
本地主机中的平均搜索查询大约需要 5-6 秒。可能是因为需要进行多次连接和 7 个不同的查询才能获取总数据。
我必须遵循一些 NoSQL 原则,并且必须大量使用 JSONB 列,以下是我如何使用按位置值降序排序的物化视图来改进它。由此创建的物化视图看起来像这样,严重非规范化并使用 JSONB 列减少连接。物化视图对我们来说没问题,因为我们的数据刷新不多,定期 12 小时刷新对我们来说就足够了。
请注意我如何将所有内容添加到一张表中。 JSONB 列是一个救星。现在搜索查询大约为 600 毫秒。
刷新物化视图时搜索服务关闭。目前只读副本可以帮助我们实现这一点。
现在,我正在尝试从系统中删除只读副本。已设置备份并设置备用 rds。您有什么建议吗??
但是,我需要有关您当前数据模型的更多信息。请提供以下详细信息:
有了这些信息,我可以提出优化建议,例如:
请提供必要的详细信息,我将帮助您优化数据库数据模型。
示例格式
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
order_date DATE
);