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,您还可以监视数据网格,随后您可以找到网格统计信息的屏幕截图

  • 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中创建一个带有参数名称的复制缓存,下次调用上述方法时,将从缓存中返回该值。

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

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

apache ignite

apache ignite_从In Memory Data Grid,Apache Ignite快速入门相关推荐

  1. 如何在Ubuntu 20.04上安装Linux,Apache,MySQL,PHP(LAMP)堆栈[快速入门]

    介绍 (Introduction) In this quickstart guide, we'll install a LAMP stack on an Ubuntu 20.04 server. 在本 ...

  2. Apache Superset 1.2.0教程 (二)——快速入门(可视化王者英雄数据)

    上一篇我们已经成功的安装了superset,那么该如何可视化我们的数据呢?本文将可视化王者英雄的数据,快速的入门Superset. 一.连接数据源 亦寒小说网 https://www.duxi.inf ...

  3. Spring Data JPA 五分钟快速入门和实践

    Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...

  4. apache ignite_使用Spring Data的Apache Ignite

    apache ignite Spring Data提供了一种统一而简便的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储. 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以 ...

  5. apache ignite_通过示例获取Apache Ignite Baseline拓扑

    apache ignite 点燃基准拓扑或BLT代表群集中的一组服务器节点,这些服务器节点将数据持久存储在磁盘上. 其中,N1-2和N5服务器节点是具有本机持久性的Ignite集群的成员,该集群使数据 ...

  6. 使用Spring Data的Apache Ignite

    Spring Data提供了一种统一而简单的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储. 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以在Spring上下文中支持持 ...

  7. Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)

    文章标题 Introducing DataFrames in Apache Spark for Large Scale Data Science 一个用于大规模数据科学的API--DataFrame ...

  8. apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)

    apache ignite 在本文中, "使用Apache Ignite进行高性能内存计算"一书的作者将讨论使用Apache Strom和Apache Ignite进行复杂的事件处 ...

  9. Apache Flink 集成 Apache Hudi 快速入门指南

    摘要:本文由阿里巴巴的陈玉兆分享,主要介绍 Flink 集成 Hudi 的最新版本功能以及快速上手实践指南.内容包括: 背景 环境准备 Batch 模式的读写 Streaming 读 总结 一.背景 ...

最新文章

  1. SQL视频总结(2)
  2. Windows 7系统如何设置锁定计算机快捷方式【技术小摘】
  3. swoole-co-pool v1.0.1,Swoole 协程工作池
  4. SAP CDS view里的association会被编译成LEFT OUTER MANY TO ONE JOIN
  5. Django与SQL语言中——NULL与空字符串的区别
  6. newsinglethreadexecutor使用场景_Java线程池的四种用法与使用场景
  7. 《三国演义》人物数据分析
  8. Dump程序运行中的状态,变量值,等到文件
  9. 一步一步安装Git控件版本工具
  10. Gstreamer应用g_signal_new/g_signal_connect/g_signal_emit总结(十二)
  11. 深入了解Java虚拟机
  12. 走一条硬件工程师的道路
  13. 关于依赖注入必备的初步知识
  14. 解决win10+Ubuntu20.0.4双系统,win10时间错误问题
  15. Android多媒体功能开发(10)——使用MediaRecorder类录制音频
  16. 手把手教你用tensorflow2.3训练自己的分类数据集
  17. 谁在为DeFi默默提供流动性?
  18. NAPI之(一)——原理和实现
  19. 用递归方法将十进制转化为二进制数
  20. RuntimeError: cublas runtime error : the GPU program failed to execute at /tmp/pip-req-build-jh50bw2

热门文章

  1. CF1446F-Line Distance【计算几何,树状数组,二分】
  2. P3704-[SDOI2017]数字表格【莫比乌斯反演】
  3. P1169-[ZJOI2007]棋盘制作【贪心】
  4. JS原型链与instanceof底层原理
  5. 一次动态代理的填坑之旅
  6. 一文带你理解Java中Lock的实现原理
  7. mybatis入门(六)之SQL语句构建器类
  8. MySQL weekday()函数
  9. Java se之动态代理
  10. TreeSet的null值与元素类型的约束