Ignite内存数据库与sql支持
Ignite采用h2作为内存数据库,支持h2的一切sql语法。如果是本地缓存或者复制缓存,sql执行直接在本地h2数据库中执行,如果是分区缓存,ignite则会分解sql到多个h2数据库执行后再汇总。
通过@QuerySqlField注解可以轻松的把对象属性映射到表字段,下述代码实现了缓存对象与h2表的映射关系:
1、 class
package com.coshaho.learn.ignite.sql; import org.apache.ignite.cache.query.annotations.QuerySqlField; public class Class
{
@QuerySqlField(index = true)
private int id; @QuerySqlField
private String name; private int level; public Class(int id, String name)
{
this.id = id;
this.name = name;
}
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Override
public String toString() {
return "Class [id=" + id + ", name=" + name + ", level=" + level + "]";
}
}
2、 Student
package com.coshaho.learn.ignite.sql; import org.apache.ignite.cache.query.annotations.QuerySqlField; public class Student
{
@QuerySqlField
private int classId; @QuerySqlField
private String name; @QuerySqlField
private int age; public Student(int classId, String name, int age)
{
this.classId = classId;
this.name = name;
this.age = age;
} public int getClassId() {
return classId;
} public void setClassId(int classId) {
this.classId = classId;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Student [classId=" + classId + ", name=" + name + ", age="
+ age + "]";
}
}
要把缓存对象存储到h2表中,还必须设置缓存的IndexedTypes,IndexedTypes必须成对出现,并且和缓存键值对类型相同。
Ignite还支持不同缓存之间的关联查询,查询时把缓存名当做h2 schema就行,缓存关联查询时需要把缓存名设置为大写(应该是ignite bug)。
测试代码如下:
package com.coshaho.learn.ignite.sql; import java.util.List; import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration; /**
*
* IgniteDB.java Create on 2017年5月25日 下午11:00:35
*
* 类功能说明: ignite内存数据库
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class IgniteDB
{
public static void main(String[] args)
{
Ignite ignite = Ignition.start();
CacheConfiguration<Integer, Class> classCfg = new CacheConfiguration<Integer, Class>();
classCfg.setName("CLA");
classCfg.setCacheMode(CacheMode.PARTITIONED);
classCfg.setIndexedTypes(Integer.class, Class.class);
IgniteCache<Integer, Class> classCache = ignite.getOrCreateCache(classCfg);
classCache.put(1, new Class(1, "五年级一班"));
classCache.put(2, new Class(2, "五年级二班")); CacheConfiguration<Integer, Student> stuCfg = new CacheConfiguration<Integer, Student>();
stuCfg.setName("STU");
stuCfg.setCacheMode(CacheMode.PARTITIONED);
stuCfg.setIndexedTypes(Integer.class, Student.class);
IgniteCache<Integer, Student> stuCache = ignite.getOrCreateCache(stuCfg);
stuCache.put(1, new Student(1, "张三", 10));
stuCache.put(2, new Student(1, "李四", 11));
stuCache.put(3, new Student(2, "王五", 11));
stuCache.put(4, new Student(2, "胜七", 10)); SqlFieldsQuery sql = new SqlFieldsQuery(
"select concat(stu.classId, '----', stu.name) as stuinfo"
+ " "
+ "from Student as stu "
+ ""); QueryCursor<List<?>> cursor = stuCache.query(sql);
for (List<?> row : cursor)
{
System.out.println("学生信息:" + row.get(0));
} SqlFieldsQuery sql1 = new SqlFieldsQuery(
"select concat(cla.id, '----', cla.name) as clainfo"
+ ", concat(stu.name, '----', stu.age) as stuinfo "
+ "from Class as cla, STU.Student as stu "
+ "where cla.id = stu.classId"); QueryCursor<List<?>> cursor1 = classCache.query(sql1);
for (List<?> row : cursor1)
{
System.out.println("班级信息:" + row.get(0) + ", 学生信息:" + row.get(1));
}
}
}
测试结果:
[23:02:08] Ignite node started OK (id=6073a91e)
[23:02:08] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=0.88GB]
学生信息:1----张三
学生信息:1----李四
学生信息:2----王五
学生信息:2----胜七
班级信息:1----五年级一班, 学生信息:张三----10
班级信息:1----五年级一班, 学生信息:李四----11
班级信息:2----五年级二班, 学生信息:王五----11
班级信息:2----五年级二班, 学生信息:胜七----10
可以看出来,ignite对sql的支持非常强大,对于需要频繁进行数据库操作的场景,ignite缓存相当有效。
Ignite内存数据库与sql支持的更多相关文章
- ignite中的sql查询
ignite中进行sql查询需要对要查询的cache和字段进行配置,可以在xml中配置,也可以在代码中配置或进行注解,我用的是xml配置: <!-- 配置cache --> <pro ...
- Spark SQL 编程API入门系列之Spark SQL支持的API
不多说,直接上干货! Spark SQL支持的API SQL DataFrame(推荐方式,也能执行SQL) Dataset(还在发展) SQL SQL 支持basic SQL syntax/Hive ...
- Druid.io启用SQL支持
Druid.io的SQL功能虽然在试验阶段,但是也支持了大部分的功能,而且还可以通过 Avatica JDBC查看请求的json,有助于我们理解Druid.io的语法.Druid.io有个比较坑的是, ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(SQL支持和变通方案)
由于 Citus 通过扩展 PostgreSQL 提供分布式功能,因此它与 PostgreSQL 结构兼容.这意味着用户可以使用丰富且可扩展的 PostgreSQL 生态系统附带的工具和功能来处理使用 ...
- 微服务追踪SQL(支持Isto管控下的gorm查询追踪)
效果图 SQL的追踪正确插入到微服务的调用链之间 详细记录了SQL的执行内容和消耗时间 搜索SQL的类型 多线程(goroutine)下的追踪效果 在 Kubernetes 中部署微服务后,通过 Is ...
- Esper——内存计算、事件驱动、SQL支持
教程简介Esper是一个事件流处理(ESP)和事件关联引擎(CEP的,复杂事件处理).Esper的目标是针对实时事件驱动架构(EDA).当Esper监测到事件流中又符合条件的时间发生时,即可触发Pla ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用
Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...
- LINQ体验(18)——LINQ to SQL语句之视图和继承支持
视图 我们使用视图和使用数据表类似,仅仅需将视图从"server资源管理器/数据库资源管理器"拖动到O/R 设计器上,自己主动能够创建基于这些视图的实体类.我们能够同操作数据表一样 ...
随机推荐
- 【CQgame】[幸运方块 v1.1.3] [Lucky_Block v1.1.3]
搬家首发!!! 其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了PoPoQQQ大神的游戏,顿时产生了重新写一部游戏的冲动,于是各种上网查找各种 ...
- wireshark抓取OMCI报文
1.安装文件: 1.1 BinDecHex.lua 1.2 omci.lua 2.如上两个文件copy至wireshark安装目录,如C:\Program Files (x86)\Wireshark ...
- mysql 小于等于0 不包含null
SELECT count(*) FROM test2 WHERE num<=1;
- Redis的启动过程
本文主要介绍Redis启动加载过程,总体上可以分为如下几步: 1. 初始化全局服务器配置 2. 加载配置文件(如果指定了配置文件,否则使用默认配置) 3. 初始化服务器 4. 加载数据库 5. 网络监 ...
- ASP.NET MVC中ViewBag和ViewData的区别
在MVC3.0以上我们会用到ViewBag或者ViewData进行页面传值,对比一下二者的差距: ViewData ViewBag 基于key/value的字典集合 dynamic类型对象 从ASP. ...
- Scikit-Learn实战KNN
Scikit-Learn总结 Scikit-Learn(基于Python的工具包) 1.是一个基于Numpy,Scipy,Matplotlib的开源机器学习工具包. 2.该包于2007年发起,基本功能 ...
- 2018牛客网暑期ACM多校训练营(第五场) E - room - [最小费用最大流模板题]
题目链接:https://www.nowcoder.com/acm/contest/143/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- PAT-GPLT L1-039 - 古风排版 - [字符串输入输出]
题目链接:https://www.patest.cn/contests/gplt/L1-039 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...
- TensorFlow 实现分类操作的函数学习
函数:tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name=None) 说明:此函数是计算logits经过sigmod函数后的交叉 ...
- SQLSERVER数据导入到MYSQL
SQLSERVER数据导入到MYSQL http://hi.baidu.com/luck001221/item/cb4462299f9ea79ab73263d2?qq-pf-to=pcqq.group ...