Package gudusoft.gsqlparser.sqlenv
Class CompositeKeyOptimizer
Object
gudusoft.gsqlparser.sqlenv.CompositeKeyOptimizer
Composite Key Optimizer (Phase 4 - ClickHouse/Couchbase 优化)
用于全大小写敏感数据库(ClickHouse, Couchbase)的单次 Map 查找优化。
核心思想:
- 将多级标识符编码为单个复合键(避免 3 次 Map 查找)
- 格式:
len1#seg1|len2#seg2|len3#seg3|objectType - 例如:
"3#db1|6#schema|5#table|dotTable" - 性能:分层索引 2-4μs → 复合键 <200ns(~10x 提升)
适用条件(必须全部满足):
- 数据库厂商:ClickHouse 或 Couchbase(全标识符大小写敏感)
- 标识符无引号(引号会改变大小写规则)
- USE_COMPOSITE_KEY_OPT = true(默认 false,谨慎开启)
性能特性:
- 查找时间:~200ns(vs 2-4μs 分层索引)
- 内存开销:每个对象额外 ~32 bytes(复合键字符串)
- 构建时间:~100ns(长度前缀编码)
使用示例:
CompositeKeyOptimizer optimizer = new CompositeKeyOptimizer(EDbVendor.dbvclickhouse);
// 检查是否可以使用复合键
if (optimizer.canUseCompositeKey("db.schema.table")) {
// 构建复合键
String key = optimizer.buildCompositeKey("db.schema.table", ESQLDataObjectType.dotTable);
// 结果: "2#db|6#schema|5#table|dotTable"
// 存储到单一 Map
compositeKeyMap.put(key, tableObject);
}
- Since:
- 3.1.0.9
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildCompositeKey(String qualifiedName, ESQLDataObjectType objectType) 构建复合键(使用长度前缀编码避免冲突)booleancanUseCompositeKey(String qualifiedName) 判断是否可以使用复合键快速路径voidclear()清空索引get(String qualifiedName, ESQLDataObjectType objectType) 从复合键索引查找对象getStats()获取统计信息(用于性能分析)获取厂商boolean获取是否启用voidput(String qualifiedName, ESQLDataObjectType objectType, TSQLSchemaObject object) 添加对象到复合键索引remove(String qualifiedName, ESQLDataObjectType objectType) 移除对象intsize()获取索引大小
-
Constructor Details
-
CompositeKeyOptimizer
构造复合键优化器- Parameters:
vendor- 数据库厂商
-
-
Method Details
-
canUseCompositeKey
判断是否可以使用复合键快速路径条件(必须全部满足):
- 复合键优化已启用(USE_COMPOSITE_KEY_OPT = true)
- 厂商支持(ClickHouse 或 Couchbase)
- 限定名没有引号字符(引号会改变大小写规则)
- Parameters:
qualifiedName- 完整限定名(如 "db.schema.table")- Returns:
- true 如果可以使用复合键
-
buildCompositeKey
构建复合键(使用长度前缀编码避免冲突)格式:
len1#segment1|len2#segment2|len3#segment3|objectType例如:
"3#db1|6#schema|5#table|dotTable"优势:避免分隔符冲突(标识符可能包含 '.' 或 '|')
- Parameters:
qualifiedName- 完整限定名(如 "db.schema.table")objectType- 对象类型- Returns:
- 复合键
-
put
添加对象到复合键索引- Parameters:
qualifiedName- 完整限定名objectType- 对象类型object- schema 对象
-
get
从复合键索引查找对象- Parameters:
qualifiedName- 完整限定名objectType- 对象类型- Returns:
- 找到的对象,未找到时返回 null
-
remove
移除对象- Parameters:
qualifiedName- 完整限定名objectType- 对象类型- Returns:
- 被移除的对象,未找到时返回 null
-
size
获取索引大小- Returns:
- 索引中的对象数量
-
clear
清空索引 -
isEnabled
获取是否启用- Returns:
- true 如果已启用
-
getVendor
获取厂商- Returns:
- 数据库厂商
-
getStats
获取统计信息(用于性能分析)- Returns:
- 统计信息字符串
-