Apache Ignite——SQL文档查看及简单归纳

导读:本篇文章讲解 Apache Ignite——SQL文档查看及简单归纳,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

官方中文文档:

https://www.zybuluo.com/liyuj/note/230739

一、介绍

Apache Ignite是一个兼容ANSI-99、水平可扩展以及容错的分布式SQL数据库,这个分布式是以数据在集群范围的复制或者分区的形式提供的,具体的形式取决于使用场景。
作为一个SQL数据库,Ignite支持所有的DML指令,包括SELECT、UPDATE、INSERT和DELETE,它还实现了一个与分布式系统有关的DDL指令的子集。
Ignite的一个突出特性是完全支持分布式的SQL关联,Ignite支持并置和非并置的数据关联。并置时,关联是在每个节点的可用数据集上执行的,而不需要在网络上移动大量的数据,这种方式在分布式数据库中提供了最好的扩展性和性能。
在这里插入图片描述
和很多的分布式SQL数据库不同,对于数据和索引,Ignite将内存和磁盘都视为完整有效的存储层,但是磁盘是可选的,如果禁用的话,Ignite就变为纯内存数据库。
可以像其他的SQL存储一样,根据需要与Ignite进行交互,比如通过外部的工具或者应用使用JDBC或者ODBC驱动进行连接。在这之上,Java、.NET和C++开发者也可以使用Ignite的原生SQL API。
Ignite支持数据定义语言(DDL)语句,可以在运行时创建和删除表和索引,还可以支持数据操作语言(DML)来执行查询,这些不管是Ignite的原生SQL API还是ODBC和JDBC驱动,都是支持的。
原文档中有如何操作的例子:
连接、创建表、创建索引、插入数据、查询数据、修改数据、删除数据的语法示例。

二、SQL参考

本文档描述了Apache Ignite支持的SQL语法,其中包括:
数据定义语言(DDL)
数据操作语言(DML)
聚合函数
数值函数
字符串函数
日期和时间函数
系统函数
数据类型

本节中还有这些SQL语法的详细例子。

三、架构

Ignite的SQL引擎是与H2数据库紧紧绑定在一起的,简而言之,H2是一个Java写的,遵循一组开源许可证,基于内存和磁盘的速度很快的数据库。
当ignite-indexing模块加入节点的类路径之后,一个嵌入式的H2数据库实例就会作为Ignite节点进程的一部分被启动。如果节点是在终端中通过ignite.sh{bat}脚本启动的,那么该模块会自动地加入类路径,因为它已经被放入了{apache_ignite}\libs\目录中。

Ignite SQL网格执行查询有两种方式:
首先,如果查询在一个部署为REPLICATED模式缓存上执行,那么Ignite会将查询发送给一个单个集群节点,然后在其上的本地化数据上执行;
再者,如果查询执行于PARTITIONED模式缓存,那么执行流程如下:

  • 查询会被解析然后拆分为多个映射查询以及一个汇总查询;
  • 所有的映射查询都会在持有缓存数据的所有数据节点上执行;
  • 所有的节点都会将本地执行的结果集提供给查询发起者(汇总节点),它会通过正确地合并结果集完成汇总的过程。
    关联查询的执行流程与上面描述的分区缓存查询执行流程一样。
  • 分布式关联
    Ignite支持并置和非并置的分布式SQL关联,此外,如果数据位于不同的缓存,Ignite还可以进行跨缓存的关联。
    分区和复制模式缓存之间的关联也可以无限制地进行。
    然而,如果在分区模式的数据集之间进行关联,那么一定要确保要么关联的键是并置的,要么为查询开启了非并置关联参数。

  • 并置关联
    默认情况下,如果一个SQL关联需要跨越多个Ignite缓存,那么所有的缓存都需要是并置的,否则,查询完成后会得到一个不完整的结果集,这是因为在关联阶段一个节点只能使用本地节点的可用数据。
    如下图所示,首先,一个SQL查询会被发送到待关联数据所在的节点(Q),然后查询在每个节点的本地数据上立即执行(E(Q)),最后,所有的执行结果都会在客户端进行聚合(R)。
    在这里插入图片描述

  • 非并置关联
    虽然关系并置是一个强大的概念,即一旦配置了应用的业务实体(缓存),就可以以最优的方式执行跨缓存的关联,并且返回一个完整且一致的结果集。但还有一种可能就是,无法并置所有的数据,这时,就可能无法执行满足需求的所有SQL查询了。
    Ignite设计和支持的非并置分布式关联就是针对的这样的场景,既无法或者很难并置所有的数据,但是仍然需要执行SQL查询。
    在实践中不要过度使用基于非并置的分布式关联的方式,因为这种关联方式的性能差于基于关系并置的关联,因为要完成这个查询,要有更多的网络开销和节点间的数据移动。
    当为一个SQL查询启用了非并置的分布式关联之后,查询映射的节点就会从远程节点通过发送广播或者单播请求的方式获取缺失的数据(本地不存在的数据)。
    启用非并置的关联
    可以查看JDBC, ODBC, Java, .NET, C++的相关文档来了解详细的信息。
    以Jdbc为例,它需要在连接的URL连接串中添加distributedJoins=true参数。
    正如下图所示,有一个潜在的数据移动步骤(D(Q))。潜在的单播请求只会在关联在主键(缓存键)或者关系键上完成之后才会发送,因为执行关联的节点知道缺失数据的位置,其他所有的情况都会发送广播请求。
    在这里插入图片描述

  • 本地查询

    有时,SQL网格中查询的执行会从分布式模式回落至本地模式,在本地模式中,查询会简单地传递至底层的H2引擎,他只会处理本地节点的数据集。
    这些场景包括:
    如果一个查询在部署有复制缓存的节点上执行,那么Ignite会假定所有的数据都在本地,然后就会隐式地在本地执行一个简单的查询;
    查询在本地缓存上执行;
    使用local = true参数为查询显式地开启本地模式,该功能只有原生的Java、.NET和C++ API才支持,比如,在Java中该参数是通过SqlQuery.setLocal(true)或者SqlFieldsQuery.setLocal(true)进行切换;
    即使查询执行时网络拓扑发生变化(新节点加入集群或者老节点离开集群),前两个场景也会一直提供完整而一致的结果集。
    然而,在应用显式开启本地模式的第三个场景中需要注意,原因是如果希望在部分节点的分区缓存上执行本地查询时网络还发生了变化,那么可能得到结果集的一部分,因为这时会触发一个自动的数据再平衡过程,SQL引擎无法处理这个特殊情况。

四、JDBC驱动

Ignite提供了一个JDBC驱动,它可以通过标准的SQL语句处理分布式数据,比如从JDBC端直接进行SELECT、INSERT、UPDATE和DELETE。
目前,Ignite支持两种类型的驱动,轻量易用的JDBC Thin模式驱动以及以客户端节点形式直接接入集群。
本节还详细介绍了如何用JDBC来驱动。查看原文档。

五、ODBC驱动

介绍了ODBC驱动的概念,如何安装ODBC驱动,如何运行运用。
查看原文档。

六、工具和分析

  • SQL工具
    Ignite的JDBC和ODBC驱动使得从SQL工具接入集群然后处理存储在其中的数据成为可能,需要做的仅仅是为SQL工具配置JDBC或者ODBC驱动。在本文中会以DBeaver为例,一步步演示如何进行这些基本的配置。
    安装、配置、接入集群、数据查询和分析
  • SQL命令行
    Ignite提供了一个SQLLine工具,它是一个接入关系数据库然后执行SQL命令的基于命令行的工具,它是Ignite中用于SQL连接的默认命令行工具。本文会描述如何用SQLLine接入Ignite集群,以及Ignite支持的各种SQLLine命令。
  • Tableau
    Tableau是一个聚焦于商务智能领域的交互式数据可视化工具。它使用ODBC API接入各种数据库和数据平台,然后分析里面的数据。
    Ignite有自己的ODBC实现,这样就使从Tableau端接入Ignite成为可能,并且可以分析存储于分布式Ignite集群中的数据。
  • Pentaho
    Pentaho是一个全面的平台,它可以非常容易地对数据进行抽取、转换、可视化和分析。Pentaho数据集成采用Java数据库连接(JDBC)API接入数据库。
    Ignite有自己的JDBC驱动,这样就使得通过Pentaho平台接入Ignite成为可能,然后就可以分析分布式Ignite集群中的数据了
  • Apache Zeppelin
    Apache Zeppelin,是一个支持交互式数据分析的基于Web的笔记本,它可以用SQL,Scala以及其他的工具来生成漂亮的数据驱动的,交互式以及可协同的文档。
    Zeppelin通过Ignite的SQL解释器可以从缓存中获得分布式的数据,此外,当SQL无法满足需求时Ignite解释器可以执行任何的Scala代码。比如,可以将数据注入缓存或者执行分布式计算。

七、Java开发向导

Java开发者可以使用特定的SQL API来查询和修改存储于数据库中的数据。
本文列举了这些SQLAPI以及其他java开发指南。查看原文档。

  • 文章是个人知识点整理总结,如有错误和不足之处欢迎指正。
  • 如有疑问、或希望与笔者探讨技术问题(包括但不限于本章内容),欢迎添加笔者微信(o815441)。请备注“探讨技术问题”。欢迎交流、一起进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/69849.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!