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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

(一)前言所谓的字符串匹配就是在一个长字符串(可称文本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类时做出某些设计决策的背景信息。 本文的“…

便捷式计算机无线功能按钮,TP-Link TL-MR13U便携式无线路由器Client模式设置

本文介绍了TP-Link TL-MR13U便携式无线路由器&#xff0c;在“客户端模式(Client)”下的设置方法。TL-MR13U工作在“客户端模式(Client)”时&#xff0c;主要作用是用来接收无线WiFi信号&#xff0c;把无线WiFi信号转换为有线网络&#xff0c;实现让台式电脑上网。TP-Link TL-M…

Java命令行界面(第6部分):JOpt简单

JOpt Simple的主页将这个基于Java的库称为“用于解析命令行选项的Java库&#xff0c;例如您可能传递给调用javac的Java库&#xff0c;”该Java库试图“使用POSIX getopt&#xff08;&#xff09;的命令行选项语法&#xff09;和GNU getopt_long&#xff08;&#xff09; 。” 这…

计算机c盘哪些东西可以清理,细说电脑c盘哪些文件可以删除

有些网友反映&#xff0c;自己看C盘里的文件太多了&#xff0c;电脑又太卡&#xff0c;情急之下就把里面的东西删掉了&#xff0c;现在系统都不能用了。为了避免大家再入这个坑&#xff0c;我给大家讲一下哪些是C盘里的无用文件&#xff0c;并且删除后不会影响系统使用C盘是指电…

软件测试度量计算方法有哪些,软件测试度量(三)

进度差异趋势6.4.3 范围变化(SC)这个指标指出如何固定测试范围。下面总范围 以前的范围 新范围&#xff0c;如果范围扩大的话总范围 以前的范围 - 新范围&#xff0c;如果范围缩小的话一个发布版本范围变化趋势7、结论度量是评估的重要组成部分以及任何业务改进的基础。是应…

使用带有OAuth的Spring Security保护资源

1.简介 在本教程中&#xff0c;我们将研究如何使用Spring Security和OAuth来基于路径模式&#xff08; / api / ** &#xff09;保护服务器上的管理资源。 我们配置的另一个路径模式&#xff08; / oauth / token &#xff09;将帮助已配置的授权服务器生成访问令牌。 请注意&a…

openjpa_OpenJPA:内存泄漏案例研究

openjpa本文将提供完整的根本原因分析详细信息以及解决影响Oracle Weblogic Server 10.0生产环境的Java堆内存泄漏&#xff08;Apache OpenJPA泄漏&#xff09;的方法。 这篇文章还将演示在管理javax.persistence.EntityManagerFactory生命周期时遵循Java Persistence API最佳实…

美国凯斯西储大学计算机硕士专业怎么样,在凯斯西储大学读硕士大约需要多少花费?...

凯斯西储大学是美国著名大学之一&#xff0c;始建于1826年&#xff0c;坐落于俄亥俄州的克里夫兰&#xff0c;是一所以独立研究闻名的世界顶级私立大学&#xff0c;美国一级国家级大学。美国作为当今世界留学费用最高的国家之一&#xff0c;费用问题是所有赴美留学的学生都非常…

win7如何修改dns服务器地址,Win7系统DNS怎么设置?Win7系统DNS设置方法

Win7系统DNS怎么设置?众所周知&#xff0c;DNS地址是一个域名服务器地址&#xff0c;它可以把用户的网站地址解析成IP地址。如果这个服务器出现问题&#xff0c;可能就上不了网了。我们在使用Win7系统的时候&#xff0c;就是因为域名解析服务器不能将要访问的域名解析为正确的…

密钥文件登录服务器,密钥文件登录云服务器

密钥文件登录云服务器 内容精选换一换远程桌面协议(Remote Desktop Protocol&#xff0c;RDP)&#xff0c;是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows弹性云服务器。从管理控制台下载的RDP文件对应唯一的云服务器&#xff0c;当前RDP文件命…

一个网站服务器有多少个ip,一个服务器可以有多少个ip地址

一个服务器可以有多少个ip地址 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。会话保持&#xff0c;指负载均衡器可以识别客户与服…

jbpm小项目测试_尝试使用jBPM Console NG(测试版)

jbpm小项目测试大家好&#xff01; 这是有关jBPM Console NG的另一篇文章。 经过6个月的辛苦工作&#xff0c;我很高兴为开发人员社区撰写这篇文章&#xff0c;以进行尝试。 在这篇文章中&#xff0c;我将解释如何从源代码构建应用程序。 这背后的主要思想是知道如何在测试过程…

用友数据库服务器如何修改,用友u8数据库服务器怎么设置

用友u8数据库服务器怎么设置 内容精选换一换本章介绍如何在管理控制台购买GaussDB(for openGauss)实例&#xff0c;并通过内网使用弹性云服务器连接GaussDB(for openGauss)实例。GaussDB(for openGauss)提供gsql工具帮助您在命令行下连接数据库&#xff0c;您需要提前创建一台弹…

hibernate批量查询_使用Hibernate批量获取

hibernate批量查询如果需要从Java处理大型数据库结果集&#xff0c;则可以选择JDBC&#xff0c;以提供所需的低级控制。 另一方面&#xff0c;如果您已在应用程序中使用ORM&#xff0c;则回退到JDBC可能会带来一些额外的麻烦。 在导航域模型时&#xff0c;您将失去诸如乐观锁定…