Apache Ignite学习笔记:创建缓存、存储数据、读取缓存

              使用Apache Ignite2.4 创建缓存 、存储数据、读取缓存

1  Ignite初始化 

       (1)初始化代码

//使用配置文件 example-default.xml 初始化Ignite
Ignite ignite=Ignition.start("example-default.xml") ;

//或者不使用配置文件
Ignite ignite=Ignition.start();

//是否设置为客户端模式
Ignition.setClientMode(true);

     初始化有两种方式 1 使用配置文件 2 不使用配置文件如上

(2) Ignite Xml配置文件


    
        
        
        
            
                
                
                    
                    
                    
                
            
        
        
        
            
                
                
                
                
                
                
                

                
                
                
                
            
        

        
        
            
                
                    
                    
                    
                    
                        
                            
                                
                                127.0.0.1:47500..47509
                            
                        
                    
                
            
        
    
    

 缓存有三种方式 Local,  Backup, partition 

2  使用Apache Ignite创建缓存Cache

      (1) 创建缓存代码

  CacheConfiguration cfg = new CacheConfiguration(); //定义一个缓存配置
  cfg.setName("TestCache");  //必须设置名字
  cfg.setCacheMode(CacheMode.PARTITIONED);//存储方式 PARTITIONED适合分布式存储
  cfg.setIndexedTypes(Integer.class, TestClass.class); //必须设置索引类否则只能以key-value方式查询
  IgniteCache Cache = ignite.getOrCreateCache(cfg);//根据配置创建缓存
 //可以给缓存的数据设置一个过期时间
  Cache=cache.withExpiryPolicy(new CreateExpiryPolicy(new Duration(TimeUnit.Hours,24)))

     Person类

public class Person implements Serializable {
  /** Person ID (indexed). */
  @QuerySqlField(index = true)
  private long id;

  /** Organization ID (indexed). 对此字段添加索引*/
  @QuerySqlField(index = true)
  private long orgId;

  /** First name (not-indexed). 不索引*/
  @QuerySqlField
  private String firstName;

  /** Last name (not indexed). */
  @QuerySqlField
  private String lastName;

  /** Resume text (create LUCENE-based TEXT index for this field). */
  @QueryTextField
  private String resume;

  /** Salary (indexed). */
  @QuerySqlField(index = true)
  private double salary;

}

Person类的 @QuerySqlField属性是必须的 推荐所有的字段至少设置这个属性 这样可以使用sql的方式进行查询否则没有设置此属性的列将不能进行查询

Person是一个自定义类,定义缓存时建议使用上面的代码方式首先创建一个 CacheConfiguration 配置类,配置相关的属性后 ,例如上面再使用它的配置方式配置了缓存的名字、存储模式、缓存的索引类,其中

        cfg.setIndexedTypes(Integer.class, TestClass.class);  设置索引类这一配置是必须的 ,主要原因如下:

     (重要) 通过创建类的形式进行缓存的存储,例如上面的例子就是(实际使用过程中大多数会使用这种形式),如果在查询过程 中想以表的形式查询(ignite提供了多种Sql的查询方式),那么必须使用这一句说明索引类。否则就只能以Key-value的方式读取对应Key的数据,而不能使用其他的类似sql过滤的方式查找数据

    (重要)存入缓存的类例如上面的Person类 如果想使用sql语句中条件过滤的方式查询数据,请将类的字段加上如上的注解

         @QuerySqlField(index = true) 会给此字段添加单独的索引   @QuerySqlField 此字段允许条件查询

     (重要) 如果希望以sql的语句查询Person类 请不要再Person类中定义Map之类的复杂数据结构,否则将造成不能使用sql进行查询

3 存入数据

//同步存储
Cache.put(1, new Person(1,2)); //使用类的形式存储缓存数据
Cache.put(2, new Person(2,3));
//异步存储
Cache.putAsync(1, new Person(1,2)); //使用类的形式存储缓存数据
Cache.putAsync(2, new Person(2,3));

4 读取数据

      (1)以Key-Value的方式进行读取

Student hello = Cache.get(1);

          直接使用get函数读取参数为key

      (2)使用SqlQuery读取(推荐使用此方式进行数据的查询)

  SqlQuery ss1=new SqlQuery(Student.class,"classId>0 and classId=1");
  List> slist =stuCache.query(ss1).getAll();

    SqlQuery 类的第二个参数 是sql组合的形式例如在例子中使用and进行了组合查询

     (3)使用SqlFieldsQuery进行数据查询

 SqlFieldsQuery query = new SqlFieldsQuery(
            "select stu.classId,stu.name from  Student as stu ");
 List> result= stuCache.query(query).getAll();

此种方式支持完整的sql语句,例如上面的表明是Student和存储的类名是一致的,也可以使用cache.Student来进行限定,此种方式还支持多个表关联查询

   例如 SqlFieldsQuery query = new SqlFieldsQuery(
            "select stu.classId,stu.name from  Student as stu,cache2.School where stu.classid=cache2.School.classid ");

  (重要)此种方式注意中文乱码,在测试过程中发现中文出现乱码,使用多种编码 格式没有解决此问题

      (4)使用java的SQI进行查询   

        此种方式与标准的数据库查询是一样的简单易用,前提是按照开始创建数据库的方式成功创建了表

     try 
       {
			
		Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		// Open JDBC connection
		Connection conn=null;;
		try {
			conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/");
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		// Get data
		if(conn==null)
			return;
		
		
		try (Statement stmt = conn.createStatement()) {
		    try (ResultSet rs =
		    stmt.executeQuery("SELECT p.name, c.name " +
		    " FROM Person p, City c " +
		    " WHERE p.city_id = c.id")) {
		      while (rs.next())
		         System.out.println(rs.getString(1) + ", " + rs.getString(2));
		    } catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

  5 可以使用DBeaver软件查看ignite缓存成功创建的表

      此软件对ignite的支持不太完美,但可以查看成功建了那些表

       注意建立了缓存并不代表可以以表的形式访问了,需使用本文提到的方式建立缓存才能以表的形式访问

  6 使用bin目录下的 ignitevisorcmd.bat工具查看缓存

    (1)打开工具后输入open连接ignite ,随后根据出现的提示输入配置文件编号就可以

      

    (2)输入cache可以查看当前建立的缓存

        

      (3) 使用cache的其他命令可以详细查看cache中的每一条数据

   

    

你可能感兴趣的:(大数据)