Apache Ignite本机持久性,简要概述

通过将数据的工作集放入系统内存中,内存中方法可以达到极高的速度。 当所有数据都保存在内存中后,处理使用传统旋转磁盘引起的问题的需求就消失了。 例如,这意味着无需维护数据的其他缓存副本并管理它们之间的同步。 但是这种方法还有一个缺点,因为数据仅在内存中,如果整个集群都终止了,数据将无法生存。 因此,根本不认为此类数据存储具有持久性。

在这篇博客文章中,我将努力探索Apache Ignite的本机持久性新功能,并提供清晰易懂的图片,说明Apache Ignite的本机持久性如何工作。

在大多数情况下,您不能(不应)将整个数据集存储在应用程序的内存中,通常,您应该存储相对较小的热数据或活动数据子集,以提高应用程序的性能。 其余数据应存储在低成本磁盘或磁带中的某个位置以进行归档。 有两种主要的内存数据库存储需求:

  • 如果需要将内存数据库重新加载到内存中,则永久介质可以存储已提交的事务,从而保持持久性并用于恢复目的。
  • 永久存储,用于保存整个内存数据库的备份副本。

永久性存储或媒体可以是任何分布式或本地文件系统,SAN,NoSQL数据库,甚至是RDBMS(例如Postgres或Oracle)。 Apache Ignite(从1.5版开始)提供了一种优雅的方式来连接持久性数据存储(例如RDBMS或NoSQL DB,例如Mongo DB或Cassandra)。 RDBMS中的持久性通常是瓶颈,并且您永远不会在系统中进行水平扩展。 有关更多信息,我建议您阅读“ 使用Apache Ignite进行高性能内存计算 ”一书中的示例章节。

因此,从版本2.1.0开始 ,Apache Ignite提供了与ACID和SQL兼容的磁盘存储,该磁盘存储与Ignite的持久性内存透明集成,作为可选的磁盘层,用于存储SSD,Flash,3D XPoint和其他类型的非易失性数据和索引仓库。

Apache Ignite本机持久性使用新的持久性内存架构 ,该架构允许存储和处理数据以及在内存中和磁盘上建立索引。 只要启用该功能,Apache Ignite就会根据其容量将超数据集存储在磁盘上,并将一部分数据存储在RAM中。 如果RAM中缺少数据子集或索引,则耐用内存将从磁盘中取出数据,如下图所示。

数据也可以存储在中央磁盘存储中,所有Ignite节点都连接在中央磁盘存储中,如下所示。

在开始之前,让我们在沙盒中介绍项目的先决条件:

  1. Apache Ignite版本2.1.0
  2. JVM 1.8
  3. Apache Maven版本> 3.0.3
  4. *基于nix的操作系统

安装。

基本上有两种使用Apache Ignite的方法:

  • 下载二进制发行版,然后将归档文件解压缩到操作系统中的某个位置,然后使用spring config文件运行./ignite.sh bash脚本。
  • 使用所需的Apache Ignite依赖关系创建一个maven项目,通过Java代码配置节点并运行它。

在这里,我将使用第一个选项。

步骤1。

  • 下载 Apache Ignite二进制发行版,并将发行版解压缩到沙箱中的某个位置。
  • 修改IGNITE_HOME / examples / config / persistentstore / example-persistent-store.xml文件,并注释高速缓存配置的以下部分。
<property name="cacheConfiguration">
<list><bean class="org.apache.ignite.configuration.CacheConfiguration"><property name="name" value="testCache"/><property name="backups" value="1"/><property name="atomicityMode" value="TRANSACTIONAL"/><property name="writeSynchronizationMode" value="FULL_SYNC"/><property name="indexedTypes"><list><value>java.lang.Long</value><value>org.apache.ignite.examples.model.Organization</value></list></property></bean></list>
</property>

请注意,要启用Ignite本机持久性,只需传递以下配置(PersistentStoreConfiguration的实例),该配置已在example-persistent-store.XML文件中进行了预配置。

<property name="persistentStoreConfiguration">
<bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/>
</property>
  • 从IGNITE_HOME目录运行以下命令。
./ignite.sh $IGNITE_HOME/examples/config/persistentstore/example-persistent-store.xml
Step 2. create a Maven project with the following command.
mvn archetype:create -DgroupId=com.blu.imdg -DartifactId=ignite-persistence
  • 在pom.xml中添加以下依赖项
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>2.1.0</version></dependency>
  • 创建具有以下内容的Java类。
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello Ignite");// create a new instance of TCP Discovery SPITcpDiscoverySpi spi = new TcpDiscoverySpi();// create a new instance of tcp discovery multicast ip finderTcpDiscoveryMulticastIpFinder tcMp = new TcpDiscoveryMulticastIpFinder();tcMp.setAddresses(Arrays.asList("localhost")); // change your IP address here// set the multi cast ip finder for spispi.setIpFinder(tcMp);// create new ignite configurationIgniteConfiguration cfg = new IgniteConfiguration();cfg.setClientMode(true);// set the discovery§ spi to ignite configurationcfg.setDiscoverySpi(spi);// Start igniteIgnite ignite = Ignition.start(cfg);ignite.active(true);// get or create cacheIgniteCache cache = ignite.getOrCreateCache("testCache");// put some cache elementsfor (int i = 1; i <= 100; i++) {cache.put(i, Integer.toString(i));}// get them from the cache and write to the consolefor (int i = 1; i <= 100; i++) {System.out.println("Cache get:" + cache.get(i));}ignite.close();}
}

请注意,我们使用Ignite客户端模式来处理数据。 运行HelloWorld应用程序后,应在缓存中插入100个元素(缓存名称
testCache )。

第三步

  • 让我们使用ignitevisor命令工具检查数据。 在ignitevisor命令工具中使用cache -scan命令。 您应该在控制台中得到类似的插图。 缓存中的所有100个元素。
    • 现在,让我们看看引擎盖下发生了什么。
du -h .

您应该在控制台中得到如下所示的内容。

如果启用Apache Ignite本机持久性,则Ignite将在所有群集节点上的内存和磁盘上持久存储所有数据和索引。

如果要浏览目录db / 0_0_0_0_0_0_0__10_211_55_2_10_37_129_2_127_0_0_1_192_168_1_37_47500(在我的情况下),则将为每个缓存找到单独的文件夹。 名称为cache-testCache的文件夹将包含我们刚刚插入的所有缓存条目(100个元素)。

文件index.bin是缓存条目的索引,每个缓存元素都获取其各自的页面文件。 为什么会这样呢? 现在,Ignite体系结构是基于页面的体系结构。 让我们仔细看看,内存现在分为区域->区域分为段->段分为页。 页面可以交换到磁盘中。 页面可以存储:

  • 数据
  • 元数据
  • 指数

页面是固定长度的块,它还支持自动碎片整理。 如果仔细看一下页面大小,它们全都是14 KB。 每当Ignite需要从磁盘加载数据时,它只会加载页面文件,因此速度非常快。

同样,在预写日志(WAL)上还有另一个概念。 如果进行更新,则首先将更新内存中的数据并将页面标记为脏,然后将数据持久保存到预写日志中。 点燃只是将更新附加到WAL文件中。 WAL文件与Cassandra commitlog文件非常相似,但有一个区别。 Cassandra将并行写入内存和磁盘上的commitlog文件,另一方面,Ignite首先将数据更新到内存中,然后将数据附加到WAL中。 有关更多信息,我建议您看看
文档 ,这是非常详尽的。

第四步。

  • 重新启动Ignite节点,并检查缓存
    testCache
    点火器 。 您最终会感到惊讶,因为没有数据进入缓存。
  • 让我们稍微修改一下helloworld类,然后再次运行该应用程序,注释或删除以下代码片段,如下所示。
// put some cache elements
for (int i = 1; i <= 100; i++) {cache.put(i, Integer.toString(i));
}
Run the application and check the cache testCache through ignitevisor and you application console.

每当发生任何读取请求时,Ignite首先都会将数据检入内存。 如果内存中不存在该数据集,则Ignite立即从磁盘加载缓存条目并加载到内存中。 还要注意的是,所有条目都以堆的形式进入内存。

好处

使用Ignite本机持久性,现在您可以轻松地进行数据恢复备份,Denis Magda通过使用Ignite本机持久性撰写了一篇有关数据恢复的综合文章 。 我在这里必须提到的一件事是集群之间的数据复制。 通过使用Ignite本机持久性,现在您可以在线将数据从一个群集复制到另一个群集。 您可以使用任何基于磁盘的标准数据复制工具将已更改的数据集从主数据中心复制到备用数据中心或Ignite群集。

翻译自: https://www.javacodegeeks.com/2017/09/apache-ignite-native-persistence-brief-overview.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cheetah的中文_cheetah是什么意思_cheetah的翻译_音标_读音_用法_例句_爱词霸在线词典...

全部非洲猎豹One economist talks hopefully of the " cheetah generation " taking over from the " hippos ".有一位经济学者满怀希望地讲道,肯尼亚的年轻人是征服了 “ 河马一族 ” 的 “ 猎豹一代 ”.期刊摘选The fastest animal on land is the cheet…

计算机减法英语,英语加减乘除的表达

1. 加: “一加二等于三”可以这样表达One plus two is three.One plus two makes three.One plus two equals three.One and two are three.One and two make three.One and two equal three.2. 减: “八减四等于四” 可以这样表达Eight minus four is four.Eight minus four m…

Java命令行界面(第23部分):Rop

Rop库在其主页上被描述为“用Java编写的轻量级命令行选项解析器”。 Rop的“简介”还指出&#xff1a;“ Rop的设计目的是最小化同时方便&#xff0c;并涵盖了大多数常见的命令行解析用例。” 这篇文章是本系列中第23篇有关解析Java命令行参数的文章 &#xff0c;重点是Rop。 …

80端口请求太多超时 php_apmserver 80端口老是被占用问题解决

apmserver 80端口老是被占用问题解决1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等.这里主要是用到windows下的DOS工具,点击”开始”–“运行”,输入”cmd”后点击确定按钮,进入DOS窗口,接下来分别运行以下命令:>netstat -aon | findstr “80”Proto…

计算机网络计技术段标 实训,计算机网络技术实训报告精选.pdf

计算机网络技术实训报告精选《计算机网络技术》实训报告专 业 计算机应用技术专 业 计算机应用技术专专 业业 计计算算机机应应用用技技术术系 别 电子信息工程系系 别 电子信息工程系系系 别别 电电子子信信息息工工程程系系课 程 计算机网络技术课 程 计算机网络技术课课 程程…

mysql 定义年龄属性_sql中定义年龄用什么数据类型,长度为多少?

展开全部sql中定义年龄可以用的用数据类型及长度&#xff1a;1、char(3) &#xff1a;长度为3的字符串。小于10位且62616964757a686964616fe59b9ee7ad9431333431373865长度基本固定的字符串用char。2、varchar(3)&#xff1a;长度为3的字符串。长度大于10的用varchar&#xff0…

Java 9,Jigsaw,JPMS和模块:个人探索

Java 9由于Jigsaw项目而延迟了很多次&#xff0c;您可能会听到很多关于模块&#xff0c;模块化和其他内容的信息&#xff0c;那么&#xff0c;它的全部含义是什么&#xff1f; 模块化到底是什么&#xff0c;模块化平台是什么意思&#xff1f; Java平台模块系统&#xff08;JPMS…

仪征市第二中学计算机老师,静心倾听花自开 ——仪征市第二中学徐丞老师

原标题&#xff1a;静心倾听花自开 ——仪征市第二中学徐丞老师徐丞老师是我校一名优秀的青年教师。自2004年从教以来&#xff0c;他满怀对教育事业的真诚&#xff0c;立足本职&#xff0c;默默耕耘&#xff0c;在平凡中成就着不平凡。在教育教学过程中&#xff0c;徐丞老师始终…

eplise怎么连接数据库_Eclipse连接MySQL数据库(傻瓜篇)

我的环境&#xff1a;MySQL&#xff1a;mysql-essential-5.1.51-win32Eclipse&#xff1a;任意版本&#xff0c;免费的&#xff0c;可以百度的到。下面来创建一个数据&#xff1a;mysql>CREATE DATABASE test; //创建一个数据库mysql>use test; //指定test为当前要操作的…

清空计算机网络缓存,【缓存清理工具】缓存清理软件_电脑缓存清理软件【最新】-太平洋电脑网...

Windows7系统清理dns缓存失败解决方法介绍在win7纯净版系统中有时候&#xff0c;发现网络突然变得很慢&#xff0c;甚至没有网络&#xff0c;怎么回事呢&#xff1f;可能是dns缓存导致的&#xff0c;这时候可以清理dns缓存尝试解决问题。但是有朋友在win7系统清理dns缓存失败&a…

智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案

我们这边刷脸支付电商小程序智慧酒店行业解决方案&#xff0c;支付宝微信订房小程序&#xff0c;芝麻信用免押住&#xff0c;数字化经营发券引流&#xff0c;未来酒店:0押金 0房费 退房扣款&#xff0c;不占用资金&#xff0c;用户增长信用分&#xff0c;线上订房小程序&#x…

计算机学院肖鹏,肖鹏-生命科学与技术学院

[1] Xiao Peng, Vadakkepat Prahlad, Lee Tong Heng, “Context-dependent DNA coding with redundancy and introns.,” IEEE transactions on systems, man, and cybernetics. Part B, Cybernetics : a publication of the IEEE Systems, Man, and Cybernetics Society, vol.…

eclipselink_EclipseLink JPA-RS简介

eclipselink在以前的系列文章中&#xff0c;我介绍了如何创建一个将JPA用于持久层的JAX-RS服务。 EclipseLink包含一个名为JPA-RS的组件&#xff0c;该组件可用于轻松自动地将持久性单元公开为RESTful服务&#xff08;支持XML和JSON消息&#xff09;。 MOXy为JPA-RS提供XML和JS…

# 字符串从右往左查找_字符串匹配(搜索,查找)算法

(一)前言所谓的字符串匹配就是在一个长字符串(可称文本T)中找一个短字符串(可称模式P)&#xff0c;看长字符串中是否存在短字符串&#xff0c;若存在则返回出现的第一个位置&#xff0c;若不存在则返回一个标记。字符串搜索算法有很多&#xff0c;比较知名的自然是大名鼎鼎Knut…

html5按钮样式具有子项目,如何使用HTML5+css3制作出12种常用的按钮开关样式(附完整代码)...

现如今前端网页的开发越来越注重设计感&#xff0c;这些设计感更体现在细节处&#xff0c;今天向大家具体介绍一下各式各样的开关按钮是如何使用HTML5css3制作出来的&#xff0c;希望可以帮到大家。使用HTML5css3制作按钮开关的原理根据设计的要求填充各种颜色。按钮开关的形状…

Java命令行界面(第17部分):jw-options

JavaWorld文章处理Java中的命令行参数&#xff1a; Matthias Laux博士关闭的案例介绍了一个基于Java的简单库&#xff0c;用于处理命令行参数 &#xff0c;在本文中我将其称为jw-options 。 被引用的文章提供了有关为何在构造Options类时做出某些设计决策的背景信息。 本文的“…

计算机网络第三章知识网络,计算机基础教案第三章计算机网络基础知识教案

计算机 基础 教案一、网络基础知识1、计算机网络的概念计算机网络是指将分布在不同地理位置的具有独立功能的多台计算机用通信设备连接起来&#xff0c;并配以相应的网络软件&#xff0c;以实现信息传递和资源共享。计算机网络的三个主要组成部分&#xff1a;(1)主机(2)通信网络…

plc secs通讯协议_SECS/GEM解决方案:PLC与MES间的通讯

符合SEMI E4, E5, E30, E37 的 SECS/GEM通讯方案遵循 SEMI 人机交互设计&#xff0c;提供触摸屏支持让你触手可及。毫米级的响应&#xff0c;让设备行云流水般流畅。我们为你快速搭建PLC与MES之间的SECS/GEM桥梁SECS/GEM介绍SECS/GEM定义半导体生产设备与主机之间的通讯关系&am…

计算机程序和系统股票走势分析,证券走势指标匹配分析系统的设计与实现

摘要&#xff1a;随着计算机技术在证券分析领域的广泛应用,利用计算机对股票数据进行分析,已经成为股票走势技术分析方法的必然选择.经过历代伟大的证券分析师不懈的研究,已经总结出多种根据股票历史数据计算出的指标,在证券分析领用运用计算机技术来提高投资收益率已经成为各大…

security放行 spirng_Spring Security配置

第一步&#xff0c;空Spring Boot环境。暂时不添加了Spring Security依赖。第二步&#xff0c;确保项目能够正常运行。启动启动项 Application.javaimport org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration…