Apache Ignite SQL 和扫描查询之间的区别?

Difference between Apache Ignite SQL and Scan Query?

我想知道Ignite SQL和Scan Query有什么区别,包括但不限于:

  1. 他们的优点和缺点是什么?
  2. 扫描查询是否支持像SQL这样的索引?
  3. 有没有专门针对SQL/Scan查询的查询优化?
  4. 它们之间的性能比较?
  5. Ignite SQL利用H2数据库查询缓存,Scan Query也是这样做的吗?如果没有,扫描查询的方式是什么?

谢谢

SqlQuery

  • (+) 可以通过适当的索引提供更好的性能
  • (+) SQL 的全部功能:联接、聚合、分组
  • (-) 需要 QueryEntity 配置
  • (-) 为索引和内部数据结构消耗更多内存

ScanQuery

  • (+) 在某些情况下,更灵活,因为过滤器和转换器可以包含任意代码
  • (-) 始终执行完整缓存扫描(不以任何方式使用索引)
  • (-) 需要将过滤器和转换器代码 (类) 部署到服务器节点

我会说 SQL 是大多数用例的默认选择。当 filter/transformer 逻辑无法表达为 SQL and/or 需要自定义方法调用时,ScanQuery 很有用。