4年前 (2021-04-18)  相关技术 |   抢沙发  547 
文章评分 0 次,平均分 0.0

ApacheIgnite是一个分布式数据库,用于具有内存速度的高性能计算

Ignite于2014年底由GridGain Systems开放源码,同年被Apache孵化器项目接受。Ignite项目于2015年9月18日毕业。

Apache Ignite的数据库使用RAM作为默认的存储和处理层,因此属于内存计算平台。磁盘层是可选的,但一旦启用,将保留完整的数据集,而内存层[6]将根据其容量缓存完整或部分数据集。

无论使用何种API,Ignite中的数据都以键值对的形式存储。数据库组件水平扩展,在集群中分布键值对,这样每个节点都拥有整个数据集的一部分。每当向集群中添加或从集群中删除节点时,数据都会自动重新平衡。

在其分布式基础之上,Apache IngIt支持多种API,包括JCache兼容的键值API、ANSI-99 SQL与连接、ACTION事务以及MapReduce类计算。

ApacheIgnite集群可以部署在商用硬件、云中(如Microsoft Azure、AWS、Google Compute Engine)或容器化和资源调配环境中,如Kubernetes、Docker、ApacheMesos、VMWare。

Ignite集群

Apache Ignite
Apache Ignite集群组件基于shared-nothing架构。节点分为两大类-服务器和客户端。服务器节点是集群的存储和计算单元,它保存数据和索引,并处理传入的请求和计算。服务器节点也称为数据节点。

客户机节点是从应用程序和服务到表示为服务器节点集群的分布式数据库的连接点。客户端节点通常嵌入在编写有特殊库的爪哇、C或C++中的应用程序代码中。

此外,ApacheIgnite还提供了ODBC、JDBC和REST驱动程序,作为处理来自其他编程语言或工具的数据库的方法。驱动程序在内部利用客户机节点或低级套接字连接来与集群通信。

分区和复制

Ignite数据库以键值对的形式在分布式“缓存”中组织数据(缓存概念用于历史原因,因为最初数据库支持内存层)。通常,每个缓存表示一个实体类型,例如雇员或组织。

每个缓存被分割成一组固定的“分区”,这些分区使用集合散列算法均匀地分布在集群节点之间。一个分区总是有一个主分区和零个或多个备份副本。副本数是用复制因子参数配置的。如果配置了完全复制模式,则每个群集节点都将存储分区的副本。如果一个节点被添加到集群或从集群中移除,分区会自动重新平衡,以实现均匀的数据分布和分散工作负载。

键值对保存在分区中。ApacheIgnite通过获取密钥的值并将其传递给一个特殊的散列函数,将一对映射到一个分区。

内存结构

ApacheIgnite中的内存体系结构由两个存储层组成,称为“持久内存”。在内部,它使用分页进行内存空间管理和数据引用,类似于Unix等系统的虚拟内存。然而,持久内存体系结构和虚拟内存体系结构之间的一个显著区别是,前者总是将带有索引的整个数据集保存在磁盘上(假设启用了磁盘层),而虚拟内存在耗尽RAM时仅用于交换目的。

内存体系结构的第一层,内存层,将RAM中的数据和索引保存在所谓的“堆外区域”中的Java堆之外。这些区域是由数据库自己预先分配和管理的,这会阻止Java堆利用存储需求,从而有助于避免长时间的垃圾收集暂停。这些区域被分割成固定大小的页面,这些页面存储数据、索引和系统元数据

ApacheIgnite从内存层完全可以运行,但是为了持久性,总是可以使用第二层磁盘层。数据库有自己的本机持久性,而且可以使用RDBMS、NoSQL或Hadoop数据库作为其磁盘层。

本机持久化

ApacheIgnite本机持久性是一个分布式的、强一致性的磁盘存储,它总是在磁盘上保存数据和索引的超集。内存层[6]只能根据其容量缓存尽可能多的数据。例如,如果有1000个条目,而内存层只能容纳其中的300个条目,那么所有1000个条目都将存储在磁盘上,只有300个条目将缓存在RAM中。

持久性使用预写日志(WAL)技术在磁盘上保留即时数据修改。在后台,存储运行“检查点过程”,目的是将脏页从内存层复制到分区文件。脏页是在内存中修改的页,修改记录在WAL中,但没有写入相应的分区文件。检查点允许在一段时间内删除过时的WAL段,并减少集群重新启动时间,只重放WAL中尚未应用于分区文件的部分。

第三方持久化

本机持久性从2.1版开始可用。在此之前,ApacheIgnite只支持第三方数据库作为其磁盘层。

ApacheIgnite可以配置为RDBMS、NoSQL或Hadoop数据库之上的内存层,从而加快后者的速度。但是,与本机持久性相比,存在一些限制。例如,SQL查询将只在RAM中的数据上执行,因此需要预先将所有数据集从磁盘预加载到内存中。

交换空间

使用纯内存存储时,数据大小可能超过物理RAM大小,从而导致内存不足错误(OOME)。为了避免这种情况,理想的方法是启用Ignite本机持久性或使用第三方持久性。但是,如果不想使用本机或第三方持久性,可以启用交换,在这种情况下,Ignite内存中的数据将移动到磁盘上的交换空间。请注意,Ignite不提供自己的交换空间实现。相反,它利用了操作系统(OS)提供的交换功能。启用交换空间后,Ignites会将数据存储在内存映射文件(MMF)中,这些文件的内容将由操作系统根据当前RAM消耗量交换到磁盘

一致性

ApacheIgnite是一个实现两阶段提交协议的强一致性平台。内存层和磁盘层都满足一致性保证。ApacheIgnite中的事务是ACID兼容的,可以跨越多个集群节点和缓存。数据库支持悲观和乐观并发模式、无死锁事务和死锁检测技术。

在事务保证是可选的场景中,ApacheIgnite允许以原子模式执行查询,从而提供更好的性能。

分布式SQL

Apache Ignite
Apache Ignite可以通过使用JDBC和ODBC驱动程序公开的SQL API访问,并为java、C语言、C++编程语言开发的本机库。数据操作和数据定义语言的语法都符合ANSI-99规范。

作为一个分布式数据库,Apache Ignite支持分布式并置联接和非并置联接。当数据并置时,在集群节点的本地数据上执行联接,避免数据在网络上移动。非并置联接可能会在网络中移动数据集,以便准备一致的结果集。

机器学习

Apache Ignite
Apache Ignite提供机器学习训练和推理功能,以及数据预处理和模型质量估计。它本机支持经典训练算法,如线性回归、决策树、随机森林、梯度增强、支持向量机、K-均值等。除此之外,Apache Ignite还与TensorFlow进行了深度集成。这种集成允许以单个节点或分布式方式对存储在Apache Ignite中的数据训练神经网络。

ApacheIgnite机器学习工具箱的核心思想是能够在不传输大量数据的情况下立即执行分布式训练和推理。它基于MapReduce方法,对节点故障和数据重新平衡具有弹性,允许避免数据传输,从而加快预处理和模型训练。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1832.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册