apache ignite_从In Memory Data Grid,Apache Ignite快速入门

apache ignite

IMDG或内存数据网格不是内存中关系数据库,NOSQL数据库或关系数据库。 它是另一种软件数据存储库。 数据模型分布在单个位置或多个位置的许多服务器上。 这种分布称为数据结构。 这种分布式模型被称为“无共享”架构。 IMDG具有以下特征:

  1. 所有服务器可以在每个站点中处于活动状态。
  2. 所有数据都存储在服务器的RAM中。
  3. 可以不中断地添加或删除服务器,以增加可用的RAM量。
  4. 数据模型是非关系的,是基于对象的。
  5. 用平台独立语言编写的分布式应用程序。
  6. 数据结构具有弹性,可以无中断地自动检测和恢复一台或多台服务器。

大多数情况下,我们将IMDG用于应用程序服务器的Web会话管理,并用作分布式缓存或L2缓存。 Hazelcast社区的添加是我们一直以来最喜欢的IMDG工具,但是从hazelcast社区版的最新情况来看,它的性能让我们感到非常不满意。 作为HazelCast的快速替代方案,我们决定尝试使用
Apache点燃 。 这篇文章专门针对apache点燃,可用于快速启动指南。 对于安装,我将使用具有以下配置的2个Redhat操作系统虚拟机:

  • CPU:2
  • 内存:4
  • 硬盘:25 GB
  • 操作系统:Redhat Santiago

从Apache ignite6的许多功能中,我们将仅研究以下功能:

  1. 准备操作系统
  2. 使用Spring使用DataGrid
  3. MyBatis缓存配置
  4. Spring缓存

安装apache点燃

前提条件:

  1. Java 1.7及更高版本
  2. 打开端口:47500..47509、8080(用于Rest接口),47400、47100:47101、48100:48101、31100:31101在操作系统中安装JDK之后,我们必须打开上述端口。 通过执行以下命令,我们可以操纵iptables。
    vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 47500:47509 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 47400 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 47100 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 47101 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 48100 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 48101 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 31100 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 31101 -j ACCEPT/etc/init.d/iptables restart

在几台机器上安装Apache ignite

  1. 让我们从以下链接下载ignite 1.5.0final版本。
  2. 将档案解压缩到os中的任何位置,例如/ opt / apache-ignite
  3. 将环境路径IGNITE_HOME添加到apache ignite的主目录中。
  4. 将文件夹$ IGNITE_HOME / libs / optional / ignite-rest-http复制到/home/user/apache-ignite-fabric-1.5.0/libs,它将通过REST接口启用apign点火。
  5. 运行命令ignite.sh examples / config / example-cache.xml以启动apache ignite。

    如果一切正常,您应该在控制台中看到以下日志:

    [12:32:01] Ignite node started OK (id=ceb614ca)
    [12:32:01] Topology snapshot [ver=4, servers=2, clients=0, CPUs=3, heap=2.0GB]

    并且通过网址http:// host:port / ignite?cmd = version也可以通过http获得ignite

使用Spring使用DataGrid

首先,我们必须构建Maven项目以编写一堆代码来检查apache Ignite的功能。

    • 将以下依赖项添加到pom.xml
      <dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>${ignite.version}</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>${ignite.version}</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>${ignite.version}</version></dependency><!-- myBatis --><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ignite</artifactId><version>1.0.0-beta1</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.1</version></dependency><!-- Oracle 12--><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.3</version></dependency>

      请注意,Oracle JDBC客户端jar应该位于本地Maven存储库中。 就我而言,我使用Oracle 11.2.02客户端。

    • 使用以下上下文在资源目录中添加spring-context.xml文件:
      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd "><!-- Enable annotation-driven caching. --><cache:annotation-driven/><context:property-placeholder location="classpath:jdbc.properties"/><!-- beans --><bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"><property name="gridName" value="TestGrid"/><!-- Enable client mode. --><property name="clientMode" value="true"/><property name="cacheConfiguration"><list><!-- Partitioned cache example configuration (Atomic mode). --><bean class="org.apache.ignite.configuration.CacheConfiguration"><!--<property name="atomicityMode" value="ATOMIC"/>--><!-- Set cache mode. --><property name="cacheMode" value="PARTITIONED"/><property name="backups" value="1"/><property name="statisticsEnabled" value="true" /></bean></list></property><!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. --><property name="discoverySpi"><bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"><property name="ipFinder"><!-- Uncomment static IP finder to enable static-based discovery of initial nodes. --><!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">--><bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"><property name="addresses"><list><!-- In distributed environment, replace with actual host IP address. --><value>Add your node ip address</value><value>add your node ip address</value></list></property></bean></property></bean></property></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath*:com/blu/ignite/dao/*Mapper.xml"/></bean><bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"><property name="URL" value="${jdbc.url}" /><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><property name="connectionCachingEnabled" value="true"/></bean>
      </beans>

      让我们检查一些配置属性:

      • 属性名称=“ clientMode”值=“ true” –此属性将强制当前应用程序作为客户端运行。
      • 属性名称=“ cacheMode”值=“已分配” –缓存模式将被分区,缓存模式也可被复制。
      • 属性名称=“备份”值=“ 1” –总是在另一个节点中有一个冗余的缓存元素。
      • 属性名称=“ statisticsEnabled”值=“ true” –此属性将激活缓存统计信息。
    • 现在让我们写一些:
      public class SpringIgniteRun {public static void main(String[] args) throws Exception{System.out.println("Run Spring example!!");ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-core.xml");IgniteConfiguration igniteConfiguration = (IgniteConfiguration) ctx.getBean("ignite.cfg");Ignite ignite = Ignition.start(igniteConfiguration);// get or create cacheIgniteCache cache = ignite.getOrCreateCache("myCacheName");for(int i = 1; i < 1000; i++){cache.put(i, Integer.toString(i));}for(int i =1; i<1000;i++){System.out.println("Cache get:"+ cache.get(i));}Thread.sleep(20000); // sleep for 20 seconds// statisticsSystem.out.println("Cache Hits:"+ cache.metrics(ignite.cluster()).getCacheHits());ignite.close();}
      }

      上面的代码是自解释的,我们只创建一个名为“ myCacheName”的缓存,并添加1000 String整数值。 将值插入缓存后,我们还从缓存中读取元素并检查统计信息。 通过ignitevisorcmd,您还可以监视数据网格,随后您可以找到网格统计信息的屏幕截图

      屏幕截图2016-02-18 at 16.24.20

    • MyBatis缓存配置

      现在让我们添加MyBatis ORM l2缓存并检查其工作方式。

    <bean id="servicesBean" class="com.blu.ignite.WebServices"><property name="dao" ref="userServicesBean"/></bean><bean id="userServicesBean" class="com.blu.ignite.dao.UserServices"><property name="userMapper" ref="userMapper"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath*:com/blu/ignite/dao/*Mapper.xml"/></bean><bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"><property name="URL" value="${jdbc.url}" /><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><property name="connectionCachingEnabled" value="true"/></bean><bean id="userMapper" autowire="byName" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.blu.ignite.mapper.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.blu.ignite.mapper" /></bean>

    我们添加了SQLsessionFactory,MyBatis映射器和Service Bean。 现在让我们添加* .Mapper.xml

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.blu.ignite.mapper.UserMapper"><cache type="org.mybatis.caches.ignite.IgniteCacheAdapter" /><select id="getUser" parameterType="String" resultType="com.blu.ignite.dto.User" useCache="true">SELECT * FROM users WHERE id = #{id}</select><select id="getUniqueJob" parameterType="String" resultType="String" useCache="false">select unique job from emp order by job desc</select></mapper>

    emp和dept表的完整sql(DDL / DML)脚本可在目录com / blu / ignite / scripts中找到。我创建了一个简单的Web服务,以获取用户和员工的独特工作。 这是Web服务的代码,如下所示:

    @WebService(name = "BusinessRulesServices",serviceName="BusinessRulesServices",targetNamespace = "http://com.blu.rules/services")
    public class WebServices {private UserServices userServices;@WebMethod(operationName = "getUserName")public String getUserName(String userId){User user = userServices.getUser(userId);return user.getuName();}@WebMethod(operationName = "getUniqueJobs")public List getUniqueJobs(){return userServices.getUniqueJobs();}@WebMethod(exclude = true)public void setDao(UserServices userServices){this.userServices = userServices;}}

    调用Web方法getUserName将查询数据库并将查询结果缓存在ignite缓存中。

    Spring缓存

    使用spring缓存,您可以实现任何spring bean方法的返回值的缓存。 Apache ignite将通过您将通过注释@Cacheable(“ returnHello”)提供的缓存名称来创建缓存,例如,如果我具有如下方法:

    @Cacheable("returnHello")public String sayhello(String str){System.out.println("Client says:"+ str);return "hello"+str;}

    第一次调用该方法时,将在ignite中创建一个带有参数名称的复制缓存,下次调用上述方法时,将从缓存中返回该值。

    屏幕截图2016-02-18 at 18.48.17

    • 现在就足够了。 很快我将以apache ignite的一些新功能返回。 该项目的完整源代码将在github中找到。

    翻译自: https://www.javacodegeeks.com/2016/02/quick-start-memory-data-grid-apache-ignite.html

    apache ignite

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

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

    相关文章

    bvp解算器是什么_那些学习了编程的中学生,为什么会更可能成功?

    来源 | 异步当你看到这个题目&#xff0c;或许会想&#xff0c;这不是搞笑吗&#xff1f;众所周知&#xff0c;高等数学是编程的基础和前提&#xff0c;而说起程序编写员&#xff0c;在普通人眼里就是数学学霸的代名词&#xff0c;人们往往会把它和那些数学天才的名字联系在一起…

    maven与spring_与Spring和Maven签约首个SOAP服务

    maven与spring1.简介 在本教程中&#xff0c;我们将学习使用JAX-WS&#xff0c;Spring和Maven实施合同优先的SOAP服务应用程序。 这是使用合同优先还是代码优先方法的更多设计决定。 在开发基于SOAP的Web服务应用程序时使用应用合同优先的方法最显着的好处是&#xff0c;可以在…

    如何维持手机电池寿命_充电小知识:你知道如何正确充电吗?这几种充电方式最损害电池...

    目前基本上大部分人都至少有一部智能手机&#xff0c;智能手机基本上都需要每日一充&#xff0c;你的充电方式会不会损伤电池呢&#xff1f;有部分消费者认为要等到手机电量耗尽后再充电&#xff0c;还有人认为手机充电要充至100%才能拔下来&#xff0c;有人觉得充电宝等产品给…

    【开放集检测】OpenGAN: Open-Set Recognition via Open Data Generation 论文阅读

    文章目录 英语积累为什么使用GAN系列网络进行开放集检测摘要1. 前言2. 相关工作开集检测基于GAN网络的开集检测基于暴露异常数据的开集检测 3. OpenGAN3.1 公式建模3.1.1 二分类方法存在问题如何解决 3.1.2 使用合成数据存在问题如何解决 3.1.3 OpenGAN3.1.4 模型验证 3.2 先前…

    sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中

    sso集成shiro介绍 单一登录&#xff08;SSO&#xff09;和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案&#xff0c;尤其是在迁移到云中时。 本文讨论了Keycloak与jBPM或Drools应用程序的集成&#xff0c;以便使用Keycloak上提供的所有功能。 Keycloak…

    jbpm 和 drools_jBPM和Drools工作台中的用户和组管理

    jbpm 和 drools介绍 本文讨论了一项新功能&#xff0c;该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装&#xff0c;设置和使用此功能之前&#xff0c;本文讨论了一些以前的概念&#xff0c;需要进一步理…

    从事java编程技能要求_5道Java视频课程,提高您的编程技能

    从事java编程技能要求作为Web开发人员&#xff0c;跟上技术知识可能会很棘手。 新技术似乎每天都在弹出&#xff0c;而基本技术也看到了重复迭代的浪潮&#xff0c;增加了新的功能。 Java开发人员应该做什么&#xff1f; 这是在线教育平台发挥作用的地方。 它们可以帮助您快速…

    sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁

    聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;*声明&#xff1a;《缺陷周话》栏目系列文章由奇安信代码卫士团队原创出品。未经许可&#xff0c;禁止转载。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。代码审计是使用静态分析发现源代码中安全缺陷的方法&…

    idea添加jboss_如何将云持久存储添加到JBoss Cool Store

    idea添加jboss我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月&#xff0c;我们带来了一个完整的零售示例&#xff0c;其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&…

    ssm影城项目_影场与属性访问器界面

    ssm影城项目卡尔迪亚&#xff08;Carl Dea&#xff09;最近跟踪了我的一篇名为“ 保存内存”的博客文章&#xff01; 为属性使用阴影字段 。 在他的博客中&#xff0c;他建议使用称为“属性访问器”的接口来消除大量使用样板代码所需的样板代码。 卡尔还提到他尚未用大量数据测…

    java流写入数据库_Java 8:在2分钟内将智能流与数据库一起使用

    java流写入数据库快速流媒体 当Java 8最终问世时&#xff0c;我和一些大学开始了一个开源项目&#xff0c;以利用Java 8的流库使整个Java / DB问题更进一步&#xff0c;以便将数据库表视为纯Java 8流。 速度诞生了&#xff01; 哇&#xff0c;现在我们可以做类型安全的数据库应…

    小米摄像头有onvif协议_监控摄像头完好但图像不行,肯定逃不过这10个问题

    摄像头仅仅是视频监控系统的一部分&#xff0c;即使摄像头完好无损&#xff0c;监控画面也可能会出现不显示、卡顿、丢失等情况。想要彻底解决网络监控的问题&#xff0c;往往需要排查各个连接设备才可以判断。下面我们就总结了10个问题&#xff0c;彻底解决网络监控的问题。一…

    java对话_您应该保持联系的十大高级Java对话

    java对话在线讲座和视频是学习软件开发新事物的主要资源之一。 您可以找到Java专家与您分享他们的经验&#xff0c;而不必坐下来。 在下面的文章中&#xff0c;我们收集了10位我们最喜欢的演讲者和主题&#xff0c;我们相信每个Java开发人员都应该注意。 获取爆米花&#xff0…

    【WebRTC---源码篇】(三)Windows/Linux音视频采集封装模块

    视频采集相关类图 DeviceInfo接口提供了设备枚举相关功能。 NumberOfDevices枚举设备个数。 GetDeviceName获取某个设备名称。 GetCapability枚举某个设备所支持的所有能力(VideoCaptureCapability: 分辨率,最大帧率,颜色类型) VideoCaptureModule视频采集模块的基类: …

    java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏

    宝藏坚持每天拣单词积累你的词汇宝藏打好英语学习基本功怎么学&#xff1f;每天预留15分钟&#xff0c;积累你的词汇宝藏&#xff01;每周一、二、三&#xff0c;发布新单词每周四、五、六&#xff0c;乱序复习单词周日测试(仅限入群的学员)遇到新单词&#xff0c;你可以&#…

    spring多个视图解析器_在Spring中配置多个View解析器

    spring多个视图解析器1.简介 在Spring中&#xff0c;提供了View Resolver来使用模型中可用的数据来解析视图&#xff0c;而无需与JSP&#xff0c;Velocity或Thymeleaf等View技术紧密绑定。 Spring可以根据需要轻松灵活地配置一个或多个View Resolver 。 2. Spring MVC应用程序…

    单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮

    单选按钮:after对于MQTT.fx&#xff0c;我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码&#xff1a; 我发现在ToggleGroup的上下文中&#xff0c;ToggleButton在选择/取消选择方面的行为与RadioButtons不同&#xff1a;与RadioButtons不同&#xff0c;ToggleButtons仍…

    【技术解决方案】开发工具源码安装包大全

    汇总下载链接 下载地址 QT下载以及安装 各版本QT下载地址 1.安装中根据不同的开发环境勾选相应的&#xff0c;如果使用VS编译请先安装VS和SDK然后再安装QT。 使用VS时CDB调试支持需要勾选 QTCreator断点调试需要下载SDK,Windows的SDK下载地址&#xff0c;只需要安装勾选如…

    垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器

    垃圾收集算法,垃圾收集器StackOverflow问题查找正在运行哪种类型的垃圾收集 器&#xff0c;jvm的默认垃圾收集器 &#xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器&#xff1f; &#xff0c;以及如何知道HotSpot jvm的当前GC策略&#xff1f; 以及博客文章如何以编程…

    树与堆的基本概念

    当看到这里的时候&#xff0c;相信你的链表&#xff0c;队列&#xff0c;栈学的也差不多可以了&#xff0c;那么接下来让我们一起进入树的学习吧&#xff01; 一.树的概念以及一些知识记忆 树的定义&#xff1a; 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08…