
# 架构原理
#### 核心原理
流式查询的核心原理为：在数据持续到达的过程中，实时地处理数据并生成查询结果。其不同于传统的批处理查询（查询完成后才返回结果），而是针对动态、连续变化的数据流设计的查询机制，具体原理如[图1]所示。
- 执行流式查询时，服务端将数据传入客户端socket缓冲区中，直到缓冲区存满暂停。当缓冲区中出现第一条数据时，即返回第一条D报文，JDBC开始从缓冲区逐行加载并处理数据。
- ResultSet结果集中只存放一行数据，执行next方法后，才会从缓冲区中读取下一条数据存放到结果集中，直到读取完所有的数据。
图1流式查询原理   
![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002620645707.png "点击放大")
#### 方案优势
在内存资源受限的大数据查询场景中建议使用流式查询，如果不满足业务需求，可使用以下两种查询方式。
- 普通查询：一次获取全部数据。 优势：结果集可以向前或者向后遍历，数据消费后还能再次处理。
  劣势：处理结果慢，结果集过大会造成内存溢出。
  
- 批量查询：一次多行，多次获取。可参考[批量查询](https://support.huaweicloud.com/bestpractice-gaussdb/gaussdb-22-0117.html#ZH-CN_TOPIC_0000002633420740)。
  优势：可以返回指定数量的数据，避免内存溢出。
  劣势：处理结果慢，需要多次向服务端发送查询请求。
  
 
