Apache-Ignite学习和入门

1. 简介

Apache Ignite 内存数据组织框架是一个高性能、集成化和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。具体介绍可参考官方中文教程。

2. 安装

从 https://ignite.apache.org/download.cgi#binaries 下载最新的安装包,这里我下载的是 apache-ignite-fabric-2.4.0-bin.zip 包。下载后解压就可以直接使用了。

3. 运行

进入安装路径的bin目录,然后输入:ignite.sh即可启动ignite服务,输入几次就会启动几个集群节点。如下,我输入三次即启动了3个ignite集群节点。

Apache-Ignite学习和入门_第1张图片

 

下面是启动成功的界面:

其中: 

- servers=1 表示当前 Ignite 集群中只有一个节点。 

- clients=0 表示当前没有客户端连接到此集群。

图中红线框可以看到 servers=3,说明有2个新节点加入了集群。

Apache-Ignite学习和入门_第2张图片

4. 测试

1)用eclipse新建一个动态web项目,并导入相关包。项目结构如下:

Apache-Ignite学习和入门_第3张图片

2)建一个测试java类,代码如下:

package com.ignite.test;

import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.lang.IgniteFuture;

public class SimpleCache {
	public static void main(String[] args){
		 
        // 以client的模式启动ignite, 数据存储到前面已经启动的ignite节点上 
        Ignition.setClientMode(true);
 
        try(Ignite ignite = Ignition.start()){
        	
        	// 缓存配置
            CacheConfiguration cacheCfg = new CacheConfiguration();
            cacheCfg.setName("myCache");
        	// 设置缓存过期时间
            cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE));
        	
        	/**
        	 * 缓存系统中的存储和获取是同步操作
        	 * 在ignite集群中创建名称为simple的分布式缓存。第二次启动时,
        	 * 名称为simple的缓存已经存在获取该缓存,把put语句注释掉仍然可以获取到值
        	 */
            // 如果缓存不存在就创建,如果已存在就获取缓存 
           /* IgniteCache cache = ignite.getOrCreateCache("simple");
            for(int i = 0; i < 10; i++){
                cache.put(i, i+"haha");
            }
            for(int i=0; i< 10; i++){
                System.out.println(cache.get(i));
            }*/
            
            /**
             * 异步操作
             */
            /*IgniteCache simple =
                    ignite.getOrCreateCache("simple");
 
			// 启动异步操作 
			@SuppressWarnings("deprecation")
			IgniteCache  asynCache = simple.withAsync();
			 
			// 原子操作 获取旧值 存入新值
			asynCache.getAndPut(33, "3332");
			 
			// 获取上面调用的future
			@SuppressWarnings("deprecation")
			IgniteFuture fut = asynCache.future();
			// 监听结果 
			fut.listen(f -> System.out.println("Previous cache value: " + f.get()));*/
        	
        	/**
        	 * 原子操作
        	 */
        	IgniteCache simple =ignite.getOrCreateCache("simple");
        	
 
			// 插入或更新  返回旧值 
			String oldVal = simple.getAndPut(11, "haha");
			 
			// 如果不存在则插入 返回旧值
			oldVal = simple.getAndPutIfAbsent(11, "11 getAndPutIfAbsent2");
			 
			// 如果存在则替换 返回旧值
			oldVal = simple.getAndReplace(11, "11 getAndReplace");
			 
			// 删除键值对 返回旧值
			oldVal = simple.getAndRemove(11);
			 
			// 如果不存在则插入 成功返回true
			boolean success = simple.putIfAbsent(12, "12 putIfAbsent");
			 
			// 如果存在则替换 成功返回 true
			success = simple.replace(12, "12 replace");
			 
			// 如果值匹配 则替换 成功返回true
			success = simple.replace(12, "12 replace", "12 12 12");
			 
			// 如果值匹配则删除 成功返回true
			success = simple.remove(11, "11");
        	
			//获取缓存数据并输出
			for(int i=0; i< 20; i++){
				if(simple.get(i)==null) {
					continue;
				}else {
					System.out.println(simple.get(i));
				}
            }
        }
    }
}

3)运行结果如下:

Apache-Ignite学习和入门_第4张图片

OK! 简单的一个项目就搞定了!

5. 单纯的从Ignite内存库中取数据

import com.alibaba.fastjson.JSON;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


    /**
     * Created by xudasong on 2018/4/23.
     * 获取高速缓存中的数据
     */
    public class GetDataTest {
        public static void main(String[] args) {

            try {

                Class.forName("org.apache.ignite.IgniteJdbcThinDriver");

                // Open JDBC connection  打开到集群节点的连接,监听地址可为本地(或其它服务器)
                Connection conn = DriverManager.getConnection("jdbc:ignite:thin://10.16.5.229/");

               // ResultSet rs = conn.createStatement().executeQuery("select * from GPSCACHE.GPSData");
                ResultSet rs = conn.createStatement().executeQuery("select * from person");
                Map map = new HashMap<>();
                //将ResultSet结果集转换成List
                List nameList=convertList(rs);
                //将List结果集存入map中
                map.put("peopleNames",nameList);
                //将map转换成Json格式
                String jsonString= JSON.toJSONString(map);
                System.out.println(jsonString);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
         
        //将ResultSet结果集转换成List方法定义
        private static List convertList(ResultSet rs) throws SQLException{
            List list = new ArrayList();
            ResultSetMetaData md = rs.getMetaData();//获取键名
            int columnCount = md.getColumnCount();//获取行的数量
            while (rs.next()) {
                Map rowData = new HashMap();//声明Map
                for (int i = 1; i <= columnCount; i++) {
                    rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值
                    System.out.println(md.getColumnName(i)+' '+rs.getObject(i));
                }
                list.add(rowData);
            }
            return list;
        }
    }

6. Ignite内存数据库可视化工具

DBeaver作为一个示例,是一个针对开发者和数据库管理员的免费开源的统一数据库工具,它支持包括Ignite在内的所有常见数据库。 下载地址:https://dbeaver.jkiss.org/download/

Ignite有自己的JDBC驱动实现,DBeaver可以用其处理存储于分布式集群中的数据。

具体配置查看:https://www.zybuluo.com/liyuj/note/1023980

官方文档:https://www.zybuluo.com/liyuj/note/785629

可以参考的博文:Apache Ignite学习笔记:创建缓存、存储数据、读取缓存

7.关于Ignite相关配置需要注意的几点

1)静态集群配置:

服务端配置(如果多个节点集群可以用逗号分隔如10.16.4.110,10.16.5.111):


    
      
        
          
            
             
              
              10.16.4.110:47500..47509
            
          
        
      
    
  

同时客户端也要进行相同配置,不能使用默认的组播方式,如果报异常请注意标有《注意此处》部分配置,对端自动传输类。

        
        
            
                
                
                    
                    
                    
                
            
        
       
        

        
        
            
      
        
          
            
             
              
              10.16.4.110:47500..47509
            
          
        
      
            
      
    

2)内存配置:

下面配置默认使用4G内存(应该自动使用堆外内存):


	  
		
		
		  
			
            
			
			
            
			
		  
		
	  
	

配置堆堆外内存要将持久化置为false,另外在java运行参数中增加最大堆外内存分配大小(ignite.bat中),否则java默认的堆外内存太小(应该是64M):

if %ERRORLEVEL% equ 0 (
    if "%JVM_OPTS%" == "" set JVM_OPTS=-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxPermSize=256m -XX:MaxDirectMemorySize=3g
) else (
    if "%JVM_OPTS%" == "" set JVM_OPTS=-Xms1g -Xmx1g -server -XX:+AggressiveOpts -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=3g
)

3)2.6版本开始支持java瘦客户端模式,但还不支持异步。

你可能感兴趣的:(Ignite)