Documentation
¶
Overview ¶
Package query 实现查询处理和执行。
query 包包含查询执行器和迭代器,用于处理范围查询和流式查询。
组件:
Executor: 查询执行器,负责 SQL 解析和计划生成 QueryIterator: 流式迭代器,用于大数据集查询
查询流程:
请求 → Parser → Planner → Executor → 数据源 → 结果
Package query 实现查询处理和执行。
QueryIterator 提供流式查询功能,支持大数据集的高效遍历。
设计模式:
遵循 Go 迭代器模式,支持 for it.Next(ctx) { row := it.Points() } 用法。
内部使用最小堆(min-heap)实现多 Shard 归并排序。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Executor ¶
type Executor struct {
}
Executor 是查询执行器。
Executor 负责解析和执行查询请求。 当前是框架实现,未来将支持完整的 SQL 查询解析。
字段说明:
目前无具体字段,未来会添加解析器和优化器。
func NewExecutor ¶
NewExecutor 创建新的查询执行器。
参数:
- engine: 存储引擎实例(当前未使用,为接口预留)
返回:
- *Executor: 查询执行器实例
说明:
当前实现为基础框架,engine 参数用于未来依赖注入。 完整的实现需要与 engine 集成以实际查询数据。
func (*Executor) Execute ¶
func (e *Executor) Execute(ctx context.Context, req *types.QueryRangeRequest) (*types.QueryRangeResponse, error)
Execute 执行查询请求。
参数:
- ctx: 上下文,用于取消查询
- req: 查询请求
返回:
- *types.QueryRangeResponse: 查询结果(当前为空结果)
- error: 执行成功时返回 nil
当前实现:
基础实现仅返回空结果,不报错。 后续需要与存储引擎集成以实际查询数据。
type QueryIterator ¶
type QueryIterator struct {
// contains filtered or unexported fields
}
QueryIterator 是流式查询迭代器,支持多 Shard 归并排序和过滤。
QueryIterator 提供按需加载数据的迭代接口,适合处理超出内存容量的大查询。 内部使用最小堆(min-heap)实现多 Shard 数据的归并排序。
字段说明:
- req: 查询请求
- heap: 用于归并排序的最小堆
- currentRow: 当前迭代位置的数据
- consumed: 已返回给调用者的行数
- skipped: 因 Offset 跳过的行数
- closed: 是否已关闭
使用模式:
it, err := query.NewQueryIterator(ctx, shards, req)
if err != nil {
return err
}
defer it.Close()
for it.Next(ctx) {
row := it.Points()
// 处理 row
}
线程安全:
不是线程安全的,不要从多个 goroutine 并发访问。
func NewQueryIterator ¶
func NewQueryIterator(ctx context.Context, shards []*shard.Shard, req *types.QueryRangeRequest) *QueryIterator
NewQueryIterator 创建流式查询迭代器。
为每个可用的 Shard 创建 ShardIterator,并加入归并排序堆。
参数:
- ctx: 上下文
- shards: 要查询的 Shard 列表
- req: 查询请求
返回:
- *QueryIterator: 创建的迭代器
初始化过程:
- 为每个 Shard 创建 ShardIterator
- 如果 Iterator 有当前数据,加入堆
- 获取第一个有效行
func (*QueryIterator) Close ¶
func (q *QueryIterator) Close() error
Close 关闭迭代器。
返回:
- error: 关闭失败时返回错误(当前总是返回 nil)
说明:
标记迭代器为已关闭,后续 Next() 调用将返回 false。 建议配合 defer 使用以确保资源释放。
func (*QueryIterator) Next ¶
func (q *QueryIterator) Next(ctx context.Context) bool
Next 移动到下一个匹配的数据点。
参数:
- ctx: 上下文,用于检查取消和超时
返回:
- bool: 如果返回 true,表示有有效数据,可通过 Points() 获取。 如果返回 false,表示迭代结束或出错。
功能说明:
- 处理 Offset:跳过前 req.Offset 行
- 处理 Limit:当 consumed >= req.Limit 时停止
- 自动检查 context 取消
- 维护 consumed 和 skipped 计数
func (*QueryIterator) Points ¶
func (q *QueryIterator) Points() *types.PointRow
Points 返回当前迭代位置的数据。
返回:
- *types.PointRow: 当前数据行
调用时机:
在 Next() 返回 true 后才能调用,否则返回 nil。
注意:
调用 Points() 后会清空 currentRow,下次调用 Next() 会获取下一行。
Click to show internal directories.
Click to hide internal directories.