可扩展 Redis Query Engine 的最佳实践
Redis Software 和 Redis Cloud 中可扩展 Redis Query Engine 的最佳实践。
Redis Query Engine 的纵向扩展需要配置查询性能因子。通过精心设计搜索索引和查询,查询性能因子可使吞吐量扩展高达 16 倍。以下建议有助于查询避免访问键空间,并使 Redis Query Engine 从通过查询性能因子分配的额外 CPU 中获益。
查询性能因子改进的最佳候选者
索引最佳实践
遵循以下 索引 最佳实践
-
在索引定义中包含用于查询或所需结果集(投影)的字段。
-
对结果集中返回的所有字段使用
SORTABLE
。 -
对
TAG
和GEO
字段使用UNF
选项。 -
对
TEXT
字段使用NOSTEM
选项。
查询最佳实践
遵循以下 查询 最佳实践
-
在
RETURN
或LOAD
子句中指定结果集字段,并将它们包含在索引定义中。不要只返回FT.SEARCH
的默认结果集或FT.AGGREGATE
的LOAD *
。 -
使用
LIMIT
限制结果集大小。 -
对任何 JSON 查询使用
DIALECT 3
或更高版本。
索引和查询示例
以下示例展示了一个反模式的索引 schema 和查询,随后是一个经过纠正的 schema 和查询,后者能够与 Redis Query Engine 实现可扩展性。
反模式索引 schema
以下索引 schema 未针对纵向扩展进行优化
FT.CREATE jsonidx:profiles ON JSON PREFIX 1 profiles:
SCHEMA $.tags.* as t NUMERIC SORTABLE
$.firstName as name TEXT
$.location as loc GEO
反模式查询
以下查询未针对纵向扩展进行优化
FT.AGGREGATE jsonidx:profiles '@t:[1299 1299]' LOAD * LIMIT 0 10
改进的索引 schema
这是一个遵循纵向扩展最佳实践的改进索引 schema
FT.CREATE jsonidx:profiles ON JSON PREFIX 1 profiles:
SCHEMA $.tags.* as t NUMERIC SORTABLE
$.firstName as name TEXT NOSTEM SORTABLE
$.lastName as lastname TEXT NOSTEM SORTABLE
$.location as loc GEO SORTABLE
$.id as id TAG SORTABLE UNF
$.ver as ver TAG SORTABLE UNF
改进的查询
这是一个遵循纵向扩展最佳实践的改进查询
FT.AGGREGATE jsonidx:profiles '@t:[1299 1299]'
LOAD 6 id t name lastname loc ver
LIMIT 0 10
DIALECT 3